diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index d0d0c28fd9..0c1c64d578 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -106,7 +106,8 @@ jobs: - name: GCC - Dedicated compiler: gcc cxxcompiler: g++ - extra-cmake-parameters: -DOPTION_DEDICATED=ON -DCMAKE_CXX_FLAGS_INIT="-DRANDOM_DEBUG" + libraries: grfcodec + extra-cmake-parameters: -DOPTION_DEDICATED=ON -DCMAKE_CXX_FLAGS_INIT="-DRANDOM_DEBUG" -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON # Compile without SDL / SDL2, as that should compile fine too. name: Linux (${{ matrix.name }}) @@ -187,6 +188,9 @@ jobs: cd build ctest -j $(nproc) --timeout 120 + # Check no tracked files have been modified + git diff --exit-code + macos: strategy: fail-fast: false diff --git a/CMakeLists.txt b/CMakeLists.txt index 42204f56b9..24f6a0559d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -529,8 +529,9 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 8) add_definitions(-DPOINTER_IS_64BIT) endif() -include(CreateRegression) -create_regression() +enable_testing() + +add_subdirectory(regression) if(APPLE OR WIN32) find_package(Pandoc) diff --git a/COMPILING.md b/COMPILING.md index 68fbbb73c7..c9e02ea12e 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -38,7 +38,7 @@ OpenTTD needs the Platform SDK, if it isn't installed already. This can be done during installing Visual Studio, by selecting `Visual C++ MFC for x86 and x64` (and possibly `Visual C++ ATL for x86 and x64` depending on your version). If not, you -can get download it as [MS Windows Platform SDK](https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk). +can get download it as [MS Windows Platform SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk). Install the SDK by following the instructions as given. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0f773ff320..668d73d700 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -112,7 +112,7 @@ Every pull request should have a clear scope, with no unrelated commits. Adhering to the following process is the best way to get your work included in the project: -1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, and configure the remotes: +1. [Fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) the project, clone your fork, and configure the remotes: ```bash git clone https://github.com//OpenTTD.git openttd @@ -266,7 +266,7 @@ This is inevitable, because it is a main feature of git. If you are concerned about your privacy, we strongly recommend to use "Anonymous <anonymous@openttd.org>" as the git commit author. We might refuse anonymous contributions if malicious intent is suspected. Please note that the contributor identity, once given, is used for copyright verification and to provide proof should a malicious commit be made. -As such, the [EU GDPR](https://www.eugdpr.org/key-changes.html) "right to be forgotten" does not apply, as this is an overriding legitimate interest. +As such, the [EU GDPR](https://gdpr.eu) "right to be forgotten" does not apply, as this is an overriding legitimate interest. Please also note that your commit is public and as such will potentially be processed by many third-parties. Git's distributed nature makes it impossible to track where exactly your commit, and thus your personal data, will be stored and be processed. diff --git a/cmake/CreateGrfCommand.cmake b/cmake/CreateGrfCommand.cmake index 642fffb27f..02a7e8cd61 100644 --- a/cmake/CreateGrfCommand.cmake +++ b/cmake/CreateGrfCommand.cmake @@ -1,16 +1,13 @@ # Macro which contains all bits and pieces to create a single grf file based # on NFO and PNG files. # -# create_grf_command() +# create_grf_command(NFO_SOURCE_FILES nfo_file1 ... PNG_SOURCE_FILES png_file1 ...) # function(create_grf_command) - set(EXTRA_PNG_SOURCE_FILES ${ARGV}) + cmake_parse_arguments(GRF "" "" "NFO_SOURCE_FILES;PNG_SOURCE_FILES" ${ARGN}) get_filename_component(GRF_SOURCE_FOLDER_NAME "${CMAKE_CURRENT_SOURCE_DIR}" NAME) get_filename_component(GRF_BINARY_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../${GRF_SOURCE_FOLDER_NAME}.grf ABSOLUTE) - file(GLOB_RECURSE GRF_PNG_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.png) - file(GLOB_RECURSE GRF_NFO_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.nfo) - set(GRF_PNG_SOURCE_FILES ${GRF_PNG_SOURCE_FILES} ${EXTRA_PNG_SOURCE_FILES}) # Copy over all the PNG files to the correct folder foreach(GRF_PNG_SOURCE_FILE IN LISTS GRF_PNG_SOURCE_FILES) diff --git a/cmake/CreateRegression.cmake b/cmake/CreateRegression.cmake index 8e3865bc55..355ced1916 100644 --- a/cmake/CreateRegression.cmake +++ b/cmake/CreateRegression.cmake @@ -3,20 +3,15 @@ # 'ctest'. The first is prefered, as it is more verbose, and takes care of # dependencies correctly. # -# create_regression() +# create_regression(file1 ...) # macro(create_regression) - # Find all the files in the regression folder; they need to be copied to the - # build folder before we can run the regression - file(GLOB_RECURSE REGRESSION_SOURCE_FILES ${CMAKE_SOURCE_DIR}/regression/*) + set(REGRESSION_SOURCE_FILES ${ARGN}) + foreach(REGRESSION_SOURCE_FILE IN LISTS REGRESSION_SOURCE_FILES) string(REPLACE "${CMAKE_SOURCE_DIR}/regression/" "" REGRESSION_SOURCE_FILE_NAME "${REGRESSION_SOURCE_FILE}") string(CONCAT REGRESSION_BINARY_FILE "${CMAKE_BINARY_DIR}/ai/" "${REGRESSION_SOURCE_FILE_NAME}") - if("${REGRESSION_SOURCE_FILE_NAME}" STREQUAL "regression.cfg") - continue() - endif() - add_custom_command(OUTPUT ${REGRESSION_BINARY_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${REGRESSION_SOURCE_FILE} @@ -28,59 +23,36 @@ macro(create_regression) list(APPEND REGRESSION_BINARY_FILES ${REGRESSION_BINARY_FILE}) endforeach() - # Copy the regression configuration in a special folder, so all autogenerated - # folders end up in the same place after running regression. - add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/regression/regression.cfg - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_SOURCE_DIR}/regression/regression.cfg - ${CMAKE_BINARY_DIR}/regression/regression.cfg - MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/regression/regression.cfg - COMMENT "Copying ${REGRESSION_SOURCE_FILE_NAME} regression file" - ) - list(APPEND REGRESSION_BINARY_FILES ${CMAKE_BINARY_DIR}/regression/regression.cfg) + get_filename_component(REGRESSION_TEST_NAME "${CMAKE_CURRENT_SOURCE_DIR}" NAME) - # Create a new target which copies all regression files - add_custom_target(regression_files - ALL # this is needed because 'make test' doesn't resolve dependencies, and otherwise this is never executed + # Create a new target which copies regression files + add_custom_target(regression_${REGRESSION_TEST_NAME}_files DEPENDS ${REGRESSION_BINARY_FILES} ) - enable_testing() - - # Find all the tests we have, and create a target for them - file(GLOB REGRESSION_TESTS ${CMAKE_SOURCE_DIR}/regression/*) - foreach(REGRESSION_TEST IN LISTS REGRESSION_TESTS) - get_filename_component(REGRESSION_TEST_NAME "${REGRESSION_TEST}" NAME) - - if("${REGRESSION_TEST_NAME}" STREQUAL "regression.cfg") - continue() - endif() - - add_custom_target(regression_${REGRESSION_TEST_NAME} - COMMAND ${CMAKE_COMMAND} - -DOPENTTD_EXECUTABLE=$ - -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} - -DREGRESSION_TEST=${REGRESSION_TEST_NAME} - -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" - DEPENDS openttd regression_files - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Running regression test ${REGRESSION_TEST_NAME}" - ) - - # Also make sure that 'make test' runs the regression - add_test(NAME regression_${REGRESSION_TEST_NAME} - COMMAND ${CMAKE_COMMAND} - -DOPENTTD_EXECUTABLE=$ - -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} - -DREGRESSION_TEST=${REGRESSION_TEST_NAME} - -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + add_dependencies(regression_files regression_${REGRESSION_TEST_NAME}_files) + + add_custom_target(regression_${REGRESSION_TEST_NAME} + COMMAND ${CMAKE_COMMAND} + -DOPENTTD_EXECUTABLE=$ + -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} + -DREGRESSION_TEST=${REGRESSION_TEST_NAME} + -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" + DEPENDS openttd regression_${REGRESSION_TEST_NAME}_files + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Running regression test ${REGRESSION_TEST_NAME}" + ) - list(APPEND REGRESSION_TARGETS regression_${REGRESSION_TEST_NAME}) - endforeach() + # Also make sure that 'make test' runs the regression + add_test(NAME regression_${REGRESSION_TEST_NAME} + COMMAND ${CMAKE_COMMAND} + -DOPENTTD_EXECUTABLE=$ + -DEDITBIN_EXECUTABLE=${EDITBIN_EXECUTABLE} + -DREGRESSION_TEST=${REGRESSION_TEST_NAME} + -P "${CMAKE_SOURCE_DIR}/cmake/scripts/Regression.cmake" + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) - # Create a new target which runs the regression - add_custom_target(regression - DEPENDS ${REGRESSION_TARGETS}) + add_dependencies(regression regression_${REGRESSION_TEST_NAME}) endmacro() diff --git a/cmake/scripts/CreateGRF.cmake b/cmake/scripts/CreateGRF.cmake index 55e136ef4e..eff9a7b959 100644 --- a/cmake/scripts/CreateGRF.cmake +++ b/cmake/scripts/CreateGRF.cmake @@ -21,6 +21,9 @@ if(NOT GRF_BINARY_FILE) message(FATAL_ERROR "Script needs GRF_BINARY_FILE defined") endif() +# Remove the existing output so failures never go unnoticed +file(REMOVE ${GRF_BINARY_FILE} ${GRF_BINARY_FILE}.hash) + get_filename_component(GRF_SOURCE_FOLDER_NAME "${GRF_SOURCE_FOLDER}" NAME) file(WRITE sprites/${GRF_SOURCE_FOLDER_NAME}.nfo "") diff --git a/media/baseset/openttd/CMakeLists.txt b/media/baseset/openttd/CMakeLists.txt index 5a98b73f5c..30844b8804 100644 --- a/media/baseset/openttd/CMakeLists.txt +++ b/media/baseset/openttd/CMakeLists.txt @@ -5,5 +5,47 @@ # working on it / have the tools installed. if(GRFCODEC_FOUND) include(CreateGrfCommand) - create_grf_command() + create_grf_command( + NFO_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/airports.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/airport_preview.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/aqueduct.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/autorail.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/canals.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/chars.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/elrails.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/foundations.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/mono.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/oneway.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/openttd.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/openttdgui.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/palette.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/roadstops.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/signals.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/sloped_tracks.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/tramtracks.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/tunnel_portals.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/2ccmap.nfo + PNG_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/airports.png + ${CMAKE_CURRENT_SOURCE_DIR}/airport_preview.png + ${CMAKE_CURRENT_SOURCE_DIR}/aqueduct.png + ${CMAKE_CURRENT_SOURCE_DIR}/autorail.png + ${CMAKE_CURRENT_SOURCE_DIR}/canals.png + ${CMAKE_CURRENT_SOURCE_DIR}/canal_locks.png + ${CMAKE_CURRENT_SOURCE_DIR}/chars.png + ${CMAKE_CURRENT_SOURCE_DIR}/elrails.png + ${CMAKE_CURRENT_SOURCE_DIR}/foundations.png + ${CMAKE_CURRENT_SOURCE_DIR}/mono.png + ${CMAKE_CURRENT_SOURCE_DIR}/oneway.png + ${CMAKE_CURRENT_SOURCE_DIR}/openttdgui.png + ${CMAKE_CURRENT_SOURCE_DIR}/openttdgui_build_tram.png + ${CMAKE_CURRENT_SOURCE_DIR}/openttdgui_convert_road.png + ${CMAKE_CURRENT_SOURCE_DIR}/openttdgui_convert_tram.png + ${CMAKE_CURRENT_SOURCE_DIR}/openttdgui_group_livery.png + ${CMAKE_CURRENT_SOURCE_DIR}/roadstops.png + ${CMAKE_CURRENT_SOURCE_DIR}/signals.png + ${CMAKE_CURRENT_SOURCE_DIR}/sloped_tracks.png + ${CMAKE_CURRENT_SOURCE_DIR}/tramtracks.png + ${CMAKE_CURRENT_SOURCE_DIR}/tramtracks_bare_depot.png + ${CMAKE_CURRENT_SOURCE_DIR}/tunnel_portals.png + ) endif() diff --git a/media/baseset/orig_extra/CMakeLists.txt b/media/baseset/orig_extra/CMakeLists.txt index f71d8d4b49..ceae83ca70 100644 --- a/media/baseset/orig_extra/CMakeLists.txt +++ b/media/baseset/orig_extra/CMakeLists.txt @@ -6,9 +6,32 @@ if(GRFCODEC_FOUND) include(CreateGrfCommand) create_grf_command( - # We share some files with 'openttd' grf - ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/airports.png - ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/canals.png - ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/chars.png + NFO_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/rivers/arctic.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/rivers/rapids.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/rivers/temperate.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/rivers/toyland.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/rivers/tropic.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/airports_orig_extra.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/canals_extra.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/chars_orig_extra.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/fix_graphics.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/fix_gui_icons.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/orig_extra.nfo + ${CMAKE_CURRENT_SOURCE_DIR}/shore.nfo + PNG_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/rivers/arctic_brown.png + ${CMAKE_CURRENT_SOURCE_DIR}/rivers/arctic_snowy.png + ${CMAKE_CURRENT_SOURCE_DIR}/rivers/rapids.png + ${CMAKE_CURRENT_SOURCE_DIR}/rivers/rapids_shading.png + ${CMAKE_CURRENT_SOURCE_DIR}/rivers/temperate.png + ${CMAKE_CURRENT_SOURCE_DIR}/rivers/toyland.png + ${CMAKE_CURRENT_SOURCE_DIR}/rivers/tropic_desert.png + ${CMAKE_CURRENT_SOURCE_DIR}/rivers/tropic_forest.png + ${CMAKE_CURRENT_SOURCE_DIR}/fix_graphics.png + ${CMAKE_CURRENT_SOURCE_DIR}/fix_gui_icons.png + ${CMAKE_CURRENT_SOURCE_DIR}/shore.png + # We share some files with 'openttd' grf + ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/airports.png + ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/canals.png + ${CMAKE_CURRENT_SOURCE_DIR}/../openttd/chars.png ) endif() diff --git a/regression/CMakeLists.txt b/regression/CMakeLists.txt new file mode 100644 index 0000000000..340e29c2d9 --- /dev/null +++ b/regression/CMakeLists.txt @@ -0,0 +1,24 @@ + # Copy the regression configuration in a special folder, so all autogenerated + # folders end up in the same place after running regression. + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/regression.cfg + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/regression.cfg + ${CMAKE_CURRENT_BINARY_DIR}/regression.cfg + MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/regression.cfg + COMMENT "Copying regression.cfg regression file" + ) + + # Create a new target which copies all regression files + # Subdirectory targets will add themselves as dependencies + add_custom_target(regression_files + ALL # this is needed because 'make test' doesn't resolve dependencies, and otherwise this is never executed + DEPENDS + ${CMAKE_BINARY_DIR}/regression/regression.cfg + ) + + # Create a new target which runs the regression + # Subdirectory targets will add themselves as dependencies + add_custom_target(regression) + + add_subdirectory(regression) + add_subdirectory(stationlist) diff --git a/regression/regression/CMakeLists.txt b/regression/regression/CMakeLists.txt new file mode 100644 index 0000000000..9aab44efe4 --- /dev/null +++ b/regression/regression/CMakeLists.txt @@ -0,0 +1,8 @@ +include(CreateRegression) +create_regression( + ${CMAKE_CURRENT_SOURCE_DIR}/info.nut + ${CMAKE_CURRENT_SOURCE_DIR}/main.nut + ${CMAKE_CURRENT_SOURCE_DIR}/require.nut + ${CMAKE_CURRENT_SOURCE_DIR}/result.txt + ${CMAKE_CURRENT_SOURCE_DIR}/test.sav +) diff --git a/regression/stationlist/CMakeLists.txt b/regression/stationlist/CMakeLists.txt new file mode 100644 index 0000000000..cfbc2cde56 --- /dev/null +++ b/regression/stationlist/CMakeLists.txt @@ -0,0 +1,7 @@ +include(CreateRegression) +create_regression( + ${CMAKE_CURRENT_SOURCE_DIR}/info.nut + ${CMAKE_CURRENT_SOURCE_DIR}/main.nut + ${CMAKE_CURRENT_SOURCE_DIR}/result.txt + ${CMAKE_CURRENT_SOURCE_DIR}/test.sav +) diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index 1fab76537a..cfc3ef6513 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -64,7 +64,7 @@ cur_company.Restore(); - InvalidateWindowData(WC_SCRIPT_DEBUG, 0, -1); + InvalidateWindowClassesData(WC_SCRIPT_DEBUG, -1); return; } @@ -116,7 +116,7 @@ cur_company.Restore(); - InvalidateWindowData(WC_SCRIPT_DEBUG, 0, -1); + InvalidateWindowClassesData(WC_SCRIPT_DEBUG, -1); CloseWindowById(WC_SCRIPT_SETTINGS, company); } diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 2c5b19b18d..12a7fcaac2 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -53,24 +53,28 @@ static const NWidgetPart _nested_ai_config_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_MOVE_DOWN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_CONFIG_MOVE_DOWN, STR_AI_CONFIG_MOVE_DOWN_TOOLTIP), EndContainer(), EndContainer(), - NWidget(WWT_FRAME, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_AI, STR_NULL), + NWidget(WWT_FRAME, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_AI, STR_NULL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), NWidget(NWID_HORIZONTAL), NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIC_LIST), SetMinimalSize(288, 112), SetFill(1, 0), SetMatrixDataTip(1, 8, STR_AI_CONFIG_AILIST_TOOLTIP), SetScrollbar(WID_AIC_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_MAUVE, WID_AIC_SCROLLBAR), EndContainer(), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONFIGURE), SetFill(1, 0), SetDataTip(STR_AI_CONFIG_CONFIGURE, STR_AI_CONFIG_CONFIGURE_TOOLTIP), EndContainer(), - NWidget(NWID_VERTICAL, NC_EQUALSIZE), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CHANGE), SetFill(1, 1), SetMinimalSize(93, 0), SetDataTip(STR_AI_CONFIG_CHANGE_AI, STR_AI_CONFIG_CHANGE_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONFIGURE), SetFill(1, 1), SetMinimalSize(93, 0), SetDataTip(STR_AI_CONFIG_CONFIGURE, STR_AI_CONFIG_CONFIGURE_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_README), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(NWID_VERTICAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CHANGE), SetFill(1, 1), SetDataTip(STR_AI_CONFIG_CHANGE_AI, STR_AI_CONFIG_CHANGE_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONTENT_DOWNLOAD), SetFill(1, 1), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CLOSE), SetFill(1, 1), SetMinimalSize(93, 0), SetDataTip(STR_AI_SETTINGS_CLOSE, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_LICENSE), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), + NWidget(NWID_VERTICAL, NC_EQUALSIZE), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_OPEN_URL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_CONTENT_OPEN_URL, STR_CONTENT_OPEN_URL_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_README), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_TEXTFILE_VIEW_README_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_LICENSE), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_TEXTFILE_VIEW_LICENCE_TOOLTIP), + EndContainer(), EndContainer(), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONTENT_DOWNLOAD), SetFill(1, 1), SetMinimalSize(279, 0), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), EndContainer(), EndContainer(), EndContainer(), @@ -246,6 +250,13 @@ struct AIConfigWindow : public Window { } break; + case WID_AIC_OPEN_URL: { + const AIConfig *config = AIConfig::GetConfig(this->selected_slot); + if (this->selected_slot == INVALID_COMPANY || config == nullptr || config->GetInfo() == nullptr) return; + OpenBrowser(config->GetInfo()->GetURL()); + break; + } + case WID_AIC_CHANGE: // choose other AI ShowScriptListWindow((CompanyID)this->selected_slot, _ctrl_pressed); break; @@ -254,10 +265,6 @@ struct AIConfigWindow : public Window { ShowScriptSettingsWindow((CompanyID)this->selected_slot); break; - case WID_AIC_CLOSE: - this->Close(); - break; - case WID_AIC_CONTENT_DOWNLOAD: if (!_network_available) { ShowErrorMessage(STR_NETWORK_ERROR_NOTAVAILABLE, INVALID_STRING_ID, WL_ERROR); @@ -281,17 +288,20 @@ struct AIConfigWindow : public Window { if (!gui_scope) return; + AIConfig *config = AIConfig::GetConfig(this->selected_slot); + this->SetWidgetDisabledState(WID_AIC_DECREASE_NUMBER, GetGameSettings().difficulty.max_no_competitors == 0); this->SetWidgetDisabledState(WID_AIC_INCREASE_NUMBER, GetGameSettings().difficulty.max_no_competitors == MAX_COMPANIES - 1); this->SetWidgetDisabledState(WID_AIC_DECREASE_INTERVAL, GetGameSettings().difficulty.competitors_interval == MIN_COMPETITORS_INTERVAL); this->SetWidgetDisabledState(WID_AIC_INCREASE_INTERVAL, GetGameSettings().difficulty.competitors_interval == MAX_COMPETITORS_INTERVAL); this->SetWidgetDisabledState(WID_AIC_CHANGE, this->selected_slot == INVALID_COMPANY); - this->SetWidgetDisabledState(WID_AIC_CONFIGURE, this->selected_slot == INVALID_COMPANY || AIConfig::GetConfig(this->selected_slot)->GetConfigList()->empty()); + this->SetWidgetDisabledState(WID_AIC_CONFIGURE, this->selected_slot == INVALID_COMPANY || config->GetConfigList()->empty()); this->SetWidgetDisabledState(WID_AIC_MOVE_UP, this->selected_slot == INVALID_COMPANY || !IsEditable((CompanyID)(this->selected_slot - 1))); this->SetWidgetDisabledState(WID_AIC_MOVE_DOWN, this->selected_slot == INVALID_COMPANY || !IsEditable((CompanyID)(this->selected_slot + 1))); + this->SetWidgetDisabledState(WID_AIC_OPEN_URL, this->selected_slot == INVALID_COMPANY || config->GetInfo() == nullptr || config->GetInfo()->GetURL().empty()); for (TextfileType tft = TFT_CONTENT_BEGIN; tft < TFT_CONTENT_END; tft++) { - this->SetWidgetDisabledState(WID_AIC_TEXTFILE + tft, this->selected_slot == INVALID_COMPANY || (AIConfig::GetConfig(this->selected_slot)->GetTextfile(tft, this->selected_slot) == nullptr)); + this->SetWidgetDisabledState(WID_AIC_TEXTFILE + tft, this->selected_slot == INVALID_COMPANY || (config->GetTextfile(tft, this->selected_slot) == nullptr)); } } }; diff --git a/src/base_media_base.h b/src/base_media_base.h index 7584d083e4..57b14ca067 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -59,6 +59,7 @@ struct BaseSet { static const char * const *file_names; std::string name; ///< The name of the base set + std::string url; ///< URL for information about the base set TranslatedStrings description; ///< Description of the base set uint32 shortname; ///< Four letter short variant of the name uint32 version; ///< The version of this base set diff --git a/src/base_media_func.h b/src/base_media_func.h index 5ef60b7b1e..59de6e84a9 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -54,6 +54,9 @@ bool BaseSet::FillSetDetails(const IniFile &ini, fetch_metadata("description"); this->description[std::string{}] = *item->value; + item = metadata->GetItem("url"); + if (item != nullptr) this->url = *item->value; + /* Add the translations of the descriptions too. */ for (const IniItem &titem : metadata->items) { if (titem.name.compare(0, 12, "description.") != 0) continue; diff --git a/src/blitter/32bpp_anim_sse4.hpp b/src/blitter/32bpp_anim_sse4.hpp index 3e3deddecc..e5a143e394 100644 --- a/src/blitter/32bpp_anim_sse4.hpp +++ b/src/blitter/32bpp_anim_sse4.hpp @@ -45,7 +45,7 @@ public: template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; - Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override { + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override { return Blitter_32bppSSE_Base::Encode(sprite, allocator); } const char *GetName() override { return "32bpp-sse4-anim"; } diff --git a/src/blitter/32bpp_optimized.cpp b/src/blitter/32bpp_optimized.cpp index 8a49df7010..9b77f78a46 100644 --- a/src/blitter/32bpp_optimized.cpp +++ b/src/blitter/32bpp_optimized.cpp @@ -282,7 +282,7 @@ void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, this->Draw(bp, mode, zoom); } -template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { /* streams of pixels (a, r, g, b channels) * @@ -304,7 +304,7 @@ template Sprite *Blitter_32bppOptimized::EncodeInternal(const ZoomLevel zoom_max; uint8 missing_zoom_levels = 0; - if (sprite->type == SpriteType::Font) { + if (sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font) { zoom_min = ZOOM_LVL_NORMAL; zoom_max = ZOOM_LVL_NORMAL; } else { @@ -465,10 +465,10 @@ template Sprite *Blitter_32bppOptimized::EncodeInternal(const missing_zoom_levels = UINT8_MAX; } - dest_sprite->height = sprite->height; - dest_sprite->width = sprite->width; - dest_sprite->x_offs = sprite->x_offs; - dest_sprite->y_offs = sprite->y_offs; + dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; + dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; dest_sprite->next = nullptr; dest_sprite->missing_zoom_levels = missing_zoom_levels; @@ -494,10 +494,10 @@ template Sprite *Blitter_32bppOptimized::EncodeInternal(const return dest_sprite; } -template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); -template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); +template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator); +template Sprite *Blitter_32bppOptimized::EncodeInternal(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator); -Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +Sprite *Blitter_32bppOptimized::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { return this->EncodeInternal(sprite, allocator); } diff --git a/src/blitter/32bpp_optimized.hpp b/src/blitter/32bpp_optimized.hpp index af6415f4fe..bad52a652e 100644 --- a/src/blitter/32bpp_optimized.hpp +++ b/src/blitter/32bpp_optimized.hpp @@ -28,7 +28,7 @@ public: } void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; - Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; const char *GetName() override { return "32bpp-optimized"; } @@ -36,7 +36,7 @@ public: protected: template void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); - template Sprite *EncodeInternal(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); + template Sprite *EncodeInternal(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator); }; /** Factory for the optimised 32 bpp blitter (without palette animation). */ diff --git a/src/blitter/32bpp_simple.cpp b/src/blitter/32bpp_simple.cpp index b5407a3508..c8d42c565e 100644 --- a/src/blitter/32bpp_simple.cpp +++ b/src/blitter/32bpp_simple.cpp @@ -128,22 +128,22 @@ void Blitter_32bppSimple::DrawColourMappingRect(void *dst, int width, int height DEBUG(misc, 0, "32bpp blitter doesn't know how to draw this colour table ('%d')", pal); } -Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { Blitter_32bppSimple::Pixel *dst; - Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite->height * (size_t)sprite->width * sizeof(*dst)); + Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_NORMAL].height * (size_t)sprite[ZOOM_LVL_NORMAL].width * sizeof(*dst)); - dest_sprite->height = sprite->height; - dest_sprite->width = sprite->width; - dest_sprite->x_offs = sprite->x_offs; - dest_sprite->y_offs = sprite->y_offs; + dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; + dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; dest_sprite->next = nullptr; dest_sprite->missing_zoom_levels = 0; dst = (Blitter_32bppSimple::Pixel *)dest_sprite->data; - SpriteLoader::CommonPixel *src = (SpriteLoader::CommonPixel *)sprite->data; + SpriteLoader::CommonPixel *src = (SpriteLoader::CommonPixel *)sprite[ZOOM_LVL_NORMAL].data; - for (int i = 0; i < sprite->height * sprite->width; i++) { + for (int i = 0; i < sprite[ZOOM_LVL_NORMAL].height * sprite[ZOOM_LVL_NORMAL].width; i++) { if (src->m == 0) { dst[i].r = src->r; dst[i].g = src->g; diff --git a/src/blitter/32bpp_simple.hpp b/src/blitter/32bpp_simple.hpp index 6437a1a5cf..61490d668c 100644 --- a/src/blitter/32bpp_simple.hpp +++ b/src/blitter/32bpp_simple.hpp @@ -26,7 +26,7 @@ class Blitter_32bppSimple : public Blitter_32bppBase { public: void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override; - Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; const char *GetName() override { return "32bpp-simple"; } }; diff --git a/src/blitter/32bpp_sse2.cpp b/src/blitter/32bpp_sse2.cpp index dc8550e4f0..ac9686fd39 100644 --- a/src/blitter/32bpp_sse2.cpp +++ b/src/blitter/32bpp_sse2.cpp @@ -20,7 +20,7 @@ /** Instantiation of the SSE2 32bpp blitter factory. */ static FBlitter_32bppSSE2 iFBlitter_32bppSSE2; -Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { /* First uint32 of a line = the number of transparent pixels from the left. * Second uint32 of a line = the number of transparent pixels from the right. @@ -29,7 +29,7 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::Sprite *sprite, Alloca ZoomLevel zoom_min = ZOOM_LVL_NORMAL; ZoomLevel zoom_max = ZOOM_LVL_NORMAL; uint8 missing_zoom_levels = 0; - if (sprite->type != SpriteType::Font) { + if (sprite[ZOOM_LVL_NORMAL].type != SpriteType::Font) { zoom_min = _settings_client.gui.zoom_min; zoom_max = (ZoomLevel) std::min(_settings_client.gui.zoom_max, ZOOM_LVL_DRAW_SPR); if (zoom_max == zoom_min) zoom_max = ZOOM_LVL_DRAW_SPR; @@ -62,10 +62,10 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::Sprite *sprite, Alloca } Sprite *dst_sprite = (Sprite *) allocator(sizeof(Sprite) + sizeof(SpriteData) + all_sprites_size); - dst_sprite->height = sprite->height; - dst_sprite->width = sprite->width; - dst_sprite->x_offs = sprite->x_offs; - dst_sprite->y_offs = sprite->y_offs; + dst_sprite->height = sprite[ZOOM_LVL_NORMAL].height; + dst_sprite->width = sprite[ZOOM_LVL_NORMAL].width; + dst_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; + dst_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; dst_sprite->next = nullptr; dst_sprite->missing_zoom_levels = missing_zoom_levels; memcpy(dst_sprite->data, &sd, sizeof(SpriteData)); diff --git a/src/blitter/32bpp_sse2.hpp b/src/blitter/32bpp_sse2.hpp index 9a2f14db06..f717159e42 100644 --- a/src/blitter/32bpp_sse2.hpp +++ b/src/blitter/32bpp_sse2.hpp @@ -64,7 +64,7 @@ public: byte data[]; ///< Data, all zoomlevels. }; - Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator); }; /** The SSE2 32 bpp blitter (without palette animation). */ @@ -79,7 +79,7 @@ public: template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); - Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override { + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override { return Blitter_32bppSSE_Base::Encode(sprite, allocator); } diff --git a/src/blitter/40bpp_anim.cpp b/src/blitter/40bpp_anim.cpp index 7fd2b70982..e3c411a65f 100644 --- a/src/blitter/40bpp_anim.cpp +++ b/src/blitter/40bpp_anim.cpp @@ -445,7 +445,7 @@ void Blitter_40bppAnim::DrawColourMappingRect(void *dst, int width, int height, } } -Sprite *Blitter_40bppAnim::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +Sprite *Blitter_40bppAnim::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { return this->EncodeInternal(sprite, allocator); } diff --git a/src/blitter/40bpp_anim.hpp b/src/blitter/40bpp_anim.hpp index c77c67f610..45a1056462 100644 --- a/src/blitter/40bpp_anim.hpp +++ b/src/blitter/40bpp_anim.hpp @@ -31,7 +31,7 @@ public: void ScrollBuffer(void *video, int left, int top, int width, int height, int scroll_x, int scroll_y) override; void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override; - Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; size_t BufferSize(uint width, uint height) override; Blitter::PaletteAnimation UsePaletteAnimation() override; bool NeedsAnimationBuffer() override; diff --git a/src/blitter/8bpp_optimized.cpp b/src/blitter/8bpp_optimized.cpp index 1109d0b0df..7cacf6b4c1 100644 --- a/src/blitter/8bpp_optimized.cpp +++ b/src/blitter/8bpp_optimized.cpp @@ -120,7 +120,7 @@ void Blitter_8bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Z } } -Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { /* Make memory for all zoom-levels */ uint memory = sizeof(SpriteData); @@ -128,7 +128,7 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloca ZoomLevel zoom_min; ZoomLevel zoom_max; - if (sprite->type == SpriteType::Font) { + if (sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font) { zoom_min = ZOOM_LVL_NORMAL; zoom_max = ZOOM_LVL_NORMAL; } else { @@ -221,10 +221,10 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloca /* Allocate the exact amount of memory we need */ Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + size); - dest_sprite->height = sprite->height; - dest_sprite->width = sprite->width; - dest_sprite->x_offs = sprite->x_offs; - dest_sprite->y_offs = sprite->y_offs; + dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; + dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; dest_sprite->next = nullptr; dest_sprite->missing_zoom_levels = 0; memcpy(dest_sprite->data, temp_dst, size); diff --git a/src/blitter/8bpp_optimized.hpp b/src/blitter/8bpp_optimized.hpp index 97a874203f..eb655c50ac 100644 --- a/src/blitter/8bpp_optimized.hpp +++ b/src/blitter/8bpp_optimized.hpp @@ -23,7 +23,7 @@ public: }; void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; - Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; const char *GetName() override { return "8bpp-optimized"; } }; diff --git a/src/blitter/8bpp_simple.cpp b/src/blitter/8bpp_simple.cpp index c137b9d559..2725c112e0 100644 --- a/src/blitter/8bpp_simple.cpp +++ b/src/blitter/8bpp_simple.cpp @@ -61,21 +61,21 @@ void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Zoom } } -Sprite *Blitter_8bppSimple::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +Sprite *Blitter_8bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { Sprite *dest_sprite; - dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite->height * (size_t)sprite->width); + dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_NORMAL].height * (size_t)sprite[ZOOM_LVL_NORMAL].width); - dest_sprite->height = sprite->height; - dest_sprite->width = sprite->width; - dest_sprite->x_offs = sprite->x_offs; - dest_sprite->y_offs = sprite->y_offs; + dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; + dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; dest_sprite->next = nullptr; dest_sprite->missing_zoom_levels = 0; /* Copy over only the 'remap' channel, as that is what we care about in 8bpp */ - for (int i = 0; i < sprite->height * sprite->width; i++) { - dest_sprite->data[i] = sprite->data[i].m; + for (int i = 0; i < sprite[ZOOM_LVL_NORMAL].height * sprite[ZOOM_LVL_NORMAL].width; i++) { + dest_sprite->data[i] = sprite[ZOOM_LVL_NORMAL].data[i].m; } return dest_sprite; diff --git a/src/blitter/8bpp_simple.hpp b/src/blitter/8bpp_simple.hpp index 7f3c0a8aad..455d76d937 100644 --- a/src/blitter/8bpp_simple.hpp +++ b/src/blitter/8bpp_simple.hpp @@ -17,7 +17,7 @@ class Blitter_8bppSimple FINAL : public Blitter_8bppBase { public: void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; - Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; const char *GetName() override { return "8bpp-simple"; } }; diff --git a/src/blitter/null.cpp b/src/blitter/null.cpp index e27318c016..8efa5802ce 100644 --- a/src/blitter/null.cpp +++ b/src/blitter/null.cpp @@ -15,15 +15,15 @@ /** Instantiation of the null blitter factory. */ static FBlitter_Null iFBlitter_Null; -Sprite *Blitter_Null::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +Sprite *Blitter_Null::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { Sprite *dest_sprite; dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite)); - dest_sprite->height = sprite->height; - dest_sprite->width = sprite->width; - dest_sprite->x_offs = sprite->x_offs; - dest_sprite->y_offs = sprite->y_offs; + dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; + dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; dest_sprite->next = nullptr; dest_sprite->missing_zoom_levels = 0; diff --git a/src/blitter/null.hpp b/src/blitter/null.hpp index deb2b1d2cb..4eceafb7cc 100644 --- a/src/blitter/null.hpp +++ b/src/blitter/null.hpp @@ -23,7 +23,7 @@ public: void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override {}; void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override {}; - Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; void *MoveTo(void *video, int x, int y) override { return nullptr; }; void SetPixel(void *video, int x, int y, uint8 colour) override {}; void SetPixel32(void *video, int x, int y, uint8 colour, uint32 colour32) override {}; diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index cae293e44b..af836dec64 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -249,7 +249,7 @@ public: for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < (int)this->bridges.size(); i++) { const BuildBridgeData &bridge_data = this->bridges.at(i); const BridgeSpec *b = bridge_data.spec; - DrawSpriteIgnorePadding(b->sprite, b->pal, tr.WithWidth(this->icon_width, rtl), false, SA_HOR_CENTER | SA_BOTTOM); + DrawSpriteIgnorePadding(b->sprite, b->pal, tr.WithWidth(this->icon_width, rtl), SA_HOR_CENTER | SA_BOTTOM); DrawStringMultiLine(tr.Indent(this->icon_width + WidgetDimensions::scaled.hsep_normal, rtl), GetBridgeSelectString(bridge_data)); tr = tr.Translate(0, this->resize.step_height); } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index b026f0ddc6..9a1b9db2bf 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1293,7 +1293,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li } if (has_variants) { Rect fr = ir.Indent(indent, rtl).WithWidth(circle_width, rtl); - DrawSpriteIgnorePadding(is_folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, {fr.left, y, fr.right, y + ir.Height() - 1}, false, SA_CENTER); + DrawSpriteIgnorePadding(is_folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, {fr.left, y, fr.right, y + ir.Height() - 1}, SA_CENTER); } if (indent > 0) { /* Draw tree lines */ @@ -1851,8 +1851,9 @@ struct BuildVehicleWindow : BuildVehicleWindowBase { } /* Add cargos */ + Dimension d = GetLargestCargoIconSize(); for (const CargoSpec *cs : _sorted_standard_cargo_specs) { - list.push_back(std::make_unique(cs->name, cs->Index(), false)); + list.push_back(std::make_unique(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false)); } return list; diff --git a/src/cargotype.cpp b/src/cargotype.cpp index a89de28162..fdc50de45c 100644 --- a/src/cargotype.cpp +++ b/src/cargotype.cpp @@ -9,6 +9,8 @@ #include "stdafx.h" #include "cargotype.h" +#include "core/geometry_func.hpp" +#include "gfx_func.h" #include "newgrf_cargo.h" #include "string_func.h" #include "strings_func.h" @@ -70,6 +72,19 @@ void SetupCargoForClimate(LandscapeID l) std::fill(insert, std::end(CargoSpec::array), CargoSpec{}); } +/** + * Get dimensions of largest cargo icon. + * @return Dimensions of largest cargo icon. + */ +Dimension GetLargestCargoIconSize() +{ + Dimension size = {0, 0}; + for (const CargoSpec *cs : _sorted_cargo_specs) { + size = maxdim(size, GetSpriteSize(cs->GetCargoIcon())); + } + return size; +} + /** * Get the cargo ID of a default cargo, if present. * @param l Landscape @@ -179,7 +194,7 @@ static bool CargoSpecClassSorter(const CargoSpec * const &a, const CargoSpec * c void InitializeSortedCargoSpecs() { _sorted_cargo_specs.clear(); - /* Add each cargo spec to the list. */ + /* Add each cargo spec to the list, and determine the largest cargo icon size. */ for (const CargoSpec *cargo : CargoSpec::Iterate()) { _sorted_cargo_specs.push_back(cargo); } diff --git a/src/cargotype.h b/src/cargotype.h index 3f305536a4..e575c14058 100644 --- a/src/cargotype.h +++ b/src/cargotype.h @@ -195,6 +195,7 @@ void SetupCargoForClimate(LandscapeID l); CargoID GetCargoIDByLabel(CargoLabel cl); CargoID GetCargoIDByBitnum(uint8 bitnum); CargoID GetDefaultCargoID(LandscapeID l, CargoType ct); +Dimension GetLargestCargoIconSize(); void InitializeSortedCargoSpecs(); extern std::array _sorted_cargo_types; diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 4fe2168d3e..0d2eaa11cb 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -621,36 +621,15 @@ static const LiveryClass _livery_class[LS_END] = { LC_ROAD, LC_ROAD, }; -class DropDownListColourItem : public DropDownListStringItem { +/** + * Colour selection list item, with icon and string components. + * @tparam TSprite Recolourable sprite to draw as icon. + */ +template +class DropDownListColourItem : public DropDownIcon> { public: - DropDownListColourItem(int result, bool masked) : DropDownListStringItem(result >= COLOUR_END ? STR_COLOUR_DEFAULT : _colour_dropdown[result], result, masked) {} - - uint Width() const override - { - return ScaleGUITrad(28) + WidgetDimensions::scaled.hsep_normal + GetStringBoundingBox(this->String()).width + WidgetDimensions::scaled.dropdowntext.Horizontal(); - } - - uint Height() const override - { - return std::max(GetCharacterHeight(FS_NORMAL), ScaleGUITrad(12) + WidgetDimensions::scaled.vsep_normal); - } - - bool Selectable() const override - { - return true; - } - - void Draw(const Rect &r, bool sel, Colours) const override + DropDownListColourItem(int colour, bool masked) : DropDownIcon>(TSprite, PALETTE_RECOLOUR_START + (colour % COLOUR_END), colour < COLOUR_END ? _colour_dropdown[colour] : STR_COLOUR_DEFAULT, colour, masked) { - bool rtl = _current_text_dir == TD_RTL; - int icon_y = CenterBounds(r.top, r.bottom, 0); - int text_y = CenterBounds(r.top, r.bottom, GetCharacterHeight(FS_NORMAL)); - Rect tr = r.Shrink(WidgetDimensions::scaled.dropdowntext); - DrawSprite(SPR_VEH_BUS_SIDE_VIEW, PALETTE_RECOLOUR_START + (this->result % COLOUR_END), - rtl ? tr.right - ScaleGUITrad(14) : tr.left + ScaleGUITrad(14), - icon_y); - tr = tr.Indent(ScaleGUITrad(28) + WidgetDimensions::scaled.hsep_normal, rtl); - DrawString(tr.left, tr.right, text_y, this->String(), sel ? TC_WHITE : TC_BLACK); } }; @@ -706,10 +685,10 @@ private: if (default_livery != nullptr) { /* Add COLOUR_END to put the colour out of range, but also allow us to show what the default is */ default_col = (primary ? default_livery->colour1 : default_livery->colour2) + COLOUR_END; - list.push_back(std::make_unique(default_col, false)); + list.push_back(std::make_unique>(default_col, false)); } for (uint i = 0; i < lengthof(_colour_dropdown); i++) { - list.push_back(std::make_unique(i, HasBit(used_colours, i))); + list.push_back(std::make_unique>(i, HasBit(used_colours, i))); } byte sel = (default_livery == nullptr || HasBit(livery->in_use, primary ? 0 : 1)) ? (primary ? livery->colour1 : livery->colour2) : default_col; @@ -969,9 +948,10 @@ public: y += this->line_height; }; + const Company *c = Company::Get((CompanyID)this->window_number); + if (livery_class < LC_GROUP_RAIL) { int pos = this->vscroll->GetPosition(); - const Company *c = Company::Get((CompanyID)this->window_number); for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) { if (pos-- > 0) continue; @@ -982,8 +962,9 @@ public: uint max = static_cast(std::min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->groups.size())); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { const Group *g = this->groups[i]; + const bool livery_set = HasBit(g->livery.in_use, 0); SetDParam(0, g->index); - draw_livery(STR_GROUP_NAME, g->livery, this->sel == g->index, false, this->indents[i] * WidgetDimensions::scaled.hsep_indent); + draw_livery(STR_GROUP_NAME, livery_set ? g->livery : c->livery[LS_DEFAULT], this->sel == g->index, livery_set, this->indents[i] * WidgetDimensions::scaled.hsep_indent); } } } @@ -1511,12 +1492,9 @@ public: *size = maxdim(*size, GetStringBoundingBox(STR_FACE_MOUSTACHE)); break; - case WID_SCMF_FACE: { - Dimension face_size = GetScaledSpriteSize(SPR_GRADIENT); - size->width = std::max(size->width, face_size.width); - size->height = std::max(size->height, face_size.height); + case WID_SCMF_FACE: + *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); break; - } case WID_SCMF_HAS_MOUSTACHE_EARRING: case WID_SCMF_HAS_GLASSES: @@ -2362,69 +2340,38 @@ struct CompanyWindow : Window bool reinit = false; /* Button bar selection. */ - int plane = local ? CWP_BUTTONS_LOCAL : CWP_BUTTONS_OTHER; - NWidgetStacked *wi = this->GetWidget(WID_C_SELECT_BUTTONS); - if (plane != wi->shown_plane) { - wi->SetDisplayedPlane(plane); - this->InvalidateData(); - reinit = true; - } + reinit |= this->GetWidget(WID_C_SELECT_BUTTONS)->SetDisplayedPlane(local ? CWP_BUTTONS_LOCAL : CWP_BUTTONS_OTHER); /* Build HQ button handling. */ - plane = (local && c->location_of_HQ == INVALID_TILE) ? CWP_VB_BUILD : CWP_VB_VIEW; - wi = this->GetWidget(WID_C_SELECT_VIEW_BUILD_HQ); - if (plane != wi->shown_plane) { - wi->SetDisplayedPlane(plane); - reinit = true; - } + reinit |= this->GetWidget(WID_C_SELECT_VIEW_BUILD_HQ)->SetDisplayedPlane((local && c->location_of_HQ == INVALID_TILE) ? CWP_VB_BUILD : CWP_VB_VIEW); this->SetWidgetDisabledState(WID_C_VIEW_HQ, c->location_of_HQ == INVALID_TILE); /* Enable/disable 'Relocate HQ' button. */ - plane = (!local || c->location_of_HQ == INVALID_TILE) ? CWP_RELOCATE_HIDE : CWP_RELOCATE_SHOW; - wi = this->GetWidget(WID_C_SELECT_RELOCATE); - if (plane != wi->shown_plane) { - wi->SetDisplayedPlane(plane); - reinit = true; - } + reinit |= this->GetWidget(WID_C_SELECT_RELOCATE)->SetDisplayedPlane((!local || c->location_of_HQ == INVALID_TILE) ? CWP_RELOCATE_HIDE : CWP_RELOCATE_SHOW); /* Owners of company */ - plane = SZSP_HORIZONTAL; - for (uint i = 0; i < lengthof(c->share_owners); i++) { - if (c->share_owners[i] != INVALID_COMPANY) { - plane = 0; - break; + { + int plane = SZSP_HORIZONTAL; + for (uint i = 0; i < lengthof(c->share_owners); i++) { + if (c->share_owners[i] != INVALID_COMPANY) { + plane = 0; + break; + } } - } - wi = this->GetWidget(WID_C_SELECT_DESC_OWNERS); - if (plane != wi->shown_plane) { - wi->SetDisplayedPlane(plane); - reinit = true; + reinit |= this->GetWidget(WID_C_SELECT_DESC_OWNERS)->SetDisplayedPlane(plane); } /* Enable/disable 'Give money' button. */ - plane = ((local || (_local_company == COMPANY_SPECTATOR)) ? SZSP_NONE : 0); - wi = this->GetWidget(WID_C_SELECT_GIVE_MONEY); - if (plane != wi->shown_plane) { - wi->SetDisplayedPlane(plane); - reinit = true; - } + reinit |= this->GetWidget(WID_C_SELECT_GIVE_MONEY)->SetDisplayedPlane((local || _local_company == COMPANY_SPECTATOR || !_settings_game.economy.give_money) ? SZSP_NONE : 0); + /* Enable/disable 'Hostile Takeover' button. */ - plane = ((local || _local_company == COMPANY_SPECTATOR || !c->is_ai || _networking || _settings_game.economy.allow_shares) ? SZSP_NONE : 0); - wi = this->GetWidget(WID_C_SELECT_HOSTILE_TAKEOVER); - if (plane != wi->shown_plane) { - wi->SetDisplayedPlane(plane); - reinit = true; - } + reinit |= this->GetWidget(WID_C_SELECT_HOSTILE_TAKEOVER)->SetDisplayedPlane((local || _local_company == COMPANY_SPECTATOR || !c->is_ai || _networking || _settings_game.economy.allow_shares) ? SZSP_NONE : 0); /* Multiplayer buttons. */ - plane = ((!_networking) ? (int)SZSP_NONE : (int)(local ? CWP_MP_C_PWD : CWP_MP_C_JOIN)); - wi = this->GetWidget(WID_C_SELECT_MULTIPLAYER); - if (plane != wi->shown_plane) { - wi->SetDisplayedPlane(plane); - reinit = true; - } - this->SetWidgetDisabledState(WID_C_COMPANY_JOIN, c->is_ai); + reinit |= this->GetWidget(WID_C_SELECT_MULTIPLAYER)->SetDisplayedPlane((!_networking) ? (int)SZSP_NONE : (int)(local ? CWP_MP_C_PWD : CWP_MP_C_JOIN)); + + this->SetWidgetDisabledState(WID_C_COMPANY_JOIN, c->is_ai); if (reinit) { this->ReInit(); @@ -2438,12 +2385,9 @@ struct CompanyWindow : 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_C_FACE: { - Dimension face_size = GetScaledSpriteSize(SPR_GRADIENT); - size->width = std::max(size->width, face_size.width); - size->height = std::max(size->height, face_size.height); + case WID_C_FACE: + *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); break; - } case WID_C_DESC_COLOUR_SCHEME_EXAMPLE: { Point offset; diff --git a/src/core/geometry_type.hpp b/src/core/geometry_type.hpp index 9ec4b200bf..42da441e08 100644 --- a/src/core/geometry_type.hpp +++ b/src/core/geometry_type.hpp @@ -28,7 +28,8 @@ struct Dimension { uint width; uint height; - Dimension(uint w = 0, uint h = 0) : width(w), height(h) {}; + constexpr Dimension() : width(0), height(0) {} + constexpr Dimension(uint w, uint h) : width(w), height(h) {} bool operator< (const Dimension &other) const { @@ -214,7 +215,7 @@ struct Rect { /** * Test if a point falls inside this Rect. * @param pt the point to test. - * @return true iif the point falls inside the Rect. + * @return true iff the point falls inside the Rect. */ inline bool Contains(const Point &pt) const { diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 1ea9550aff..477d8aef93 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -358,7 +358,7 @@ struct DepotWindow : Window { DrawString(text, STR_DEPOT_NO_ENGINE); } else { Rect flag = r.WithWidth(this->flag_size.width, rtl).WithHeight(this->flag_size.height).Translate(0, diff_y); - DrawSpriteIgnorePadding((v->vehstatus & VS_STOPPED) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, flag, false, SA_CENTER); + DrawSpriteIgnorePadding((v->vehstatus & VS_STOPPED) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, flag, SA_CENTER); SetDParam(0, v->unitnumber); DrawString(text, STR_JUST_COMMA, (v->max_age - DAYS_IN_LEAP_YEAR) >= v->age ? TC_BLACK : TC_RED); diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index cd3cb65882..32b25c9e6b 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -549,10 +549,11 @@ public: case WID_BDD_Y: { Axis axis = widget == WID_BDD_X ? AXIS_X : AXIS_Y; - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (r.Width() - ScaleSpriteTrad(96)) / 2; - int y = (r.Height() - ScaleSpriteTrad(64)) / 2; + int x = (ir.Width() - ScaleSpriteTrad(96)) / 2; + int y = (ir.Height() - ScaleSpriteTrad(64)) / 2; int x1 = ScaleSpriteTrad(63); int x2 = ScaleSpriteTrad(31); DrawShipDepotSprite(x + (axis == AXIS_X ? x1 : x2), y + ScaleSpriteTrad(17), axis, DEPOT_PART_NORTH); diff --git a/src/engine_gui.h b/src/engine_gui.h index b89a3f7404..d8944fbc67 100644 --- a/src/engine_gui.h +++ b/src/engine_gui.h @@ -29,7 +29,7 @@ struct GUIEngineListItem { bool operator == (const EngineID &other) const { return this->engine_id == other; } }; -typedef GUIList GUIEngineList; +typedef GUIList GUIEngineList; typedef bool EngList_SortTypeFunction(const GUIEngineListItem&, const GUIEngineListItem&); ///< argument type for #EngList_Sort. void EngList_Sort(GUIEngineList &el, EngList_SortTypeFunction compare); diff --git a/src/error_gui.cpp b/src/error_gui.cpp index 70a5263892..18f4a078e5 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -8,6 +8,7 @@ /** @file error_gui.cpp GUI related to errors. */ #include "stdafx.h" +#include "core/geometry_func.hpp" #include "core/mem_func.hpp" #include "landscape.h" #include "newgrf_text.h" @@ -196,12 +197,9 @@ public: size->height = std::max(size->height, panel_height); break; } - case WID_EM_FACE: { - Dimension face_size = GetScaledSpriteSize(SPR_GRADIENT); - size->width = std::max(size->width, face_size.width); - size->height = std::max(size->height, face_size.height); + case WID_EM_FACE: + *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); break; - } } } diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index b8887b4078..24f3e10407 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -237,7 +237,8 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa) if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) usererror("Font glyph is too large"); /* FreeType has rendered the glyph, now we allocate a sprite and copy the image into it */ - SpriteLoader::Sprite sprite; + SpriteLoader::SpriteCollection spritecollection; + SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_NORMAL]; sprite.AllocateData(ZOOM_LVL_NORMAL, static_cast(width) * height); sprite.type = SpriteType::Font; sprite.colours = (aa ? SCC_PAL | SCC_ALPHA : SCC_PAL); @@ -268,7 +269,7 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa) } GlyphEntry new_glyph; - new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(&sprite, SimpleSpriteAlloc); + new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, SimpleSpriteAlloc); new_glyph.width = slot->advance.x >> 6; this->SetGlyphPtr(key, &new_glyph); diff --git a/src/fontcache/truetypefontcache.cpp b/src/fontcache/truetypefontcache.cpp index 330bdb09d6..f6c43e043a 100644 --- a/src/fontcache/truetypefontcache.cpp +++ b/src/fontcache/truetypefontcache.cpp @@ -136,7 +136,7 @@ const Sprite *TrueTypeFontCache::GetGlyph(GlyphID key) }; #undef CPSET #undef CP___ - static const SpriteLoader::Sprite builtin_questionmark = { + static const SpriteLoader::SpriteCollection builtin_questionmark = {{ { 10, // height 8, // width 0, // x_offs @@ -144,9 +144,9 @@ const Sprite *TrueTypeFontCache::GetGlyph(GlyphID key) SpriteType::Font, SCC_PAL, builtin_questionmark_data - }; + } }}; - Sprite *spr = BlitterFactory::GetCurrentBlitter()->Encode(&builtin_questionmark, SimpleSpriteAlloc); + Sprite *spr = BlitterFactory::GetCurrentBlitter()->Encode(builtin_questionmark, SimpleSpriteAlloc); assert(spr != nullptr); GlyphEntry new_glyph; new_glyph.sprite = spr; diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp index 764657f50d..7164d40009 100644 --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -96,7 +96,7 @@ cur_company.Restore(); - InvalidateWindowData(WC_SCRIPT_DEBUG, 0, -1); + InvalidateWindowClassesData(WC_SCRIPT_DEBUG, -1); } /* static */ void Game::Uninitialize(bool keepConfig) diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index 316ca9ea7a..2a04d30fcc 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -36,35 +36,38 @@ static const NWidgetPart _nested_gs_config_widgets[] = { NWidget(WWT_DEFSIZEBOX, COLOUR_MAUVE), EndContainer(), NWidget(WWT_PANEL, COLOUR_MAUVE, WID_GSC_BACKGROUND), - NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_wide, 0), SetPadding(WidgetDimensions::unscaled.sparse), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_wide, 0), SetPadding(WidgetDimensions::unscaled.sparse_resize), NWidget(WWT_FRAME, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_GAMESCRIPT, STR_NULL), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_GSC_GSLIST), SetMinimalSize(288, 14), SetFill(1, 1), SetResize(1, 0), SetMatrixDataTip(1, 1, STR_AI_CONFIG_GAMELIST_TOOLTIP), EndContainer(), - NWidget(WWT_FRAME, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_GAMESCRIPT_PARAM, STR_NULL), SetFill(1, 1), SetResize(1, 0), + NWidget(WWT_FRAME, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_GAMESCRIPT_PARAM, STR_NULL), SetFill(1, 1), SetResize(1, 0), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), NWidget(NWID_HORIZONTAL), NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_GSC_SETTINGS), SetFill(1, 0), SetResize(1, 1), SetMinimalSize(188, 182), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_GSC_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_MAUVE, WID_GSC_SCROLLBAR), EndContainer(), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_RESET), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_AI_SETTINGS_RESET, STR_NULL), EndContainer(), - NWidget(NWID_VERTICAL, NC_EQUALSIZE), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_CHANGE), SetFill(1, 1), SetResize(1, 0), SetMinimalSize(93, 0), SetDataTip(STR_AI_CONFIG_CHANGE_GAMESCRIPT, STR_AI_CONFIG_CHANGE_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_TEXTFILE + TFT_README), SetFill(1, 1), SetResize(1, 0), SetMinimalSize(93, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(NWID_VERTICAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_CHANGE), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_AI_CONFIG_CHANGE_GAMESCRIPT, STR_AI_CONFIG_CHANGE_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_CONTENT_DOWNLOAD), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_TEXTFILE + TFT_LICENSE), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), + NWidget(NWID_VERTICAL, NC_EQUALSIZE), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_OPEN_URL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_CONTENT_OPEN_URL, STR_CONTENT_OPEN_URL_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_TEXTFILE + TFT_README), SetFill(1, 1), SetResize(1, 0), SetMinimalSize(93, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_TEXTFILE_VIEW_README_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_TEXTFILE + TFT_LICENSE), SetFill(1, 1), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_TEXTFILE_VIEW_LICENCE_TOOLTIP), + EndContainer(), EndContainer(), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_CONTENT_DOWNLOAD), SetFill(1, 1), SetResize(1, 0), SetMinimalSize(279, 0), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), EndContainer(), EndContainer(), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, WID_GSC_ACCEPT), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_AI_SETTINGS_CLOSE, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, WID_GSC_RESET), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_AI_SETTINGS_RESET, STR_NULL), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_RESIZEBOX, COLOUR_MAUVE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE), EndContainer(), - NWidget(WWT_RESIZEBOX, COLOUR_MAUVE), EndContainer(), }; @@ -356,9 +359,12 @@ struct GSConfigWindow : public Window { break; } - case WID_GSC_ACCEPT: - this->Close(); + case WID_GSC_OPEN_URL: { + const GameConfig *config = GameConfig::GetConfig(); + if (config == nullptr || config->GetInfo() == nullptr) return; + OpenBrowser(config->GetInfo()->GetURL()); break; + } case WID_GSC_RESET: this->gs_config->ResetEditableSettings(_game_mode == GM_MENU); @@ -419,8 +425,10 @@ struct GSConfigWindow : public Window { this->SetWidgetDisabledState(WID_GSC_CHANGE, !UserIsAllowedToChangeGameScript() || !IsEditable()); + const GameConfig *config = GameConfig::GetConfig(); + this->SetWidgetDisabledState(WID_GSC_OPEN_URL, config->GetInfo() == nullptr || config->GetInfo()->GetURL().empty()); for (TextfileType tft = TFT_CONTENT_BEGIN; tft < TFT_CONTENT_END; tft++) { - this->SetWidgetDisabledState(WID_GSC_TEXTFILE + tft, GameConfig::GetConfig()->GetTextfile(tft, (CompanyID)OWNER_DEITY) == nullptr); + this->SetWidgetDisabledState(WID_GSC_TEXTFILE + tft, config->GetTextfile(tft, (CompanyID)OWNER_DEITY) == nullptr); } this->RebuildVisibleSettings(); HideDropDownMenu(this); diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 70b99052d8..3713272a2f 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -92,11 +92,11 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = { /* Labels on the left side (global column 1). */ NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_MAPSIZE, STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_TERRAIN_TYPE, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_VARIETY, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SMOOTHNESS, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_QUANTITY_OF_RIVERS, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_BORDER_TYPE, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_TERRAIN_TYPE, STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_VARIETY, STR_CONFIG_SETTING_VARIETY_HELPTEXT), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SMOOTHNESS, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_QUANTITY_OF_RIVERS, STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_BORDER_TYPE, STR_MAPGEN_BORDER_TYPE_TOOLTIP), SetFill(1, 1), EndContainer(), /* Widgets on the right side (global column 2). */ @@ -107,11 +107,11 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = { NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_BY, STR_NULL), SetFill(0, 1), SetAlignment(SA_CENTER), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_MAPSIZE_Y_PULLDOWN), SetDataTip(STR_JUST_INT, STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1), EndContainer(), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TERRAIN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 1), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_VARIETY_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 1), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_SMOOTHNESS_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 1), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_BORDERS_RANDOM), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TERRAIN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_VARIETY_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_VARIETY_HELPTEXT), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_SMOOTHNESS_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT), SetFill(1, 1), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_BORDERS_RANDOM), SetDataTip(STR_JUST_STRING, STR_MAPGEN_BORDER_TYPE_TOOLTIP), SetFill(1, 1), EndContainer(), EndContainer(), @@ -120,17 +120,17 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = { /* Labels on the left side (global column 3). */ NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_LABEL), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_COVERAGE, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DESERT_COVERAGE, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_COVERAGE, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DESERT_COVERAGE, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_LINE_HEIGHT, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_RAINFOREST_LINE_HEIGHT, STR_NULL), SetFill(1, 1), NWidget(NWID_SPACER), SetFill(1, 1), EndContainer(), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_TOWN_NAME_LABEL, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_TOWNS, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_INDUSTRIES, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SEA_LEVEL, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_MAPGEN_DATE_TOOLTIP), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_TOWN_NAME_LABEL, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_TOWNS, STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_INDUSTRIES, STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SEA_LEVEL, STR_MAPGEN_SEA_LEVEL_TOOLTIP), SetFill(1, 1), EndContainer(), /* Widgets on the right side (global column 4). */ @@ -140,13 +140,13 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = { /* Snow coverage. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), EndContainer(), /* Desert coverage. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), EndContainer(), /* Snow line. */ @@ -167,13 +167,13 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = { /* Starting date. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_NULL), SetFill(1, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP), SetFill(1, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 1), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 1), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 1), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_WATER_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_WATER_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_MAPGEN_SEA_LEVEL_TOOLTIP), SetFill(1, 1), EndContainer(), EndContainer(), EndContainer(), @@ -202,7 +202,7 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = { EndContainer(), /* Generate */ - NWidget(WWT_PUSHTXTBTN, COLOUR_GREEN, WID_GL_GENERATE_BUTTON), SetMinimalTextLines(3, 0), 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_MAPGEN_GENERATE_TOOLTIP), SetFill(1, 1), EndContainer(), EndContainer(), }; @@ -226,8 +226,8 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = { NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), /* Heightmap name label. */ - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_NAME, STR_NULL), - NWidget(WWT_TEXT, COLOUR_ORANGE, WID_GL_HEIGHTMAP_NAME_TEXT), SetTextStyle(TC_ORANGE), SetDataTip(STR_JUST_RAW_STRING, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_NAME, STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP), + NWidget(WWT_TEXT, COLOUR_ORANGE, WID_GL_HEIGHTMAP_NAME_TEXT), SetTextStyle(TC_ORANGE), SetDataTip(STR_JUST_RAW_STRING, STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP), SetFill(1, 0), EndContainer(), /* Generation options. */ @@ -237,30 +237,30 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = { /* Labels on the left side (global column 1). */ NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), /* Land generation option labels. */ - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE_LABEL, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_MAPSIZE, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_ROTATION, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_HEIGHT, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_QUANTITY_OF_RIVERS, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE_LABEL, STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_MAPSIZE, STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_ROTATION, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_HEIGHT, STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_QUANTITY_OF_RIVERS, STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT), SetFill(1, 1), EndContainer(), /* Left half widgets (global column 2) */ NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), - NWidget(WWT_TEXT, COLOUR_ORANGE, WID_GL_HEIGHTMAP_SIZE_TEXT), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE, WID_GL_HEIGHTMAP_SIZE_TEXT), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE, STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP), SetFill(1, 1), /* Mapsize X * Y. */ NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_MAPSIZE_X_PULLDOWN), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_MAPSIZE_X_PULLDOWN), SetDataTip(STR_JUST_INT, STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_BY, STR_NULL), SetFill(0, 1), SetAlignment(SA_CENTER), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_MAPSIZE_Y_PULLDOWN), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_MAPSIZE_Y_PULLDOWN), SetDataTip(STR_JUST_INT, STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1), EndContainer(), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_ROTATION_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_ROTATION_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP), SetFill(1, 1), /* Heightmap highest peak. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_TEXT), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_TEXT), SetDataTip(STR_JUST_INT, STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP), SetFill(1, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_HEIGHTMAP_HEIGHT_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_HEIGHTMAP_HEIGHT_UP), SetFill(0, 1), EndContainer(), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_RIVER_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT), SetFill(1, 1), EndContainer(), EndContainer(), @@ -269,16 +269,16 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = { /* Right half labels (global column 3) */ NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GL_CLIMATE_SEL_LABEL), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_COVERAGE, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DESERT_COVERAGE, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_COVERAGE, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DESERT_COVERAGE, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_LINE_HEIGHT, STR_NULL), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_RAINFOREST_LINE_HEIGHT, STR_NULL), SetFill(1, 1), NWidget(NWID_SPACER), SetFill(1, 1), EndContainer(), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_TOWN_NAME_LABEL, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_TOWNS, STR_NULL), SetFill(1, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_INDUSTRIES, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_MAPGEN_DATE_TOOLTIP), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_TOWN_NAME_LABEL, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_TOWNS, STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP), SetFill(1, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_NUMBER_OF_INDUSTRIES, STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP), SetFill(1, 1), EndContainer(), /* Right half widgets (global column 4) */ @@ -288,13 +288,13 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = { /* Snow coverage. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_COVERAGE_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_SNOW_COVERAGE_TEXT, STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT), SetFill(1, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_SNOW_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_COVERAGE_UP), SetFill(0, 1), EndContainer(), /* Desert coverage. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_DESERT_COVERAGE_DOWN), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_NULL), SetFill(1, 1), + NWidget(WWT_TEXTBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_TEXT), SetDataTip(STR_MAPGEN_DESERT_COVERAGE_TEXT, STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT), SetFill(1, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_DESERT_COVERAGE_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_DESERT_COVERAGE_UP), SetFill(0, 1), EndContainer(), /* Snow line. */ @@ -315,12 +315,12 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = { /* Starting date. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_NULL), SetFill(1, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_START_DATE_TEXT), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP), SetFill(1, 1), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1), EndContainer(), NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 1), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 1), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP), SetFill(1, 1), EndContainer(), EndContainer(), EndContainer(), @@ -333,7 +333,7 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = { EndContainer(), /* Generate */ - NWidget(WWT_PUSHTXTBTN, COLOUR_GREEN, WID_GL_GENERATE_BUTTON), SetMinimalTextLines(3, 0), 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_MAPGEN_GENERATE_TOOLTIP), SetFill(1, 1), EndContainer(), EndContainer(), }; @@ -412,7 +412,7 @@ static DropDownList BuildTownNameDropDown() size_t newgrf_size = list.size(); /* Insert newgrf_names at the top of the list */ if (newgrf_size > 0) { - list.push_back(std::make_unique(-1, false)); // separator line + list.push_back(std::make_unique(-1, false)); // separator line newgrf_size++; } @@ -1434,30 +1434,30 @@ static const NWidgetPart _nested_create_scenario_widgets[] = { NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), /* Labels. */ NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_MAPSIZE, STR_NULL), SetFill(0, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_NULL), SetFill(0, 1), - NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_SE_MAPGEN_FLAT_WORLD_HEIGHT, STR_NULL), SetFill(0, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_MAPSIZE, STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(0, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_MAPGEN_DATE_TOOLTIP), SetFill(0, 1), + NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_SE_MAPGEN_FLAT_WORLD_HEIGHT, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP), SetFill(0, 1), EndContainer(), NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), /* Map size. */ NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_CS_MAPSIZE_X_PULLDOWN), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_CS_MAPSIZE_X_PULLDOWN), SetDataTip(STR_JUST_INT, STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1), NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_BY, STR_NULL), SetFill(0, 1), SetAlignment(SA_CENTER), - NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_CS_MAPSIZE_Y_PULLDOWN), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 1), + NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_CS_MAPSIZE_Y_PULLDOWN), SetDataTip(STR_JUST_INT, STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1), EndContainer(), /* Date. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_START_DATE_DOWN), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_START_DATE_TEXT), SetFill(1, 1), SetDataTip(STR_JUST_DATE_LONG, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_START_DATE_TEXT), SetFill(1, 1), SetDataTip(STR_JUST_DATE_LONG, STR_MAPGEN_DATE_TOOLTIP), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_START_DATE_UP), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), EndContainer(), /* Flat map height. */ NWidget(NWID_HORIZONTAL), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_DOWN), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_TEXT), SetFill(1, 1), SetDataTip(STR_JUST_INT, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_TEXT), SetFill(1, 1), SetDataTip(STR_JUST_INT, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP), NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_CS_FLAT_LAND_HEIGHT_UP), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP), EndContainer(), EndContainer(), diff --git a/src/gfx.cpp b/src/gfx.cpp index 795e6ee7fc..da97b9dcd0 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -2345,22 +2345,22 @@ bool AdjustGUIZoom(AdjustGUIZoomMode mode) ZoomLevel old_font_zoom = _font_zoom; int old_scale = _gui_scale; UpdateGUIZoom(); - if (old_scale == _gui_scale) return false; + if (old_scale == _gui_scale && old_gui_zoom == _gui_zoom) return false; - /* Reload sprites if sprite zoom level has changed. */ + /* Update cursors if sprite zoom level has changed. */ if (old_gui_zoom != _gui_zoom) { - GfxClearSpriteCache(); VideoDriver::GetInstance()->ClearSystemSprites(); UpdateCursorSize(); if (mode != AGZM_STARTUP) UpdateRouteStepSpriteSize(); - } else if (old_font_zoom != _font_zoom) { + } + if (old_font_zoom != _font_zoom) { GfxClearFontSpriteCache(); } - ClearFontCache(); UpdateFontHeightCache(); LoadStringWidthTable(); - ReInitAllWindows(false); + + SetupWidgetDimensions(); UpdateAllVirtCoords(); if (mode != AGZM_STARTUP) FixTitleGameZoom(); @@ -2374,11 +2374,9 @@ bool AdjustGUIZoom(AdjustGUIZoomMode mode) if (mode == AGZM_AUTOMATIC) { w->left = (w->left * _gui_scale) / old_scale; w->top = (w->top * _gui_scale) / old_scale; - w->width = (w->width * _gui_scale) / old_scale; - w->height = (w->height * _gui_scale) / old_scale; } if (w->viewport != nullptr) { - w->viewport->zoom = Clamp(ZoomLevel(w->viewport->zoom - zoom_shift), _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); + w->viewport->zoom = static_cast(Clamp(w->viewport->zoom - zoom_shift, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max)); } } diff --git a/src/gfx_func.h b/src/gfx_func.h index a6d275378e..a58930706a 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -107,8 +107,8 @@ struct SpritePointerHolder; void DrawSpriteViewport(const SpritePointerHolder &sprite_store, const DrawPixelInfo *dpi, SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr); void PrepareDrawSpriteViewportSpriteStore(SpritePointerHolder &sprite_store, const DrawPixelInfo *dpi, SpriteID img, PaletteID pal); void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI); -void DrawSpriteIgnorePadding(SpriteID img, PaletteID pal, const Rect &r, bool clicked, StringAlignment align); /* widget.cpp */ -std::unique_ptr DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel zoom = ZOOM_LVL_GUI); +void DrawSpriteIgnorePadding(SpriteID img, PaletteID pal, const Rect &r, StringAlignment align); /* widget.cpp */ +std::unique_ptr DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel zoom = ZOOM_LVL_GUI); int DrawString(int left, int right, int top, std::string_view str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL); int DrawString(int left, int right, int top, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL); @@ -174,6 +174,11 @@ void CheckBlitter(); bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int height); +static inline bool FillDrawPixelInfo(DrawPixelInfo *n, const Rect &r) +{ + return FillDrawPixelInfo(n, r.left, r.top, r.Width(), r.Height()); +} + /** * Determine where to draw a centred object inside a widget. * @param min The top or left coordinate. diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index 772a1993ae..0f065980ea 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -285,8 +285,8 @@ static const NWidgetPart _nested_goals_list_widgets[] = { NWidget(WWT_CLOSEBOX, COLOUR_BROWN), NWidget(WWT_CAPTION, COLOUR_BROWN, WID_GOAL_CAPTION), SetDataTip(STR_JUST_STRING1, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_GOAL_SELECT_BUTTONS), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_GOAL_GLOBAL_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WidgetDimensions::unscaled.captiontext.Vertical()), SetDataTip(STR_GOALS_GLOBAL_BUTTON, STR_GOALS_GLOBAL_BUTTON_HELPTEXT), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_GOAL_COMPANY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WidgetDimensions::unscaled.captiontext.Vertical()), SetDataTip(STR_GOALS_COMPANY_BUTTON, STR_GOALS_COMPANY_BUTTON_HELPTEXT), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_GOAL_GLOBAL_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_GOALS_GLOBAL_BUTTON, STR_GOALS_GLOBAL_BUTTON_HELPTEXT), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_GOAL_COMPANY_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_GOALS_COMPANY_BUTTON, STR_GOALS_COMPANY_BUTTON_HELPTEXT), EndContainer(), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 9a77047242..3b2ace8724 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -658,7 +658,7 @@ static const NWidgetPart _nested_operating_profit_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_GRAPH_OPERATING_PROFIT_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical() + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), NWidget(WWT_STICKYBOX, COLOUR_BROWN), @@ -668,7 +668,7 @@ static const NWidgetPart _nested_operating_profit_widgets[] = { NWidget(WWT_EMPTY, COLOUR_BROWN, WID_CV_GRAPH), SetMinimalSize(576, 160), SetFill(1, 1), SetResize(1, 1), NWidget(NWID_VERTICAL), NWidget(NWID_SPACER), SetFill(0, 1), SetResize(0, 1), - NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_CV_RESIZE), + NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_CV_RESIZE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE), EndContainer(), EndContainer(), EndContainer(), @@ -709,7 +709,7 @@ static const NWidgetPart _nested_income_graph_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_GRAPH_INCOME_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical() + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), NWidget(WWT_STICKYBOX, COLOUR_BROWN), @@ -719,7 +719,7 @@ static const NWidgetPart _nested_income_graph_widgets[] = { NWidget(WWT_EMPTY, COLOUR_BROWN, WID_CV_GRAPH), SetMinimalSize(576, 128), SetFill(1, 1), SetResize(1, 1), NWidget(NWID_VERTICAL), NWidget(NWID_SPACER), SetFill(0, 1), SetResize(0, 1), - NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_CV_RESIZE), + NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_CV_RESIZE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE), EndContainer(), EndContainer(), EndContainer(), @@ -801,7 +801,7 @@ struct ExcludingCargoBaseGraphWindow : BaseGraphWindow { /* Redraw frame if lowered */ if (lowered) DrawFrameRect(line, COLOUR_BROWN, FR_LOWERED); - const Rect text = line.Shrink(WidgetDimensions::scaled.framerect).Translate(lowered ? WidgetDimensions::scaled.pressed : 0, lowered ? WidgetDimensions::scaled.pressed : 0); + const Rect text = line.Shrink(WidgetDimensions::scaled.framerect); /* Cargo-colour box with outline */ const Rect cargo = text.WithWidth(this->legend_width, rtl); @@ -1002,7 +1002,7 @@ static const NWidgetPart _nested_delivered_cargo_graph_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_GRAPH_CARGO_DELIVERED_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical() + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), NWidget(WWT_STICKYBOX, COLOUR_BROWN), @@ -1025,7 +1025,7 @@ static const NWidgetPart _nested_delivered_cargo_graph_widgets[] = { NWidget(NWID_SPACER), SetMinimalSize(0, 4), NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_CV_RESIZE), + NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_CV_RESIZE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE), EndContainer(), EndContainer(), EndContainer(), @@ -1071,8 +1071,8 @@ static const NWidgetPart _nested_performance_history_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_PHG_DETAILED_PERFORMANCE), SetMinimalSize(50, 0), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical() + 2), SetDataTip(STR_PERFORMANCE_DETAIL_KEY, STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_PHG_KEY), SetMinimalSize(50, 0), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical() + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_PHG_DETAILED_PERFORMANCE), SetMinimalSize(50, 0), SetDataTip(STR_PERFORMANCE_DETAIL_KEY, STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_PHG_KEY), SetMinimalSize(50, 0), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), NWidget(WWT_STICKYBOX, COLOUR_BROWN), @@ -1082,7 +1082,7 @@ static const NWidgetPart _nested_performance_history_widgets[] = { NWidget(WWT_EMPTY, COLOUR_BROWN, WID_PHG_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1), NWidget(NWID_VERTICAL), NWidget(NWID_SPACER), SetFill(0, 1), SetResize(0, 1), - NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_PHG_RESIZE), + NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_PHG_RESIZE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE), EndContainer(), EndContainer(), EndContainer(), @@ -1121,7 +1121,7 @@ static const NWidgetPart _nested_company_value_graph_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), NWidget(WWT_CAPTION, COLOUR_BROWN), SetDataTip(STR_GRAPH_COMPANY_VALUES_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical() + 2), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, WID_CV_KEY_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_GRAPH_KEY_BUTTON, STR_GRAPH_KEY_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), NWidget(WWT_STICKYBOX, COLOUR_BROWN), @@ -1131,7 +1131,7 @@ static const NWidgetPart _nested_company_value_graph_widgets[] = { NWidget(WWT_EMPTY, COLOUR_BROWN, WID_CV_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1), NWidget(NWID_VERTICAL), NWidget(NWID_SPACER), SetFill(0, 1), SetResize(0, 1), - NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_CV_RESIZE), + NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_CV_RESIZE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE), EndContainer(), EndContainer(), EndContainer(), @@ -1312,7 +1312,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { /* Redraw frame if lowered */ if (lowered) DrawFrameRect(line, COLOUR_BROWN, FR_LOWERED); - const Rect text = line.Shrink(WidgetDimensions::scaled.framerect).Translate(lowered ? WidgetDimensions::scaled.pressed : 0, lowered ? WidgetDimensions::scaled.pressed : 0); + const Rect text = line.Shrink(WidgetDimensions::scaled.framerect); /* Cargo-colour box with outline */ const Rect cargo = text.WithWidth(this->legend_width, rtl); @@ -1480,7 +1480,7 @@ static const NWidgetPart _nested_cargo_payment_rates_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetMinimalSize(12, 0), SetFill(0, 0), SetResize(0, 0), NWidget(WWT_TEXT, COLOUR_BROWN, WID_CPR_FOOTER), SetMinimalSize(0, 6), SetAlignment(SA_CENTER), SetPadding(2, 0, 2, 0), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_CPR_RESIZE), + NWidget(WWT_RESIZEBOX, COLOUR_BROWN, WID_CPR_RESIZE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE), EndContainer(), EndContainer(), }; @@ -1600,9 +1600,8 @@ struct PerformanceRatingDetailWindow : Window { if (IsInsideMM(widget, WID_PRD_COMPANY_FIRST, WID_PRD_COMPANY_LAST + 1)) { if (this->IsWidgetDisabled(widget)) return; CompanyID cid = (CompanyID)(widget - WID_PRD_COMPANY_FIRST); - int offset = (cid == this->company) ? WidgetDimensions::scaled.pressed : 0; Dimension sprite_size = GetSpriteSize(SPR_COMPANY_ICON); - DrawCompanyIcon(cid, CenterBounds(r.left, r.right, sprite_size.width) + offset, CenterBounds(r.top, r.bottom, sprite_size.height) + offset); + DrawCompanyIcon(cid, CenterBounds(r.left, r.right, sprite_size.width), CenterBounds(r.top, r.bottom, sprite_size.height)); return; } diff --git a/src/group_gui.cpp b/src/group_gui.cpp index c30dadd537..27515d4279 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -490,7 +490,7 @@ public: break; case WID_GL_FILTER_BY_CARGO: - size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList()).width + padding.width); + size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width); break; case WID_GL_MANAGE_VEHICLES_DROPDOWN: { @@ -725,7 +725,7 @@ public: return; case WID_GL_FILTER_BY_CARGO: // Select filtering criteria dropdown menu - ShowDropDownList(this, this->BuildCargoDropDownList(), this->cargo_filter_criteria, widget); + ShowDropDownList(this, this->BuildCargoDropDownList(false), this->cargo_filter_criteria, widget); break; case WID_GL_ALL_VEHICLES: // All vehicles button @@ -1048,7 +1048,7 @@ public: this->UpdateSortingInterval(); break; case WID_GL_FILTER_BY_CARGO: // Select a cargo filter criteria - this->SetCargoFilterIndex(index); + this->SetCargoFilter(index); break; case WID_GL_MANAGE_VEHICLES_DROPDOWN: assert(this->ShouldShowActionDropdownList()); diff --git a/src/highscore_gui.cpp b/src/highscore_gui.cpp index ed2bb9644e..8ca3bedd6e 100644 --- a/src/highscore_gui.cpp +++ b/src/highscore_gui.cpp @@ -186,8 +186,8 @@ struct HighScoreWindow : EndGameHighScoreBaseWindow { this->SetupHighScoreEndWindow(); Point pt = this->GetTopLeft(ScaleSpriteTrad(640), ScaleSpriteTrad(480)); - SetDParam(0, _settings_game.game_creation.ending_year); - DrawStringMultiLine(pt.x + ScaleSpriteTrad(70), pt.x + ScaleSpriteTrad(570), pt.y, pt.y + ScaleSpriteTrad(140), !_networking ? STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED : STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME, TC_FROMSTRING, SA_CENTER); + /* Draw the title. */ + DrawStringMultiLine(pt.x + ScaleSpriteTrad(70), pt.x + ScaleSpriteTrad(570), pt.y, pt.y + ScaleSpriteTrad(140), STR_HIGHSCORE_TOP_COMPANIES, TC_FROMSTRING, SA_CENTER); /* Draw Highscore peepz */ for (uint8_t i = 0; i < ClampTo(hs.size()); i++) { diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 5b5b97e2f0..d68ed12146 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -41,6 +41,7 @@ #include "zoom_func.h" #include "querystring_gui.h" #include "stringfilter_type.h" +#include "hotkeys.h" #include "table/strings.h" @@ -409,16 +410,13 @@ public: this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_DPI_SCROLLBAR); - this->FinishInitNested(0); - - this->SetButtons(); - /* Show scenario editor tools in editor. */ if (_game_mode != GM_EDITOR) { - auto *se_tools = this->GetWidget(WID_DPI_SCENARIO_EDITOR_PANE); - se_tools->SetDisplayedPlane(SZSP_HORIZONTAL); - this->ReInit(); + this->GetWidget(WID_DPI_SCENARIO_EDITOR_PANE)->SetDisplayedPlane(SZSP_HORIZONTAL); } + this->FinishInitNested(0); + + this->SetButtons(); } void OnInit() override @@ -1249,7 +1247,7 @@ static const NWidgetPart _nested_industry_directory_widgets[] = { EndContainer(), }; -typedef GUIList &> GUIIndustryList; +typedef GUIList &> GUIIndustryList; /** Special cargo filter criteria */ enum CargoFilterSpecialType { @@ -1306,7 +1304,10 @@ static bool CargoFilter(const Industry * const *industry, const std::pairproduced_cargo_filter_criteria != index) { - this->produced_cargo_filter_criteria = index; + if (this->produced_cargo_filter_criteria != cid) { + this->produced_cargo_filter_criteria = cid; /* deactivate filter if criteria is 'Show All', activate it otherwise */ bool is_filtering_necessary = this->produced_cargo_filter_criteria != CF_ANY || this->accepted_cargo_filter_criteria != CF_ANY; @@ -1356,13 +1357,13 @@ protected: } /** - * Set cargo filter list item index. - * @param index The index of the cargo to be set + * Set accepted cargo filter for the industry list. + * @param index The cargo to be set */ - void SetAcceptedCargoFilterIndex(byte index) + void SetAcceptedCargoFilter(CargoID cid) { - if (this->accepted_cargo_filter_criteria != index) { - this->accepted_cargo_filter_criteria = index; + if (this->accepted_cargo_filter_criteria != cid) { + this->accepted_cargo_filter_criteria = cid; /* deactivate filter if criteria is 'Show All', activate it otherwise */ bool is_filtering_necessary = this->produced_cargo_filter_criteria != CF_ANY || this->accepted_cargo_filter_criteria != CF_ANY; @@ -1490,7 +1491,7 @@ protected: } /** Sort industries by name */ - static bool IndustryNameSorter(const Industry * const &a, const Industry * const &b) + static bool IndustryNameSorter(const Industry * const &a, const Industry * const &b, const CargoID &) { int r = StrNaturalCompare(a->GetCachedName(), b->GetCachedName()); // Sort by name (natural sorting). if (r == 0) return a->index < b->index; @@ -1498,21 +1499,20 @@ protected: } /** Sort industries by type and name */ - static bool IndustryTypeSorter(const Industry * const &a, const Industry * const &b) + static bool IndustryTypeSorter(const Industry * const &a, const Industry * const &b, const CargoID &filter) { int it_a = 0; while (it_a != NUM_INDUSTRYTYPES && a->type != _sorted_industry_types[it_a]) it_a++; int it_b = 0; while (it_b != NUM_INDUSTRYTYPES && b->type != _sorted_industry_types[it_b]) it_b++; int r = it_a - it_b; - return (r == 0) ? IndustryNameSorter(a, b) : r < 0; + return (r == 0) ? IndustryNameSorter(a, b, filter) : r < 0; } /** Sort industries by production and name */ - static bool IndustryProductionSorter(const Industry * const &a, const Industry * const &b) + static bool IndustryProductionSorter(const Industry * const &a, const Industry * const &b, const CargoID &filter) { - CargoID filter = IndustryDirectoryWindow::produced_cargo_filter; - if (filter == CF_NONE) return IndustryTypeSorter(a, b); + if (filter == CF_NONE) return IndustryTypeSorter(a, b, filter); uint prod_a = 0, prod_b = 0; for (uint i = 0; i < lengthof(a->produced_cargo); i++) { @@ -1526,14 +1526,14 @@ protected: } int r = prod_a - prod_b; - return (r == 0) ? IndustryTypeSorter(a, b) : r < 0; + return (r == 0) ? IndustryTypeSorter(a, b, filter) : r < 0; } /** Sort industries by transported cargo and name */ - static bool IndustryTransportedCargoSorter(const Industry * const &a, const Industry * const &b) + static bool IndustryTransportedCargoSorter(const Industry * const &a, const Industry * const &b, const CargoID &filter) { int r = GetCargoTransportedSortValue(a) - GetCargoTransportedSortValue(b); - return (r == 0) ? IndustryNameSorter(a, b) : r < 0; + return (r == 0) ? IndustryNameSorter(a, b, filter) : r < 0; } /** @@ -1680,7 +1680,7 @@ public: /* Setup a clipping rectangle... */ DrawPixelInfo tmp_dpi; - if (!FillDrawPixelInfo(&tmp_dpi, ir.left, ir.top, ir.Width(), ir.Height())) return; + if (!FillDrawPixelInfo(&tmp_dpi, ir)) return; /* ...but keep coordinates relative to the window. */ tmp_dpi.left += ir.left; tmp_dpi.top += ir.top; @@ -1758,8 +1758,9 @@ public: list.push_back(std::make_unique(this->GetCargoFilterLabel(CF_NONE), CF_NONE, false)); /* Add cargos */ + Dimension d = GetLargestCargoIconSize(); for (const CargoSpec *cs : _sorted_standard_cargo_specs) { - list.push_back(std::make_unique(cs->name, cs->Index(), false)); + list.push_back(std::make_unique(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false)); } return list; @@ -1811,13 +1812,13 @@ public: } case WID_ID_FILTER_BY_ACC_CARGO: { - this->SetAcceptedCargoFilterIndex(index); + this->SetAcceptedCargoFilter(index); this->BuildSortIndustriesList(); break; } case WID_ID_FILTER_BY_PROD_CARGO: { - this->SetProducedCargoFilterIndex(index); + this->SetProducedCargoFilter(index); this->BuildSortIndustriesList(); break; } @@ -1872,7 +1873,28 @@ public: break; } } + + EventState OnHotkey(int hotkey) override + { + switch (hotkey) { + case IDHK_FOCUS_FILTER_BOX: + this->SetFocusedWidget(WID_ID_FILTER); + SetFocusedWindow(this); // The user has asked to give focus to the text box, so make sure this window is focused. + break; + default: + return ES_NOT_HANDLED; + } + return ES_HANDLED; + } + + static HotkeyList hotkeys; +}; + +static Hotkey industrydirectory_hotkeys[] = { + Hotkey('F', "focus_filter_box", IDHK_FOCUS_FILTER_BOX), + HOTKEY_LIST_END }; +HotkeyList IndustryDirectoryWindow::hotkeys("industrydirectory", industrydirectory_hotkeys); Listing IndustryDirectoryWindow::last_sorting = {false, 0}; @@ -1901,7 +1923,8 @@ static WindowDesc _industry_directory_desc(__FILE__, __LINE__, WDP_AUTO, "list_industries", 428, 190, WC_INDUSTRY_DIRECTORY, WC_NONE, 0, - std::begin(_nested_industry_directory_widgets), std::end(_nested_industry_directory_widgets) + std::begin(_nested_industry_directory_widgets), std::end(_nested_industry_directory_widgets), + &IndustryDirectoryWindow::hotkeys ); void ShowIndustryDirectory() @@ -2985,7 +3008,7 @@ struct IndustryCargoesWindow : public Window { Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); DrawPixelInfo tmp_dpi; - if (!FillDrawPixelInfo(&tmp_dpi, ir.left, ir.top, ir.Width(), ir.Height())) return; + if (!FillDrawPixelInfo(&tmp_dpi, ir)) return; AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); int left_pos = WidgetDimensions::scaled.frametext.left - WidgetDimensions::scaled.bevel.left; @@ -3125,8 +3148,9 @@ struct IndustryCargoesWindow : public Window { case WID_IC_CARGO_DROPDOWN: { DropDownList lst; + Dimension d = GetLargestCargoIconSize(); for (const CargoSpec *cs : _sorted_standard_cargo_specs) { - lst.push_back(std::make_unique(cs->name, cs->Index(), false)); + lst.push_back(std::make_unique(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false)); } if (!lst.empty()) { int selected = (this->ind_cargo >= NUM_INDUSTRYTYPES) ? (int)(this->ind_cargo - NUM_INDUSTRYTYPES) : -1; diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index cce78a8e5d..e73af9446d 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -228,6 +228,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filter string: STR_LIST_FILTER_OSKTITLE :{BLACK}Sleutel filter string in @@ -678,8 +679,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik op STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik op musiek lied om te verwyder van huidige program (Slegs Gewoonte1 of Gewoonte2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top maatskappye wat {NUM} bereik het -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Maatskappy Liga Tafel in {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Sakeman STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entrepreneur @@ -1502,8 +1501,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Aktiveer die ge STR_CONFIG_SETTING_LOADING_INDICATORS :Gebruik laai aanwysers: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Kies of die ladingswaardes vertoon word wanneer voertuie vrag op- en aflaai -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Vertoon rooster in "ticks" liewer as dae: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Wys die rystye in tydroosters in speletjie "ticks" inplaas van dae +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Toon aankoms en vertrek in tydroosters: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Vertoon verwagte aankoms en vertrek tye in tydroosters @@ -4135,8 +4133,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(wag vir {STRIN STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(reis vir {STRING}, nie volgens tydrooster nie) STR_TIMETABLE_STAY_FOR :en bly vir {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :en reis vir {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}da{P g e} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tik{P "" ke} STR_TIMETABLE_TOTAL_TIME :{BLACK}Die rooster sal {STRING} neem om te voltooi STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Die rooster sal te minste {STRING} vat om te voltooi (nie alles gerooster nie) @@ -4145,10 +4141,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Die voer STR_TIMETABLE_STATUS_LATE :{BLACK}Die voertuig loop tans {STRING} laat STR_TIMETABLE_STATUS_EARLY :{BLACK}Die voertuig loop tans {STRING} vroeg STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Hierdie rooster het nog nie begin nie -STR_TIMETABLE_STATUS_START_AT :{BLACK}Hierdie tydrooster sal begin by {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Begin datum -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Kies 'n datum as 'n beginpunt vir hierdie rooster. Ctrl+klik stel die begindatum van hierdie rooster en versprei al die voertuie wat hierdie rooster deel eweredig vir 'n volledige rooster. + STR_TIMETABLE_CHANGE_TIME :{BLACK}Verander Tyd STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Verander die bedrag van tyd die verlig opdrag moes vat diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index f3ba25e5a2..c6bb6d2ffa 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -228,6 +228,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}م STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP} متر + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}تصفية القائمة: STR_LIST_FILTER_OSKTITLE :{BLACK} ادخل فلتر @@ -674,8 +675,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}اضغط STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}اضغط على المسار لازالته من القائمة # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}الشركات الكبرى التي وصلت لـ {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}ترتيب الشركات {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :رجل اعمال STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :مغامر @@ -1407,7 +1406,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :استخدام STR_CONFIG_SETTING_LOADING_INDICATORS :تفعيل مؤشر التحميل: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :حدد ما إذا كانت مؤشرات التحميل معروضة فوق تحميل المركبات أو تفريغها -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :عرض جدولة الأعمال بالمهام بدلا من الأيام: {STRING} +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :عرض الوصول و المغادرة في جدولة الاعمال: {STRING} @@ -3864,8 +3863,6 @@ STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :سافر (إل STR_TIMETABLE_STAY_FOR_ESTIMATED :(البقاء ل{STRING}، ليس مجدول) STR_TIMETABLE_STAY_FOR :ويبقى لـ {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :ويسافر لـ {STRING} -STR_TIMETABLE_DAYS :{COMMA}يوم -STR_TIMETABLE_TICKS :{COMMA} علامة STR_TIMETABLE_TOTAL_TIME :{BLACK}جدولة الاوامر هذه ستأخذ {STRING} لنهاية STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}جدولة الاوامر هذه ستأخذ على الاقل {STRING} لتكتمل (لايشمل كل الجدولة) @@ -3874,10 +3871,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}هذه STR_TIMETABLE_STATUS_LATE :{BLACK}هذه العربه {STRING} مُتاخِرة حاليا عن الجدوله STR_TIMETABLE_STATUS_EARLY :{BLACK}هذه العربه {STRING} مُتَقَدِمه عن الجدوله STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}جدولة الاعمال لم تبدأ بعد -STR_TIMETABLE_STATUS_START_AT :{BLACK}جدولة الاعمال ستبدأ فى {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}تاريخ البدأ -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}حدد تاريخًا كنقطة بداية لهذا الجدول الزمني. Ctrl + Click يوزع جميع المركبات التي تشارك هذا الطلب بالتساوي من التاريخ المحدد بناءً على ترتيبها النسبي ، إذا كان الطلب محددًا بجدول زمني كامل + STR_TIMETABLE_CHANGE_TIME :{BLACK}غير الوقت STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}غير مقدار الزمن الذي يستغرقه هذا الامر diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 998d533fe3..8b22e53b74 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -226,6 +226,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Lokarri iragazkia: STR_LIST_FILTER_OSKTITLE :{BLACK}Sartu lokarri iragazkia @@ -660,8 +661,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Musika k STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Musika kantan clik egin uneko programatik ezabatzeko (Perstonala1 edo Pertsonala2 bakarrik) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top companiak {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Konpainien Ligaren Tabla {NUM}-tan STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Negozio gizona STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Empresaria @@ -1445,8 +1444,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Gaitu ibilgailu STR_CONFIG_SETTING_LOADING_INDICATORS :Zama adierazleak erabili: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Aukeratu ibilgailuen zama lanen adierazlea ikusgai dagoen ibilgailuen gainean -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Ordutegiak tick-etan erakutsi egunetan erakutsi ordez: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Erakutsi denbora tauletako denbora jokoaren uniteetan egunak erabili ordez +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Iritsierak eta irteerak ordutegietan erakutsi: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Erakutsi aurreikusitako iritsiera eta irteera denborak denbora tauletan @@ -3894,8 +3892,6 @@ STR_TIMETABLE_TRAVEL_FOR :{STRING} bidaia STR_TIMETABLE_TRAVEL_FOR_SPEED :{STRING}-ra bidaiatu gehienez {VELOCITY}ra STR_TIMETABLE_STAY_FOR :{STRING} gelditu STR_TIMETABLE_AND_TRAVEL_FOR :{STRING} bidaiatu -STR_TIMETABLE_DAYS :{COMMA}{NBSP}egun{P "" ak} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick{P "" ak} STR_TIMETABLE_TOTAL_TIME :{BLACK}Ordutegi honek {STRING} beharko du betetzeko STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Ordutegi honek gutxienez {STRING} beharko du (ez ordutegi guztiak) @@ -3904,9 +3900,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Ibilgail STR_TIMETABLE_STATUS_LATE :{BLACK}Ibilgailu hau {STRING} berandu dabil STR_TIMETABLE_STATUS_EARLY :{BLACK}Ibilgailu hau {STRING} aurreratua dabil STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Ordutegia ez da hasi -STR_TIMETABLE_STATUS_START_AT :{BLACK} {STRING} hasiko da ordutegia -STR_TIMETABLE_STARTING_DATE :{BLACK}Hasiera data + STR_TIMETABLE_CHANGE_TIME :{BLACK}Denbora aldatu STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Piztutako agindua betzeko denbora aldatu diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 2b9c774d93..740fedb542 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -539,6 +539,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}м STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}м + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Фільтар: STR_LIST_FILTER_OSKTITLE :{BLACK}Увядзіце радок фільтра @@ -987,8 +988,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Клік STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Клікніце па назьве трэка, каб выдаліць яго з уласнай праґрамы # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Найбуйнейшыя кампаніі, якія дасягнулі {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Табліца кампаніяў у {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Бізнэсоўца STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Прадпрымальнік @@ -1821,8 +1820,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Дазволі STR_CONFIG_SETTING_LOADING_INDICATORS :Паказваць індыкатар загрузкі: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Выбраць, ці будуць паказвацца індыкатары загрузкі над транспартам, які грузіцца ці разгружаецца. -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Паказваць расклад ў «ціках» замест дзён: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Паказваць у раскладзе час падарожжа ў гульнёвых "ціках" замест дзён. +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Паказваць у раскладах час прыбыцьця й адпраўленьня: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Паказваць верагодны час прыбыцьця й адпраўленьня ў раскладах. @@ -4497,8 +4495,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(чакаць { STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(у дарозе {STRING}, графік не складзены) STR_TIMETABLE_STAY_FOR :і чакаць {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :і рухацца да {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}д{P зень нi зён} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}цiк{P "" i аў} STR_TIMETABLE_TOTAL_TIME :{BLACK}Увесь маршрут зойме {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Рух па маршруце зойме {STRING} (ня ўсё ўлічана) @@ -4507,10 +4503,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Гэты STR_TIMETABLE_STATUS_LATE :{BLACK}Гэты транспарт спазьняецца на {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Гэты транспарт апярэджвае ґрафік на {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Ґрафік руху яшчэ не ўсталяваны -STR_TIMETABLE_STATUS_START_AT :{BLACK}Адлік часу пачнецца з {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Пачатковая дата -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Выберыце пачатковую дату для гэтага ґрафіка. Ctrl+пстрычка ўсталюе пачатковую дату і раўнамерна разьмяркуе ўсе транспартныя сродкі, якія рухаюцца па гэтым маршруце, калі час руху па ім цалкам разьлічаны. + STR_TIMETABLE_CHANGE_TIME :{BLACK}Зьмяніць час STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Зьмяніць час для вылучанага заданьня diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index a6f8caa1d1..ae5ffeb53c 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -256,6 +256,10 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m +STR_UNITS_DAYS :{COMMA}{NBSP}dia{P "" s} +STR_UNITS_SECONDS :{COMMA}{NBSP}sedundo{P "" s} +STR_UNITS_TICKS :{COMMA}{NBSP}tique{P "" s} + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtro: STR_LIST_FILTER_OSKTITLE :{BLACK}Insira uma ou mais palavras-chave para filtrar a lista @@ -719,8 +723,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique n STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clique na faixa de música para remover do programa atual (apenas Personalizado 1 ou Personalizado 2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}As maiores empresas que alcançaram{NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tabela da Liga das Empresas em {NUM} +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Melhores empresas STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Empresário STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Empreendedor @@ -1489,7 +1492,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Tipo de terreno: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(TerraGenesis apenas) O quão acidentado é o terreno +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Apenas TerraGenesis) Relevo do terreno STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densidade de indústrias: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Define quantas indústrias devem ser geradas e o nível que deve ser mantido durante o jogo @@ -1498,18 +1501,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Dist máx da bo STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Refinarias são construídas apenas nas bordas, ou no litoral, para ilhas STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a que altitude a neve começa nos climas sub-árticos. Neve também afeta geração de indústrias e necessidades para o crescimento das cidades. Só pode ser modificado por meio do Editor de cenário ou é de outra forma calculado por meio de "cobertura de neve" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a que altura começa a neve no clima sub-ártico. A neve também afeta a geração de indústrias e os requisitos de crescimento das localidades. Só pode ser modificado no Editor de Cenário ou então é calculado usando a "cobertura de neve" STR_CONFIG_SETTING_SNOW_COVERAGE :Cobertura de neve: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controla a quantidade aproximada de neve no terreno subártico. A neve também afeta os requisitos de geração de indústria e crescimento de cidades. Usado apenas durante a geração de mapas. Terreno logo acima do nível do mar é sempre sem neve +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controla a quantidade aproximada de neve no clima sub-ártico. A neve também afeta a geração das indústrias e os requisitos de crescimento das localidades. Usado apenas durante a geração do mapa. O terreno logo acima do nível do mar nunca terá neve. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Cobertura do deserto: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Controla a quantidade aproximada de deserto no terreno tropical. O deserto também afeta a geração de indústrias. Usado apenas durante a geração do mapa +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Controla a quantidade aproximada de deserto no clima tropical. O deserto também afeta a geração das indústrias. Usado apenas durante a geração do mapa STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Irregularidade do terreno: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis apenas) Escolhe a frequência de colinas: Terrenos planos têm menos colinas, mais espalhadas. Montanhosos tem mais colinas, que pode se tornar repetitivo +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Apenas TerraGenesis) Escolhe a frequência de montes: paisagens macias têm menos montes e mais espalhados. Paisagens duras têm muitos montes, que podem parecer repetitivos ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Muito Regular STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Regular @@ -1517,7 +1520,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Irregular STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Muito Irregular STR_CONFIG_SETTING_VARIETY :Distribuição de variedade: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis apenas) Controla se o mapa contém tanto áreas montanhosas como planas. Como isso apenas torna o mapa mais plano, as outras configurações devem ser mantidas em montanhoso +STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Apenas TerraGenesis) Controla se o mapa contém áreas planas e montanhosas. Como isto apenas torna o mapa mais plano, outras definições devem ser definidas como montanhosas STR_CONFIG_SETTING_RIVER_AMOUNT :Quantidade de rios: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Escolha quantos rios a serem gerados @@ -1537,6 +1540,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Dirigem na esqu STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Dirigem na direita STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotação do mapa topográfico: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Escolher como a imagem do mapa topográfico será rotacionado para se ajustar ao mapa do jogo ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Sentido Anti-Horário STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Sentido Horário @@ -1657,8 +1661,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ativa o uso da STR_CONFIG_SETTING_LOADING_INDICATORS :Usar indicadores de carga: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Seleciona se os indicadores de carga são exibidos sobre os veículos (des)carregando -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Exibir plano de horário em tiques ao invés de dias: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostra tempos de viagem, nos planos de horário, em tiques, ao invés de dias. Um tique equivale a 1/74 dia, ou 1/30 segundo. +STR_CONFIG_SETTING_TIMETABLE_MODE :Unidades de tempo para as ordens: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Selecionar as unidades de tempo usadas nas ordens dos veículos +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dias +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Segundos +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Tiques STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar chegada e saída nos planos de horário: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Exibe tempos de chegada e partida anticipados nos planos de horário @@ -2246,9 +2254,9 @@ STR_FACE_SAVE :{BLACK}Salvar STR_FACE_SAVE_TOOLTIP :{BLACK}Salvar face favorita STR_FACE_SAVE_DONE :{WHITE}Este rosto irá ser salvo como seu rosto favorito no arquivo de configuração do OpenTTD STR_FACE_EUROPEAN :{BLACK}Europeu -STR_FACE_SELECT_EUROPEAN :{BLACK}Selecione faces Européias +STR_FACE_SELECT_EUROPEAN :{BLACK}Selecionar faces Européias STR_FACE_AFRICAN :{BLACK}Africano -STR_FACE_SELECT_AFRICAN :{BLACK}Selecione faces Africanas +STR_FACE_SELECT_AFRICAN :{BLACK}Selecionar faces Africanas STR_FACE_YES :Sim STR_FACE_NO :Não STR_FACE_MOUSTACHE_EARRING_TOOLTIP :{BLACK}Ativar bigode ou brinco @@ -2582,7 +2590,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Conteúd STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Você está saindo do OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Os termos e condições ao baixar conteúdo de fontes externas pode varias.{}Você deverá consultar as fontes para obter instruções de como instalar o conteúdo no OpenTTD.{} Deseja continuar? STR_CONTENT_FILTER_TITLE :{BLACK}Tag/nome do filtro: -STR_CONTENT_OPEN_URL :{BLACK}Visitar website +STR_CONTENT_OPEN_URL :{BLACK}Visitar a página web STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visitar o site desse conteúdo STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Baixar STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Baixa o conteúdo selecionado @@ -2592,7 +2600,7 @@ STR_CONTENT_DETAIL_TITLE :{SILVER}INFORMA ###length 5 STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED :{SILVER}Você não selecionou para ser baixado STR_CONTENT_DETAIL_SUBTITLE_SELECTED :{SILVER}Você selecionou para ser baixado -STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Esse dependente será baixado +STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Esta dependência foi seleccionada para ser baixada STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}Você já baixou isso STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Esse conteúdo é desconhecido e não pode ser baixado pelo OpenTTD @@ -2660,7 +2668,7 @@ STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Definir STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legenda do Fluxo de Carga STR_LINKGRAPH_LEGEND_ALL :{BLACK}Todas STR_LINKGRAPH_LEGEND_NONE :{BLACK}Nenhuma -STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Selecione companhias a serem exibidas +STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Selecionar as empresas a serem exibidas STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap @@ -2941,7 +2949,7 @@ STR_FOUND_TOWN_CITY :{BLACK}Cidade STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Cidades grandes cresem mais rápido que as cidades normais{}Dependendo das configs. são maiores quando fundadas. STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Disposição das ruas das cidades -STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Selecione a disposição de ruas a ser utilizada nessa cidade +STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Seleccionar disposição das estradas utilizada para esta localidade STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Original STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Melhorado STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}Quadras 2x2 @@ -2950,7 +2958,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Randômi # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Financiar Indústria -STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Escolha a indústria apropriada +STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Escolher a indústria apropriada desta lista STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Criar indústrias aleatórias STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cobrir o mapa com indústrias colocadas aleatoriamente STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Criar indústrias aleatórias @@ -2976,10 +2984,10 @@ STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Cadeia d STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Exibe indústrias que suprem e aceitam carga STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Exiba também no minimapa STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Selecione as indústrias exibidas no minimapa também -STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Seleciona carga -STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Seleciona a carga que você deseja exibir -STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Seleciona indústria -STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Seleciona a indústria que você deseja exibir +STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Selecionar carga +STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Selecionar a carga que você deseja exibir +STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Selecionar a indústria +STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Selecionar a indústria que você deseja exibir # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Informações do Terreno @@ -3202,13 +3210,17 @@ STR_MAPGEN_MAPSIZE :{BLACK}Dimensõ STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Seleciona o tamanho do mapa em quadrados. O número de quadrados disponíveis será um pouco menor STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}No. de cidades: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Selecionar a densidade de cidades ou fornecer um número STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nome das cidades: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Selecionar o estilo dos nomes das cidades STR_MAPGEN_DATE :{BLACK}Data: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Selecionar a data inicial STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}No. de indústrias: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Selecione a densidade de indústrias ou forneça um número STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Pico mais alto: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Escolher o pico mais alto que o jogo tentará criar, medido em elevação acima do nível do mar STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Aumentar a altura máxima do pico mais alto no mapa por um -STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Diminuir a altura máxima do pico mais alto no mapa por um +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Diminuir de uma unidade a altura máxima do pico mais alto no mapa STR_MAPGEN_SNOW_COVERAGE :{BLACK}Cobertura de neve: STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Aumentar em dez porcento a cobertura de neve STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Reduzir em dez porcento a cobertura de neve @@ -3219,10 +3231,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Diminuir STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipo de terreno STR_MAPGEN_SEA_LEVEL :{BLACK}Nível do mar: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Selecionar o nível do mar STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rios: STR_MAPGEN_SMOOTHNESS :{BLACK}Regularidade STR_MAPGEN_VARIETY :{BLACK}Distribuição da variedade STR_MAPGEN_GENERATE :{WHITE}Gerar +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Criar o mapa e jogar o OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Definições de NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Mostrar definições de NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Definições de IA @@ -3255,6 +3269,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalão # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Bordas do mapa: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Escolher as bordas do mapa do jogo STR_MAPGEN_NORTHWEST :{BLACK}Noroeste STR_MAPGEN_NORTHEAST :{BLACK}Nordeste STR_MAPGEN_SOUTHEAST :{BLACK}Sudeste @@ -3267,7 +3282,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotação do mapa topográfico: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa topográfico: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}O nome do arquivo de imagem do mapa topográfico STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}O tamanho da imagem do mapa topográfico original. Para melhores resultados, cada lado deve ser igual a um comprimento de lado de mapa disponível no OpenTTD, como 256, 512, 1024, etc. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura alvo do pico @@ -3282,6 +3299,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Terra pl STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Gera uma terra plana STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Terra randômica STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Altitude da terra plana +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Escolher a elevação do terreno acima do nível do mar STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mover a altitude da terra plana em uma unidade a menos STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Mover a altitude da terra plana em uma unidade a mais @@ -3309,7 +3327,7 @@ STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Configur STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Informação detalhada de NewGRF STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Arquivos NewGRF ativos STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Arquivos NewGRF inativos -STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Selecione um modelo: +STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Seleccionar predefinição: STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtro: STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Carrega o padrão selecionado STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Salvar padrão @@ -4365,7 +4383,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova cap STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}{}{BLACK}Lucro vindo da adaptação: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Custo da adaptação: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Lucro da adaptação: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecione os veículos para recuperar. Arrastar com o mouse permite a seleção de vários veículos. Clicar em espaço vazio selecionará todo o veículo. Ctrl+Clique selecionará um veículo e a lista de construção em seguida +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos para recuperar. Arrastar com o mouse permite a seleção de vários veículos. Clicar em espaço vazio selecionará todo o veículo. Ctrl+Clique selecionará um veículo e a lista de construção em seguida ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Selecionar tipo de carga para o trem @@ -4567,8 +4585,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(aguardar por { STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar para {STRING}, sem horário marcado) STR_TIMETABLE_STAY_FOR :e ficar durante {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :e viajar por {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}dia{P "" s} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tique{P "" s} STR_TIMETABLE_TOTAL_TIME :{BLACK}Este horário levará {STRING} para completar STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Este horário levará no mínimo {STRING} para completar (nem todos com horário marcado) @@ -4577,10 +4593,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Este ve STR_TIMETABLE_STATUS_LATE :{BLACK}Este veículo está atualmente circulando {STRING} atrasado STR_TIMETABLE_STATUS_EARLY :{BLACK}Este veículo está atualmente circulando {STRING} adiantado STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horário ainda não começou -STR_TIMETABLE_STATUS_START_AT :{BLACK}Este horário começará em{STRING} +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Essa ordem irá iniciar às {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Essa ordem irá iniciar em {COMMA} segundos + +STR_TIMETABLE_START :{BLACK}Iniciar Ordem +STR_TIMETABLE_START_TOOLTIP :{BLACK}Selecionar quando essa ordem inicia. Ctrl+Click distribui igualmente a partida de todos os veículos que compartilham essa ordem com base em sua ordem relativa, se a ordem for totalmente programada -STR_TIMETABLE_STARTING_DATE :{BLACK}Data de início -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Seleciona uma data como ponto de partida para esse horário. Ctrl+Clique define o ponto de partida desse horário e distribui todos os veículos que compartilham essa ordem igualmente, baseados na sua ordem relativa, mesmo que a ordem esteja totalmente tabelada +STR_TIMETABLE_START_SECONDS_QUERY :Segundos até a ordem iniciar STR_TIMETABLE_CHANGE_TIME :{BLACK}Mudar horário STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mudar a duração do tempo que a ordem em destaque deve durar. Ctrl+Clique define o tempo para todas as ordens @@ -4604,8 +4623,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Esperado STR_TIMETABLE_SCHEDULED :{BLACK}Agendado STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Trocar entre esperado e agendado -STR_TIMETABLE_ARRIVAL :C: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :P: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} segundos +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} segundos # Date window (for timetable) @@ -4708,9 +4729,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Retornar STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Retornar adiante no histórico de navegação STR_TEXTFILE_WRAP_TEXT :{WHITE}Quebra de linha STR_TEXTFILE_WRAP_TEXT_TOOLTIP :[BLACK}Quebra linhas automaticamente para que o texto caiba na janela -STR_TEXTFILE_VIEW_README :{BLACK}Ver o leia-me +STR_TEXTFILE_VIEW_README :{BLACK}Ver o arquivo Leia-me +STR_TEXTFILE_VIEW_README_TOOLTIP :Ver o arquivo Leia-me para este conteúdo STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Log de mudanças +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Ver o registro de modificações para este conteúdo STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licença +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Ver a licença para este conteúdo ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} Leia-me de {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} log de mudanças de {STRING} diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index bbd2c1ba98..d92af42511 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -228,6 +228,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}м STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}м + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Филтриращ низ: STR_LIST_FILTER_OSKTITLE :{BLACK}Въведете филтър @@ -666,8 +667,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Нати STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Натиснете върху парче за да го премахнете от програмата (Custom1 и Custom2 само) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Първите компании достигнали {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Таблица Лига на компании в {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Бизнесмен STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Предприемач @@ -1468,8 +1467,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Разреша STR_CONFIG_SETTING_LOADING_INDICATORS :Товарни индикатори: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Изберете дали индикаторът за зареждане се показва над превозните средства, които товарят и разтоварват -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Разписанието в цикли вместо дни: {STRING.n} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Показва времената за придвижване в таблиците в игрови единици, вместо в дни +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Покажи пристигането и заминаването в расписанията: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Показвай очакваните времена за пристигане и заминаване в таблиците @@ -3971,8 +3969,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(престой STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(Пътувай към {STRING}, без разписание) STR_TIMETABLE_STAY_FOR :и остани за {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :и отпътувай към {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}ден{P "" а} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}щракане{P "" та} STR_TIMETABLE_TOTAL_TIME :{BLACK}Ще трябва {STRING} за това разписание да бъде приключено STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Това разписание ще вземе най-малко {STRING} за да приклучи (не всичко е планирано) @@ -3981,10 +3977,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Това STR_TIMETABLE_STATUS_LATE :{BLACK}Това превозно средство е в момента с {STRING} закъснение STR_TIMETABLE_STATUS_EARLY :{BLACK}Това превозно средство е в момента с {STRING} по-рано STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Това разписание още не е започнало -STR_TIMETABLE_STATUS_START_AT :{BLACK}Това разписание ще започне на {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Дата на започване -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK} Изберете начална дата на това разписание. Ctrl + Click задава началната дата и равномерно разпределя всички превозни средства, които споделят тази поръчка, на базата на тяхната относителна поръчка, ако поръчката е изцяло по разписание + STR_TIMETABLE_CHANGE_TIME :{BLACK}Промени времето STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Промени времетраенето на маркираната заповед diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index b0818882d1..545bff89ab 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -256,6 +256,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{G=Masculin}{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtre: STR_LIST_FILTER_OSKTITLE :{BLACK}Introduïu una o més paraules per a filtrar la llista de @@ -719,8 +720,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clica la STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clica la pista de música per treure-la de la llista actual (només en llistes personalitzables) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Principals companyies que han arribat al {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Taula de la lliga de companyies a {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Empresari STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Emprenedor @@ -1657,8 +1656,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Activa la utili STR_CONFIG_SETTING_LOADING_INDICATORS :Utilitza indicadors de càrrega: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Selecciona si els indicadors de càrrega seran mostrats sobre els vehicles en càrrega o descàrrega -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostra horaris amb marques en lloc de dies: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostra els temps de viatge als horaris en marques en lloc de dies +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostra l'arribada i la sortida als horaris: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostra als horaris l'arribada anticipadament i les hores de sortida @@ -2582,7 +2580,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Cerca co STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Esteu sortint de l'OpenTTD. STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Els termes i condicions per descarregar contingut des de webs externes varia.{}Haureu d'adreçar-vos a les webs externes per trobar instruccions sobre com instal·lar contingut a l'OpenTTD.{}Voleu continuar? STR_CONTENT_FILTER_TITLE :{BLACK}Marca/anomena filtre: -STR_CONTENT_OPEN_URL :{BLACK}Visita la web +STR_CONTENT_OPEN_URL :{BLACK}Lloc web STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visita la web per accedir a aquest contingut STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Descarrega STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Comença a descarregar el contingut seleccionat @@ -4567,8 +4565,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(quedar-s'hi du STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viatja durant {STRING}, sense horari) STR_TIMETABLE_STAY_FOR :i estigues {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :i viatge per {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}di{P a es} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}mar{P ca ques} STR_TIMETABLE_TOTAL_TIME :{BLACK}L'horari tardarà {STRING} a complir-se STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}L'horari tardarà almenys {STRING} a complir-se (no tot està planificat) @@ -4577,10 +4573,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Actualme STR_TIMETABLE_STATUS_LATE :{BLACK}Actualment aquest vehicle va {STRING} tard STR_TIMETABLE_STATUS_EARLY :{BLACK}Actualment aquest vehicle va {STRING} d'hora STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Aquest horari encara no ha començat -STR_TIMETABLE_STATUS_START_AT :{BLACK}Aquest horari començarpa a {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Data de partida -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Seleccioneu una data com a punt de partida d'aquest horari. Amb Ctrl+Clic, distribueix els vehicles que comparteixen aquesta ruta a partir de la data establerta i la seva ordre relativa, sempre que la ruta tingui l'horari complet. + STR_TIMETABLE_CHANGE_TIME :{BLACK}Canvia Temps STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Canvia el emps que l'ordre marcada hauria de prendre. Amb Ctrl+clic estableix el temps per a totes les ordres. @@ -4604,8 +4598,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Esperat STR_TIMETABLE_SCHEDULED :{BLACK}Planificat STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Canvia entre esperat i planificat -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :S: {COLOUR}{DATE_TINY} # Date window (for timetable) @@ -4708,9 +4700,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Torneu e STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Aneu avant segons l'historial de navegació. STR_TEXTFILE_WRAP_TEXT :{WHITE}Ajusta text STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ajusta el text afegint-hi canvis de línia, de manera que sigui més fàcil desplaçar-se pel text -STR_TEXTFILE_VIEW_README :{BLACK}Veure llegeix-me +STR_TEXTFILE_VIEW_README :{BLACK}Llegeix-me +STR_TEXTFILE_VIEW_README_TOOLTIP :Mostra el fitxer d'informació d'aquest contingut STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Registre de canvis +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Mostra el registre de canvis d'aquest contingut STR_TEXTFILE_VIEW_LICENCE :{BLACK}Llicència +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Mostra la llicència d'aquest contingut ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}Llegeix-me del {STRING} de {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Registre de canvis del {STRING} de {STRING} diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 3d107a16da..6447e31e9f 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -167,6 +167,7 @@ STR_UNITS_POWER_SI :{DECIMAL}кВт + # Common window strings @@ -715,6 +716,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31 +###length 3 @@ -1571,6 +1573,7 @@ STR_ORDER_GO_TO_STATION :{STRING} {STATI + # Date window (for timetable) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 4db0d4b144..e21092b4aa 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -323,6 +323,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtriraj niz: STR_LIST_FILTER_OSKTITLE :{BLACK}Unesi znak za filter @@ -776,8 +777,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klikni n STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikni na glazbenu traku kako bi ju uklonio iz trenutnog programa (samo Proizvoljno 1 ili Proizvoljno 2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Najbolje tvrtke do {NUM}. godine -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tablica tvrtki u {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Privrednik STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Poduzetnik @@ -1613,8 +1612,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Uključi koriš STR_CONFIG_SETTING_LOADING_INDICATORS :Koristi pokazatelje ukrcaja: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Odaberi hoće li oznake za ukrcaj biti prikazane iznad vozila koja se ukrcavaju ili iskrcavaju -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Pokaži vozni red u otkucajima rađe nego u danima: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Prikaži trajanje putovanja u voznim redovima u otkucajima igre umjesto u danima +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Pokaži dolaske i odlaske u voznim redovima: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Prikaži predviđena vremena dolaska i odlaska u voznim redovima @@ -4321,8 +4319,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(stajanje za {S STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(putovanje za {STRING}, nije mjereno) STR_TIMETABLE_STAY_FOR :i boravak za {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :i putovanje za {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}dan{P "" a a} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}otkucaj{P "" a a} STR_TIMETABLE_TOTAL_TIME :{BLACK}Ovaj vozni red trebat će {STRING} za završetak STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Ovaj vozni red trebat će najmanje {STRING} za završetak (nije sve raspoređeno) @@ -4331,10 +4327,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Ovo vozi STR_TIMETABLE_STATUS_LATE :{BLACK}Ovo vozilo trenutno {STRING} kasni STR_TIMETABLE_STATUS_EARLY :{BLACK}Ovo vozilo trenutno stiže {STRING} ranije STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Ovaj vozni red još nije započeo -STR_TIMETABLE_STATUS_START_AT :{BLACK}Ovaj će vozni red početi u {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Početni datum -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Odaberi datum za početak ovog voznog reda. Ctrl+Klik odabire početnu točku ovog voznog reda i ravnomjerno raspodjeljuje sva vozila koja dijele ovu naredbu prema njihovoj relativnoj naredbi, ako je raspored naredbe potpuno određen + STR_TIMETABLE_CHANGE_TIME :{BLACK}Promijeni vrijeme STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Promijeni količinu vremena koju bi označena naredba trebala uzeti diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 3d757a6f5a..24dd12f1fd 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -316,6 +316,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtrovat řetězec: STR_LIST_FILTER_OSKTITLE :{BLACK}Vložte jedno nebo více klíčových slov pro filtr seznamu @@ -789,8 +790,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Skladba STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Hudební stopu odstraníš ze současného programu (pouze u vlastního) kliknutím na ni # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Nejlepší společnosti, které dosáhly {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tabulka společností v roce {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Obchodník STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Manažer @@ -1705,8 +1704,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Umožňuje pou STR_CONFIG_SETTING_LOADING_INDICATORS :Používat ukazatele naložení: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Vyber jestli budou zobrazovány ukazatele naložení nad nakládajícími a vykládajícími vozidly. -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Zobrazit jízdní řády v cyklech místo ve dnech: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Ukazuje cestovní časy v jízdních řádech +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Ukazovat v jízdním řádu příjezdy a odjezdy: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Zobrazit předpokládané časy příjezdu a odjezdu v jízdních řádech. @@ -4597,8 +4595,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(zůstaň {STRI STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(jet {STRING}, mimo jízdní řád) STR_TIMETABLE_STAY_FOR :a zůstat {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :a jet {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}d{P en ny ní} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}cykl{P us y ů} STR_TIMETABLE_TOTAL_TIME :{BLACK}Tento jízdní řád bude trvat {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Tento jízdní řád bude trvat nejméně {STRING} (vozidla mimo jízdní řád) @@ -4607,10 +4603,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Vozidlo STR_TIMETABLE_STATUS_LATE :{BLACK}Vozidlo má {STRING} zpoždění STR_TIMETABLE_STATUS_EARLY :{BLACK}Vozidlo jede {STRING} napřed STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Tento jízdní řád ještě nezačal -STR_TIMETABLE_STATUS_START_AT :{BLACK}Tento jízdní řád začne v {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Datum začátku -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vyber počáteční datum tohoto jízdního řádu. Ctrl+Klik rovnoměrně rozloží odjezdy jednotlivých vozidel sdílejích příkazy s ohledem na současný jízdní řád. + STR_TIMETABLE_CHANGE_TIME :{BLACK}Změnit čas STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Změnit čas pro splnění jízdního příkazu. Ctrl+klik změní čas pro všechny příkazy. @@ -4634,7 +4628,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Očekáv STR_TIMETABLE_SCHEDULED :{BLACK}Plánovaný STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Přepnout mezi očekávaným a plánovaným -STR_TIMETABLE_ARRIVAL :P: {COLOUR}{DATE_TINY} # Date window (for timetable) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index f7d676bbd2..63ef2596cf 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -255,6 +255,8 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} fod STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m +STR_UNITS_DAYS :{COMMA}{NBSP}dag{P "" s} + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtrer udtryk: STR_LIST_FILTER_OSKTITLE :{BLACK}Indtast filterstreng @@ -718,8 +720,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik på STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik på et musiknummer for at fjerne det fra programlisten (kun for Custom1/Custom2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Bedste virksomheder, som har nået {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Selskabsoversigt i {NUM} +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Top virksomheder STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Forretningsmand STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entreprenør @@ -1536,6 +1537,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Kør i venstre STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Kør i højre side STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotér højdekort: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Vælg, hvilken vej højdekortets billede skal roteres for at passe ind i spilverdenen ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Mod uret STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Med uret @@ -1656,8 +1658,10 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Aktiver brug af STR_CONFIG_SETTING_LOADING_INDICATORS :Benyt laste-indikatorer: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Vælg om lastnings-indikatorer vises ved pålæsning og aflæsning af køretøjer -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Vis køreplan i tik i stedet for dage: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Vis rejsetider i køreplaner i spil ticks i stedet for dage +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Vælg de tidsenheder, der skal bruges til køreplaner +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dage +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Sekunder STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Vis ankomst og afgang i tidsplaner: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Vis forventede ankomst-og afgangstider i tidsplaner @@ -2346,7 +2350,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Navnet v STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Sæt kodeord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskyt dit spil med et kodeord hvis du ikke vil have fremmede med -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Synlighed +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Synlighed: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Hvorvidt andre kan se din server i den offentlige liste STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tilladte klienter: @@ -3201,9 +3205,11 @@ STR_MAPGEN_MAPSIZE :{BLACK}Kortstø STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Vælg kortets størrelse i fliser. Antallet af tilgængelige fliser vil være en anelse mindre STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Antal byer: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Vælg tætheden af byer eller et brugerdefineret nummer STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Bynavne: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Vælg stil for bynavne STR_MAPGEN_DATE :{BLACK}Dato: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Vælg startdato STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Antal industrier: STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Højeste bjergtop: STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Forøger den maksimale højde på højeste bjergtop på kortet med én @@ -3222,6 +3228,7 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Floder: STR_MAPGEN_SMOOTHNESS :{BLACK}Blødhed: STR_MAPGEN_VARIETY :{BLACK}Varietet af distributionen: STR_MAPGEN_GENERATE :{WHITE}Generer +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Skab en verden og spil OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF indstillinger STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Vis indstillinger for NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}AI indstillinger @@ -4566,8 +4573,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(ophold for {ST STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(rejse for {STRING}, ikke skemalagt) STR_TIMETABLE_STAY_FOR :og vent i {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :og rejs i {STRING} -STR_TIMETABLE_DAYS :{COMMA} dag{P "" e} -STR_TIMETABLE_TICKS :{COMMA} tik STR_TIMETABLE_TOTAL_TIME :{BLACK}Denne køreplan vil tage {STRING} at fuldføre STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Denne køreplan vil tage mindst {STRING} at fuldføre (ikke alt indført i køreplan) @@ -4576,10 +4581,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Dette tr STR_TIMETABLE_STATUS_LATE :{BLACK}Dette transportmiddel er nu {STRING} forsinket STR_TIMETABLE_STATUS_EARLY :{BLACK}Dette transportmiddel er nu {STRING} foran køreplanen STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Denne tidsplan er endnu ikke begyndt. -STR_TIMETABLE_STATUS_START_AT :{BLACK}Denne tidsplan vil starte på {STRING} +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Denne tidsplan starter kl {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Denne tidsplan starter om {COMMA} Sekunder + +STR_TIMETABLE_START :{BLACK}Start tidsplan +STR_TIMETABLE_START_TOOLTIP :{BLACK}Vælg, hvornår denne tidsplan starter. Ctrl+klik fordeler starten af alle køretøjer, der deler denne rækkefølge, jævnt baseret på deres relative rækkefølge, hvis ordren er fuldstændig tidsplanlagt -STR_TIMETABLE_STARTING_DATE :{BLACK}Startdato -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vælg en dato som starttidspunkt for denne køreplan. Ctrl+Klik sætter starttidspunkt for denne køreplan, og distribuerer alle køretøjer der deler denne ordre ligeligt baseret på deres relative rækkefølge, hvis ordren er fuldstændigt tidsplanlagt +STR_TIMETABLE_START_SECONDS_QUERY :Sekunder til tidsplanen starter STR_TIMETABLE_CHANGE_TIME :{BLACK}Ændre tid STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ændre den tid, som den fremhævede rækkefølge skal tage. Ctrl+Click angiver tidspunktet for alle ordrer @@ -4603,8 +4611,9 @@ STR_TIMETABLE_EXPECTED :{BLACK}Forvente STR_TIMETABLE_SCHEDULED :{BLACK}Planlagt STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Skift mellem forventet og tidslagt -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} sek # Date window (for timetable) @@ -4708,8 +4717,11 @@ STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Vend til STR_TEXTFILE_WRAP_TEXT :{WHITE}Ombryd tekst STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ombryd teksten i vinduet, så det hele passer uden at skulle rulle STR_TEXTFILE_VIEW_README :{BLACK}Se readme +STR_TEXTFILE_VIEW_README_TOOLTIP :Se readme for dette indhold STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Ændringslog +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Se ændringslog for dette indhold STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licens +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Se licens til dette indhold ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} readme for {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} ændringslog for {STRING} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 34644eac9f..5ddd1e5dc5 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -255,6 +255,10 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m +STR_UNITS_DAYS :{COMMA}{NBSP}dag{P "" en} +STR_UNITS_SECONDS :{COMMA}{NBSP}seconde{P "" n} +STR_UNITS_TICKS :{COMMA}{NBSP}tik{P "" ken} + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filter: STR_LIST_FILTER_OSKTITLE :{BLACK}Voer een of meer woorden in waarop de lijst wordt gefilterd @@ -718,8 +722,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik op STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik op een nummer om dit uit het programma te verwijderen (alleen Aangepast1 en Aangepast2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Best presterende bedrijven die {NUM} bereikt hebben -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Bedrijfsscoretabel in {NUM} +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Hoogst genoteerde bedrijven STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :ZZP'er STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Ondernemer @@ -1656,8 +1659,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Schakelt het ge STR_CONFIG_SETTING_LOADING_INDICATORS :Laadpercentages gebruiken: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Geef aan of laadindicatoren worden weergegeven boven ladende of lossende voertuigen -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Dienstregeling in tikken weergeven i.p.v. in dagen: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Reistijden in tijdtabellen in speltikken weergeven in plaats van dagen +STR_CONFIG_SETTING_TIMETABLE_MODE :Tijdeenheid voor dienstregelingen: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Selecteer de tijdeenheid voor dienstregelingen +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Dagen +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Seconden +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Tikken STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Aankomst- en vertrektijden in dienstregeling weergeven: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Geef de verwachte aankomst-en vertrektijden in de dienstregeling weer @@ -2346,7 +2353,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}De speln STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Wachtwoord instellen STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beveilig je spel met een wachtwoord als je niet wilt dat dit algemeen toegankelijk is -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Zichtbaarheid +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Zichtbaarheid: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Bepaalt of andere mensen je server kunnen zien in de openbare lijst STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} speler{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximumaantal spelers: @@ -2581,7 +2588,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Zoek inh STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Je verlaat OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}De voorwaarden voor het downloaden van inhoud van externe websites variëren.{}Ga naar de externe website voor instructies over het installeren van de inhoud in OpenTTD.{}Wil je doorgaan? STR_CONTENT_FILTER_TITLE :{BLACK}Tag-/naamfilter: -STR_CONTENT_OPEN_URL :{BLACK}Website bezoeken +STR_CONTENT_OPEN_URL :{BLACK}Website STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Bezoek de website voor deze inhoud STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Download STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Start met het downloaden van de geselecteerde inhoud @@ -4566,8 +4573,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(wacht gedurend STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(reis gedurende {STRING}, geen dienstregeling) STR_TIMETABLE_STAY_FOR :en blijf gedurende {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :en rijd {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}dag{P "" en} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tik{P "" ken} STR_TIMETABLE_TOTAL_TIME :{BLACK}Deze dienstregeling duurt {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Deze dienstregeling duurt minstens {STRING} (niet alles ingeroosterd) @@ -4576,10 +4581,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Dit voer STR_TIMETABLE_STATUS_LATE :{BLACK}Dit voertuig heeft {STRING} vertraging STR_TIMETABLE_STATUS_EARLY :{BLACK}Dit voertuig is {STRING} te vroeg STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Deze dienstregeling is nog niet gestart -STR_TIMETABLE_STATUS_START_AT :{BLACK}Deze dienstregeling begint op {STRING} +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Deze dienstregeling begint om {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Deze dienstregeling start over {COMMA} seconden + +STR_TIMETABLE_START :{BLACK}Start dienstregeling +STR_TIMETABLE_START_TOOLTIP :{BLACK}Selecteer wanneer deze dienstregeling start. Ctrl+klik verdeelt de start van alle voertuigen met deze orders op basis van hun relatieve volgorde, mits de order een volledige dienstregeling heeft -STR_TIMETABLE_STARTING_DATE :{BLACK}Startdatum -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecteer een datum als startpunt voor deze dienstregeling. Ctrl+klik verdeelt alle voertuigen die deze orders delen gelijkmatig vanaf deze datum op basis van hun relatieve volgorde, als de order volledig is ingeroosterd +STR_TIMETABLE_START_SECONDS_QUERY :Seconden tot de dienstregeling start STR_TIMETABLE_CHANGE_TIME :{BLACK}Tijd wijzigen STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Verander de tijdsduur die de geselecteerde order mag duren. Met Ctrl+klik stel je de tijd voor alle orders in @@ -4603,8 +4611,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Verwacht STR_TIMETABLE_SCHEDULED :{BLACK}Volgens dienstregeling STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Wissel tussen verwacht en volgens dienstregeling -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :V: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} sec +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :V: {COLOUR}{COMMA} sec # Date window (for timetable) @@ -4707,9 +4717,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Terug in STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Vooruit in de bladergeschiedenis STR_TEXTFILE_WRAP_TEXT :{WHITE}Tekst afbreken STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Tekst aanpassen aan venster zodat je niet hoeft te bladeren -STR_TEXTFILE_VIEW_README :{BLACK}Leesmij-bestand bekijken +STR_TEXTFILE_VIEW_README :{BLACK}Leesmij-bestand +STR_TEXTFILE_VIEW_README_TOOLTIP :Leesmij-bestand bekijken STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Wijzigingen +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Overzicht van wijzigingen bekijken STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licentie +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Licentie bekijken ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} leesmij van {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} wijzigingen van {STRING} diff --git a/src/lang/english.txt b/src/lang/english.txt index 900aed9915..3aa24bce81 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -255,6 +255,10 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m +STR_UNITS_DAYS :{COMMA}{NBSP}day{P "" s} +STR_UNITS_SECONDS :{COMMA}{NBSP}second{P "" s} +STR_UNITS_TICKS :{COMMA}{NBSP}tick{P "" s} + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filter: STR_LIST_FILTER_OSKTITLE :{BLACK}Enter one or more keywords to filter the list for @@ -718,8 +722,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Click on STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Click on music track to remove it from current programme (Custom1 or Custom2 only) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top companies who reached {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Company League Table in {NUM} +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Top companies STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Businessperson STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entrepreneur @@ -1488,7 +1491,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Terrain type: {STRING2} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(TerraGenesis only) Hilliness of the landscape +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Choose the height of hills and mountains of the landscape STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industry density: {STRING2} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Set how many industries should be generated and what level should be maintained during the game @@ -1497,18 +1500,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum distanc STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit for how far from the map border oil refineries and oil rigs can be constructed. On island maps this ensures they are near the coast. On maps larger than 256 tiles, this value is scaled up. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snow line height: {STRING2} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controls at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Choose at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage" STR_CONFIG_SETTING_SNOW_COVERAGE :Snow coverage: {STRING2} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controls the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Land just above sea level is always without snow +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Choose the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Sea level and coast tiles never have snow. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Desert coverage: {STRING2} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Control the approximate amount of desert on the tropical landscape. Desert also affects industry generation. Only used during map generation +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Choose the approximate amount of desert on the tropical landscape. Desert also affects industry generation and town growth requirements. Only used during map generation STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Roughness of terrain: {STRING2} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis only) Choose the frequency of hills: Smooth landscapes have fewer, more wide-spread hills. Rough landscapes have many hills, which may look repetitive +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choose the shape and number of hills. Smooth landscapes have fewer, wider hills, while rough landscapes have more, smaller hills. ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Very Smooth STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Smooth @@ -1516,7 +1519,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Rough STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Very Rough STR_CONFIG_SETTING_VARIETY :Variety distribution: {STRING2} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis only) Control whether the map contains both mountainous and flat areas. Since this only makes the map flatter, other settings should be set to mountainous +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Choose if the map contains both mountains and flat areas. The higher the variety, the more differences in elevation between mountainous and flat areas. STR_CONFIG_SETTING_RIVER_AMOUNT :River amount: {STRING2} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Choose how many rivers to generate @@ -1536,6 +1539,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Drive on left STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Drive on right STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Heightmap rotation: {STRING2} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Choose which way the heightmap image is rotated to fit into the game world ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Counter clockwise STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Clockwise @@ -1656,8 +1660,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Enable usage of STR_CONFIG_SETTING_LOADING_INDICATORS :Use loading indicators: {STRING2} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Select whether loading indicators are displayed above loading or unloading vehicles -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Show timetable in ticks rather than days: {STRING2} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Show travel times in time tables in game ticks instead of days +STR_CONFIG_SETTING_TIMETABLE_MODE :Time units for timetables: {STRING2} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Select the time units used for vehicle timetables +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Days +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Seconds +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Ticks STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Show arrival and departure in timetables: {STRING2} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Display anticipated arrival and departure times in timetables @@ -2346,7 +2354,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibility +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibility: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Whether other people can see your server in the public listing STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximum number of clients: @@ -2581,7 +2589,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Search c STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}You are leaving OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}The terms and conditions for downloading content from external websites vary.{}You will have to refer to the external sites for instructions how to install the content into OpenTTD.{}Do you want to continue? STR_CONTENT_FILTER_TITLE :{BLACK}Tag/name filter: -STR_CONTENT_OPEN_URL :{BLACK}Visit website +STR_CONTENT_OPEN_URL :{BLACK}Website STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visit the website for this content STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Download STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Start downloading the selected content @@ -3201,11 +3209,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Map size STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Select the size of the map in tiles. The number of available tiles will be slightly smaller STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}No. of towns: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Select the density of towns, or a custom number STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Town names: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Select style of town names STR_MAPGEN_DATE :{BLACK}Date: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Select starting date STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}No. of industries: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Select the density of industries, or a custom number STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Highest peak: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Choose the highest peak that the game will attempt to create, measured in elevation above sea level STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Increase the maximum height of highest peak on the map by one STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Decrease the maximum height of highest peak on the map by one STR_MAPGEN_SNOW_COVERAGE :{BLACK}Snow coverage: @@ -3218,10 +3230,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Decrease STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terrain type: STR_MAPGEN_SEA_LEVEL :{BLACK}Sea level: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Select the sea level STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rivers: STR_MAPGEN_SMOOTHNESS :{BLACK}Smoothness: STR_MAPGEN_VARIETY :{BLACK}Variety distribution: STR_MAPGEN_GENERATE :{WHITE}Generate +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Create the world and play OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF Settings STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Display NewGRF settings STR_MAPGEN_AI_SETTINGS :{BLACK}AI Settings @@ -3254,6 +3268,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalan # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Map edges: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Choose the borders of the game world STR_MAPGEN_NORTHWEST :{BLACK}Northwest STR_MAPGEN_NORTHEAST :{BLACK}Northeast STR_MAPGEN_SOUTHEAST :{BLACK}Southeast @@ -3266,7 +3281,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Heightmap rotation: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Heightmap name: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}The name of the heightmap image file STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Size: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}The size of the source heightmap image. For best results, each edge should match an available map edge length in OpenTTD, such as 256, 512, 1024, etc. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Target peak height @@ -3281,6 +3298,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Flat lan STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generate a flat land STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Random land STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Height of flat land: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Choose the height of the land above sea level STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Move the height of flat land one down STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Move the height of flat land one up @@ -4566,8 +4584,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(stay for {STRI STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(travel for {STRING1}, not timetabled) STR_TIMETABLE_STAY_FOR :and stay for {STRING1} STR_TIMETABLE_AND_TRAVEL_FOR :and travel for {STRING1} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}day{P "" s} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick{P "" s} STR_TIMETABLE_TOTAL_TIME :{BLACK}This timetable will take {STRING1} to complete STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}This timetable will take at least {STRING1} to complete (not all timetabled) @@ -4576,10 +4592,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}This veh STR_TIMETABLE_STATUS_LATE :{BLACK}This vehicle is currently running {STRING1} late STR_TIMETABLE_STATUS_EARLY :{BLACK}This vehicle is currently running {STRING1} early STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}This timetable has not yet started -STR_TIMETABLE_STATUS_START_AT :{BLACK}This timetable will start at {STRING1} +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}This timetable will start at {STRING1} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}This timetable will start in {COMMA} seconds + +STR_TIMETABLE_START :{BLACK}Start Timetable +STR_TIMETABLE_START_TOOLTIP :{BLACK}Select when this timetable starts. Ctrl+Click evenly distributes the start of all vehicles sharing this order based on their relative order, if the order is completely timetabled -STR_TIMETABLE_STARTING_DATE :{BLACK}Start date -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Select a date as starting point of this timetable. Ctrl+Click distributes all vehicles sharing this order evenly from the given date based on their relative order, if the order is completely timetabled +STR_TIMETABLE_START_SECONDS_QUERY :Seconds until timetable starts STR_TIMETABLE_CHANGE_TIME :{BLACK}Change Time STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take. Ctrl+Click sets the time for all orders @@ -4603,8 +4622,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Expected STR_TIMETABLE_SCHEDULED :{BLACK}Scheduled STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Switch between expected and scheduled -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} sec +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} sec # Date window (for timetable) @@ -4632,9 +4653,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Match ca STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Toggle matching case when comparing AI log messages against the break string STR_AI_DEBUG_CONTINUE :{BLACK}Continue STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Unpause and continue the AI -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}View debug output of this AI +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}View debug output of this AI. Ctrl-Click to open in a new window STR_AI_GAME_SCRIPT :{BLACK}Game Script -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Check the Game Script log +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Check the Game Script log. Ctrl-Click to open in a new window STR_ERROR_AI_NO_AI_FOUND :No suitable AI found to load.{}This AI is a dummy AI and won't do anything.{}You can download several AIs via the 'Online Content' system STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}One of the running scripts crashed. Please report this to the script author with a screenshot of the AI/Game Script Debug Window @@ -4707,9 +4728,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Go back STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Return forward in navigation history STR_TEXTFILE_WRAP_TEXT :{WHITE}Wrap text STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Wrap the text of the window so it all fits without having to scroll -STR_TEXTFILE_VIEW_README :{BLACK}View readme +STR_TEXTFILE_VIEW_README :{BLACK}Readme +STR_TEXTFILE_VIEW_README_TOOLTIP :View readme for this content STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Changelog +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :View changelog for this content STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licence +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :View licence for this content ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} readme of {RAW_STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} changelog of {RAW_STRING} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index a00ba4f135..a5f3bd9d8c 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -255,6 +255,10 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m +STR_UNITS_DAYS :{COMMA}{NBSP}day{P "" s} +STR_UNITS_SECONDS :{COMMA}{NBSP}second{P "" s} +STR_UNITS_TICKS :{COMMA}{NBSP}tick{P "" s} + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filter: STR_LIST_FILTER_OSKTITLE :{BLACK}Enter one or more keywords to filter the list for @@ -718,8 +722,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Click on STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Click on music track to remove it from current programme (Custom1 or Custom2 only) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top companies who reached {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Company League Table in {NUM} +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Top companies STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Businessperson STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entrepreneur @@ -1488,7 +1491,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Terrain type: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(TerraGenesis only) Hilliness of the landscape +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Choose the height of hills and mountains of the landscape STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industry density: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Set how many industries should be generated and what level should be maintained during the game @@ -1497,18 +1500,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum distanc STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Oil refineries are only constructed near the map border, that is at the coast for island maps STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snow line height: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controls at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Choose at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage" STR_CONFIG_SETTING_SNOW_COVERAGE :Snow coverage: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controls the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Land just above sea level is always without snow +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Choose the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Sea level and coast tiles never have snow. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Desert coverage: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Control the approximate amount of desert on the tropical landscape. Desert also affects industry generation. Only used during map generation +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Choose the approximate amount of desert on the tropical landscape. Desert also affects industry generation and town growth requirements. Only used during map generation STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Roughness of terrain: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis only) Choose the frequency of hills: Smooth landscapes have fewer, more wide-spread hills. Rough landscapes have many hills, which may look repetitive +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choose the shape and number of hills. Smooth landscapes have fewer, wider hills, while rough landscapes have more, smaller hills. ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Very Smooth STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Smooth @@ -1516,7 +1519,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Rough STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Very Rough STR_CONFIG_SETTING_VARIETY :Variety distribution: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis only) Control whether the map contains both mountainous and flat areas. Since this only makes the map flatter, other settings should be set to mountainous +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Choose if the map contains both mountains and flat areas. The higher the variety, the more differences in elevation between mountainous and flat areas. STR_CONFIG_SETTING_RIVER_AMOUNT :River amount: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Choose how many rivers to generate @@ -1536,6 +1539,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Drive on left STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Drive on right STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Heightmap rotation: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Choose which way the heightmap image is rotated to fit into the game world ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Counter clockwise STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Clockwise @@ -1656,8 +1660,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Enable usage of STR_CONFIG_SETTING_LOADING_INDICATORS :Use loading indicators: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Select whether loading indicators are displayed above loading or unloading vehicles -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Show timetable in ticks rather than days: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Show travel times in time tables in game ticks instead of days +STR_CONFIG_SETTING_TIMETABLE_MODE :Time units for timetables: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Select the time units used for vehicle timetables +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Days +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Seconds +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Ticks STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Show arrival and departure in timetables: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Display anticipated arrival and departure times in timetables @@ -2346,7 +2354,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibility +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibility: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Whether other people can see your server in the public listing STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximum number of clients: @@ -2581,7 +2589,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Search c STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}You are leaving OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}The terms and conditions for downloading content from external websites vary.{}You will have to refer to the external sites for instructions how to install the content into OpenTTD.{}Do you want to continue? STR_CONTENT_FILTER_TITLE :{BLACK}Tag/name filter: -STR_CONTENT_OPEN_URL :{BLACK}Visit website +STR_CONTENT_OPEN_URL :{BLACK}Website STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visit the website for this content STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Download STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Start downloading the selected content @@ -3201,11 +3209,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Map size STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Select the size of the map in tiles. The number of available tiles will be slightly smaller STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}No. of towns: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Select the density of towns, or a custom number STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Town names: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Select style of town names STR_MAPGEN_DATE :{BLACK}Date: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Select starting date STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}No. of industries: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Select the density of industries, or a custom number STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Highest peak: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Choose the highest peak that the game will attempt to create, measured in elevation above sea level STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Increase the maximum height of highest peak on the map by one STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Decrease the maximum height of highest peak on the map by one STR_MAPGEN_SNOW_COVERAGE :{BLACK}Snow coverage: @@ -3218,10 +3230,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Decrease STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terrain type: STR_MAPGEN_SEA_LEVEL :{BLACK}Sea level: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Select the sea level STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rivers: STR_MAPGEN_SMOOTHNESS :{BLACK}Smoothness: STR_MAPGEN_VARIETY :{BLACK}Variety distribution: STR_MAPGEN_GENERATE :{WHITE}Generate +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Create the world and play OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF Settings STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Display NewGRF settings STR_MAPGEN_AI_SETTINGS :{BLACK}AI Settings @@ -3254,6 +3268,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalan # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Map edges: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Choose the borders of the game world STR_MAPGEN_NORTHWEST :{BLACK}Northwest STR_MAPGEN_NORTHEAST :{BLACK}Northeast STR_MAPGEN_SOUTHEAST :{BLACK}Southeast @@ -3266,7 +3281,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Heightmap rotation: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Heightmap name: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}The name of the heightmap image file STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Size: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}The size of the source heightmap image. For best results, each edge should match an available map edge length in OpenTTD, such as 256, 512, 1024, etc. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Target peak height @@ -3281,6 +3298,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Flat lan STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generate a flat land STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Random land STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Height of flat land: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Choose the height of the land above sea level STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Move the height of flat land one down STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Move the height of flat land one up @@ -4566,8 +4584,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(stay for {STRI STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(travel for {STRING}, not timetabled) STR_TIMETABLE_STAY_FOR :and stay for {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :and travel for {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}day{P "" s} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick{P "" s} STR_TIMETABLE_TOTAL_TIME :{BLACK}This timetable will take {STRING} to complete STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}This timetable will take at least {STRING} to complete (not all timetabled) @@ -4576,10 +4592,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}This veh STR_TIMETABLE_STATUS_LATE :{BLACK}This vehicle is currently running {STRING} late STR_TIMETABLE_STATUS_EARLY :{BLACK}This vehicle is currently running {STRING} early STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}This timetable has not yet started -STR_TIMETABLE_STATUS_START_AT :{BLACK}This timetable will start at {STRING} +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}This timetable will start at {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}This timetable will start in {COMMA} seconds + +STR_TIMETABLE_START :{BLACK}Start Timetable +STR_TIMETABLE_START_TOOLTIP :{BLACK}Select when this timetable starts. Ctrl+Click evenly distributes the start of all vehicles sharing this order based on their relative order, if the order is completely timetabled -STR_TIMETABLE_STARTING_DATE :{BLACK}Start date -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Select a date as starting point of this timetable. Ctrl+Click distributes all vehicles sharing this order evenly from the given date based on their relative order, if the order is completely timetabled +STR_TIMETABLE_START_SECONDS_QUERY :Seconds until timetable starts STR_TIMETABLE_CHANGE_TIME :{BLACK}Change Time STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take. Ctrl+Click sets the time for all orders @@ -4603,8 +4622,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Expected STR_TIMETABLE_SCHEDULED :{BLACK}Scheduled STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Switch between expected and scheduled -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} sec +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} sec # Date window (for timetable) @@ -4707,9 +4728,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Go back STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Return forward in navigation history STR_TEXTFILE_WRAP_TEXT :{WHITE}Wrap text STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Wrap the text of the window so it all fits without having to scroll -STR_TEXTFILE_VIEW_README :{BLACK}View readme +STR_TEXTFILE_VIEW_README :{BLACK}Readme +STR_TEXTFILE_VIEW_README_TOOLTIP :View readme for this content STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Changelog +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :View changelog for this content STR_TEXTFILE_VIEW_LICENCE :{BLACK}License +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :View licence for this content ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} readme of {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} changelog of {STRING} diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 315e851f3b..4f34c40b26 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -255,6 +255,10 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m +STR_UNITS_DAYS :{COMMA}{NBSP}day{P "" s} +STR_UNITS_SECONDS :{COMMA}{NBSP}second{P "" s} +STR_UNITS_TICKS :{COMMA}{NBSP}tick{P "" s} + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filter: STR_LIST_FILTER_OSKTITLE :{BLACK}Enter one or more keywords to filter the list for @@ -718,8 +722,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Click on STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Click on music track to remove it from current program (Custom1 or Custom2 only) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top companies who reached {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Company League Table in {NUM} +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Top companies STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Businessperson STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entrepreneur @@ -1488,7 +1491,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Terrain type: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(TerraGenesis only) Hilliness of the landscape +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Choose the height of hills and mountains of the landscape STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industry density: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Set how many industries should be generated and what level should be maintained during the game @@ -1497,18 +1500,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum distanc STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limit for how far from the map border oil refineries and oil rigs can be constructed. On island maps this ensures they are near the coast. On maps larger than 256 tiles, this value is scaled up. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snow line height: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controls at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Choose at what height snow starts in sub-arctic landscape. Snow also affects industry generation and town growth requirements. Can only be modified via Scenario Editor or is otherwise calculated via "snow coverage" STR_CONFIG_SETTING_SNOW_COVERAGE :Snow coverage: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controls the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Land just above sea level is always without snow +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Choose the approximate amount of snow on the sub-arctic landscape. Snow also affects industry generation and town growth requirements. Only used during map generation. Sea level and coast tiles never have snow. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Desert coverage: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Control the approximate amount of desert on the tropical landscape. Desert also affects industry generation. Only used during map generation +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Choose the approximate amount of desert on the tropical landscape. Desert also affects industry generation and town growth requirements. Only used during map generation STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Roughness of terrain: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis only) Choose the frequency of hills: Smooth landscapes have fewer, more wide-spread hills. Rough landscapes have many hills, which may look repetitive +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choose the shape and number of hills. Smooth landscapes have fewer, wider hills, while rough landscapes have more, smaller hills. ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Very Smooth STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Smooth @@ -1516,7 +1519,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Rough STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Very Rough STR_CONFIG_SETTING_VARIETY :Variety distribution: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis only) Control whether the map contains both mountainous and flat areas. Since this only makes the map flatter, other settings should be set to mountainous +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Choose if the map contains both mountains and flat areas. The higher the variety, the more differences in elevation between mountainous and flat areas. STR_CONFIG_SETTING_RIVER_AMOUNT :River amount: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Choose how many rivers to generate @@ -1536,6 +1539,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Drive on left STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Drive on right STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Heightmap rotation: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Choose which way the heightmap image is rotated to fit into the game world ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Counter-clockwise STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Clockwise @@ -1656,8 +1660,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Enable usage of STR_CONFIG_SETTING_LOADING_INDICATORS :Use loading indicators: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Select whether loading indicators are displayed above loading or unloading vehicles -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Show timetable in ticks rather than days: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Show travel times in time tables in game ticks instead of days +STR_CONFIG_SETTING_TIMETABLE_MODE :Time units for timetables: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Select the time units used for vehicle timetables +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Days +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Seconds +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Ticks STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Show arrival and departure in timetables: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Display anticipated arrival and departure times in timetables @@ -2346,7 +2354,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibility +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibility: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Whether other people can see your server in the public listing STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximum number of clients: @@ -2581,7 +2589,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Search c STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}You are leaving OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}The terms and conditions for downloading content from external websites vary.{}You will have to refer to the external sites for instructions how to install the content into OpenTTD.{}Do you want to continue? STR_CONTENT_FILTER_TITLE :{BLACK}Tag/name filter: -STR_CONTENT_OPEN_URL :{BLACK}Visit website +STR_CONTENT_OPEN_URL :{BLACK}Website STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visit the website for this content STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Download STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Start downloading the selected content @@ -3201,11 +3209,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Map size STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Select the size of the map in tiles. The number of available tiles will be slightly smaller STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}No. of towns: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Select the density of towns, or a custom number STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Town names: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Select style of town names STR_MAPGEN_DATE :{BLACK}Date: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Select starting date STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}No. of industries: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Select the density of industries, or a custom number STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Highest peak: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Choose the highest peak that the game will attempt to create, measured in elevation above sea level STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Increase the maximum height of highest peak on the map by one STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Decrease the maximum height of highest peak on the map by one STR_MAPGEN_SNOW_COVERAGE :{BLACK}Snow coverage: @@ -3218,10 +3230,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Decrease STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terrain type: STR_MAPGEN_SEA_LEVEL :{BLACK}Sea level: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Select the sea level STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rivers: STR_MAPGEN_SMOOTHNESS :{BLACK}Smoothness: STR_MAPGEN_VARIETY :{BLACK}Variety distribution: STR_MAPGEN_GENERATE :{WHITE}Generate +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Create the world and play OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF Settings STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Display NewGRF settings STR_MAPGEN_AI_SETTINGS :{BLACK}AI Settings @@ -3254,6 +3268,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalan # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Map edges: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Choose the borders of the game world STR_MAPGEN_NORTHWEST :{BLACK}Northwest STR_MAPGEN_NORTHEAST :{BLACK}Northeast STR_MAPGEN_SOUTHEAST :{BLACK}Southeast @@ -3266,7 +3281,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Heightmap rotation: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Heightmap name: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}The name of the heightmap image file STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Size: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}The size of the source heightmap image. For best results, each edge should match an available map edge length in OpenTTD, such as 256, 512, 1024, etc. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Target peak height @@ -3281,6 +3298,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Flat lan STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generate a flat land STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Random land STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Height of flat land: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Choose the height of the land above sea level STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Move the height of flat land down one STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Move the height of flat land up one @@ -4566,8 +4584,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(stay for {STRI STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(travel for {STRING}, not timetabled) STR_TIMETABLE_STAY_FOR :and stay for {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :and travel for {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}day{P "" s} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick{P "" s} STR_TIMETABLE_TOTAL_TIME :{BLACK}This timetable will take {STRING} to complete STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}This timetable will take at least {STRING} to complete (not all timetabled) @@ -4576,10 +4592,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}This veh STR_TIMETABLE_STATUS_LATE :{BLACK}This vehicle is currently running {STRING} late STR_TIMETABLE_STATUS_EARLY :{BLACK}This vehicle is currently running {STRING} early STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}This timetable has not yet started -STR_TIMETABLE_STATUS_START_AT :{BLACK}This timetable will start at {STRING} +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}This timetable will start at {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}This timetable will start in {COMMA} seconds + +STR_TIMETABLE_START :{BLACK}Start Timetable +STR_TIMETABLE_START_TOOLTIP :{BLACK}Select when this timetable starts. Ctrl+Click evenly distributes the start of all vehicles sharing this order based on their relative order, if the order is completely timetabled -STR_TIMETABLE_STARTING_DATE :{BLACK}Start Date -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Select a date as starting point of this timetable. Ctrl+Click distributes all vehicles sharing this order evenly from the given date based on their relative order, if the order is completely timetabled +STR_TIMETABLE_START_SECONDS_QUERY :Seconds until timetable starts STR_TIMETABLE_CHANGE_TIME :{BLACK}Change Time STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take. Ctrl+Click sets the time for all orders @@ -4603,8 +4622,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Expected STR_TIMETABLE_SCHEDULED :{BLACK}Scheduled STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Switch between expected and scheduled -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} sec +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} sec # Date window (for timetable) @@ -4707,9 +4728,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Go back STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Return forward in navigation history STR_TEXTFILE_WRAP_TEXT :{WHITE}Wrap text STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Wrap the text of the window so it all fits without having to scroll -STR_TEXTFILE_VIEW_README :{BLACK}View readme +STR_TEXTFILE_VIEW_README :{BLACK}Readme +STR_TEXTFILE_VIEW_README_TOOLTIP :View readme for this content STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Changelog +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :View changelog for this content STR_TEXTFILE_VIEW_LICENCE :{BLACK}License +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :View license for this content ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} readme of {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} changelog of {STRING} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 44e658c324..8ecbd2b36f 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -321,6 +321,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtroteksto: STR_LIST_FILTER_OSKTITLE :{BLACK}Entajpu filtrotekston. @@ -778,8 +779,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Alklaku STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Alklaku muzikeron por viŝi el la nuna programo (nur propra) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Superkompanioj kiuj atingis {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Kompania tabelo en {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Komercisto STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entreprenisto @@ -1677,7 +1676,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ebligu uzadon d STR_CONFIG_SETTING_LOADING_INDICATORS :Uzu ŝarg-indikilojn: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Elektu ĉu ŝarĝ-indikiloj estas montrataj sub ŝarĝataj aŭ malŝarĝataj veturiloj -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Montru horaron laŭ tikoj anstataŭ laŭ tagoj: {STRING} +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Montru alvenojn kaj forirojn sur horaroj: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Montru antaŭvidatajn alven- kaj forir-tempojn en horaroj @@ -4471,9 +4470,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(haltu dum {STR STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(veturos dum {STRING}, sen horaro) STR_TIMETABLE_STAY_FOR :kaj restu dum {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :kaj veturu dum {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}tago{P "" j} -STR_TIMETABLE_DAYS.n :{COMMA}{NBSP}tago{P "" j}n -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tiko{P "" j} STR_TIMETABLE_TOTAL_TIME :{BLACK}Plenumi ĉi tiun horaron postulos {STRING.n} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Ĉi tio horaro postulos alemnaŭ {STRING} plenigi (ne ĉiu horarita) @@ -4482,9 +4478,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Ĉi tiu STR_TIMETABLE_STATUS_LATE :{BLACK}Ĉi tiu veturilo nun malfruas je {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Ĉi tiu veturilo nun fruas je {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Ĉi tiu horaro ankoraŭ ne komenciĝas. -STR_TIMETABLE_STATUS_START_AT :{BLACK}Ĉi tiu horaro komenciĝos je {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Komencodato + STR_TIMETABLE_CHANGE_TIME :{BLACK}Ŝanĝu tempon STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ŝanĝu kiom da tempo devus postuli la markita ordono. Stir+Klak ŝanĝas la tempon por ĉiuj ordonoj @@ -4508,8 +4503,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Atendite STR_TIMETABLE_SCHEDULED :{BLACK}Planite STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Ŝalti inter atendite kaj planite -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :E: {COLOUR}{DATE_TINY} # Date window (for timetable) diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index e68b1144b4..ebc583b3ea 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -294,6 +294,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} meete STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Märksõna: STR_LIST_FILTER_OSKTITLE :{BLACK}Sisesta üks või enam märksõna mille järgi nimekirja filtreerida @@ -755,8 +756,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Vajuta l STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Vajuta laulule, et see eemaldada praegusest progammist (Custom1 või Custom2 ainult) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Parimad ettevõtted aastal {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Ettevõtete edetabelis {NUM} kohal STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Äriinimene STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Ettevõtja @@ -1654,8 +1653,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Laseb kasutada STR_CONFIG_SETTING_LOADING_INDICATORS :Kasuta laadimisnäidikuid: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Vali, kas koorma laadimisel ja tühjendamisel näidatakse laadimisnäidikuid -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Graafik on sammudes, mitte päevades: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Graafikus on ajad märgitud mitte päevades, vaid sammudes +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Graafikus on saabumis- ja väljumisajad: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Sõiduki graafikus esitatakse eeldatavaid saabumis- ja väljumisaegu @@ -4524,8 +4522,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(Oode {STRING}, STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :({STRING} sõidukestus, ajastamata) STR_TIMETABLE_STAY_FOR :ja oota {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :ja sõida {STRING} jaoks -STR_TIMETABLE_DAYS :{COMMA} päev{P "" a} -STR_TIMETABLE_TICKS :{COMMA} samm{P "" u} STR_TIMETABLE_TOTAL_TIME :{BLACK}Selle graafiku läbimine võtab {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Selle graafiku läbimine võtab vähemalt {STRING} (kõik ei ole planeeritud) @@ -4534,10 +4530,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Sõiduk STR_TIMETABLE_STATUS_LATE :{BLACK}See sõiduk on {STRING} hiljaks jäämas STR_TIMETABLE_STATUS_EARLY :{BLACK}See sõiduk on {STRING} varajane STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Graafikuga pole veel alustatud -STR_TIMETABLE_STATUS_START_AT :{BLACK}Graafikuga alustatakse {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Alguskuupäev -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vali graafiku alguskuupäev. Ctrl-klõps määrab graafiku alguskuupäeva ja jaotab sõidukid ühtlaselt, kasutades järjestust, kui sihid on planeeritud + STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuda aega STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuda märgitud korraldusele määratud aega. Ctrl+klõps seab aja kõigile korraldustele diff --git a/src/lang/extra/afrikaans.txt b/src/lang/extra/afrikaans.txt index d8a9938af9..01bb7caca6 100644 --- a/src/lang/extra/afrikaans.txt +++ b/src/lang/extra/afrikaans.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Vliegtuie STR_CONFIG_SETTING_AUTOSAVE :Outostoor: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Tyd tussen outomatiese spelstore +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Vertoon rooster in "ticks" liewer as dae: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Wys die rystye in tydroosters in speletjie "ticks" inplaas van dae + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Wissel deursigtigheid vir laai aanwysers. Ctrl+klik om te sluit # Tracerestrict GUI diff --git a/src/lang/extra/arabic_egypt.txt b/src/lang/extra/arabic_egypt.txt index 9415c17958..eb75f2d919 100644 --- a/src/lang/extra/arabic_egypt.txt +++ b/src/lang/extra/arabic_egypt.txt @@ -13,6 +13,8 @@ STR_VEHICLE_TYPE_AIRCRAFT :طائرات STR_CONFIG_SETTING_AUTOSAVE :حفظ تلقائي : {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :اختر الوقت بين كل عملية حفظ اتوماتيكية +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :عرض جدولة الأعمال بالمهام بدلا من الأيام: {STRING} + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}غير الشفافية لنسبة التحميل. مفتاح كنترول للاغلاق. # Tracerestrict GUI diff --git a/src/lang/extra/basque.txt b/src/lang/extra/basque.txt index 79c9ca7573..9ae394b309 100644 --- a/src/lang/extra/basque.txt +++ b/src/lang/extra/basque.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Hegazkinak STR_CONFIG_SETTING_AUTOSAVE :Auto-gordea: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Partida gordetze automatikoaren bitartea aukeratu +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Ordutegiak tick-etan erakutsi egunetan erakutsi ordez: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Erakutsi denbora tauletako denbora jokoaren uniteetan egunak erabili ordez + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Zama adierazleen gardentasuna aldatu. Ktrl+Klik blokeatzeko # Tracerestrict GUI diff --git a/src/lang/extra/belarusian.txt b/src/lang/extra/belarusian.txt index f60095c41b..c0f016fb8c 100644 --- a/src/lang/extra/belarusian.txt +++ b/src/lang/extra/belarusian.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Авіятра STR_CONFIG_SETTING_AUTOSAVE :Аўтазахаваньні: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Азначце інтэрвал паміж аўтаматычнымі захаваньнямі +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Паказваць расклад ў «ціках» замест дзён: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Паказваць у раскладзе час падарожжа ў гульнёвых "ціках" замест дзён. + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Пераключыць празрыстасьць для індыкатараў загрузкі. Ctrl+клік — заблякаваць. # Tracerestrict GUI diff --git a/src/lang/extra/brazilian_portuguese.txt b/src/lang/extra/brazilian_portuguese.txt index b7b9ebe932..5f70c50c96 100644 --- a/src/lang/extra/brazilian_portuguese.txt +++ b/src/lang/extra/brazilian_portuguese.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Aeronaves STR_CONFIG_SETTING_AUTOSAVE :Auto-salvar: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Selecione intervalo entre jogos salvos automaticamente +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Exibir plano de horário em tiques ao invés de dias: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostra tempos de viagem, nos planos de horário, em tiques, ao invés de dias. Um tique equivale a 1/74 dia, ou 1/30 segundo. + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Altera transparência para os indicadores de carga. Ctrl+Clique para travar # Tracerestrict GUI diff --git a/src/lang/extra/bulgarian.txt b/src/lang/extra/bulgarian.txt index d998fcb276..b87e22936a 100644 --- a/src/lang/extra/bulgarian.txt +++ b/src/lang/extra/bulgarian.txt @@ -8,6 +8,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Самолет STR_CONFIG_SETTING_AUTOSAVE :Автоматично запазване: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Изберете интервал между автоматично запаметяване на играта +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Разписанието в цикли вместо дни: {STRING.n} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Показва времената за придвижване в таблиците в игрови единици, вместо в дни + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Вклучи прозрачност за товарещи указатели. Ctrl+Click за заключване # Tracerestrict GUI diff --git a/src/lang/extra/catalan.txt b/src/lang/extra/catalan.txt index 7722d71934..f3c04bbe5a 100644 --- a/src/lang/extra/catalan.txt +++ b/src/lang/extra/catalan.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Avions STR_CONFIG_SETTING_AUTOSAVE :Desada automàtica: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Selecciona l'interval entre desades automàtiques de les partides. +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostra horaris amb marques en lloc de dies: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostra els temps de viatge als horaris en marques en lloc de dies + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Commuta la transparència dels indicadors de càrrega. Ctrl+Clic per bloquejar STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Temps de viatge mitjà: {STRING} diff --git a/src/lang/extra/croatian.txt b/src/lang/extra/croatian.txt index 57e409c18e..dae0222f88 100644 --- a/src/lang/extra/croatian.txt +++ b/src/lang/extra/croatian.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Zrakoplov STR_CONFIG_SETTING_AUTOSAVE :Automatsko snimanje: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Odaberite interval između automatskog snimanja igre +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Pokaži vozni red u otkucajima rađe nego u danima: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Prikaži trajanje putovanja u voznim redovima u otkucajima igre umjesto u danima + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Namjesti prozirnost za indikatore učitavanja. Ctrl+klik za zaključavanje # Tracerestrict GUI diff --git a/src/lang/extra/czech.txt b/src/lang/extra/czech.txt index bf661fa6a4..08f7cf440a 100644 --- a/src/lang/extra/czech.txt +++ b/src/lang/extra/czech.txt @@ -680,6 +680,9 @@ STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_ANYWHERE :všude STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED :{WHITE}Nelze změnit nastavení... STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED_NEWGRF :{WHITE}...nastavení je sledováno souborem NewGRF +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Zobrazit jízdní řády v cyklech místo ve dnech: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Ukazuje cestovní časy v jízdních řádech + STR_CHEAT_EDIT_MONEY_QUERY_CAPT :{WHITE}Přidat nebo odebrat peníze STR_CHEAT_INFLATION_COST :{LTBLUE}Změnit faktor inflace nákladů: {ORANGE}{DECIMAL} STR_CHEAT_INFLATION_COST_QUERY_CAPT :{WHITE}Změnit faktor inflace nákladů diff --git a/src/lang/extra/danish.txt b/src/lang/extra/danish.txt index 5ab94ec7ad..b0da247b6a 100644 --- a/src/lang/extra/danish.txt +++ b/src/lang/extra/danish.txt @@ -14,6 +14,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Fly STR_CONFIG_SETTING_AUTOSAVE :Auto gem: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Vælg interval mellem automatisk gemte spil +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Vis køreplan i tik i stedet for dage: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Vis rejsetider i køreplaner i spil ticks i stedet for dage + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Slå gennemsigtighed til/fra for laste-indikatorer. CTRL+Klik for at låse værdi. # Tracerestrict GUI diff --git a/src/lang/extra/dutch.txt b/src/lang/extra/dutch.txt index c5a6667e87..0e8bb0b69f 100644 --- a/src/lang/extra/dutch.txt +++ b/src/lang/extra/dutch.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Vliegtuigen STR_CONFIG_SETTING_AUTOSAVE :Automatisch opslaan: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Tijdsduur kiezen voor automatische spelopslag +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Dienstregeling in tikken weergeven i.p.v. in dagen: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Reistijden in tijdtabellen in speltikken weergeven in plaats van dagen + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Transparantie voor laadpercentages aan-uit. Ctrl+klik om vast te zetten. STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Gemiddelde reistijd: {STRING} diff --git a/src/lang/extra/english.txt b/src/lang/extra/english.txt index c9ab72294e..9ddf11dbc6 100644 --- a/src/lang/extra/english.txt +++ b/src/lang/extra/english.txt @@ -759,6 +759,9 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_SKIP_STATIONS_HELPTEXT :Select the beha STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED :{WHITE}Can't change setting... STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED_NEWGRF :{WHITE}...setting is observed by a NewGRF +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Show timetable in ticks rather than days: {STRING2} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Show travel times in time tables in game ticks instead of days + STR_CHEAT_EDIT_MONEY_QUERY_CAPT :{WHITE}Increase or decrease money STR_CHEAT_INFLATION_COST :{LTBLUE}Change inflation cost factor: {ORANGE}{DECIMAL} STR_CHEAT_INFLATION_COST_QUERY_CAPT :{WHITE}Change inflation cost factor diff --git a/src/lang/extra/english_AU.txt b/src/lang/extra/english_AU.txt index 35a2952a0b..253ebd4743 100644 --- a/src/lang/extra/english_AU.txt +++ b/src/lang/extra/english_AU.txt @@ -37,6 +37,9 @@ STR_CONFIG_SETTING_CITY_ZONE_3_MULT_HELPTEXT :Multiplier for STR_CONFIG_SETTING_CITY_ZONE_4_MULT :Multiplier for City Zone 4: {STRING} STR_CONFIG_SETTING_CITY_ZONE_4_MULT_HELPTEXT :Multiplier for the size of City Zone 4 (Innermost roads with street lights). This setting works best with minor alterations. +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Show timetable in ticks rather than days: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Show travel times in time tables in game ticks instead of days + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Toggle transparency for loading indicators. Ctrl+Click to lock STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Average travel time: {STRING} diff --git a/src/lang/extra/english_US.txt b/src/lang/extra/english_US.txt index c94af0230c..c89399e6e7 100644 --- a/src/lang/extra/english_US.txt +++ b/src/lang/extra/english_US.txt @@ -39,6 +39,9 @@ STR_CONFIG_SETTING_CITY_ZONE_3_MULT_HELPTEXT :Multiplier for STR_CONFIG_SETTING_CITY_ZONE_4_MULT :Multiplier for City Zone 4: {STRING} STR_CONFIG_SETTING_CITY_ZONE_4_MULT_HELPTEXT :Multiplier for the size of City Zone 4 (Innermost roads with street lights). This setting works best with minor alterations. +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Show timetable in ticks rather than days: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Show travel times in time tables in game ticks instead of days + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Toggle transparency for loading indicators. Ctrl+Click to lock STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Average travel time: {STRING} diff --git a/src/lang/extra/esperanto.txt b/src/lang/extra/esperanto.txt index a381651fb5..acbbf3b5d7 100644 --- a/src/lang/extra/esperanto.txt +++ b/src/lang/extra/esperanto.txt @@ -12,6 +12,8 @@ STR_VEHICLE_TYPE_AIRCRAFT :Aviadiloj STR_CONFIG_SETTING_AUTOSAVE :Aŭtomata konservado: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Elektu intervalon inter aŭtomataj konservadoj de la ludo +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Montru horaron laŭ tikoj anstataŭ laŭ tagoj: {STRING} + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Baskuligi travideblecon de ŝarĝindikiloj. Ctrl+Klaku por ŝlosi # Tracerestrict GUI diff --git a/src/lang/extra/estonian.txt b/src/lang/extra/estonian.txt index e0a38f4147..a9b8338e70 100644 --- a/src/lang/extra/estonian.txt +++ b/src/lang/extra/estonian.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Õhusõidukid STR_CONFIG_SETTING_AUTOSAVE :Salvestusväłp: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Vali välpsalvestuste vaheline ajavahemik +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Graafik on sammudes, mitte päevades: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Graafikus on ajad märgitud mitte päevades, vaid sammudes + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Vaheta laadimisnäidikute läbipaistvust. Ctrl+klõps lukustab # Tracerestrict GUI diff --git a/src/lang/extra/faroese.txt b/src/lang/extra/faroese.txt index d026c48ad5..4325238794 100644 --- a/src/lang/extra/faroese.txt +++ b/src/lang/extra/faroese.txt @@ -9,6 +9,9 @@ STR_VEHICLE_TYPE_ROAD_VEHICLES :Akfør STR_VEHICLE_TYPE_SHIPS :Skip STR_VEHICLE_TYPE_AIRCRAFT :Flogfør +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Vís tíðarætlan í klikkum heldur enn døgum: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Vís koyri tíðir í tíðarætlanum við 'spæli klikkum' í staðin fyri við døgum + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Tendra/sløkk gjøgnumskygni fyri lessingar vísarar. Ctrl+trýst fyri at læsa # Tracerestrict GUI diff --git a/src/lang/extra/finnish.txt b/src/lang/extra/finnish.txt index c87e79dc8e..b8dd21440f 100644 --- a/src/lang/extra/finnish.txt +++ b/src/lang/extra/finnish.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Ilma-alukset STR_CONFIG_SETTING_AUTOSAVE :Automaattitallennus: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Valitse aikaväli automaattisille pelitallennuksille +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Näytä aikataulu askelina päivien sijaan: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Näytä aikataulun ajat päivien sijasta askelina + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Muuta lastausilmaisimien läpinäkyvyyttä. Ctrl+napsautus lukitsee. # Tracerestrict GUI diff --git a/src/lang/extra/french.txt b/src/lang/extra/french.txt index 4897f23ff7..5818fa8826 100644 --- a/src/lang/extra/french.txt +++ b/src/lang/extra/french.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Aéronefs STR_CONFIG_SETTING_AUTOSAVE :Sauvegarde automatique{NBSP}: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Sélectionner l'intervalle de temps entre les sauvegardes automatiques +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Afficher l'horaire en ticks plutôt qu'en jours{NBSP}: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Affiche les temps de trajets dans les horaires en ticks plutôt qu'en jours + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Transparence des indicateurs de chargement.{}Ctrl-clic pour verrouiller. STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Temps de trajet moyen{NBSP}: {STRING} diff --git a/src/lang/extra/frisian.txt b/src/lang/extra/frisian.txt index 8f1fae05c0..f5d8dbb96f 100644 --- a/src/lang/extra/frisian.txt +++ b/src/lang/extra/frisian.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Fleantugen STR_CONFIG_SETTING_AUTOSAVE :Automatysk bewarje: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Selektearje de tiid tusken automatysk bewarje fan it spul +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Toan tsjinstregeling yn tikken yn stee fan yn dagen: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Lit reistiden sjen in tikken yn stee fan yn dagen op tsjinstregelings + # Tracerestrict GUI # Programmable Pre-Signals diff --git a/src/lang/extra/gaelic.txt b/src/lang/extra/gaelic.txt index 478df6b23b..bb4ddf5b0b 100644 --- a/src/lang/extra/gaelic.txt +++ b/src/lang/extra/gaelic.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Carbadan-adhair STR_CONFIG_SETTING_AUTOSAVE :Fèin-sàbhaladh: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Tagh dè cho tric ’s a thèid geamannan a shàbhaladh gu fèin-obrachail +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Seall an clàr-ama ann an diogan seach làithean: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Seall na h-ùinean siubhail ann an clàran-ama le diogan geama seach làithean + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Toglaich trìd-shoillearachd nan comharraidhean luchdaidh. Ctrl+Briogadh airson glasadh # Tracerestrict GUI diff --git a/src/lang/extra/galician.txt b/src/lang/extra/galician.txt index 678595f059..38005f0275 100644 --- a/src/lang/extra/galician.txt +++ b/src/lang/extra/galician.txt @@ -704,6 +704,9 @@ STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_ANYWHERE :En calquer luga STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED :{WHITE}Non se pode modificar a opción... STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED_NEWGRF :{WHITE}...o axuste está controlado por un NewGRF +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostra-lo horario en ticks en lugar de en días: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostra-los tempos de viaxe nos horarios en ticks en vez de en días + STR_CHEAT_EDIT_MONEY_QUERY_CAPT :{WHITE}Aumentar ou disminuir os cartos STR_CHEAT_INFLATION_COST :{LTBLUE}Modificar o factor da inflación de custos: {ORANGE}{DECIMAL} STR_CHEAT_INFLATION_COST_QUERY_CAPT :{WHITE}Modificar o factor da inflación de custos diff --git a/src/lang/extra/german.txt b/src/lang/extra/german.txt index 056f83e482..6ea6f8d6c0 100644 --- a/src/lang/extra/german.txt +++ b/src/lang/extra/german.txt @@ -597,6 +597,9 @@ STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_OFF :Aus STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_WITHIN_TOWN :Innerhalb des Einzugsgebiets STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_ANYWHERE :Überall +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Fahrpläne in Ticks anstatt in Tagen anzeigen: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Zeige Fahrtzeiten in Fahrplänen in Ticks statt Tagen + STR_CHEAT_EDIT_MONEY_QUERY_CAPT :{WHITE}Erhöhe oder verringere das verfügbare Geld STR_CHEAT_INFLATION_COST :{LTBLUE}Ändere Inflationsfaktor der Kosten: {ORANGE}{DECIMAL} STR_CHEAT_INFLATION_COST_QUERY_CAPT :{WHITE}Ändert den Faktor der Inflation der Kosten diff --git a/src/lang/extra/greek.txt b/src/lang/extra/greek.txt index 6978eb13e4..30bc6b6f35 100644 --- a/src/lang/extra/greek.txt +++ b/src/lang/extra/greek.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Αεροσκά STR_CONFIG_SETTING_AUTOSAVE :Αυτόματο σώσιμο: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Επιλέξτε το διάστημα ανάμεσα σε δυο διαδοχικά σωσίματα του παιχνιδιου +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Εμφάνιση δρομολογίων σε στιγμές αντί για ημέρες: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Εμφάνιση χρόνων ταξιδιού στα χρονοδιαγράμματα σε στιγμές αντί σε ημέρες + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για τις ενδείξεις φόρτωσης. Ctrl+Κλικ για να την κλειδώσετε # Tracerestrict GUI diff --git a/src/lang/extra/hebrew.txt b/src/lang/extra/hebrew.txt index d0c64b6aa1..a671edd7d4 100644 --- a/src/lang/extra/hebrew.txt +++ b/src/lang/extra/hebrew.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :כלי טייס STR_CONFIG_SETTING_AUTOSAVE :שמירה אוטומטית: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :בחר פרק זמן בין שמירות אוטומטיות +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :{STRING} :הצג לוח זמנים בפעימות במקום בימים +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :הצג זמני נסיעה בלוחות זמנים בפעימות משחק במקום בימים + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}שנה שקיפות עבור מצביעי הטענה. Ctrl+לחיצה לנעילה # Tracerestrict GUI diff --git a/src/lang/extra/hungarian.txt b/src/lang/extra/hungarian.txt index 53a5d7bac9..dbc4c808e7 100644 --- a/src/lang/extra/hungarian.txt +++ b/src/lang/extra/hungarian.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Repülőgép STR_CONFIG_SETTING_AUTOSAVE :Automatikus mentés: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Az automatikus mentések között eltelő idő +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Menetrendi idő-alapegység tick a nap helyett: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Az utazási idők megjelenítése napok helyett tickekben + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Átlátszó rakodásjelző bekapcsolása. Ctrl+kattintással zárolható STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Átlagos utazási idő: {STRING} diff --git a/src/lang/extra/icelandic.txt b/src/lang/extra/icelandic.txt index f5e120452e..d2ec7c144d 100644 --- a/src/lang/extra/icelandic.txt +++ b/src/lang/extra/icelandic.txt @@ -9,6 +9,9 @@ STR_VEHICLE_TYPE_ROAD_VEHICLES :Bifreiðir STR_VEHICLE_TYPE_SHIPS :Skip STR_VEHICLE_TYPE_AIRCRAFT :Flugvélar +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Birta áætlanir í slögum frekar en dögum: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Sýna ferðatíma í áætlun í slögum frekar en dögum + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Virkja/afvirkja gegnsæji hleðslumæla. Ctrl+smella til að læsa # Tracerestrict GUI diff --git a/src/lang/extra/indonesian.txt b/src/lang/extra/indonesian.txt index 2ddd7530c1..715941fe6f 100644 --- a/src/lang/extra/indonesian.txt +++ b/src/lang/extra/indonesian.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Pesawat STR_CONFIG_SETTING_AUTOSAVE :Simpan otomatis: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Memilih jarak waktu antara menyimpan data game +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Penjadwalan menggunakan satuan titik , bukan satuan hari: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Menunjukan waktu perjalanan dalam titik permainan daripada dalam hari + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Hidup/matikan indikator proses pemuatan kargo. CTRL+klik untuk mengunci # Tracerestrict GUI diff --git a/src/lang/extra/irish.txt b/src/lang/extra/irish.txt index 1ab0d2f7b2..afb9cda64b 100644 --- a/src/lang/extra/irish.txt +++ b/src/lang/extra/irish.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Aerárthaigh STR_CONFIG_SETTING_AUTOSAVE :Uathshábháil: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Roghnaigh an t-eatramh idir uathshábhálacha cluichí +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Taispeáin an t-amchlár i dticeanna seachas i laethanta: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Taispeáin amanna taistil i dtáblaí ama i dticeanna cluiche seachas laethanta + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Scoránaigh trédhearcacht do tháscairí lódála. Ctrl+Cliceáil le glasáil. # Tracerestrict GUI diff --git a/src/lang/extra/italian.txt b/src/lang/extra/italian.txt index 9134465b8e..db42c0ea45 100644 --- a/src/lang/extra/italian.txt +++ b/src/lang/extra/italian.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Aeromobili STR_CONFIG_SETTING_AUTOSAVE :Salvataggi automatici: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Seleziona l'intervallo fra i salvataggi automatici della partita +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostra le tabelle orarie in tick piuttosto che in giorni: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostra il tempo di viaggio in tick del simulatore invece che in giorni + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Attiva/disattiva la trasparenza degli indicatori di caricamento. CTRL+clic per bloccare STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}tempo medio di percorrenza: {STRING} diff --git a/src/lang/extra/japanese.txt b/src/lang/extra/japanese.txt index 041de563ac..58c39e2246 100644 --- a/src/lang/extra/japanese.txt +++ b/src/lang/extra/japanese.txt @@ -19,6 +19,9 @@ STR_CONFIG_SETTING_INTERFACE_WALLCLOCK :{ORANGE}時刻 STR_CONFIG_SETTING_INTERFACE_TIMETABLE :{ORANGE}ダイヤ STR_CONFIG_SETTING_INTERFACE_ADV_SIGNALS :{ORANGE}信号 +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :ダイヤの時間単位にゲーム時を使用: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :ダイヤで行程時間を定めるために使われる時間単位を「日」ではなく「ゲーム時」にします。1日は約74ゲーム時に相当します + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}積み降ろしインジケーターの透過表示を切り替えます。{}Ctrl+クリックでロックします # Tracerestrict GUI diff --git a/src/lang/extra/korean.txt b/src/lang/extra/korean.txt index ff0f1fea59..0a3c6428a8 100644 --- a/src/lang/extra/korean.txt +++ b/src/lang/extra/korean.txt @@ -704,6 +704,9 @@ STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_ANYWHERE :어디에나 STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED :{WHITE}설정을 변경할 수 없습니다... STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED_NEWGRF :{WHITE}...NewGRF가 사용 중인 설정입니다 +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :열차 시간표의 1일을 74틱으로 바꿔 표시: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :열차 시간표에서 열차의 운행 시간을 '일'보다 자세한 '틱'으로 표시합니다. 1일은 74틱과 같습니다. + STR_CHEAT_EDIT_MONEY_QUERY_CAPT :{WHITE}돈을 늘리거나 줄입니다. STR_CHEAT_INFLATION_COST :{LTBLUE}인플레이션 지출 배수 변경: {ORANGE}{DECIMAL} STR_CHEAT_INFLATION_COST_QUERY_CAPT :{WHITE}인플레이션 지출 배수를 변경합니다. diff --git a/src/lang/extra/latin.txt b/src/lang/extra/latin.txt index db878336ad..45982867f1 100644 --- a/src/lang/extra/latin.txt +++ b/src/lang/extra/latin.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Aeroplana STR_CONFIG_SETTING_AUTOSAVE :Servare automatice: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Eligere crebritatem automatice ludum servandi +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Monstrare horarium cum punctis et non cum diebus: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Monstrare tempora navigandi in horariis punctis ludi et non diebus + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Mutare perluciditatem signorum onerandi. Ctrl+Preme ut figatur (non mutabitur globulo perluciditatem mutandi presso) # Tracerestrict GUI diff --git a/src/lang/extra/latvian.txt b/src/lang/extra/latvian.txt index b4d9676a4c..ac706a204f 100644 --- a/src/lang/extra/latvian.txt +++ b/src/lang/extra/latvian.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Lidaparāti STR_CONFIG_SETTING_AUTOSAVE :Automātiskā saglabāšana: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Izvēlēties spēles automātiskās saglabāšanas starplaikus +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Kustības sarakstu rādīt mirkļos nevis dienās: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Kustības sarakstos laikus rādīt spēles mirkļos, nevis dienās + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Pārslēgt piekraušanas rādītāju caurspīdību. Ctrl+klikšķis, lai slēgtu # Tracerestrict GUI diff --git a/src/lang/extra/lithuanian.txt b/src/lang/extra/lithuanian.txt index 7b7b00f1e9..ad9d5a8cd6 100644 --- a/src/lang/extra/lithuanian.txt +++ b/src/lang/extra/lithuanian.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Lėktuvai STR_CONFIG_SETTING_AUTOSAVE :Automatinis saugojimas: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Laiko tarpsnis tarp automatinių žaidimo išsaugojimų +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Tvarkaraščio trukmes matuoti vidiniais impulsais, o ne dienomis: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Vieną dieną sudaro keliasdešimt vidinių impulsų + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Perjungti krovos indikatorių skaidrumą. Spragtelėjus laikant nuspaustą Ctrl klavišą, nuostata bus užrakinta # Tracerestrict GUI diff --git a/src/lang/extra/luxembourgish.txt b/src/lang/extra/luxembourgish.txt index e7f4c7d894..5ba73aa02e 100644 --- a/src/lang/extra/luxembourgish.txt +++ b/src/lang/extra/luxembourgish.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Fligeren STR_CONFIG_SETTING_AUTOSAVE :Autospäicheren: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Setz den Interval tëschend automateschen Späicherstänn +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Weis den Zäitplang an Ticken amplaz vun Deeg: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Weist d'Transportdauer an der Zäittafel als Gameticks un, amplaz an Deeg + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Wiesselt d'Transparenz fir d'Luedungsindikatoren. Ctrl+Klick fir festzesetzen # Tracerestrict GUI diff --git a/src/lang/extra/malay.txt b/src/lang/extra/malay.txt index cc317f94ff..bdce897397 100644 --- a/src/lang/extra/malay.txt +++ b/src/lang/extra/malay.txt @@ -12,6 +12,8 @@ STR_VEHICLE_TYPE_AIRCRAFT :Pesawat STR_CONFIG_SETTING_AUTOSAVE :Simpanan automatik:{STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Pilih jarak waktu antara menyimpankan permainan automatik +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Tunjukkan jadual menggunakan tanda rait dan bukan hari: {STRING} + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Teluskan penunjuk muatan atau tidak. Ctrl+Klik untuk mengunci # Tracerestrict GUI diff --git a/src/lang/extra/norwegian_bokmal.txt b/src/lang/extra/norwegian_bokmal.txt index 1558362694..ddee85c0f0 100644 --- a/src/lang/extra/norwegian_bokmal.txt +++ b/src/lang/extra/norwegian_bokmal.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Luftfartøy STR_CONFIG_SETTING_AUTOSAVE :Autolagring: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Velg intervall mellom automatiske lagringer av spillet +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Vis rutetabell i antall tikk i stedet for antall dager: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Vis reisetider i tidstabeller i spillets 'tidsenheter' fremfor dager + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Gjennomsiktige lastingsindikatorer. Ctrl+klikk for å låse # Tracerestrict GUI diff --git a/src/lang/extra/norwegian_nynorsk.txt b/src/lang/extra/norwegian_nynorsk.txt index 65c3dfa942..2b92468656 100644 --- a/src/lang/extra/norwegian_nynorsk.txt +++ b/src/lang/extra/norwegian_nynorsk.txt @@ -12,6 +12,8 @@ STR_VEHICLE_TYPE_AIRCRAFT :Luftfartøy STR_CONFIG_SETTING_AUTOSAVE :Autolaging: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Vel intervall for automatisk lagring av spel +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Syne rutetabell i tikk i staden for dagar: {STRING} + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Byt gjennomsyn for lasteindikatorar. Ctrl+klikk for å låsa. # Tracerestrict GUI diff --git a/src/lang/extra/persian.txt b/src/lang/extra/persian.txt index 02b70b171b..1fd01b0a62 100644 --- a/src/lang/extra/persian.txt +++ b/src/lang/extra/persian.txt @@ -12,6 +12,8 @@ STR_VEHICLE_TYPE_AIRCRAFT :هواپیما STR_CONFIG_SETTING_AUTOSAVE :ذخیره خودکار: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :انتخاب فاصله زمانی بین ذخیره کردن های خودکار +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :استفاده از تیک(هزارم ثانیه) به جای روز در برنامه ساعتی: {STRING} + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}فعال/غیر فعال کردن شفافیت برای نشانه پر و خالی شدن بار. کنترل+کلیک برای قفل کردن # Tracerestrict GUI diff --git a/src/lang/extra/polish.txt b/src/lang/extra/polish.txt index 15af9bac4a..4b888a895a 100644 --- a/src/lang/extra/polish.txt +++ b/src/lang/extra/polish.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Samoloty STR_CONFIG_SETTING_AUTOSAVE :Autozapis: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Częstotliwość automatycznego zapisu stanu gry +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Pokazuj rozkłady jazdy w tickach, a nie w dniach: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :W rozkładach jazdy, czas podróży pokaż w tickach gry zamiast w dniach + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Przełącz przeźroczystość dla wskaźników załadunku. Ctrl+klik, aby zablokować STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Średni czas podróży: {STRING} diff --git a/src/lang/extra/portuguese.txt b/src/lang/extra/portuguese.txt index cbd9414211..49722737ff 100644 --- a/src/lang/extra/portuguese.txt +++ b/src/lang/extra/portuguese.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Aeronaves STR_CONFIG_SETTING_AUTOSAVE :Guardar automaticamente: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Seleccione o intervalo entre gravações automáticas +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostrar horário em tics em vez de dias: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostrar tempos de viagem nos horários em ticks de jogo em vez de dias + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Alterar transparência para indicadores de carga. Ctrl+Clique para bloquear. STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Tempo médio de viagem: {STRING} diff --git a/src/lang/extra/romanian.txt b/src/lang/extra/romanian.txt index c9e503d16e..ca66f6001b 100644 --- a/src/lang/extra/romanian.txt +++ b/src/lang/extra/romanian.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Aeronave STR_CONFIG_SETTING_AUTOSAVE :Autosalvare: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Alege intervalul de timp dintre salvările automate +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Arată orarul pe programări în unități de timp interne în loc de zile: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Arată timpii de călătorie în tabela cu timpi a jocului folosind unități de timp interne în loc de zile + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Comută transparenţa pentru indicatorii de încarcare. Ctrl+Click pentru blocare # Tracerestrict GUI diff --git a/src/lang/extra/russian.txt b/src/lang/extra/russian.txt index a70692e6e5..04d4f83c21 100644 --- a/src/lang/extra/russian.txt +++ b/src/lang/extra/russian.txt @@ -24,6 +24,9 @@ STR_CONFIG_SETTING_PAY_FOR_REPAIR_VEHICLE_HELPTEXT :Если вкл STR_CONFIG_SETTING_REPAIR_COST :Стоимость ремонта: 1/{STRING} полной стоимости тс STR_CONFIG_SETTING_REPAIR_COST_HELPTEXT :Стоимость ремонта одной поломки транспортного средства +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Графики движения в «тиках», а не днях: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Измерять время в графиках движения игровыми «тиками», а не днями. 1 день равен 74 «тикам». + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Переключение прозрачности индикаторов загрузки. Ctrl+щелчок - заблокировать. STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Среднее время в пути: {STRING} diff --git a/src/lang/extra/serbian.txt b/src/lang/extra/serbian.txt index 4a6351ba48..2d1ba93445 100644 --- a/src/lang/extra/serbian.txt +++ b/src/lang/extra/serbian.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Letelice STR_CONFIG_SETTING_AUTOSAVE :Autočuvanje: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Odabir vremenskog intervala između dve automatski sačuvane igre +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Prikazati red vožnje u diskretnim otkucajima: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Prikaži vreme putovanja u redu vožnje u diskretnim otkucajima umesto u danima + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Promena prozirnosti pokazatelja utovara. Sa Ctrl+klik se zaključava # Tracerestrict GUI diff --git a/src/lang/extra/simplified_chinese.txt b/src/lang/extra/simplified_chinese.txt index aac9fe932a..c066141559 100644 --- a/src/lang/extra/simplified_chinese.txt +++ b/src/lang/extra/simplified_chinese.txt @@ -698,6 +698,9 @@ STR_CONFIG_SETTING_SCENARIO_HOUSE_IGNORE_ZONES_ANYWHERE :任意位置 STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED :{WHITE}不能更改设置... STR_CONFIG_SETTING_NETWORK_CHANGE_NOT_ALLOWED_NEWGRF :{WHITE}...有NewGRF依赖此设置 +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :使用时间标记而不是天为单位: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :时间表以ticks而不是天显示。 + STR_CHEAT_EDIT_MONEY_QUERY_CAPT :{WHITE}增加或减少现金 STR_CHEAT_INFLATION_COST :{LTBLUE}改变支出通胀因子: {ORANGE}{DECIMAL} STR_CHEAT_INFLATION_COST_QUERY_CAPT :{WHITE}改变支出通胀因子 diff --git a/src/lang/extra/slovak.txt b/src/lang/extra/slovak.txt index c0ea591d97..72eb462ac3 100644 --- a/src/lang/extra/slovak.txt +++ b/src/lang/extra/slovak.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Lietadlá STR_CONFIG_SETTING_AUTOSAVE :Automatické ukladanie: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Vyberte interval pre automatické ukladanie hry +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Zobraziť cestovné poriadky v tiknutiach namiesto dní: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Zobrazí časy cestovania v cestovnom poriadku v herných tiknutiach namiesto dní + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Prepnúť priehľadnosť ukazateľov nakladania. Ctrl+klik uzamkne nastavenie STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Priemerný čas cesty: {STRING} diff --git a/src/lang/extra/slovenian.txt b/src/lang/extra/slovenian.txt index 9bbdd85813..a26deb64e0 100644 --- a/src/lang/extra/slovenian.txt +++ b/src/lang/extra/slovenian.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Letala STR_CONFIG_SETTING_AUTOSAVE :Samodejno shrani: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Izberi časovni interval samodejnega shranjevanja igre +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Prikaz urnikov v pikah namesto dneh: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Prikaži čase potovanja v časovnih tabelah kot enote igre namesto dni. + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Preklop na prosojnost za prikaz polnenja. Ctrl+Klik za zaklepanje # Tracerestrict GUI diff --git a/src/lang/extra/spanish.txt b/src/lang/extra/spanish.txt index 901d460388..3d52e266cc 100644 --- a/src/lang/extra/spanish.txt +++ b/src/lang/extra/spanish.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Aeronaves STR_CONFIG_SETTING_AUTOSAVE :Autoguardado: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Selecciona el intervalo entre guardados automáticos del juego +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostrar horario en tics en vez de en días: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Muestra los tiempos de viaje en los horarios en tics en lugar de en días + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Ajustar transparencia para los indicadores de carga. Ctrl+clic para bloquear STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Tiempo de viaje promedio: {STRING} diff --git a/src/lang/extra/spanish_MX.txt b/src/lang/extra/spanish_MX.txt index b1cbc5c200..c512776055 100644 --- a/src/lang/extra/spanish_MX.txt +++ b/src/lang/extra/spanish_MX.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Aeronaves STR_CONFIG_SETTING_AUTOSAVE :Guardado automático: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Intervalo entre guardados automáticos de la partida +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostrar tiempo de viaje en ticks en lugar de días: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostrar los tiempos de viaje en los itinerarios en impulsos de reloj de sistema (ticks) en lugar de días + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Transparencia de indicadores de embarque. Ctrl+Clic para bloquear STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Tiempo promedio de viaje: {STRING} diff --git a/src/lang/extra/swedish.txt b/src/lang/extra/swedish.txt index 3bc987565c..7341dbd2a2 100644 --- a/src/lang/extra/swedish.txt +++ b/src/lang/extra/swedish.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Flygplan STR_CONFIG_SETTING_AUTOSAVE :Autospara: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Välj intervall mellan automatisk sparande +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Visa tidtabeller räknat i ticks istället för dagar: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Visa restider i tidtabeller i antal tick istället för dagar + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Växla genomskinlighet för lastningsindikatorer. Ctrl+klick för att låsa # Tracerestrict GUI diff --git a/src/lang/extra/tamil.txt b/src/lang/extra/tamil.txt index aeb03ca426..4eebafe605 100644 --- a/src/lang/extra/tamil.txt +++ b/src/lang/extra/tamil.txt @@ -10,6 +10,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :விமான STR_CONFIG_SETTING_AUTOSAVE :தானியங்கிபதிவு: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :தானியங்கி விளையாட்டு சேமிப்புகளுக்கு இடையில் இடைவெளியைத் தேர்ந்தெடுக்கவும் +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :கால அட்டவணையை நாட்களில் அல்லாமல் சொடுக்குகளில் காட்டு: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :கால அட்டவணையை நாட்களில் அல்லாமல் சொடுக்குகளில் காட்டு + # Tracerestrict GUI # Programmable Pre-Signals diff --git a/src/lang/extra/thai.txt b/src/lang/extra/thai.txt index 8479096e72..5ac304d8ca 100644 --- a/src/lang/extra/thai.txt +++ b/src/lang/extra/thai.txt @@ -9,6 +9,9 @@ STR_VEHICLE_TYPE_ROAD_VEHICLES :รถยนต STR_VEHICLE_TYPE_SHIPS :เรือ STR_VEHICLE_TYPE_AIRCRAFT :อากาศยาน +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :แสดงตารางเวลาในแบบติ๊กแทนแบบวัน: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :แสดงเวลาในการเดินทางในตารางเวลาเป็น ticks แทนที่ days + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}เปิด/ปิด การโปร่งใสของตัวบอกการบรรทุกของ. กด Ctrl+Click สำหรับการล็อก # Tracerestrict GUI diff --git a/src/lang/extra/traditional_chinese.txt b/src/lang/extra/traditional_chinese.txt index 44623f7d62..7665e14b70 100644 --- a/src/lang/extra/traditional_chinese.txt +++ b/src/lang/extra/traditional_chinese.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :飛機 STR_CONFIG_SETTING_AUTOSAVE :自動儲存:{STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :選擇自動存檔的週期。 +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :顯示時刻表時以刻度數目取代日為單位:{STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :在時刻表上以刻度數目取代日數顯示運行時間。 + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}切換裝載進度指示是否透明。按住 CTRL 點選可鎖定 # Tracerestrict GUI diff --git a/src/lang/extra/turkish.txt b/src/lang/extra/turkish.txt index f2943e1c86..957f923cb9 100644 --- a/src/lang/extra/turkish.txt +++ b/src/lang/extra/turkish.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Uçaklar STR_CONFIG_SETTING_AUTOSAVE :Otomatik kaydet: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Otomatik oyun kaydetme sıklığını seçin +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Zaman tablosunda gün yerine işlemci zamanı kullan: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Zaman çizelgelerinde yolculuk sürelerini gün yerine oyun zamanı cinsinden göster + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Transparan yükleme göstergesi. Kilitlemek için Ctrl ile tıklayın STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Ortalama seyahat süresi: {STRING} diff --git a/src/lang/extra/ukrainian.txt b/src/lang/extra/ukrainian.txt index 32598a9fb1..07c6d0cc24 100644 --- a/src/lang/extra/ukrainian.txt +++ b/src/lang/extra/ukrainian.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Авіація STR_CONFIG_SETTING_AUTOSAVE :Автозбереження: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Оберіть проміжок між автоматичними збереженнями гри +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Показувати розклад в тіках замість днів: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Відображати час руху в розкладах в тіках замість днів + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Змінити прозорість індикаторів завантаження. Утримуйте Ctrl, щоб заблокувати # Tracerestrict GUI diff --git a/src/lang/extra/urdu.txt b/src/lang/extra/urdu.txt index 41b690d4f2..93c7b4e899 100644 --- a/src/lang/extra/urdu.txt +++ b/src/lang/extra/urdu.txt @@ -12,6 +12,8 @@ STR_VEHICLE_TYPE_AIRCRAFT :ہوایی جہ STR_CONFIG_SETTING_AUTOSAVE :Autosave: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :گیم بچانے کا وقفا چنیں +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :اوقات کا جدول دنوں کی بجائے ٹِکس میں دکھائیں: {STRING} + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}لوڈ کرنے کے نشانوں کی شفافیت کی تدویم کریں۔ محدوظ کرنے کے لئے Ctrl+Click دبائیں # Tracerestrict GUI diff --git a/src/lang/extra/vietnamese.txt b/src/lang/extra/vietnamese.txt index 64fdce4ba3..0ca689c5ba 100644 --- a/src/lang/extra/vietnamese.txt +++ b/src/lang/extra/vietnamese.txt @@ -13,6 +13,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Máy bay STR_CONFIG_SETTING_AUTOSAVE :Tự động save: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Chọn chu kỳ giữa mỗi lần tự động save +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Hiện lịch trình ở dạng số nhịp thay vì ngày: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Hiển thị thời gian trong bảng lịch trình bằng bộ đếm trò chơi thay vì ngày + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Bật hiệu ứng trong suốt cho bảng báo hiệu nạp. Ctrl+Click để khoá. STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Thời gian đi lại trung bình: {STRING} diff --git a/src/lang/extra/welsh.txt b/src/lang/extra/welsh.txt index ca31c1b2c3..9be8bed2dd 100644 --- a/src/lang/extra/welsh.txt +++ b/src/lang/extra/welsh.txt @@ -12,6 +12,9 @@ STR_VEHICLE_TYPE_AIRCRAFT :Awyrennau STR_CONFIG_SETTING_AUTOSAVE :Awtogadw: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Dewis pa mor aml y dylid awtogadw gemau +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Dangos amserlen fesul ticiau yn hytrach na dyddiau: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Dangos amseroedd teithio mewn amserlenni mewn ticiau yn hytrach na dyddiau + STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Toglu tryloywder ar gyfer dangosyddion llwytho. Ctrl+Clic i gloi # Tracerestrict GUI diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 19271e3574..160492fa9d 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -219,6 +219,7 @@ STR_UNITS_FORCE_SI :{DECIMAL} kN STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} ft STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtur strong: STR_LIST_FILTER_OSKTITLE :{BLACK}Skriva inn filtur strong @@ -643,8 +644,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Trýst STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Trýst á tónleika spor fyri at strika frá núverðani skrá (Sjálvgjørdur1 ella Sjálvgjørdur2 einans) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Fremstu fyritøkunar ið rukku {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Yvirlit fyri Fyritøku Deildina í {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Vinnumaður STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Íverksetari @@ -1417,8 +1416,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Gilda nýtsluna STR_CONFIG_SETTING_LOADING_INDICATORS :Nýt lessingar vísarar: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Vel um lessi vísarar verða vístir omanfyri lessandi og avlessandi flutningstól ella ikki -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Vís tíðarætlan í klikkum heldur enn døgum: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Vís koyri tíðir í tíðarætlanum við 'spæli klikkum' í staðin fyri við døgum +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Vís komir og fráferðir í tíðarætlanum: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Vís væntaðu komu og fráferðs tíðir í tíðarætlanum @@ -3575,7 +3573,7 @@ STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Skift ti STR_TIMETABLE_NO_TRAVEL :Ferðast ikki -STR_TIMETABLE_DAYS :{COMMA} dag{P "" ar} + diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 0b13d27a4c..066c967b3a 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -255,6 +255,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Suodatin: STR_LIST_FILTER_OSKTITLE :{BLACK}Syötä yksi tai useampi avainsana listan suodattamiseksi @@ -718,8 +719,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Valitse STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Poista musiikkiraita nykyiseltä soittolistalta napsauttamalla (vain oma{NBSP}1 tai oma{NBSP}2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Parhaat yhtiöt, jotka saavuttivat vuoden {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Yhtiökilpailutaulukko vuonna {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Kaupantekijä STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Yrittäjä @@ -1656,8 +1655,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Salli kehittyne STR_CONFIG_SETTING_LOADING_INDICATORS :Lastausilmaisimet: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Määritä näytetäänkö lastausilmaisimet kulkuneuvojen yläpuolella lastatessa ja purettaessa rahtia -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Näytä aikataulu askelina päivien sijaan: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Näytä aikataulun ajat päivien sijasta askelina +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Näytä saapuminen ja lähtö aikatauluissa: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Näytä odotetut saapumis- ja lähtemisajat aikatauluissa @@ -2581,7 +2579,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Etsi Ope STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Olet poistumassa OpenTTD:stä! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Ulkopuolisilta verkkosivuilta ladattaessa käyttöehdot voivat vaihdella.{}Sinun on noudatettava ulkopuolisen sivuston ohjeita sisällön asentamiseksi OpenTTD:hen.{}Haluatko jatkaa? STR_CONTENT_FILTER_TITLE :{BLACK}Suodata avainsanalla tai nimellä: -STR_CONTENT_OPEN_URL :{BLACK}Vieraile verkkosivulla +STR_CONTENT_OPEN_URL :{BLACK}Verkkosivu STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Vieraile sisällön verkkosivulla STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Lataa STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Aloita valitun sisällön lataaminen @@ -4566,8 +4564,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(pysy {STRING}, STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(matkusta {STRING}, ei aikataulua) STR_TIMETABLE_STAY_FOR :ja odota {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :ja kulje {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}päivä{P "" ä} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}askel{P "" ta} STR_TIMETABLE_TOTAL_TIME :{BLACK}Aikataulun kesto on {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Aikataulun kesto on vähintään {STRING} @@ -4576,10 +4572,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Kulkuneu STR_TIMETABLE_STATUS_LATE :{BLACK}Kulkuneuvo on {STRING} myöhässä STR_TIMETABLE_STATUS_EARLY :{BLACK}Kulkuneuvo on {STRING} etuajassa STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Tämä aikataulu ei ole vielä alkanut -STR_TIMETABLE_STATUS_START_AT :{BLACK}Tämä aikataulu alkaa {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Aloituspäivä -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Valitse päivämäärä aikataulun aloitusajankohdaksi. Ctrl+napsautus levittää kaikki tämän käskyjoukon jakavat kulkuneuvot tasaisesti niiden keskinäisen järjestyksen mukaan, mikäli käskyjoukko on kokonaan aikataulutettu + STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuta aikaa STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuta aikaa, jonka valitun käskyn tulisi kestää. Ctrl+napsautus asettaa keston kaikille käskyille @@ -4603,8 +4597,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Odotettu STR_TIMETABLE_SCHEDULED :{BLACK}Aikataulu STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Vaihda odotetun ja aikataulun välillä -STR_TIMETABLE_ARRIVAL :T: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :L: {COLOUR}{DATE_TINY} # Date window (for timetable) @@ -4707,9 +4699,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Siirry t STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Siirry eteenpäin selaushistoriassa STR_TEXTFILE_WRAP_TEXT :{WHITE}Tekstin rivitys STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Rivitä teksti ikkunaan niin, että se näkyy kokonaan rullaamatta -STR_TEXTFILE_VIEW_README :{BLACK}Näytä readme-tiedosto +STR_TEXTFILE_VIEW_README :{BLACK}Readme-tiedosto +STR_TEXTFILE_VIEW_README_TOOLTIP :Katso tämän sisällön readme-tiedosto STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Muutosloki +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Katso tämän sisällön muutosloki STR_TEXTFILE_VIEW_LICENCE :{BLACK}Lisenssi +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Katso tämän sisällön lisenssi ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING}:n {STRING} readme-tiedosto STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING}:n {STRING} muutosloki diff --git a/src/lang/french.txt b/src/lang/french.txt index 4bb33af182..18444b3d74 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -256,6 +256,10 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m +STR_UNITS_DAYS :{COMMA}{NBSP}jour{P "" s} +STR_UNITS_SECONDS :{COMMA}{NBSP}seconde{P "" s} +STR_UNITS_TICKS :{COMMA}{NBSP}tick{P "" s} + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtre{NBSP}: STR_LIST_FILTER_OSKTITLE :{BLACK}Entrer un ou plusieurs mot-clés pour filtrer la liste @@ -719,8 +723,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Cliquer STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Cliquer sur une piste pour la retirer du programme courant (Personnalisé 1 ou Personnalisé 2 seulement) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Meilleures compagnies qui ont atteint {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tableau du Championnat des compagnies en {NUM} +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Top 5 des compagnies STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Personne d'affaires STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entrepreneur @@ -1489,7 +1492,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Type de terrain{NBSP}: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(TerraGenesis only) Vallonnement du paysage +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Chosir la hauteur des collines et montagnes du paysage STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densité des industries{NBSP}: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Définit combien d'industries doivent être générée et quel niveau doit être maintenu pendant la partie @@ -1498,18 +1501,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distance maximu STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limite de distance par rapport au bord de la carte où les raffineries et les plateformes pétrolières peuvent être construites. Sur les cartes d'îles cela assure qu'elles sont près de la côte. Sur les cartes plus large que 256 tuiles, cette valeur est mise à l'échelle. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altitude d'enneigement{NBSP}: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Contrôle à quelle altitude la neige commence dans le climat sub-arctique. La neige affecte aussi la génération des industries et les exigences pour la croissance des villes. Ne peut être modifié que via l'éditeur de scénario autrement il est calculé via "couverture de neige" +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Chosir à quelle altitude la neige commence dans le climat sub-arctique. La neige affecte aussi la génération des industries et les exigences pour la croissance des villes. Ne peut être modifié que via l'éditeur de scénario autrement il est calculé via "couverture de neige" STR_CONFIG_SETTING_SNOW_COVERAGE :Couverture de neige: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Contrôle la quantité approximative de neige sur le paysage sub-arctique. La neige affecte également la production des industrielles et les besoins de croissance des villes. Seulement utilisé lors de la création de la carte. La terre juste au-dessus du niveau de la mer est toujours sans neige +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Contrôle la quantité approximative de neige sur le paysage sub-arctique. La neige affecte également la création d'industries et les besoins des villes pour croître. Seulement utilisé lors de la création de la carte. L'eau et les côtes ne seront jamais enneigées. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Couverture du désert: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Contrôlez la quantité approximative de zone du désert sur le paysage tropical. Le désert affecte également la création du nombre d'industries. Uniquement utilisé lors de la création de la carte +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Choisir la quantité approximative de zone du désert sur le paysage tropical. Le désert affecte également le nombre d'industries créées et les besoins des villes pour croître. Uniquement utilisé lors de la création de la carte STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Rugosité du terrain{NBSP}: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis only) Choisir la fréquence des collines{NBSP}: Les paysages doux ont des collines moins nombreuses et plus éloignées. Les paysages rudes ont beaucoup de collines, ce qui peut sembler répétitif +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Choisir la forme et le nombre de collines. Les paysages doux ont des collines basses et larges, tandis que les paysages rugueux ont de plus petites collines. ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Très lisse STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Lisse @@ -1517,7 +1520,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Rugueux STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Très rugueux STR_CONFIG_SETTING_VARIETY :Distribution de variété{NBSP}: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis seulement) Contrôle si la carte contient à la fois de la montagne et du terrain plat. Comme cela rend seulement la carte plus plate, les autres paramètres doivent être définis sur montagneux +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Contrôle si la carte contient à la fois des montagnes et des plaines. Plus la valeur est élevée, plus la différence d'élévation entre le plateau montagneux et les plaines sera importante. STR_CONFIG_SETTING_RIVER_AMOUNT :Quantité de rivières{NBSP}: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Choisir combien de rivières générer @@ -1537,6 +1540,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Conduite à gau STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Conduite à droite STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotation de la carte d'altitude{NBSP}: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Choisir de quelle manière l'image de la carte d'altitude est pivotée pour s'insérer correctement dans la carte actuelle. ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Anti-horaire STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Horaire @@ -1657,8 +1661,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Active l'utilis STR_CONFIG_SETTING_LOADING_INDICATORS :Utiliser les indicateurs de chargement{NBSP}: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Choisir si les indicateurs de chargement doivent être affichés au dessus des véhicules qui chargent ou déchargent -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Afficher l'horaire en ticks plutôt qu'en jours{NBSP}: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Affiche les temps de trajets dans les horaires en ticks plutôt qu'en jours +STR_CONFIG_SETTING_TIMETABLE_MODE :Unité de temps pour les horaires{NBSP}: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Sélectionner l'unité de temps utilisée pour les horaires des véhicules +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Jours +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Secondes +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Ticks STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Afficher l'arrivée et le départ dans les horaires{NBSP}: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Afficher les temps d'arrivée et de départ prévues dans les horaires @@ -2347,7 +2355,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Les autr STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Choisir le mot de passe STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protégez votre partie avec un mot de passe si vous ne souhaitez pas que d'autres l'utilisent -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilité +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilité{NBSP}: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Possibilité pour les autres personnes de vous voir dans la liste publique STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Nombre de clients maximum{NBSP}: @@ -2582,7 +2590,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Chercher STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Vous quittez OpenTTD{NBSP}! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Les termes et conditions du téléchargement de contenu depuis des sites externes varient.{}Vous devrez vous référer aux sites externes pour les instructions d'installation du contenu dans OpenTTD.{}Voulez-vous continuer{NBSP}? STR_CONTENT_FILTER_TITLE :{BLACK}Filtre sur les étiquettes/le nom{NBSP}: -STR_CONTENT_OPEN_URL :{BLACK}Visiter le site web +STR_CONTENT_OPEN_URL :{BLACK}Site web STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visiter le site web pour ce module STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Télécharger STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Démarrer le téléchargement des modules sélectionnés @@ -3202,11 +3210,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Taille d STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Définir la taille de la carte en cases. Le nombre de cases utilisables sera légèrement plus petit STR_MAPGEN_BY :{BLACK}{NBSP}× STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Nb. de villes{NBSP}: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Sélectionner la quantité de villes sur la carte ou entrer un nombre précis STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nom des villes{NBSP}: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Sélectionner la nationalité des noms des villes STR_MAPGEN_DATE :{BLACK}Date{NBSP}: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Chosir la date de départ STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Nb. d'industries{NBSP}: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Sélectionner la quantité d'industries sur la carte ou entrer un nombre précis STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Sommet le plus élevé: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Chosir le plus haut pic que le jeu pourra créer (mesuré par rapport au niveau de l'eau) STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Augmenter la hauteur maximale du plus haut sommet de la carte de un STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Diminuer la hauteur maximale du plus haut sommet de la carte de un STR_MAPGEN_SNOW_COVERAGE :{BLACK}Couverture de la neige: @@ -3219,10 +3231,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Diminuer STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Type de terrain{NBSP}: STR_MAPGEN_SEA_LEVEL :{BLACK}Niveau de la mer{NBSP}: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Sélectionner le niveau de l'eau STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Nb. de rivières{NBSP}: STR_MAPGEN_SMOOTHNESS :{BLACK}Lissage{NBSP}: STR_MAPGEN_VARIETY :{BLACK}Variété de distribution{NBSP}: STR_MAPGEN_GENERATE :{WHITE}Créer +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Créer la carte et jouer à OpenTTD ! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Paramètres NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Afficher la configuration des NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Paramètres des IAs @@ -3255,6 +3269,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalans # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Bords de la carte{NBSP}: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Choisir les bordures de la carte STR_MAPGEN_NORTHWEST :{BLACK}Nord-Ouest STR_MAPGEN_NORTHEAST :{BLACK}Nord-Est STR_MAPGEN_SOUTHEAST :{BLACK}Sud-Est @@ -3267,7 +3282,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuel STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotation de la carte d'altitude{NBSP}: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nom de la carte d'altitude{NBSP}: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Nom de l'image de la carte d'altitude STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Taille{NBSP}: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Taille de l'image de la carte d'altitude. Pour un meilleur résultat, chaque longueur de bordure doit correspondre à une taille de bordure disponible sur OpenTTD (256, 512, 1024, etc). STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM}{NBSP}×{NBSP}{NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Hauteur du pic @@ -3282,6 +3299,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Terrain STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Créer un monde plat STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Terrain aléatoire STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Altitude du terrain plat{NBSP}: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Choisir la hauteur du sol par rapport au niveau de l'eau STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Diminuer l'altitude du terrain plat STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Augmenter l'altitude du terrain plat @@ -4567,8 +4585,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(rester pendant STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(voyager pendant {STRING}, non planifié) STR_TIMETABLE_STAY_FOR :et rester pendant {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :et voyager pendant {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}jour{P "" s} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick{P "" s} STR_TIMETABLE_TOTAL_TIME :{BLACK}Cet horaire prendra {STRING} pour s'achever STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Cet horaire prendra au moins {STRING} pour s'achever (horaire incomplet) @@ -4577,10 +4593,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Ce véhi STR_TIMETABLE_STATUS_LATE :{BLACK}Ce véhicule est en retard de {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Ce véhicule est en avance de {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Cet horaire n'a pas encore démarré -STR_TIMETABLE_STATUS_START_AT :{BLACK}Cet horaire démarrera à {STRING} +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Cet horaire démarrera le/à {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Cet horaire commencera dans {COMMA} seconde{P "" s} + +STR_TIMETABLE_START :{BLACK}Démarrer l'horaire +STR_TIMETABLE_START_TOOLTIP :{BLACK}Sélectionner quand l'horaire doit démarrer. Ctrl-clic pourra donner l'ordre de démarrer l'horaire aux véhicules qui le partagent, seulement si leurs ordres sont complètement définis dans leurs horaires respectifs -STR_TIMETABLE_STARTING_DATE :{BLACK}Date de départ -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Choisir une date comme point de départ de cet horaire. Ctrl-clic pour répartir tous les véhicules partageant cet ordre uniformément à partir de la date donnée selon leur ordre relatif, si l'ordre est complètement planifié +STR_TIMETABLE_START_SECONDS_QUERY :Nombre de secondes avant que l'horaire ne commence STR_TIMETABLE_CHANGE_TIME :{BLACK}Modifier la durée STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modifier la durée de l'ordre sélectionné. Ctrl-clic pour définir la durée pour tous les ordres @@ -4604,8 +4623,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Attendu STR_TIMETABLE_SCHEDULED :{BLACK}Planifié STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Alterner entre attendu et planifié -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} seconde{P "" s} +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} seconde{P "" s} # Date window (for timetable) @@ -4708,9 +4729,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Reculer STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Avancer dans l'historique de navigation STR_TEXTFILE_WRAP_TEXT :{WHITE}Retour à la ligne automatique STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Insérer des retours à la ligne dans le texte de la fenêtre afin qu'il s'affiche entièrement sans faire défiler -STR_TEXTFILE_VIEW_README :{BLACK}Voir le Lisez-moi +STR_TEXTFILE_VIEW_README :{BLACK}Lisez-moi +STR_TEXTFILE_VIEW_README_TOOLTIP :Afficher le lisez-moi pour ce contenu STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Journal des modifications +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Afficher le journal des modifications pour ce contenu STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licence +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Afficher la licence pour ce contenu ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}Lisez-moi du module {STRING} {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Journal des modifications pour le module {STRING} {STRING} @@ -4784,7 +4808,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Seuls le STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Très grande capture d'écran STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}La capture d'écran aura une résolution de {COMMA} x {COMMA} pixels. Faire cette capture peut prendre un moment . Êtes-vous sûr de vouloir continuer{NBSP}? -STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}La carte de hauteur a bien été enregistrée sous '{STRING}'. Le pic le plus élevé est {NUM} +STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}La carte d'altitude a bien été enregistrée sous '{STRING}'. Le pic le plus élevé est {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Copie d'écran enregistrée avec succès sous "{STRING}" STR_ERROR_SCREENSHOT_FAILED :{WHITE}Échec de la copie d'écran{NBSP}! diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 6bc3958d5c..65dff9170c 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -225,6 +225,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filter: STR_LIST_FILTER_OSKTITLE :{BLACK}Foer filter namme yn @@ -666,8 +667,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik op STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik op musyknûmmer om't út it aktive program it heljen (allinnich Oanpast1 of Oanpast2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Topbedriuwen dy't niveau {NUM} helle hawwe -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Bedriuwskompetysjetabel yn {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Sakeman STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Undernimmer @@ -1492,8 +1491,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Skeakelje de av STR_CONFIG_SETTING_LOADING_INDICATORS :Brûk laadyndikators: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :By ynskeakeljen sille ydikators sjen litten wurde boppe fiertugen dy't oan it yn- as útladen binne -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Toan tsjinstregeling yn tikken yn stee fan yn dagen: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Lit reistiden sjen in tikken yn stee fan yn dagen op tsjinstregelings +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Toan oankomst- en ofreistiid yn de tsjinstregeling: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Lit oankomst- en ôfriidtiden sjen yn tsjinstregelings @@ -3766,14 +3764,12 @@ STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Reizgje (foar { STR_TIMETABLE_STAY_FOR_ESTIMATED :(bliuw foar {STRING}, sûnder tjinstregeling) STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(reizgje foar {STRING}, sûnder tjinstregeling) STR_TIMETABLE_STAY_FOR :en bliuw foar{STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}{P dei dagen} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tik{P "" ken} STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Dit fiertûch is op tiid STR_TIMETABLE_STATUS_EARLY :{BLACK}Dit fiertûch is {STRING} te betiid -STR_TIMETABLE_STARTING_DATE :{BLACK}Begjin datum + STR_TIMETABLE_CHANGE_TIME :{BLACK}Tiid Feroarje diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index c3e772aac9..ae306ddbb6 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -413,6 +413,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Sreang criathraige: STR_LIST_FILTER_OSKTITLE :{BLACK}Cuir a-steach sreang criathraige @@ -866,8 +867,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Dèan br STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Dèan briogadh air traca ciùil gus a thoirt air falbh bhon phrògram làithreach (Gnàthaichte1 no Gnàthaichte2 a-mhàin) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Na companaidhean as fhearr a ràinig {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Clàr co-bhonn nan companaidh ann an {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Neach-gnothaich STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Neach-tionnsgainn @@ -1683,8 +1682,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Cuir liostaiche STR_CONFIG_SETTING_LOADING_INDICATORS :Seall taisbeanairean luchdaidh: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Tagh an tèid taisbeanairean luchdaidh a shealltainn os cionn charbadan a bhios a' luchdadh no dì-luchdadh -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Seall an clàr-ama ann an diogan seach làithean: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Seall na h-ùinean siubhail ann an clàran-ama le diogan geama seach làithean +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Seall àm ruigsinn is falbh air clàran-ama: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Seall na h-amannan ruigsinn is falbh air a bheilear an dùil air clàran-ama @@ -4285,8 +4283,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(fuirich fad {S STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(siubhail fad {STRING} gun chlàr-ama) STR_TIMETABLE_STAY_FOR :is fuirich fad {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :is siubhail fad {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}{P latha latha làithean latha} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}{P diog dhiog diogan diog} STR_TIMETABLE_TOTAL_TIME :{BLACK}Bheir an clàr-ama seo {STRING} airson coileanadh STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Bheir an clàr-ama seo {STRING} air a char as lugha airson coileanadh (cuid dheth gun chlàr-ama) @@ -4295,10 +4291,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Tha an c STR_TIMETABLE_STATUS_LATE :{BLACK}Tha an carbad seo {STRING} air deireadh an-dràsta STR_TIMETABLE_STATUS_EARLY :{BLACK}Tha an carbad seo {STRING} ro àm an-dràsta STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Cha do thòisich an clàr-ama seo fhathast -STR_TIMETABLE_STATUS_START_AT :{BLACK}Tòisich an clàr-ama seo {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Ceann-latha tòiseachaidh -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Tagh ceann-latha tòiseachaidh airson a' chlàir-ama seo. Suidhichidh Ctrl+Briogadh ceann-latha tòiseachaidh a' chlàir-ama seo is ma tha clàr-ama slàn aig an òrdugh seo, sgaoilidh seo a h-uile carbad a cho-roinneas an t-òrdugh seo gu cunbhalach, stèidhichte air an òrdugh eatorra + STR_TIMETABLE_CHANGE_TIME :{BLACK}Uair eile STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Atharraich an ùine a bheireadh an t-òrdugh a thagh thu diff --git a/src/lang/galician.txt b/src/lang/galician.txt index b9ba1b95f9..57b61945f1 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -192,6 +192,23 @@ STR_COLOUR_WHITE :Branco STR_COLOUR_RANDOM :Ao chou ###length 17 +STR_COLOUR_SECONDARY_DARK_BLUE :Azul escuro +STR_COLOUR_SECONDARY_PALE_GREEN :Verde pálido +STR_COLOUR_SECONDARY_SECONDARY_PINK :Rosa +STR_COLOUR_SECONDARY_YELLOW :Amarelo +STR_COLOUR_SECONDARY_RED :Vermello +STR_COLOUR_SECONDARY_LIGHT_BLUE :Azul claro +STR_COLOUR_SECONDARY_GREEN :Verde +STR_COLOUR_SECONDARY_DARK_GREEN :Verde escuro +STR_COLOUR_SECONDARY_BLUE :Azul +STR_COLOUR_SECONDARY_CREAM :Crema +STR_COLOUR_SECONDARY_MAUVE :Malva +STR_COLOUR_SECONDARY_PURPLE :Morado +STR_COLOUR_SECONDARY_ORANGE :Laranxa +STR_COLOUR_SECONDARY_BROWN :Marrón +STR_COLOUR_SECONDARY_GREY :Gris +STR_COLOUR_SECONDARY_WHITE :Branco +STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Igual que o primario # Units used in OpenTTD @@ -239,6 +256,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} pés STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtrar: STR_LIST_FILTER_OSKTITLE :{BLACK}Introducir unha ou máis palabras clave pola que filtrar a lista @@ -432,7 +450,7 @@ STR_FILE_MENU_EXIT :Saír # Map menu 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_LINGRAPH_LEGEND :Lenda do fluxo de carga STR_MAP_MENU_SIGN_LIST :Lista de rótulos # Town menu @@ -491,6 +509,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Borrar tódalas # About menu STR_ABOUT_MENU_LAND_BLOCK_INFO :Información de área de terreo +STR_ABOUT_MENU_HELP :Axuda e manuais 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 @@ -499,6 +518,7 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Aliñador de sprites STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Activa/desactiva caixas delimitadoras STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Activa/desactiva a coloración de bloques modificados +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Alternar a contorna dos Widgets # Place in highscore window ###length 15 @@ -591,7 +611,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Gráfica STR_GRAPH_INCOME_CAPTION :{WHITE}Gráfico de ingresos STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unidades de carga entregadas STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Puntuación de rendemento da compañía (máximo=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Valor da compañía +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Gráfico do valor da compañía STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Taxas de pago por carga STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Días en tránsito @@ -700,8 +720,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Pincha n STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Pincha nunha pista de música para borrala do programa actual (só Persoal1 ou Persoal2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Mellores compañías que chegaron a {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Cadro da liga de compañías en {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Persoa de negocios STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Emprendedor @@ -833,7 +851,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi pechada polos acreedores e vendéronse tódalas posesións! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Lanzada unha nova compañía de transportes! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} comeza a construción preto de {TOWN}! -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} comprada por {STRING}! +STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} foi comprada por {STRING} por unha cantidade non revelada! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Presidente) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} promoveu a construción dunha nova cidade: {TOWN}! @@ -890,6 +908,8 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nova {ST STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Abre a fiestra de grupo enfocada no grupo do vehículo. +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} xa non acepta: {CARGO_LIST} +STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} agora acepta: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subvención expirada:{}{}{STRING} dende {STRING} ata {STRING} non será subvencionada. STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvención reitrada:{}{}O servizo de transporte de {STRING} dende {STRING} ata {STRING} xa non ten subvención. @@ -934,6 +954,7 @@ STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Unidades monetarias STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selección de unidades monetarias +STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 42 STR_GAME_OPTIONS_CURRENCY_GBP :Libra esterlina @@ -1041,17 +1062,18 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}As tasas de refresco superiores a 60Hz poden afectar o rendemento. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conxunto básico de gráficos -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona o conxunto de gráficos básico a empregar +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona o conxunto de gráficos básico a empregar (non se pode cambiar na partida, só dende o menú principal) STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Información adicional sobre o conxunto de gráficos básico STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conxunto de sons base -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecciona o conxunto de sons base a empregar +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecciona o conxunto de sons base a empregar (non se pode cambiar na partida, só dende o menú principal) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Información adicional sobre o conxunto de sons base STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conxunto de música base STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecciona o conxunto de música base a empregar STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Información adicional sobre o conxunto de música base +STR_BASESET_STATUS :{STRING} {RED}({NUM} ficheiro{P "" s} perdido{P "" s} ou corrupto{P "" s}) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Erro ao obter a lista de resolucións soportadas STR_ERROR_FULLSCREEN_FAILED :{WHITE}O modo de pantalla completa fallou @@ -1215,6 +1237,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Esquerda STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centro STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dereita +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}segundo{P 0 "" s} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Crédito máximo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidade máxima de cartos que unha compañía pode pedir (sen ter en conta a inflación) @@ -1343,7 +1366,7 @@ STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :As novas ordes STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, un vehículo parará en cada estación pola que pase, Activando esta opción, pasará por cada estación no camiño ata o seu destino final sen paradas. Ten en conta que esta opción só define un valor por defecto para as novas ordes. Pódense fixar ordes individuáis explícitamente para cada comportamento en calquera caso STR_CONFIG_SETTING_STOP_LOCATION :Os trens paran por defecto no {STRING} do andén -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Lugar onde un tren parará por defecto no andén. 'Extremo cercano' significa preto do punto de entrada, 'medio' significa no medio do andén e 'extremo lonxano' significa alonxado do punto de entrada. Ten en conta que esta configuración só define un valor por defecto para as novas ordes. Pódense dar ordes individuáis explícitas para cada comportamento en calquera caso. +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Lugar onde un tren parará por defecto no andén. 'Extremo cercano' significa preto do punto de entrada, 'medio' significa no medio do andén e 'extremo lonxano' significa alonxado do punto de entrada. Ten en conta que esta configuración só define un valor por defecto para as novas ordes. Pódense dar ordes individuáis explícitas facendo clic no texto da orde. ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :extremo cercano STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :medio @@ -1386,6 +1409,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ningún* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reducido STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Permitir pasos a nivel con estradas e ferrocarrís de outras compañías: {STRING} +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Permitir a construción de pasos a nivel en estradas e ferrocarrís propiedade doutras compañías. STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permiti-la construción de estacións pasantes nas rúas de titularidade municipal: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Permite a construcción de estacións pasantes sobre as rúas propiedade da cidade @@ -1399,6 +1424,8 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Cando se activa STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Cor inicial da compañía: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolle a cor inicial da túa compañía +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Cor secundaria inicial da compañía: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Escoller a cor secundaria de inicio da compañía, se utilizas un NewGRF que o permita. STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Os aeroportos nunca caducan: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activar esta opción fai que cada tipo de aeroporto siga estando dispoñíbel para sempre dende a súa aparición @@ -1543,7 +1570,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Gris a vermello STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Escala de grises STR_CONFIG_SETTING_SCROLLMODE :Comportamento do desprazamento das xanelas: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamento cando te desplazas polo mapa +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamento cando te desplazas polo mapa. As opcións "bloqueo da posición do rato" non funcionan en todos os sistemas, como as de web, pantallas táctis, Linux con Wayland e outras. ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mover xanela co botón dereito do rato, posición do cursor bloqueada STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa co botón dereito do rato, posición do cursor bloqueada @@ -1601,6 +1628,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Apagado STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Pechar a fiestra con click dereito: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Pecha a fiestra facendo botón dereito dentro de ela. Deshabilita a axuda contextual facendo click-dereito! ###length 3 +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Non +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Si +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Si, salvo que este fixada STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Empregar o formato de data {STRING} para os nomes das partidas gravadas STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formato da data nos nomes das partidas gravadas @@ -1626,8 +1656,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Habilita-lo uso STR_CONFIG_SETTING_LOADING_INDICATORS :Usar indicadores de carga: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Escolle se os indicadores de carga se amosan sobre os vehículos en carga/descarga -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostra-lo horario en ticks en lugar de en días: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostra-los tempos de viaxe nos horarios en ticks en vez de en días +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar chegada e saída nos horarios: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Amosar chegadas e saídas anticipadas nos horarios @@ -1852,8 +1881,8 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permitir ás po STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :As cidades poden construir pasos a nivel: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Activando esta opción, as cidades poden construir pasos a nivel -STR_CONFIG_SETTING_NOISE_LEVEL :Permitir á cidade controla-lo nivel de ruído dos aeroportos: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Cando esta opción estea desactivada, pode haber dous aeroportos por cidade. Coa opción activada, o número de aeroportos por cidade está limitada polo nivel de aceptación de ruido da cidade, o cal depende da población da cidade, do tamaño do aeroporto e da distancia +STR_CONFIG_SETTING_NOISE_LEVEL :Limitar a colocación dos aeroportos en función do nivel de ruido: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Permite que as vilas bloqueen a construción dos aeroportos en función do nivel tolerábel de ruído, o que se basea na poboación da vila, o tamaño do aeroporto e a distancia. Cando esta opción está desactivada, as vilas permitirán só dous aeroportos a non ser que a actitude da autoridade local sexa "Permisiva". STR_CONFIG_SETTING_TOWN_FOUNDING :Fundar cidades: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Activando esta opción, os distintos xogadores poden fundar novas cidades @@ -1927,9 +1956,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ningunha STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial do tamaño da cidade: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Relación entre o tamaño medio das cidades e o dos pobos ao inicio da partida -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Actualizar o grafo de distribución cada {STRING}{NBSP}segundo{P 0:2 "" s}. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Actualizar o grafo de distribución cada {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo entre recálculos sucesivos do grafo de ligazóns. Cada recálculo calcula os plans para un compoñente do grafo. Iso significa que un valor X para esta configuración non significa que o grafo completo sexa actualizado cada X segundos. Só algúns compoñentes o serán. Canto máis curto sexa o tempo establecido, máis tempo de CPU será necesario para calculalo. Canto máis longo sexa o tempo establecido, máis tempo levará ata que a distribución de carga comece a percorrer novas rutas. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Toma {STRING}{NBSP}segundo{P 0:2 "" s} para o recálculo do grafo de distribución. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Toma {STRING} para o recálculo do gráfico de distribución. STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo necesario para cada recalculación dun compoñente do grafo de ligazóns. Cando se inicia unha recalculación, abrese un fío que se pode executar durante este número de segundos. Canto máis curto o establezas, máis probable é que o fío non remate cando se supón que debe facelo. Entón, o xogo detense ata que o fío remata («lag»). Canto máis longo o estabelezas, máis tempo levará actualizar a distribución cando cambien as rutas. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribución para pasaxeiros: {STRING} @@ -2062,7 +2091,8 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE} Fallo a # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Error na configuración de vídeo... -STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... non se atopu unha GPU compatible. Deshabilitarase a aceleración por hardware. +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... non se atopou unha GPU compatible. Deshabilitada a aceleración por hardware. +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... Os drivers da GPU provocaron un fallo no xogo. Deshabilitada aceleración por hardware. # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2076,6 +2106,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Multixog STR_INTRO_GAME_OPTIONS :{BLACK}Opcións da partida STR_INTRO_HIGHSCORE :{BLACK}Táboa das máximas puntuacións +STR_INTRO_HELP :{BLACK}Axuda e manuais STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Opcións STR_INTRO_NEWGRF_SETTINGS :{BLACK}Configuración NewGRF STR_INTRO_ONLINE_CONTENT :{BLACK}Comprobar contido online @@ -2097,6 +2128,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Seleccio STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Mostra-las opcións da partida STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Mostrar táboa das máximas puntuacións +STR_INTRO_TOOLTIP_HELP :{BLACK}Obten acceso a documentación e recursos en liña STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Opcións de visualización STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Mostra-la configuración de NewGRF STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Buscar contidos novos e actualizados para descargar @@ -2119,6 +2151,17 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Estás STR_ABANDON_SCENARIO_QUERY :{YELLOW}Estás seguro de que queres saír deste escenario? # Help window +STR_HELP_WINDOW_CAPTION :{WHITE}Axuda e manuais +STR_HELP_WINDOW_WEBSITES :{BLACK}Sitios web +STR_HELP_WINDOW_DOCUMENTS :{BLACK}Documentos +STR_HELP_WINDOW_README :{BLACK}Léame +STR_HELP_WINDOW_CHANGELOG :{BLACK}Rexistro de cambios +STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Erros coñecidos +STR_HELP_WINDOW_LICENSE :{BLACK}Licenza +STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD +STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Manual / Wiki +STR_HELP_WINDOW_BUGTRACKER :{BLACK}Reportar un erro +STR_HELP_WINDOW_COMMUNITY :{BLACK}Comunidade # Cheat window STR_CHEATS :{WHITE}Trampulladas @@ -2134,6 +2177,7 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Trocar a STR_CHEAT_CHANGE_DATE :{LTBLUE}Cambiar data: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar o ano actual STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir a modificación dos valores de producción: {ORANGE}{STRING} +STR_CHEAT_STATION_RATING :{LTBLUE}Manter a puntuacuón das estacións ao 100%: {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Novo esquema de cor @@ -2536,7 +2580,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Procurar STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Estás a saír de OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Os termos e condicións cambian para descargar contidos de páxinas web externas.{}Terás que dirixirte aos sitios web externos para ter instruccións acerca de cómo instalar os contidos en OpenTTD.{}Queres continuar? STR_CONTENT_FILTER_TITLE :{BLACK}Filtro etiqueta/nome: -STR_CONTENT_OPEN_URL :{BLACK}Visita a páxina web +STR_CONTENT_OPEN_URL :{BLACK}Páxina web STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visita a páxina web para este contido STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Descargar STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Comezar a descarga-lo contido seleccionado @@ -2607,6 +2651,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Habilita STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Habilitar transparencia para as pontes. CTRL+Click para bloquear STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Habilitar transparencia para estruturas coma faros e antenas. CTRL+Click para bloquear STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Activar a transparencia para a catenaria. CTRL+Click para bloquear +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Alternar transparencia para a carga e os textos de costes/ingresos. Ctrl+Clic para bloquear STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Facer os obxectos invisibles en lugar de transparentes # Linkgraph legend window @@ -2902,7 +2947,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}Grella 3 STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Aleatoria # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Financiar unha nova industria +STR_FUND_INDUSTRY_CAPTION :{WHITE}Financiamento de industrias STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Elixe a industria apropiada desta lista STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Moitas industrias aleatorias STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cubri-lo mapa con industrias colocadas aleatoriamente @@ -2918,14 +2963,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Eliminar STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Estás seguro de querer quitar todas as industrias? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadea de industrias para a industria {STRING} -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadea de industrias para a carga {STRING} +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadea industrial - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadea da carga - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Industrias provedoras STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Industrias clientes STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Casas STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Pincha na industria para ver os seus provedores e clientes STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Pincha na carga para ver os seus provedores e clientes -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Mostrar cadea +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Cadea industrial STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Mostra-las industrias provedoras e clientes da carga STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Ligar ao mapa STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Selecciona as industrias que tamén se amosan no mapa @@ -3321,6 +3366,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Gravar STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Gravar o establecido ao nome seleccionado actualmente # NewGRF parameters window +STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Cambiar os parámetros dos gráficos base STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Cambiar os parámetros de NewGRF STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Pechar STR_NEWGRF_PARAMETERS_RESET :{BLACK}Reiniciar @@ -3337,6 +3383,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspecci STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} en {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Obxecto STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tipo de carril +STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parámetro de variable NewGRF 60+x (hexadecimal) @@ -3520,8 +3567,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Financiar a reconstrución das rúas da localidade.{}Provoca unhas considerables interrupcións no tráfico durante seis meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construír unha estatua en honor a túa compañía.{}Condede un aumento permanente da puntuación das túas estacións nesta localide.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW} Financiar a construción de novos edificios comerciais na cidade.{}Concede un aumento temporal do crecemento desta localide.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Comprar os dereitos exclusivos de transporte na cidade durante 1 ano.{}A autoridade só permitirá que os pasaxeiros e as mercadorías usen as estacións da túa compañía.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Suborna-la autoridade local para mellora-la túa puntuación, co risco dunha gran penalización se o descobren.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Comprar os dereitos exclusivos de transporte na cidade durante 1 ano.{}A autoridade só permitirá que os pasaxeiros e as mercadorías usen as estacións da túa compañía. Un soborno exitoso doutro competidor cancelará este contrato.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Suborna-la autoridade local para mellorar a túa puntuación e abotar os dereitos de transporte exclusivos doutro competidor, co risco dunha gran penalización se o descobren.{}{POP_COLOUR}Custo: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Obxectivos @@ -3743,6 +3790,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalles STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Ver contas detalladas de infraestrutura STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Dar cartos STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Dar cartos a esta compañía +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}OPA Hostil +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Facer unha OPA Hostil desta compañía STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nova cara STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Selecciona-la nova cara do presidente @@ -3758,6 +3807,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome do preside STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Introduce a cantidade de cartos que queres dar STR_BUY_COMPANY_MESSAGE :{WHITE}Buscamos unha compañía de transportes para adquiri-la nosa compañía{}{}Queres mercar{COMPANY} por {CURRENCY_LONG}? +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Nunha OPA Hostil de {COMPANY}, comprarás todos os activos, liquidarás todos os préstamos e pagarás a suma dos beneficios de dous anos.{}{}O total estímase en {CURRENCY_LONG}.{}{}Queres continuar con esta OPA Hostil? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraestrutura de {COMPANY} @@ -3829,6 +3879,7 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Xestiona STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envia-las instruccións a tódolos vehículos desta lista STR_VEHICLE_LIST_REPLACE_VEHICLES :Reemprazar vehículos STR_VEHICLE_LIST_SEND_FOR_SERVICING :Enviar para servizo +STR_VEHICLE_LIST_CREATE_GROUP :Crear grupo STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Beneficio este ano: {CURRENCY_LONG} (ano pasado: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} @@ -4514,8 +4565,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(permanece por STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viaxe para {STRING}, sen calendarizar) STR_TIMETABLE_STAY_FOR :e parar durante {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :e viaxar durante {STRING} -STR_TIMETABLE_DAYS :{COMMA} día{P "" s} -STR_TIMETABLE_TICKS :{COMMA} tick{P "" s} STR_TIMETABLE_TOTAL_TIME :{BLACK}Levará {STRING} completar este horario STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Este horario levará {STRING} completalo (non está completo) @@ -4524,10 +4573,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Este veh STR_TIMETABLE_STATUS_LATE :{BLACK}Este vehículo está retrasado {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Este vehículo vai adiantado {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horario aínda non comezóu -STR_TIMETABLE_STATUS_START_AT :{BLACK}Este horario comezará o {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Data comezo -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecciona unha data coma punto de inicio para este horario. Ctrl + click distribúe uniformemente tódolos vehículos que compartan esta orde baséandose na súa orde relativa. se a orde está completamente tabulada nos horarios + STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambiar Tempo STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambiar o tempo que debería levar a orde seleccionada. Ctrl+Click cambia o tempo para todas as ordes @@ -4646,16 +4693,25 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN # Textfile window +STR_TEXTFILE_JUMPLIST :{WHITE}Táboa de contidos +STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Saltar rápido a sección no ficheiro amosado nesta lista +STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} +STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Retroceder no historial de navegación +STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Avanzar no historial de navegación STR_TEXTFILE_WRAP_TEXT :{WHITE}Axustar texto STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Axusta o texto á fiestra de xeito que encaixa sen ter que facer scroll -STR_TEXTFILE_VIEW_README :{BLACK}Ver "readme" +STR_TEXTFILE_VIEW_README :{BLACK}Léame +STR_TEXTFILE_VIEW_README_TOOLTIP :Ver o "léame" deste contido STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Rexistro de cambios +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Ver a listaxe de cambios deste contido STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licenza +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Ver a licenza deste contido ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE} "readme" de {STRING} {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Rexistro de cambios de {STRING} {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE} licenza de {STRING}{STRING} STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Previsualizar resultado da enquisa +STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD, documento '{STRING}' # Vehicle loading indicators @@ -4837,7 +4893,7 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Demasiad STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Demasiado preto doutro peirao STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Demasiado preto doutro aeroporto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Non se pode renomear a estación... -STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... esta rúa pertenece á cidade +STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... esta rúa é municipal STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... a estrada vai na dirección incorrecta STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... as paradas pasantes non poden ter esquinas STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... as paradas pasantes non poder ter interseccións @@ -5112,6 +5168,7 @@ STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Non se p STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Os vehículos só poden parar nas estacións STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este vehículo non para nesta estación STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... horario incompleto +STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... o horario aínda non comezou # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... demasiados sinais @@ -5604,6 +5661,8 @@ STR_JUST_DATE_SHORT :{DATE_SHORT} STR_JUST_DATE_LONG :{DATE_LONG} STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} +STR_JUST_STRING1 :{STRING} +STR_JUST_STRING2 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/german.txt b/src/lang/german.txt index 3684132d09..2bab17f3fd 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -256,6 +256,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filter: STR_LIST_FILTER_OSKTITLE :{BLACK}Einen oder mehrere Schlüsselwörter für den Listenfilter eingeben @@ -719,8 +720,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klicken STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klicken Sie auf einen Musiktitel, um ihn aus der aktuellen Liste zu entfernen (nur für Benutzerdefiniert 1 und 2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Beste Firmen, die {NUM} erreichten -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Firmentabelle in {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Geschäftsperson STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Unternehmer @@ -1074,6 +1073,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Basismus STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Ein Basismusikset auswählen STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Zusätzliche Informationen über das Basismusikset +STR_BASESET_STATUS :{STRING} {RED}({NUM} fehlende/beschädigte Datei{P "" en}) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Eine Liste unterstützter Auflösungen konnte nicht ermittelt werden STR_ERROR_FULLSCREEN_FAILED :{WHITE}Vollbildmodus nicht möglich @@ -1656,8 +1656,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Nutze erweitert STR_CONFIG_SETTING_LOADING_INDICATORS :Ladestandanzeiger verwenden: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Auswählen, ob beim Be- oder Entladen der Ladestand in Prozent über dem Fahrzeug angezeigt werden soll -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Fahrpläne in Ticks anstatt in Tagen anzeigen: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Zeige Fahrtzeiten in Fahrplänen in Ticks statt Tagen +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Zeige Ankunft und Abfahrt im Fahrplan: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Zeige geschätzte Ankunfts- und Abfahrtzeiten in Fahrplänen @@ -2346,7 +2345,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Der Name STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Passwort setzen STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Ein Passwort verhindert, dass unbefugte Leute beitreten -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Sichtbarkeit +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Sichtbarkeit: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Ob andere Personen Ihren Server in der öffentlichen Liste sehen können STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} Teilnehmer STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximale Teilnehmeranzahl: @@ -2581,7 +2580,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Inhalte, STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}OpenTTD wird hiermit verlassen! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Die Bedingungen für den Download von Erweiterungen von fremden Webseiten variieren.{}Bei Problemen mit der Installation der Erweiterung in OpenTTD bitte auf der externen Webseite nach Anleitungen suchen.{}Fortfahren? STR_CONTENT_FILTER_TITLE :{BLACK}Filter für Stichworte oder Namen: -STR_CONTENT_OPEN_URL :{BLACK}Webseite anzeigen +STR_CONTENT_OPEN_URL :{BLACK}Webseite STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Webseite für diesen Eintrag anzeigen STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Herunterladen STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Beginne die ausgewählten Erweiterung(en) herunterzuladen @@ -4566,8 +4565,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(warte {STRING} STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(fahre {STRING}, ohne Fahrplan) STR_TIMETABLE_STAY_FOR :und {STRING} lang bleiben STR_TIMETABLE_AND_TRAVEL_FOR :und {STRING} lang unterwegs -STR_TIMETABLE_DAYS :{COMMA}{NBSP}Tag{P "" e} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}Tick{P "" s} STR_TIMETABLE_TOTAL_TIME :{BLACK}Dieser Fahrplan benötigt {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Dieser Fahrplan benötigt mindestens {STRING} (nicht alle geplant) @@ -4576,10 +4573,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Das Fahr STR_TIMETABLE_STATUS_LATE :{BLACK}Dieses Fahrzeug hat {STRING} Verspätung STR_TIMETABLE_STATUS_EARLY :{BLACK}Dieses Fahrzeug ist {STRING} zu früh STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Dieser Fahrplan ist noch nicht gültig -STR_TIMETABLE_STATUS_START_AT :{BLACK}Dieser Fahrplan wird ab {STRING} in Kraft sein -STR_TIMETABLE_STARTING_DATE :{BLACK}Anfangsdatum -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Wähle ein Anfangsdatum für diesen Fahrplan aus. Mit Strg+Klick wird bei allen Fahrzeugen, die nach demselben Fahrplan unterwegs sind, ein zeitlich versetztes Anfangsdatum gesetzt, so dass die Abstände zwischen den einzelnen Fahrzeugen immer gleich sind. Dazu muss der Fahrplan erst komplett erfasst worden sein. + STR_TIMETABLE_CHANGE_TIME :{BLACK}Zeit ändern STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Zeitrahmen für den markierten Auftrag ändern. Strg+Klick legt die Zeit für alle Aufträge fest @@ -4603,8 +4598,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Voraussi STR_TIMETABLE_SCHEDULED :{BLACK}Fahrplanmäßig STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Umschalten zwischen Anzeige der erwarteten Ankunftszeit und des Fahrplans -STR_TIMETABLE_ARRIVAL :An: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :Ab: {COLOUR}{DATE_TINY} # Date window (for timetable) @@ -4707,9 +4700,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Zurück STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Wieder vorwärts in Navigationshistorie gehen STR_TEXTFILE_WRAP_TEXT :{WHITE}Text umbrechen STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Text des Fensters so umbrechen, dass es ohne Scrollen hineinpasst -STR_TEXTFILE_VIEW_README :{BLACK}Liesmich anzeigen +STR_TEXTFILE_VIEW_README :{BLACK}Liesmich +STR_TEXTFILE_VIEW_README_TOOLTIP :Liesmich für diesen Inhalt anzeigen STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Änderungen +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Änderungen für diesen Inhalt anzeigen STR_TEXTFILE_VIEW_LICENCE :{BLACK}Lizenz +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Lizenz für diesen Inhalt anzeigen ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING}-Liesmich von {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING}-Änderungen von {STRING} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 5a13ce0e9a..95c0e1b74b 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -297,6 +297,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}μ STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Φιλτράρισμα λίστας: STR_LIST_FILTER_OSKTITLE :{BLACK}Εισαγώγη κειμένου για φιλτράρισμα @@ -804,8 +805,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Πατή STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Πατήστε στο τραγούδι για να το αφαιρέσετε από το πρόγραμμα (Προσαρμοσμένο 1 ή 2 μόνο) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Οι καλύτερες εταιρίες που έφτασαν το {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Πίνακας Πρωταθλήματος Εταιριών σε {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}, STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Επαγγελματίας STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Πρωτοπόρος @@ -1702,8 +1701,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ενεργοπ STR_CONFIG_SETTING_LOADING_INDICATORS :Χρήση δεικτών φόρτωσης: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Επιλέξτε εάν οι δείκτες φόρτωσης εμφανίζονται πάνω από τα οχήματα που φορτώνουν ή ξεφορτώνουν -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Εμφάνιση δρομολογίων σε στιγμές αντί για ημέρες: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Εμφάνιση χρόνων ταξιδιού στα χρονοδιαγράμματα σε στιγμές αντί σε ημέρες +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Εμφάνιση αφίξεων και αναχωρήσεων στα δρομολόγια: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Εμφάνιση αναμενόμενης ώρας άφιξης και αναχώρησης στα χρονοδιαγράμματα @@ -4572,8 +4570,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(αναμονή STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(ταξίδι για {STRING}, μη δρομολογημένο) STR_TIMETABLE_STAY_FOR :και μείνε για {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :και ταξίδεψε για {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}μέρ{P α ες} -STR_TIMETABLE_TICKS :{COMMA} στιγμ{P ή ές} STR_TIMETABLE_TOTAL_TIME :{BLACK}Το δρομολόγιο αυτό θα χρειαστεί τουλάχιστον {STRING} για να ολοκληρωθεί STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Το δρομολόγιο αυτό θα χρειαστεί τουλάχιστον {STRING} για να ολοκληρωθεί (δεν είναι όλα τα χρονοδιαγράμματα) @@ -4582,10 +4578,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Αυτό STR_TIMETABLE_STATUS_LATE :{BLACK}Αυτό το όχημα έχει καθυστερήσει κατά {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Το όχημα εκτελεί το δρομολόγιο του κατά {STRING} νωρίτερα STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Αυτό το δρομολόγιο ακόμα δεν έχει ξεκινήσει -STR_TIMETABLE_STATUS_START_AT :{BLACK}Αυτό το δρομολόγιο θα ξεκινήσει στις {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Εναρκτήρια ημερομηνία -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Διαλέξτε μια ημερομηνία ως αρχικό σημείο του πίνακα δρομολογίων. Το Ctrl+κλικ θέτει το αρχικό σημείο του πίνακα δρομολογίων και διανέμει τα οχήματα που μοιράζονται τις διαταγές ίσα με βάση τη σχετική τους σειρά αν η διαταγή είναι εξολοκλήρου δρομολογημένη + STR_TIMETABLE_CHANGE_TIME :{BLACK}Αλλαγή Χρόνων STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Αλλάζει ο χρόνος που παίρνει η επιλεγμένη επιλογή για να εκτελεστεί diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 57ff59d2e6..2c55687f70 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -240,6 +240,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} רג STR_UNITS_HEIGHT_METRIC :{DECIMAL} מ' STR_UNITS_HEIGHT_SI :{DECIMAL} מ' + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}מחרוזת סינון: STR_LIST_FILTER_OSKTITLE :{BLACK}הכנס מחרוזת סינון @@ -685,8 +686,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}(לחץ STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}(לחץ על רצועה כדי להסיר אותה מהתוכנית הנוחכית(מותאם אישית 1 או מותאם אישית 2 בלבד # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}חמש החברות שהגיעו לשנת {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}טבלת ליגה של חברות ב {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}.{COMMA} STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :איש עסקים STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :יזם @@ -1521,8 +1520,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :אפשר שימ STR_CONFIG_SETTING_LOADING_INDICATORS :{STRING} :הצג מצביעי הטענה STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :בחר האם מדדי טעינה יוצגו מעל רכבים בעת טעינתם או פריקתם -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :{STRING} :הצג לוח זמנים בפעימות במקום בימים -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :הצג זמני נסיעה בלוחות זמנים בפעימות משחק במקום בימים +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :הצג לוחות זמנים של הגעות ועזיבות: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :הצג זמני הגעה ויציאה צפויים בלוחות זמנים @@ -4181,8 +4179,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(נשאר ל-{S STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(מסע עבור {STRING} ללא טבלת זמנים) STR_TIMETABLE_STAY_FOR :{STRING} והמתן למשך STR_TIMETABLE_AND_TRAVEL_FOR :{STRING} וערוך מסע ל -STR_TIMETABLE_DAYS :{P 0 "יום " ""}{COMMA}{P "" " ימים"} -STR_TIMETABLE_TICKS :{P 0 "פעימה " ""}{COMMA}{P "" " פעימות"} STR_TIMETABLE_TOTAL_TIME :{BLACK}{STRING} להשלמת לוח זמנים זה נדרשים STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}.(לא כל היעדים תוזמנו) {STRING} להשלמת לוח זמנים זה ידרשו לפחות @@ -4191,10 +4187,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}כלי STR_TIMETABLE_STATUS_LATE :{BLACK}{STRING} רכב זה מאחר ב STR_TIMETABLE_STATUS_EARLY :{BLACK}{STRING} רכב זה מקדים ב STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}לוח זמנים זה עדיין לא התחיל -STR_TIMETABLE_STATUS_START_AT :{BLACK}לוח זמנים זה יתחיל ב-{STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}תאריך התחלה -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}בחר תאריך כנקודת ההתחלה ללוח הזמנים. Ctrl+לחיצה קובע את נקודת ההתחלה של לוח זמנים זה ומפזר בצורה אחידה בין כל כלי התחבורה המשותפים בלוח זמנים זה לפי סדרם, במידה וכל ההוראות כפופות ללוח הזמנים. + STR_TIMETABLE_CHANGE_TIME :{BLACK}שנה זמן STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}שנה את פרק הזמן לשהייה ביעד שנבחר diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 25765efc16..6e926b758f 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -80,6 +80,7 @@ STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP} + # Common window strings STR_TOOLTIP_SORT_ORDER :{BLACK}क्रमबद्धता क्रम चुनें (अवरोही/आरोही) @@ -505,6 +506,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :अक्षम +###length 3 @@ -1312,7 +1314,7 @@ STR_TIMETABLE_ORDER_VIEW :{BLACK}आद -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}इस समयसारिणी के लिये एक आरंभिक दिनांक चुनें। Ctrl+क्लिक इस समयसारिणी की प्रारंभिक तिथि निर्धारित करता है और यदि निर्देश पूर्णतः समयसारिणी-बद्ध है तो इस निर्देश को साझा करने वाले सभी वाहनों को उनके परस्पर निर्देशों के आधार पर समानता से वितरित करता है। + diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 38b585d9dd..79bf30e8ee 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -318,6 +318,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Szűrő kifejezés: STR_LIST_FILTER_OSKTITLE :{BLACK}Egy vagy több kulcsszó megadása a szűréshez @@ -781,8 +782,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kattints STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kattints a zeneszámra annak az aktuális zenei műsorból való eltávolításához (csak Saját 1 és Saját 2 esetén) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}A legjobb vállalatok, melyek elérték {NUM}-t -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Vállalatok helyezései {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Üzletember STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Vállalkozó @@ -1719,8 +1718,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Továbbfejleszt STR_CONFIG_SETTING_LOADING_INDICATORS :Rakodásjelző használata: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :A rakodásjelző megjelenítésének kiválasztása a be- és kirakodó járművek felett -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Menetrendi idő-alapegység tick a nap helyett: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Az utazási idők megjelenítése napok helyett tickekben +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Indulás és érkezés megjelenítése a menetrendekben: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Várható érkezés és indulás megjelenítése a menetrendekben @@ -4629,8 +4627,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(ottmarad {STRI STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :({STRING} utazás, időzítetlen) STR_TIMETABLE_STAY_FOR :állomásra és maradj ott {STRING}ig STR_TIMETABLE_AND_TRAVEL_FOR :és a menetidő: {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}nap -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick STR_TIMETABLE_TOTAL_TIME :{BLACK}A menetrend teljesítési ideje: {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}A menetrend teljesítési ideje legalább: {STRING} (nincs minden időzítve) @@ -4639,10 +4635,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Ez a já STR_TIMETABLE_STATUS_LATE :{BLACK}Ez a jármű jelenleg {STRING} eltéréssel, késéssel közlekedik STR_TIMETABLE_STATUS_EARLY :{BLACK}Ez a jármű jelenleg {STRING} eltéréssel, korábban közlekedik STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}A menetrend még nincs megkezdve -STR_TIMETABLE_STATUS_START_AT :{BLACK}A menetrend megkezdésének dátuma {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Indulás dátuma -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Menetrend kezdeti dátumának kiválasztása. A ctrl+kattintás egyenletesen elosztja az ezen a menetrenden osztozó járműveket a kezdeti dátumtól fogva a jelenlegi utasításuk alapján, amennyiben a menetrend teljesen időzítve van. + STR_TIMETABLE_CHANGE_TIME :{BLACK}Idő megváltoztatása STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}A kijelölt utasítás végrehajtási idejét változtatja meg. Ctrl+kattintással beállítod az időt az összes utasításhoz. @@ -4666,8 +4660,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Várhat STR_TIMETABLE_SCHEDULED :{BLACK}Tervezett STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Váltás a várható és a tervezett időpontok között -STR_TIMETABLE_ARRIVAL :Érk: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :Ind: {COLOUR}{DATE_TINY} # Date window (for timetable) diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index cf406dc2c1..e29370908b 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -219,6 +219,7 @@ STR_UNITS_FORCE_SI :{DECIMAL} kN STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} ft STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Sía: STR_LIST_FILTER_OSKTITLE :{BLACK}Sláðu inn leitarstreng @@ -642,8 +643,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Veldu la STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Smelltu á lag til að fjarlægja það úr listanum (á aðeins við um Sérvalið1 og Sérvalið2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Efstu fyrirtæki sem náðu {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Sambandstafla fyrirtækis í {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Viðskiptamaður STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Athafnamaður @@ -1416,8 +1415,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Virkja mögulei STR_CONFIG_SETTING_LOADING_INDICATORS :Sýna stöðu lestunar: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Sýna fyrir ofan farartækin stöðu lestunar þegar þau eru að ferma eða afferma -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Birta áætlanir í slögum frekar en dögum: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Sýna ferðatíma í áætlun í slögum frekar en dögum +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Sýna komu- og brottfaratíma í áætlunum: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Sýna áætlaðan komu- og brottfarar tíma í áætlun @@ -3783,8 +3781,6 @@ STR_TIMETABLE_TRAVEL_FOR :Ferðast í {ST STR_TIMETABLE_TRAVEL_FOR_SPEED :Ferðast í {STRING} með hámarkshraða {VELOCITY} STR_TIMETABLE_STAY_FOR :og bíða í {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :og ferðast í {STRING} -STR_TIMETABLE_DAYS :{COMMA} dag{P "" a} -STR_TIMETABLE_TICKS :{COMMA} sl{P ag ög} STR_TIMETABLE_TOTAL_TIME :{BLACK}Það mun taka {STRING} að ljúka við þessa áætlun STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Það mun að minnsta kosti taka {STRING} að ljúka við þessa áætlun (ekki allar skipanir á áætlun) @@ -3793,9 +3789,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Þetta f STR_TIMETABLE_STATUS_LATE :{BLACK}Þetta farartæki er {STRING} of seint STR_TIMETABLE_STATUS_EARLY :{BLACK}Þetta farartæki er {STRING} of fljótt STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Þessi tímaáætlun er ekki hafin -STR_TIMETABLE_STATUS_START_AT :{BLACK}Tímaáætlunin byrjar {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Byrjunardagsetning + STR_TIMETABLE_CHANGE_TIME :{BLACK}Breyta tíma STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Breyta tímanum sem valin skipun ætti að taka diff --git a/src/lang/ido.txt b/src/lang/ido.txt index e208ff94d6..b69b47d0e6 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -217,6 +217,7 @@ STR_UNITS_FORCE_SI :{DECIMAL} kN STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} pd STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_BUTTON_SORT_BY :{BLACK}Ordinas per @@ -681,6 +682,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora +###length 3 @@ -1433,6 +1435,7 @@ STR_ORDER_GO_TO_STATION :{STRING} {STATI + # Date window (for timetable) diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 17167745ad..6498f2bfe7 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -255,6 +255,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Saring: STR_LIST_FILTER_OSKTITLE :{BLACK}Masukkan satu atau lebih kata kunci untuk penyaringan pada list @@ -718,8 +719,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik pad STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik pada track musik untuk menghapusnya dari program saat ini. (Bebas 1 atau Bebas 2 saja) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Perusahaan tertinggi yang mencapai tahun {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tabel Liga Perusahaan {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Pebisnis STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Pengusaha @@ -1656,8 +1655,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Mengaktifkan pe STR_CONFIG_SETTING_LOADING_INDICATORS :Tampilkan indikator pengangkutan: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Pilih apakah petunjuk beban ditayangkan di atas kendaran yang sedang mengisi atau menurunkan beban -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Penjadwalan menggunakan satuan titik , bukan satuan hari: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Menunjukan waktu perjalanan dalam titik permainan daripada dalam hari +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Tampilkan keberangkatan dan kedatangan pada jadwal: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Tampilkan waktu diantisipasi kedatangan dan keberangkatan di jadwal @@ -4566,8 +4564,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(menetap untuk STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(perjalan untuk {STRING}, tidak berjadwal) STR_TIMETABLE_STAY_FOR :dan tinggal selama {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :dan berjalan selama {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}hari -STR_TIMETABLE_TICKS :{COMMA}{NBSP}titik STR_TIMETABLE_TOTAL_TIME :{BLACK}Total durasi seluruh perjalanan akan memakan waktu {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Total durasi seluruh perjalanan akan memakan waktu kurang lebih {STRING} untuk terpenuhi (blm semuanya terjadwal) @@ -4576,10 +4572,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Kendaraa STR_TIMETABLE_STATUS_LATE :{BLACK}Kendaraaan ini berjalan terlambat {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Kendaraaan ini berjalan lebih awal {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Jadwal masih belum dimulai -STR_TIMETABLE_STATUS_START_AT :{BLACK}Jadwal ini akan dimulai pada {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Tanggal mulai -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Pilih tanggal titik mula timetable. Ctrl+Click untuk mendistribusikan semua kendaraan dengan instruksi sama secara merata dari tanggal yang telah dipilih berdasarkan instruksi relatif tiap kendaraan, hanya jika intruksi tersebut sepenuhnya terjadwal. + STR_TIMETABLE_CHANGE_TIME :{BLACK}Ubah Durasi STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ubah jumlah waktu yang seharusnya dibutuhkan, pada tujuan yang terpilih. Ctrl+Click untuk mengubah keseluruhan tujuan @@ -4603,8 +4597,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Harapan STR_TIMETABLE_SCHEDULED :{BLACK}Dijadwalkan STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Ubah antara perkiraan dan jadwal -STR_TIMETABLE_ARRIVAL :T: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :B: {COLOUR}{DATE_TINY} # Date window (for timetable) diff --git a/src/lang/irish.txt b/src/lang/irish.txt index a446fc7715..7dbd840afa 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -228,6 +228,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Teaghrán scagtha: STR_LIST_FILTER_OSKTITLE :{BLACK}Iontráil teaghráin scagaire @@ -687,8 +688,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Cliceái STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Cliceáil ar rian ceoil chun é a bhaint ón gclár reatha (Saincheaptha1 nó Sainche # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Cuideachtaí is fearr a bhain amach {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tábla Sraithe na gCuideachtaí in {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Fear gnó STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Fiontraí @@ -1562,8 +1561,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Cumasaigh úsá STR_CONFIG_SETTING_LOADING_INDICATORS :Úsáid táscairí lódála: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Roghnaigh cibé acu an dtaispeánfar táscairí lódála os cionn feithiclí atá ag lódáil nó ag dílódáil nó nach dtaispeánfar -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Taispeáin an t-amchlár i dticeanna seachas i laethanta: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Taispeáin amanna taistil i dtáblaí ama i dticeanna cluiche seachas laethanta +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Taispeáin am teacht isteach agus fágála in amchláir: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Taispeáin na hamanna teacht isteach agus imeachta a bhfuiltear ag súil leo sna hamchláir @@ -4380,8 +4378,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(fan ar feadh { STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(taisteal ar feadh {STRING}, gan amchlár) STR_TIMETABLE_STAY_FOR :agus fan ar feadh {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :agus taisteal ar feadh {STRING} -STR_TIMETABLE_DAYS :{COMMA} lá{P "" "" "" "" ""} -STR_TIMETABLE_TICKS :{COMMA} {P th th th dt t}ic STR_TIMETABLE_TOTAL_TIME :{BLACK}Tógfaidh sé {STRING} an t-amchlár seo a chur i gcrích STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Glacfaidh sé ar a laghad {STRING} chun an t-amhchlár seo a chur i gcrích (níl gach rud ar an amchlár) @@ -4390,10 +4386,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Tá an f STR_TIMETABLE_STATUS_LATE :{BLACK}Tá an fheithicil seo ag rith {STRING} mall faoi láthair STR_TIMETABLE_STATUS_EARLY :{BLACK}Tá an fheithicil seo ag rith {STRING} luath faoi láthair STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Níor thosaigh an t-amchlár seo fós -STR_TIMETABLE_STATUS_START_AT :{BLACK}Tosóidh an t-amchlár seo ag {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Dáta tosaigh -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Roghnaigh dáta mar phointe tosaigh don amchlár seo. Ctrl+Cliceáil chun pointe tosaigh an amchlár a shocrú agus gach feithicil a chomhroinneann an t-ordú seo a dháileadh go cothrom bunaithe ar a hordú coibhneasta, fiú má tá amchlár iomlán ann don ordú sin + STR_TIMETABLE_CHANGE_TIME :{BLACK}Athraigh Am STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Athraigh an méid ama ar chóir don ordú aibhsithe a thógáil diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 88b6fd5a7b..6d300ac363 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -257,6 +257,10 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m +STR_UNITS_DAYS :{COMMA}{NBSP}giorn{P "o" i} +STR_UNITS_SECONDS :{COMMA}{NBSP}second{P "o" i} +STR_UNITS_TICKS :{COMMA}{NBSP}tick{P "" s} + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtro: STR_LIST_FILTER_OSKTITLE :{BLACK}Immettere una o più parole chiave per filtrare dall'elenco @@ -720,8 +724,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Fare cli STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Fare clic su un brano per rimuoverlo dal programma corrente (solo Personale1 o Personale2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Le migliori compagnie che hanno raggiunto il {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Classifica compagnie nel {NUM} +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Aziende top STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Commerciante STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Imprenditore @@ -1523,7 +1526,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Originale STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Tipo di terreno: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Solo con TerraGenesis) Tipo di dislivelli presenti nel paesaggio. +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Scegliere l'altezza delle colline e delle montagne del paesaggio STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densità delle industrie: {STRING.fs} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Determina quante industrie sono generate e a quale livello di densità sulla mappa sono mantenute nel corso della partita. @@ -1532,18 +1535,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Massima distanz STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limita la distanza dal bordo della mappa entro cui possono essere costruite raffinerie e piattaforme petrolifere. Nelle mappe insulari sono comunque sempre vicino alla costa. Su mappe più grandi di 256 caselle il valore aumenta proporzionalmente. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altezza delle nevi perenni: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Determina la quota alla quale appare la neve nei paesaggi subartici. La neve ha anche l'effetto di influenzare la generazione delle industrie e i requisiti per la crescita delle città. Può essere modificato solo tramite l'Editor di scenari o altrimenti calcolato tramite "Aree innevate". +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Scegliere a quale altezza inizia a nevicare nel paesaggio sub-artico. La neve influisce anche sulla generazione di industrie e sui requisiti di crescita delle città. Può essere modificato solo tramite l'Editor scenari o viene altrimenti calcolato tramite le "Aree innevate". STR_CONFIG_SETTING_SNOW_COVERAGE :Aree innevate: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Regola la quantità approssimativa di neve presente nel paesaggio subartico. La neve influisce anche sulla generazione dell'industria e sui requisiti di crescita della città. Si può impostare solo durante la generazione della mappa o nelle impostazioni prima dell'inizio di una nuova partita. La terra appena sopra il livello del mare non è mai innevata. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Scegliere la quantità approssimativa di neve sul paesaggio sub-artico. La neve influisce anche sulla generazione di industrie e sui requisiti di crescita delle città. Si usa solo durante la generazione della mappa. Le caselle del livello del mare e della costa non hanno mai neve. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Aree desertiche: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Regola la quantità approssimativa di deserto nei paesaggi tropicali. Il deserto influenza anche la generazione di industrie. Si può impostare solo durante la generazione della mappa o nelle impostazioni prima dell'inizio di una nuova partita. +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Scegliere la quantità approssimativa di deserto nel paesaggio tropicale. Il deserto influisce anche sulla generazione di industrie e sui requisiti di crescita delle città. Utilizzato solo durante la generazione della mappa STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Irregolarità del terreno: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Solo con TerraGenesis) Seleziona la frequenza delle colline. I paesaggi morbidi presentano poche colline di forma allargata. I paesaggi accidentati hanno molte colline, che potrebbero apparire ripetitive. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Scegliere la forma e il numero di colline. I paesaggi morbidi hanno un numero minore di colline più ampie, mentre i paesaggi ruvidi hanno un numero maggiore di colline più piccole. ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Molto morbido STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Morbido @@ -1551,7 +1554,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Accidentato STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Molto accidentato STR_CONFIG_SETTING_VARIETY :Varietà del terreno: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Solo con TerraGenesis) Determina in quale misura la mappa affianca aree montuose ed aree pianeggianti. Poiché questa impostazione agisce abbassando progressivamente la quota del terreno, le altre impostazioni dovrebbero essere impostate per un terreno montuoso. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Scegliere se la mappa deve contenere sia montagne che aree pianeggianti. Più alta è la varietà, maggiori sono le differenze di altitudine tra aree montuose e pianeggianti. STR_CONFIG_SETTING_RIVER_AMOUNT :Quantità di fiumi: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Imposta la quantità di fiumi da generare. @@ -1571,6 +1574,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Guida a sinistr STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Guida a destra STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotazione heightmap: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Scegliere il modo in cui l'immagine della heightmap viene ruotata per adattarsi al mondo di gioco. ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Antioraria STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Oraria @@ -1691,8 +1695,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Abilita l'utili STR_CONFIG_SETTING_LOADING_INDICATORS :Utilizza gli indicatori di caricamento: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Determina se gli indicatori di caricamento sono mostrati sopra i veicoli in caricamento o scaricamento -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostra le tabelle orarie in tick piuttosto che in giorni: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostra il tempo di viaggio in tick del simulatore invece che in giorni +STR_CONFIG_SETTING_TIMETABLE_MODE :Unità di tempo per gli orari: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Selezionare le unità di tempo utilizzate per gli orari dei veicoli. +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Giorni +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Secondi +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Ticks STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostra gli arrivi e le partenze nelle tabelle orarie: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostra gli orari di arrivo e partenza previsti nelle tabelle orarie @@ -1994,7 +2002,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Dimensione medi STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Aggiornare il grafico di distribuzione ogni {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo tra i successivi ricalcoli del grafico dei collegamenti. Ogni ricalcolo calcola i piani per un componente del grafico. Ciò significa che un valore X per questa impostazione non significa che l'intero grafico verrà aggiornato ogni X secondi. Solo alcuni componenti lo saranno. Quanto più breve è l'impostazione, tanto più tempo di CPU sarà necessario per il calcolo. Più lungo è il valore impostato, più tempo ci vorrà prima che la distribuzione del carico inizi su nuove rotte. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Prendere {STRING} per il ricalcolo del grafico di distribuzione +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Impiegare {STRING} per il ricalcolo del grafico di distribuzione STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo necessario per ogni ricalcolo di un componente del grafo dei collegamenti. Quando viene avviato un ricalcolo, viene generato un thread che può essere eseguito per questo numero di secondi. Quanto più breve è il tempo impostato, tanto più è probabile che il thread non finisca quando dovrebbe. In questo caso il gioco si ferma finché non viene terminato ("lag"). Più lungo è il valore impostato, più tempo ci vuole per aggiornare la distribuzione quando i percorsi cambiano. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modalità di distribuzione dei passeggeri: {STRING} @@ -2381,7 +2389,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Il nome STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Imposta password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protegge la partita con una password in modo che non sia accessibile pubblicamente -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilità +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilità: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Se altre persone possono vedere il tuo server nell'elenco pubblico STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Limite client: @@ -2616,7 +2624,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Cerca co STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Si sta lasciando OpenTTD STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}I termini e le condizioni per lo scaricamento di contenuti da siti web esterni possono variare.{}Fare riferimento ai siti esterni per istruzioni su come installare il contenuto in OpenTTD.{}Si desidera proseguire? STR_CONTENT_FILTER_TITLE :{BLACK}Filtra per nome/tag: -STR_CONTENT_OPEN_URL :{BLACK}Visita sito web +STR_CONTENT_OPEN_URL :{BLACK}Sito web STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visita il sito web di questo contenuto STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Scarica STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Avvia il download dei contenuti selezionati @@ -3242,11 +3250,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Area map STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Seleziona l'area della mappa espressa in caselle. Il numero effettivo di caselle disponibili sarà leggermente inferiore STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Numero città: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Selezionare la densità di città o un numero personalizzato. STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nomi città: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Seleziona lo stile per i nomi delle città STR_MAPGEN_DATE :{BLACK}Data: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Selezionare la data di inizio STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Numero industrie: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Selezionare la densità delle industrie o un numero personalizzato. STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Picco massimo: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Scegliere la vetta più alta che il gioco tenterà di creare, misurata in altezza sul livello del mare STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Aumenta la massima altezza del picco più alto sulla mappa di uno STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Diminuisci la massima altezza del picco più alto sulla mappa di uno STR_MAPGEN_SNOW_COVERAGE :{BLACK}Aree innevate: @@ -3259,10 +3271,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Diminuis STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Tipo di terreno: STR_MAPGEN_SEA_LEVEL :{BLACK}Livello di mare: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Selezionare il livello del mare STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Fiumi: STR_MAPGEN_SMOOTHNESS :{BLACK}Levigatezza: STR_MAPGEN_VARIETY :{BLACK}Varietà del terreno: STR_MAPGEN_GENERATE :{WHITE}Genera +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Crea il mondo e gioca a OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Impostazioni NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Mostra impostazioni NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Impostazioni IA @@ -3295,6 +3309,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalani # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Bordi della mappa: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Scegliere i confini del mondo di gioco STR_MAPGEN_NORTHWEST :{BLACK}Nord-ovest STR_MAPGEN_NORTHEAST :{BLACK}Nord-est STR_MAPGEN_SOUTHEAST :{BLACK}Sud-est @@ -3307,7 +3322,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuale STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotazione heightmap: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome heightmap: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Il nome del file dell'immagine heightmap STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Dim.: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}La dimensione dell'immagine heightmap di origine. Per ottenere risultati ottimali, ogni bordo deve corrispondere alla lunghezza del bordo della mappa disponibile in OpenTTD, ad esempio 256, 512, 1024, ecc. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Limite altezza massima @@ -3322,6 +3339,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Pianeggi STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Genera un terreno pianeggiante STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Casuale STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Altezza terreno pianeggiante: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Scegliere l'altitudine del terreno sul livello del mare STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Sposta in giù di uno l'altezza del terreno pianeggiante STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Sposta in su di uno l'altezza del terreno pianeggiante @@ -4607,8 +4625,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(ferma per {STR STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viaggia per {STRING}, senza orario) STR_TIMETABLE_STAY_FOR :e sosta per {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :e viaggia per {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}giorn{P o i} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick STR_TIMETABLE_TOTAL_TIME :{BLACK}Gli ordini richiedono complessivamente {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Gli ordini richiedono almeno {STRING} (non tutti i tempi specificati) @@ -4617,10 +4633,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Il veico STR_TIMETABLE_STATUS_LATE :{BLACK}Il veicolo viaggia con un ritardo di {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Il veicolo viaggia con un anticipo di {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Il viaggio non è ancora iniziato -STR_TIMETABLE_STATUS_START_AT :{BLACK}Il viaggio inizierà in data {STRING} +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Questo orario inizierà alle ore {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Questo orario inizierà tra {COMMA} secondi. + +STR_TIMETABLE_START :{BLACK}Orario di partenza +STR_TIMETABLE_START_TOOLTIP :{BLACK}Selezionare quando inizia l'orario. Ctrl+Click distribuisce uniformemente l'inizio di tutti i veicoli che condividono l'ordine in base al loro ordine relativo, se l'ordine è completamente programmato. -STR_TIMETABLE_STARTING_DATE :{BLACK}Data iniziale -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Seleziona una data come punto di partenza della tabella oraria. Ctrl+click distribuisce tutti i veicoli che condividono questo ordine in modo uniforme dalla data indicata in base al loro ordine relativo, se l'ordine è completamente programmato. +STR_TIMETABLE_START_SECONDS_QUERY :Secondi prima dell'inizio dell'orario STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambia tempo STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambia la quantità di tempo che dovrebbe essere impiegata per l'ordine selezionato. CTRL+clic imposta il tempo di tutti gli ordini @@ -4644,8 +4663,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Orari at STR_TIMETABLE_SCHEDULED :{BLACK}Orari programmati STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Alterna fra la visualizzazione degli orari attesi e degli orari programmati -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} sec +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :D: {COLOUR}{COMMA} sec # Date window (for timetable) @@ -4748,9 +4769,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Torna in STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Vai avanti nella cronologia di navigazione STR_TEXTFILE_WRAP_TEXT :{WHITE}A capo automatico STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Manda automaticamente a capo il testo della finestra in modo che sia visibile senza doverlo scorrere -STR_TEXTFILE_VIEW_README :{BLACK}Visualizza file leggimi +STR_TEXTFILE_VIEW_README :{BLACK}Leggimi +STR_TEXTFILE_VIEW_README_TOOLTIP :Visualizza il file Readme di questo contenuto STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Changelog +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Visualizza il changelog di questo contenuto STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licenza +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Visualizza la licenza per questo contenuto ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}File leggimi del {STRING} {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Changelog del {STRING} {STRING} diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index baae5c689c..6cd76eec69 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -238,6 +238,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}フィ STR_UNITS_HEIGHT_METRIC :{DECIMAL}m STR_UNITS_HEIGHT_SI :{DECIMAL}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}フィルター: STR_LIST_FILTER_OSKTITLE :{BLACK}フィルタリングするキーワードを入力 @@ -699,8 +700,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}クリ STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}クリックすると、その曲を選択したプレイリストから削除します。(カスタム1/2 のみ) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}{NUM}年まで勤続経営した首位企業 -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}{NUM}の格付順位 STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :実務家 STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :起業家 @@ -1617,8 +1616,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :有効にする STR_CONFIG_SETTING_LOADING_INDICATORS :積み降ろし進行度を表示: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :積み降ろしを行っている輸送機関の上に、その進行度合いを示すインジケーターを表示するかどうかを設定します -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :ダイヤの時間単位にゲーム時を使用: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :ダイヤで行程時間を定めるために使われる時間単位を「日」ではなく「ゲーム時」にします。1日は約74ゲーム時に相当します +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :ダイヤに発着情報を表示: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :時刻表に出発・到着の予定時刻を表示します @@ -4494,8 +4492,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :({STRING}停車 STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :({STRING}で運行・ダイヤ設定無) STR_TIMETABLE_STAY_FOR :して{STRING}停車 STR_TIMETABLE_AND_TRAVEL_FOR :して{STRING}運行 -STR_TIMETABLE_DAYS :{COMMA}日 -STR_TIMETABLE_TICKS :{COMMA}ゲーム時 STR_TIMETABLE_TOTAL_TIME :{BLACK}このダイヤを実行するには{STRING}必要です STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}このダイヤを実行するには少なくとも{STRING}必要です(ダイヤが組まれていない区間があります) @@ -4504,10 +4500,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}この STR_TIMETABLE_STATUS_LATE :{BLACK}この輸送機器は現在{STRING}遅延しています STR_TIMETABLE_STATUS_EARLY :{BLACK}この輸送機器は現在{STRING}早着しています STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}このダイヤはまだ始まってません -STR_TIMETABLE_STATUS_START_AT :{BLACK}このダイヤの開始日時は{STRING}です -STR_TIMETABLE_STARTING_DATE :{BLACK}始発日 -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}始発日時を設定します。Ctrl+クリックでは、指令を共有する輸送機器があり、ダイヤが完全に組まれている場合に限り、その総所要時間に基づき、各輸送機器に指定時刻から均等に始発日時を割り付けます + STR_TIMETABLE_CHANGE_TIME :{BLACK}時間を変更 STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}選択した指令の行程時間を変更します。Ctrl+クリックで全指令に適用します diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 0e72bc8a6d..d965b4c8c9 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -256,6 +256,10 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}피트 STR_UNITS_HEIGHT_METRIC :{DECIMAL}m STR_UNITS_HEIGHT_SI :{DECIMAL}m +STR_UNITS_DAYS :{COMMA}일 +STR_UNITS_SECONDS :{COMMA}초 +STR_UNITS_TICKS :{COMMA}틱 + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}검색: STR_LIST_FILTER_OSKTITLE :{BLACK}검색할 단어를 하나 이상 입력하세요 @@ -719,8 +723,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}배경 STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}배경 음악 목록에서 음악을 제거하려면 클릭하세요. (사용자1, 사용자2에서만 사용 가능) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}{NUM}년까지 존재한 최고의 회사 목록 -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}{NUM}의 회사 성취도 목록 +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}최고의 회사 STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :{G=f}초보자 STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :{G=f}사업가 @@ -1657,8 +1660,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :고급 차량 STR_CONFIG_SETTING_LOADING_INDICATORS :적재율 표시: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :적재나 하차하는 차량 위에 적재/하차율을 표시할지 말지를 선택합니다. -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :열차 시간표의 1일을 74틱으로 바꿔 표시: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :열차 시간표에서 열차의 운행 시간을 '일'보다 자세한 '틱'으로 표시합니다. 1일은 74틱과 같습니다. +STR_CONFIG_SETTING_TIMETABLE_MODE :시간표에 사용할 시간 단위: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :차량 시간표에 사용할 시간 단위를 선택합니다 +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :일 +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :초 +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :틱 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :시간표에서 출발일과 도착일 표시: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :열차 시간표에서 예상 출발 & 도착 시간을 표시합니다. @@ -2347,7 +2354,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}멀티 STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}비밀번호 설정 STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}서버에 공개적으로 접근하는 것을 막고 싶을 때 비밀번호를 걸어 보호합니다. -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}공개 여부 +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}공개 여부: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}서버 목록에 이 서버를 공개할 지 여부를 설정합니다 STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM}명 STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}최대 접속자 수: @@ -2582,7 +2589,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}OpenTTD STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}OpenTTD를 종료하는 중입니다! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}외부 웹사이트에서 콘텐츠를 다운로드할 때에는 그에 대한 약관과 조건이 다양합니다.{}이 콘텐츠를 OpenTTD에 설치하는 방법은 외부 사이트에서 찾아보아야 합니다.{}계속하시겠습니까? STR_CONTENT_FILTER_TITLE :{BLACK}태그/이름 검색: -STR_CONTENT_OPEN_URL :{BLACK}웹 사이트 방문 +STR_CONTENT_OPEN_URL :{BLACK}웹 사이트 STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}이 컨텐츠의 웹 사이트를 방문합니다 STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}다운로드 STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}선택한 콘텐츠의 다운로드를 시작합니다 @@ -4567,20 +4574,21 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :({STRING} 동 STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :({STRING} 동안 운행, 시간표 작성 안 됨) STR_TIMETABLE_STAY_FOR :& {STRING} 동안 정차 STR_TIMETABLE_AND_TRAVEL_FOR :& 다음 목적지({STRING})로 이동 -STR_TIMETABLE_DAYS :{COMMA}일 -STR_TIMETABLE_TICKS :{COMMA}틱 -STR_TIMETABLE_TOTAL_TIME :{BLACK}이 시간표는 완주하는데 {STRING}이 걸릴 것입니다. +STR_TIMETABLE_TOTAL_TIME :{BLACK}이 시간표는 완주하는데 {STRING}이 걸립니다 STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}이 시간표를 완주하는데 최소 {STRING}이 필요합니다 (시간표가 일부만 지정됨) STR_TIMETABLE_STATUS_ON_TIME :{BLACK}이 차량은 지금 정시운행 중입니다 STR_TIMETABLE_STATUS_LATE :{BLACK}이 차량은 현재 {STRING} 늦게 운행하고 있습니다 STR_TIMETABLE_STATUS_EARLY :{BLACK}이 차량은 현재 {STRING} 빨리 운행하고 있습니다 STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}이 시간표는 아직 시작되지 않았습니다 -STR_TIMETABLE_STATUS_START_AT :{BLACK}이 시간표는 {STRING}에 시작될 것입니다 +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}이 시간표는 {STRING}에 시작합니다 +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}이 시간표는 {COMMA}초 뒤에 시작합니다 + +STR_TIMETABLE_START :{BLACK}시간표 시작 +STR_TIMETABLE_START_TOOLTIP :{BLACK}이 시간표가 언제 시작할지 선택합니다. CTRL+클릭하면, 만약 모든 경로에 시간표가 작성되어 있는 경우 이 경로를 공유하고 있는 모든 차량을 차량의 상대적인 순서에 따라 동일하게 배치시킵니다 -STR_TIMETABLE_STARTING_DATE :{BLACK}시작 날짜 -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}이 시간표의 시작 날짜를 선택하세요. CTRL+클릭하면, 시간표가 모두 작성되어 있다는 가정 하에, 주어진 경로를 기반으로 설정한 날짜부터 이 경로를 공유하는 모든 차량을 균등하게 출발시킵니다 +STR_TIMETABLE_START_SECONDS_QUERY :시간표를 이 시간(초) 뒤에 시작 STR_TIMETABLE_CHANGE_TIME :{BLACK}시간값 변경 STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}선택한 경로에서 소요되는 시간 값을 변경합니다. CTRL+클릭하면 모든 경로에 그 시간 값을 설정합니다 @@ -4604,8 +4612,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}예정 STR_TIMETABLE_SCHEDULED :{BLACK}예정 소요시간 기준 STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}시간표 검사 기준을 도착 예정일과 도착 예정 시간 기준 중에서 선택합니다 -STR_TIMETABLE_ARRIVAL :도착: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :착: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :착: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :발: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :착: {COLOUR}{COMMA}초 +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :발: {COLOUR}{COMMA}초 # Date window (for timetable) @@ -4708,9 +4718,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}탐색 STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}탐색 기록 앞으로 가기 STR_TEXTFILE_WRAP_TEXT :{WHITE}자동 줄 바꿈 STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}본문 내용에 자동 줄 바꿈을 설정하여 스크롤하지 않고도 본문의 모든 내용을 볼 수 있게 합니다. -STR_TEXTFILE_VIEW_README :{BLACK}Readme 보기 +STR_TEXTFILE_VIEW_README :{BLACK}Readme +STR_TEXTFILE_VIEW_README_TOOLTIP :이 콘텐츠의 Readme를 봅니다 STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}변경기록 +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :이 콘텐츠의 변경 기록을 봅니다 STR_TEXTFILE_VIEW_LICENCE :{BLACK}저작권 +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :이 콘텐츠의 라이선스를 봅니다 ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} {STRING}의 Readme STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} {STRING}의 변경기록 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 6538c6b495..5ded827f24 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -415,6 +415,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Series colans: STR_LIST_FILTER_OSKTITLE :{BLACK}Inscribe seriem colantem @@ -859,8 +860,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Preme in STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Preme in carmen ut ex compositione removeatur (modo Propria I aut Propria II) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Societates supremae quae attigerunt {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Album Foederis Societatum in {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Laborator STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Venditor @@ -1681,8 +1680,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Annuere indices STR_CONFIG_SETTING_LOADING_INDICATORS :Signa onerandi adhibenda: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Annuere signa onerandi monstrari super vehicula onerantia/exonerantia -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Monstrare horarium cum punctis et non cum diebus: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Monstrare tempora navigandi in horariis punctis ludi et non diebus +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Monstrare adventum atque exitum in horariis: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Monstrare in horariis adventum atque exitum aestimatum @@ -4276,10 +4274,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(mora {STRING}, STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(iter {STRING}, sine horario) STR_TIMETABLE_STAY_FOR :cum mora {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :cum itinere {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}die{P i rum} -STR_TIMETABLE_DAYS.acc :{COMMA}{NBSP}die{P m s} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}punct{P i orum} -STR_TIMETABLE_TICKS.acc :{COMMA}{NBSP}punct{P um a} STR_TIMETABLE_TOTAL_TIME :{BLACK}Hic horarius peragitur {STRING.acc} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Hic horarius peragitur saltem {STRING.acc} (omnia non in horario) @@ -4288,10 +4282,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Hoc vehi STR_TIMETABLE_STATUS_LATE :{BLACK}Hoc vehiculum est {STRING.acc} tardum STR_TIMETABLE_STATUS_EARLY :{BLACK}Hoc vehiculum est {STRING.acc} citum STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Hic horarius adhuc non incipitur -STR_TIMETABLE_STATUS_START_AT :{BLACK}Hic horarius incipietur {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Dies Initii -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Elige diem ad initium huius horarii. Ctrl+Preme ut dies initialis huius horarii eligatur ac aequaliter partiuntur omnia vehicula quae hoc iussum communicant secundum ordinem eorum, si iussa tota in horariis sunt + STR_TIMETABLE_CHANGE_TIME :{BLACK}Mutare Tempus STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mutare durationem iussi electi diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 91ce8250e1..e616355e56 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -239,6 +239,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filters: STR_LIST_FILTER_OSKTITLE :{BLACK}Ievadiet vienu vai vairākus atslēgvārdus, lai filtrētu sarakstu @@ -700,8 +701,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klikšķ STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikšķināt uz mūzikas celiņa, lai to izdzēstu no pašreizējās programmas (tikai Pielāgotā1 un Pielāgotā2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Labākie uzņēmumi, kuri sasnieguši {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Uzņēmumu rangu sarakstā {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Darījumu cilvēks STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Uzņēmējs @@ -1600,8 +1599,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ieslēgt papild STR_CONFIG_SETTING_LOADING_INDICATORS :Lietot piekraušanas rādītājus: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Izvēlēties piekraušanas rādītāju attēlošanu virs iekraujamiem un izkraujamiem transportlīdzekļiem -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Kustības sarakstu rādīt mirkļos nevis dienās: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Kustības sarakstos laikus rādīt spēles mirkļos, nevis dienās +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Kustības sarakstos rādīt pienākšanu un atiešanu: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Kustības sarakstos rādīt paredzamos pienākšanas un atiešanas laikus @@ -4475,8 +4473,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(stāvēt {STRI STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(ceļot uz {STRING}, nav sarakstā) STR_TIMETABLE_STAY_FOR :un palikt līdz {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :un braukt līdz {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}dien{P a as u} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tik{P s i u} STR_TIMETABLE_TOTAL_TIME :{BLACK}Šis saraksts aizņems {STRING}, lai pabeigtu STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Šis saraksts aizņems vismaz {STRING} lai pabeigtu (nav viss pēc saraksta) @@ -4485,10 +4481,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Šis tra STR_TIMETABLE_STATUS_LATE :{BLACK}Šis transportlīdzeklis pašlaik {STRING} kavē STR_TIMETABLE_STATUS_EARLY :{BLACK}Šis transportlīdzeklis pašlaik {STRING} par agru STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Šis saraksts vēl nav sācies -STR_TIMETABLE_STATUS_START_AT :{BLACK}Šis saraksts sāksies {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Sākuma datums -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Izvēlieties datumu kā šī kustību saraksta sākuma punktu. Ctrl+Click vienmērīgi sadala visus transportlīdzekļus, kas koplieto šo pasūtījumu no norādītā datuma, pamatojoties uz to plānoto pasūtījumu, ja pasūtījums pilnībā izmanto kustību sarakstu + STR_TIMETABLE_CHANGE_TIME :{BLACK}Mainīt laiku STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mainiet laiku, kas nepieciešams iezīmētajam pasūtījumam. Ctrl+Click iestata laiku visiem pasūtījumiem diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 39e8ed7a56..0a0f383213 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -429,6 +429,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Raktažodis: STR_LIST_FILTER_OSKTITLE :{BLACK}Įveskite filtro raktažodį @@ -889,8 +890,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Paspausk STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Spragtelėjus takelį, jis pašalinamas iš dabartinės programos (tik „Speciali 1“ ir „Speciali 2“) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Geriausios kompanijos, kurios pasiekė {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Kompaniju Lygos lentele {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Komersantas STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Verslininkas @@ -1785,8 +1784,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Išplėstinio ( STR_CONFIG_SETTING_LOADING_INDICATORS :Rodyti krovos indikatorius: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Krovos indikatoriai rodomi virš pakraunamų bei iškraunamų tansporto priemonių -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Tvarkaraščio trukmes matuoti vidiniais impulsais, o ne dienomis: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Vieną dieną sudaro keliasdešimt vidinių impulsų +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Rodyti arvykimą ir išvykimą tvarkaraščiuose: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Tvarkaraščiuose rodyti numatomas atvykimo ir išvykimo datas @@ -4667,14 +4665,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(stovėti {STRI STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(vykti {STRING.ka}, neįtraukiant į tvarkaraštį) STR_TIMETABLE_STAY_FOR :ir pasilikti {STRING.ka} STR_TIMETABLE_AND_TRAVEL_FOR :ir keliauti {STRING.ka} -STR_TIMETABLE_DAYS :{G=mot}{COMMA}{NBSP}dien{P a os ų} -STR_TIMETABLE_DAYS.kas :{COMMA} dien{P a os ų} -STR_TIMETABLE_DAYS.ko :{COMMA} dien{P os as ų} -STR_TIMETABLE_DAYS.kam :{COMMA} dien{P ai oms ų} -STR_TIMETABLE_DAYS.ka :{COMMA} dien{P ą as ų} -STR_TIMETABLE_DAYS.kuo :{COMMA} dien{P a omis ų} -STR_TIMETABLE_DAYS.kur :{COMMA} dien{P oje ose ų} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}impuls{P as ai ų} STR_TIMETABLE_TOTAL_TIME :{BLACK}Maršruto trukmė yra {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Maršruto trukmė yra mažiausiai {STRING}, nes nustatytos ne visų užduočių trukmės @@ -4683,10 +4673,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Transpor STR_TIMETABLE_STATUS_LATE :{BLACK}Transporto priemonė vėluoja {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Transporto priemonė skuba {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Tvarkaraštis dar nėra aktyvintas -STR_TIMETABLE_STATUS_START_AT :{BLACK}Tvarkaraštis bus aktyvintas {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Aktyvinimo data -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Tvarkaraštyje pasirinkite pradžios datą. Ctrl+pelės paspaudimas pažymės datą kaip pradžios tašką ir paskirstys visas transporto priemones su tokiais pačiais maršrutais tolygiai pagal jų santykinę poziciją maršrute (jei kryptys maršrute visiškai apibūdintos) + STR_TIMETABLE_CHANGE_TIME :{BLACK}Keisti trukmę STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Keisti pažymėtos užduoties trukmę diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index e348c1b941..75bd422bab 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -237,6 +237,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filter: STR_LIST_FILTER_OSKTITLE :{BLACK}Gëff een oder méi Wieder an fir d'Lëscht ze filteren @@ -698,8 +699,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klick op STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klick op d'Lidd fir et vum aktuellen Programm ze läschen (Benotzerdefinéiert 1 an 2 nëmmen) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top Firmen déi {NUM} erreecht hunn -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Firmeligatabell {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Businesspersoun STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entrepreneur @@ -1598,8 +1597,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Schalt d'erweid STR_CONFIG_SETTING_LOADING_INDICATORS :Weist de Luedstatus un: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Wielt aus, ob Luedindikatoren iwwert engem Gefier ugewise ginn oder net, wann et beluede gëtt -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Weis den Zäitplang an Ticken amplaz vun Deeg: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Weist d'Transportdauer an der Zäittafel als Gameticks un, amplaz an Deeg +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Weis Arrivée an Départ am Zäitplang un: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Weis d'geplangten Departen an Arrivéeën an der Zäittafel un @@ -4467,8 +4465,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(bleif während STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(fuer während {STRING}, ouni Zäitplang) STR_TIMETABLE_STAY_FOR :an bleif fir {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :an ënnerwee während {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}D{P ag eeg} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}Tick{P "" er} STR_TIMETABLE_TOTAL_TIME :{BLACK}Dësen Zäitplang brauch {STRING} fir faërdeg ze ginn STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Dësen Zäitplang brauch op manst {STRING} (net all geplangt) @@ -4477,10 +4473,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}D'Gefier STR_TIMETABLE_STATUS_LATE :{BLACK}D'Gefier ass grad {STRING} ze spéit STR_TIMETABLE_STATUS_EARLY :{BLACK}D'Gefier ass grad {STRING} ze fréi STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Dësen Zäitplang gouf nach net gestart -STR_TIMETABLE_STATUS_START_AT :{BLACK}Dësen Zäitplang start um {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Start Datum -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Wiel en Datum als Startpunkt fir dësen Zäitplang. Ctrl+Klick verdeelt all Gefierer mat dësem Optrag gläichméisseg vum Startpunkt op hierem relativen Optrag aus, wann den Optrag komplett mat engem Zäitplang versinn ass + STR_TIMETABLE_CHANGE_TIME :{BLACK}Zäit wiesselen STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Änner Zäit déi den ugewielten Optrag brauche soll. Ctrl+Klick ännert d'Zäit fir all Opträg diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 1ac4e9b624..0fb16f81bf 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -218,6 +218,7 @@ STR_UNITS_FORCE_SI :{DECIMAL} kN STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} ft STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_OSKTITLE :{BLACK}Внесете филтер низа STR_LIST_FILTER_TOOLTIP :{BLACK}Внесете клучни зборови за филтрирање на списокот за @@ -637,8 +638,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Клик STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Кликнете на песна за да го отстраните од тековната програма (Прилагодено 1 или 2 Прилагодено само) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Топ компании што постигнаа {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Компанијата табелата во {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Бизнисмен STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Претпријатие @@ -984,6 +983,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Дебелин +###length 3 @@ -1927,6 +1927,7 @@ STR_ORDER_OUT_OF_RANGE :{RED} (След + # Date window (for timetable) diff --git a/src/lang/malay.txt b/src/lang/malay.txt index e26f26da16..fd0ce2af4b 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -220,6 +220,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} ka STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Tapis barisan: STR_LIST_FILTER_OSKTITLE :{BLACK}Masukkan penapis rangkaian @@ -646,8 +647,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik pad STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik pada lagu untuk mengeluarkan daripada rancangan semasa (Pilihan Diri 1 atau Pilihan Diri 2 sahaja) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Syarikat-syarikat utama yang mencapai {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Jadual Liga Syarikat dalam {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Ahli perniagaan STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Usahawan @@ -1383,7 +1382,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Gunakan senarai STR_CONFIG_SETTING_LOADING_INDICATORS :Gunakan penunjuk muatan: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Tunjukkan jadual menggunakan tanda rait dan bukan hari: {STRING} +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Tunjukkan ketibaan dan pelepasan dalam jadual: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Tunjukkan jangkaan waktu ketibaan dan pelepasan dalam jadual @@ -3693,8 +3692,6 @@ STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Kembara (tanpa STR_TIMETABLE_TRAVEL_FOR :Kembara ke {STRING} STR_TIMETABLE_STAY_FOR :dan tinggal untuk {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :dan kembara untuk {STRING} -STR_TIMETABLE_DAYS :{COMMA} hari -STR_TIMETABLE_TICKS :{COMMA} detik STR_TIMETABLE_TOTAL_TIME :{BLACK}Jadual waktu ini akan mengambil {STRING} untuk menghabis STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Jadual waktu ini akan mengambil sekurangnya {STRING} untuk dilengkapi (bukan semua dijadualkan) @@ -3703,9 +3700,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Kenderaa STR_TIMETABLE_STATUS_LATE :{BLACK}Kenderaan ini sedang bergerak {STRING} lewat STR_TIMETABLE_STATUS_EARLY :{BLACK}Kenderaan ini sedang bergerak {STRING} awal STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Jadual waktu ini belum bermula -STR_TIMETABLE_STATUS_START_AT :{BLACK}Jadual waktu ini akan bermula pada {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Tarikh mula + STR_TIMETABLE_CHANGE_TIME :{BLACK}Tukar Masa STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Tukar tempoh masa bagi jadual waktu yang terpilih diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 8ead54ff11..7ffdb59539 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -171,6 +171,7 @@ STR_UNITS_FORCE_SI :{DECIMAL} kN STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} ft STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_OSKTITLE :{BLACK}Daħħal sentenza għall-iffiltrar STR_LIST_FILTER_TOOLTIP :{BLACK}Daħħal kelma biex tiffiltra din il-lista għall- @@ -612,6 +613,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Uza l-lista avv STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uzu tal-listi avvanzati tal-vetturi biex tghaqqad il-vetturi fi gruppi +###length 3 @@ -1293,6 +1295,7 @@ STR_TIMETABLE_TOTAL_TIME :{BLACK}Din l-is + STR_TIMETABLE_CHANGE_SPEED :{BLACK}Промена на брзина STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Промена на Максимална брзина од означената цел diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index 941d8dbd2c..b48c25162e 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -216,6 +216,7 @@ STR_UNITS_VOLUME_LONG_SI :{DECIMAL} m³ + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}शब्द गाळा: STR_LIST_FILTER_OSKTITLE :{BLACK}गाळेला शब्द प्रविष्ट करा @@ -620,7 +621,6 @@ STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLA STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}स्पष्ट # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}{NUM} स्थान अव्वल कंपन्या STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY} STR_HIGHSCORE_STATS :{BIG_FONT}'{STRING}' ({COMMA}) @@ -919,6 +919,7 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :सर्व +###length 3 @@ -1717,6 +1718,7 @@ STR_ORDER_IMPLICIT :(आपोआ + STR_TIMETABLE_CHANGE_TIME :{BLACK}वेळ बदला diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index fb2c08cb1e..faddec4575 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -231,6 +231,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filterstreng: STR_LIST_FILTER_OSKTITLE :{BLACK}Skriv inn søkefilter @@ -691,8 +692,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klikk p STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikk på et musikkspor for å fjerne det fra nåværende program (Gjelder bare egendefinert 1 og 2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Beste firmaer som nådde {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Firmarangering i {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Forretningsmann STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entreprenør @@ -1571,8 +1570,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Aktiver bruk av STR_CONFIG_SETTING_LOADING_INDICATORS :Bruk lastingsindikatorer: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Velg hvorvidt lasteindikatorer vises over kjøretøy som lastes eller losses -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Vis rutetabell i antall tikk i stedet for antall dager: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Vis reisetider i tidstabeller i spillets 'tidsenheter' fremfor dager +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Vis ankomst og avgang i rutetabeller: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Vise forventede ankomst- og avgangstider i rutetabeller @@ -4402,8 +4400,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(opphold i {STR STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(reise for {STRING}, ikke oppsatt med rutetabell) STR_TIMETABLE_STAY_FOR :og bli værende i {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :og reis i {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}dag{P "" er} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tikk STR_TIMETABLE_TOTAL_TIME :{BLACK}Det vil ta {STRING} å fullføre rutetabellen STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Det vil ta minst {STRING} å fullføre denne rutetabellen (rutetabell ikke fullstendig) @@ -4412,10 +4408,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Dette kj STR_TIMETABLE_STATUS_LATE :{BLACK}Dette kjøretøyet er {STRING} for sent ute STR_TIMETABLE_STATUS_EARLY :{BLACK}Dette kjøretøyet er {STRING} for tidlig ute STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Denne rutetabellen har ikke blitt startet ennå -STR_TIMETABLE_STATUS_START_AT :{BLACK}Denne rutetabellen vil bli startet {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Startdato -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Velg startdato for denne rutetabellen. Ctrl + Klikk setter utgangspunktet for denne rutetabellen og distribuerer alle kjøretøy som deler denne ordren jevnt basert på deres relative rekkefølge, hvis ordren har en fullstendig rutetabell. + STR_TIMETABLE_CHANGE_TIME :{BLACK}Endre tid STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Endre varigheten for den merkede ordren diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 7605587d49..46353cb279 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -227,6 +227,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} fot STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Søkefilter: STR_LIST_FILTER_OSKTITLE :{BLACK}Skriv inn søkefilter @@ -666,8 +667,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klikk p STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikk på eit musikkspor for å fjerne det frå gjeldande program (Gjeld berre eigendefinert 1 og 2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Beste firma som nådde {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Firmarangering i {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Forretningsmann STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entreprenør @@ -1439,7 +1438,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Bruk avansert k STR_CONFIG_SETTING_LOADING_INDICATORS :Bruk lasteindikatorar: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Syne rutetabell i tikk i staden for dagar: {STRING} +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Syne ankomst og avferd i rutetabellane: {STRING} @@ -3914,8 +3913,6 @@ STR_TIMETABLE_TRAVEL_FOR_SPEED :Reis i {STRING} STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(reis {STRING}, ikkje på rutetabell) STR_TIMETABLE_STAY_FOR :og bli værande i {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :og reis i {STRING} -STR_TIMETABLE_DAYS :{COMMA} dag{P "" ar} -STR_TIMETABLE_TICKS :{COMMA} tikk STR_TIMETABLE_TOTAL_TIME :{BLACK}Det vil ta {STRING} å gjere ferdig denne rutetabellen STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Det vil ta minst {STRING} å gjere ferdig denne rutetabellen ( ikkje alle på rutetabellen @@ -3924,10 +3921,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Dette k STR_TIMETABLE_STATUS_LATE :{BLACK}Dette køyretøyet er {STRING} for seint STR_TIMETABLE_STATUS_EARLY :{BLACK}Dette køyretøyet er {STRING} for tidleg STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Denne rutetabellen har ikkje starta enda -STR_TIMETABLE_STATUS_START_AT :{BLACK}Startdato for denne rutetabellen er {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Startdato -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vel startdato for timeplanen. Ctrl+klikk set starttidspunkt for tabellen og spreier køyretøya jamt utover + STR_TIMETABLE_CHANGE_TIME :{BLACK}Byt Tid STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Byt tida den merka ordra skal bruke diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 9a651fcdd1..674f798758 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -218,6 +218,7 @@ STR_UNITS_FORCE_SI :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP}پا STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}متر + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}متن فیلتر: STR_LIST_FILTER_OSKTITLE :{BLACK}وارد کردن رشته پایش @@ -656,8 +657,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}روی STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}روی آهنگ کلیک کنید تا از برنامه فعلی پاک شوند (فقط لیست سفارشی 1 و سفارشی 2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}بالانرین شرکت هایی که به مرحله {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}جدول اتحادیه شرکت ها در {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :تاجر STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :موسس شرکت @@ -1357,7 +1356,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :اسنفاده STR_CONFIG_SETTING_LOADING_INDICATORS :استفاده از نشانه‌های بارگیری/بارگذاری: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :استفاده از تیک(هزارم ثانیه) به جای روز در برنامه ساعتی: {STRING} +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :نشان دادن ورود و خروج در جدول زمانی: {STRING} @@ -3390,6 +3389,7 @@ STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(دستور ک + STR_TIMETABLE_CLEAR_TIME :{BLACK}پاک کردن زمان diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 53b10fb415..ef73759621 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -634,6 +634,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtr: STR_LIST_FILTER_OSKTITLE :{BLACK}Wpisz jedno lub więcej słów kluczowych, aby przefiltrować listę @@ -1097,8 +1098,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kliknij STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kliknij na ścieżce muzycznej aby usunąć ją z wybranego programu (Wlasny1 lub Wlasny2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Ranking firm, które osiągnęły rok {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Ranking Firm w {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Biznesmen STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Przedsiębiorca @@ -2036,8 +2035,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Wlącz obsług STR_CONFIG_SETTING_LOADING_INDICATORS :Pokazuj wskaźniki załadunku: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Wybierz, czy wskaźnik załadunku pokazuje się nad ładowanym/rozładowywanym pojazdem -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Pokazuj rozkłady jazdy w tickach, a nie w dniach: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :W rozkładach jazdy, czas podróży pokaż w tickach gry zamiast w dniach +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Pokazuj przyjazdy i odjazdy w rozkładach: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Wyświetlanie przewidywanego przyjazdu i odjazdu w rozkładach @@ -2961,7 +2959,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Przeszuk STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Opuszczasz OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Warunki pobierania dodatków z zewnętrznych stron internetowych są inne.{}Będziesz musiał(a) odnieść się do zewnętrznych stron w celu uzyskania wskazówek dotyczących instalacji dodatku w OpenTTD.{}Czy chcesz kontynuować? STR_CONTENT_FILTER_TITLE :{BLACK}Filtr etykiety/nazwy: -STR_CONTENT_OPEN_URL :{BLACK}Wejdź na stronę +STR_CONTENT_OPEN_URL :{BLACK}Strona internetowa STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Wejdź na stronę, by pobrać tę zawartość STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Pobierz STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Rozpocznij pobieranie zaznaczonych danych @@ -4952,8 +4950,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(postój w {STR STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(przejazd przez {STRING} poza rozkładem) STR_TIMETABLE_STAY_FOR :i zostań tam przez {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :i podróżuje przez{STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}d{P zień ni ni} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick{P "" i ów} STR_TIMETABLE_TOTAL_TIME :{BLACK}Ten rozkład jazdy zajmie {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Ten rozkład jazdy zajmie przynajmniej {STRING} (nie wszystkie stacje są na rozkładzie) @@ -4962,10 +4958,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Ten poja STR_TIMETABLE_STATUS_LATE :{BLACK}Ten pojazd jest teraz spóźniony o {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Ten pojazd spieszy się teraz o {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Ten rozkład jazdy jeszcze się nie rozpoczął -STR_TIMETABLE_STATUS_START_AT :{BLACK}Ten rozkład jazdy rozpocznie się {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Data początkowa -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Wybierz początkową datę rozkładu jazdy. Ctrl+klik rozłoży równomierne wszystkie pojazdy współdzielące ten rozkład, począwszy od podanej daty, zgodnie z ich kolejnością, o ile rozkład ten jest kompletny + STR_TIMETABLE_CHANGE_TIME :{BLACK}Zmień czas STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Zmień ilość czasu, jaką powinno zająć zaznaczone polecenie. Ctrl+klik ustala czas dla wszystkich poleceń @@ -4989,8 +4983,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Wymagany STR_TIMETABLE_SCHEDULED :{BLACK}Zaplanowany STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Przełącz między spodziewanymi i zaplanowanymi -STR_TIMETABLE_ARRIVAL :P: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :O: {COLOUR}{DATE_TINY} # Date window (for timetable) @@ -5093,9 +5085,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Cofnij s STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Powrót do przodu w historii nawigacji STR_TEXTFILE_WRAP_TEXT :{WHITE}Zawijaj tekst STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Zawiń tekst w oknie, aby zmieścił się bez konieczności przewijania -STR_TEXTFILE_VIEW_README :{BLACK}Odczytaj plik „readme” +STR_TEXTFILE_VIEW_README :{BLACK}Plik „readme” +STR_TEXTFILE_VIEW_README_TOOLTIP :Wyświetl plik „readme” dla tej zawartości STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Lista zmian +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Wyświetl listę zmian dla tej zawartości STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licencja +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Wyświetl licencję dla tej zawartości ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} {STRING} - plik „readme” STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} {STRING} - lista zmian diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 9adc82c7dc..f48132918e 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -256,6 +256,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} pé(s STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtro: STR_LIST_FILTER_OSKTITLE :{BLACK}Insira uma ou mais palavras-chave para filtrar a lista @@ -719,8 +720,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique n STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Faça clique numa faixa para a remover da lista (Personaliz. 1 ou Personaliz. 2 apenas) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top de empresas que chegaram a {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tabela de Liga de Empresas em {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Negociante STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Empresário @@ -1657,8 +1656,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ativar a utiliz STR_CONFIG_SETTING_LOADING_INDICATORS :Usar indicadores de carga: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Seleccionar se os indicadores de carga são mostrados acima de veículos em carga ou descarga -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostrar horário em tics em vez de dias: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostrar tempos de viagem nos horários em ticks de jogo em vez de dias +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar chegada e partida nos horários: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostrar horários previstos de chegada e partida nas tabelas de horários @@ -4567,8 +4565,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(permanecer dur STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar durante {STRING}, sem programação) STR_TIMETABLE_STAY_FOR :e ficar durante {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :e viaja para {STRING} -STR_TIMETABLE_DAYS :{COMMA} dia{P "" s} -STR_TIMETABLE_TICKS :{COMMA} tic{P "" s} STR_TIMETABLE_TOTAL_TIME :{BLACK}Este horário vai levar {STRING} a completar STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Este horário vai levar pelo menos {STRING} a completar (nem tudo está programado) @@ -4577,10 +4573,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Este ve STR_TIMETABLE_STATUS_LATE :{BLACK}Este veículo está presentemente atrasado {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Este veículo está presentemente adiantado {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horário ainda não começou -STR_TIMETABLE_STATUS_START_AT :{BLACK}Este horário começa a {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Data de início -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecione uma data como ponto de partida deste horário. Ctrl+Clique distribui uniformemente todos os veiculos partilhando esta ordem pela sua ordem relativa, se a ordem for completamente calendarizada + STR_TIMETABLE_CHANGE_TIME :{BLACK}Mudar Tempo STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mudar a duração do tempo que a ordem selecionada deve durar. Ctrl+Clique define o tempo para todas as ordens @@ -4604,8 +4598,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Esperado STR_TIMETABLE_SCHEDULED :{BLACK}Marcado STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Alternar entre tempo esperado e marcado -STR_TIMETABLE_ARRIVAL :C: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :P: {COLOUR}{DATE_TINY} # Date window (for timetable) diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index dcca6dc1f5..c3cd99252c 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -255,6 +255,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} ft STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtru: STR_LIST_FILTER_OSKTITLE :{BLACK}Introduceți unul sau mai multe cuvinte cheie pentru a filtra lista @@ -718,8 +719,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Click pe STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Apasă pe melodie pentru a o elimina din programul actual (doar Custom1 sau Custom2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Primele companii care au atins {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Clasamentul companiilor în {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Om de afaceri STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Întreprinzător @@ -1654,8 +1653,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Activează folo STR_CONFIG_SETTING_LOADING_INDICATORS :Foloseşte indicatorii de încărcare: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Alege dacă indicatori de încărcare sunt afișați deasupra unor vehicule care sunt în proces de încărcare sau descărcare -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Arată orarul pe programări în unități de timp interne în loc de zile: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Arată timpii de călătorie în tabela cu timpi a jocului folosind unități de timp interne în loc de zile +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Afișează plecările și sosirile din orare: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Arată timpii estimați de plecare și sosire din orar @@ -4564,8 +4562,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(staționare pe STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(călătorie pentru {STRING}, neprogramată) STR_TIMETABLE_STAY_FOR :și staționare pentru {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :și călătorește timp de {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}{P zi zile "de zile"} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}{P unitate unități "de unități"} de timp intern{P ă e e} STR_TIMETABLE_TOTAL_TIME :{BLACK}Acest orar va lua {STRING} pentru finalizare STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Acest orar va lua cel puțin {STRING} pentru finalizare (nu în întregime programat) @@ -4574,10 +4570,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Acest ve STR_TIMETABLE_STATUS_LATE :{BLACK}Vehiculul are întârziere de {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Momentan, acest vehicul și-a devansat programul {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Acest orar nu a început încă -STR_TIMETABLE_STATUS_START_AT :{BLACK}Acest orar va începe la {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Dată pornire -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Alege o dată ca punct de pornire pentru acest orar. Ctrl+clic distribuie toate vehiculele uniform de la data setată bazată pe comenzile relative, dacă comenzile au un orar complet + STR_TIMETABLE_CHANGE_TIME :{BLACK}Modifică timpul STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modificați timpul pe care ar trebui să o dureze comanda evidențiată. Ctrl+Click setează ora pentru toate comenzile @@ -4601,8 +4595,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Estimat STR_TIMETABLE_SCHEDULED :{BLACK}Planificat STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Comută între estimare şi orar -STR_TIMETABLE_ARRIVAL :S: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :P: {COLOUR}{DATE_TINY} # Date window (for timetable) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 1eb347f757..177ac17012 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -381,6 +381,10 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}м STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}м +STR_UNITS_DAYS :{COMMA}{NBSP}д{P ень ня ней} +STR_UNITS_SECONDS :{COMMA}{NBSP}секунд{P а ы ""} +STR_UNITS_TICKS :{COMMA}{NBSP}тик{P "" а ов} + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Фильтр: STR_LIST_FILTER_OSKTITLE :{BLACK}Введите ключевые слова для фильтрации списка @@ -856,8 +860,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Щёлк STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Выберите трек для удаления из пользовательского списка # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Крупнейшие компании, достигшие {NUM} года -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Порядковая таблица компаний в {NUM} +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Крупнейшие компании STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Бизнесмен STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN.abl :бизнесменом @@ -1639,7 +1642,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Оригина STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Тип ландшафта: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Только для TerraGenesis){}Холмистость ландшафта +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Укажите высоту гор и холмов на карте STR_CONFIG_SETTING_INDUSTRY_DENSITY :Количество предприятий: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Выберите, сколько предприятий создавать в начале и на каком уровне поддерживать их количество в процессе игры. @@ -1648,18 +1651,18 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Макс. ра STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Эта настройка ограничивает расстояние от края карты до нефтяных платформ и нефтеперерабатывающих заводов. Таким образом, на краях карты, оканчивающихся водой, они будут строиться у берега. На картах размером более 256 это значение будет соответственно увеличено. STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Высота снеговой линии: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Это значение определяет, на какой высоте в субарктическом климате устанавливается снеговой покров. Наличие снега влияет на расстановку предприятий и на условия роста городов.{}Значение может быть установлено только в редакторе сценариев; иначе оно рассчитывается в зависимости от значения «снежного покрытия». +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Выберите, на какой высоте в субарктическом климате устанавливается снеговой покров. Наличие снега влияет на расстановку предприятий и на условия роста городов.{}Значение может быть изменено только в редакторе сценариев; иначе оно рассчитывается в зависимости от значения «снежного покрытия». STR_CONFIG_SETTING_SNOW_COVERAGE :Снежное покрытие: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Это значение определяет примерную относительную площадь суши, покрытой снегом в субарктическом климате. Наличие снега влияет на расположение предприятий и на условия роста городов.{}Используется только при создании карты. Земля чуть выше уровня моря никогда не покрывается снегом. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Выберите примерную относительную площадь суши, покрытой снегом в субарктическом климате. Наличие снега влияет на расположение предприятий и на условия роста городов.{}Это значение используется только при создании карты. Земля на уровне моря и береговые клетки никогда не покрываются снегом. STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Песчаное покрытие: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Это значение определяет примерную относительную площадь суши, покрытой песком в тропическом климате. Пустыни влияют на расположение предприятий.{}Используется только при создании карты. +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Выберите примерную относительную площадь суши, покрытой песком в тропическом климате. Пустыни влияют на расположение предприятий и условия роста городов.{}Это значение используется только при создании карты. STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Грубость ландшафта: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Только для TerraGenesis){}Выберите количество гор и холмов на карте. На гладком ландшафте холмов немного и они более пологие. На грубом - много гор, и ландшафт может показаться слишком однообразным. +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Выберите количество и вид холмов на карте. На гладком ландшафте холмов немного и они более широкие. На грубом холмов много, но они меньше в размерах. ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Очень гладкий STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Гладкий @@ -1667,7 +1670,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Грубый STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Очень грубый STR_CONFIG_SETTING_VARIETY :Разнообразие ландшафта: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Только для TerraGenesis){}Определяет наличие на карте как горных, так и равнинных областей. Поскольку данная настройка влияет только на сглаживание карты, остальные настройки должны быть выставлены в горный ландшафт. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Определяет наличие на карте как горных, так и равнинных областей. Чем выше разнообразие, тем выше разница в высоте между этими зонами. STR_CONFIG_SETTING_RIVER_AMOUNT :Количество рек: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Выберите количество рек на карте @@ -1687,6 +1690,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Левосто STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Правостороннее STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Вращение карты высот: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Изображение карты высот можно развернуть, чтобы оно соответствовало игровой карте. ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Против часовой стрелки STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :По часовой стрелке @@ -1807,8 +1811,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Включит STR_CONFIG_SETTING_LOADING_INDICATORS :Показывать индикатор загрузки: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Отображение индикаторов загрузки над загружающимся и разгружающимся транспортом -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Графики движения в «тиках», а не днях: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Измерять время в графиках движения игровыми «тиками», а не днями. 1 день равен 74 «тикам». +STR_CONFIG_SETTING_TIMETABLE_MODE :Единицы времени в графиках: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Единицы времени, используемые в графиках движения транспорта +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :дни +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :секунды +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :тики STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Показывать время прибытия и отправления в графиках: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Показывать ожидаемое время прибытия и отправления в графиках движения @@ -2497,7 +2505,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Назв STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Установить пароль STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Защитите вашу игру паролем, если не хотите, чтобы к ней могли подключиться посторонние. -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Видимость +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Видимость: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Видимость вашего сервера в публичном списке STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" а ов} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. количество клиентов: @@ -2732,7 +2740,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Резу STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Вы покидаете OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Условия загрузки содержимого со сторонних сайтов могут различаться.{}За инструкциями по установке компонентов OpenTTD вам следует обратиться на соответствующие сайты.{}Вы желаете продолжить? STR_CONTENT_FILTER_TITLE :{BLACK}Фильтр: -STR_CONTENT_OPEN_URL :{BLACK}Посетить сайт +STR_CONTENT_OPEN_URL :{BLACK}Веб-сайт STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Посетить веб-сайт с информацией об этом модуле STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Скачать STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Начать загрузку выбранного контента @@ -3376,11 +3384,15 @@ STR_MAPGEN_MAPSIZE :{BLACK}Разм STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Выберите размер карты в клетках. Размер поля, доступного игрокам, будет немного меньше. STR_MAPGEN_BY :{BLACK}× STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Количество городов: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Выберите плотность расположения городов на карте, или укажите их точное количество STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Названия городов: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Язык, который будет использоваться для выбора названий населённых пунктов STR_MAPGEN_DATE :{BLACK}Дата: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Выберите начальную дату в игре STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Кол-во предпр.: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Выберите плотность расположения предприятий на карте, или укажите их точное количество STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Высочайшая вершина: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Укажите максимальную высоту гор, создаваемых генератором карт (относительно уровня моря) STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Увеличить максимальную высоту гор на карте на 1 STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Уменьшить максимальную высоту гор на карте на 1 STR_MAPGEN_SNOW_COVERAGE :{BLACK}Снежное покрытие: @@ -3393,10 +3405,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Умен STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Тип ландшафта: STR_MAPGEN_SEA_LEVEL :{BLACK}Количество морей и озёр: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Выберите значение уровня моря STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Количество рек: STR_MAPGEN_SMOOTHNESS :{BLACK}Грубость ландшафта: STR_MAPGEN_VARIETY :{BLACK}Разнообразие ландшафта: STR_MAPGEN_GENERATE :{WHITE}Создать +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Сгенерировать карту и начать игру! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Настройки NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Показать настройки NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Настройки ИИ @@ -3429,6 +3443,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Каталан # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Края карты: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Выберите типы границ игровой карты STR_MAPGEN_NORTHWEST :{BLACK}Северо-запад STR_MAPGEN_NORTHEAST :{BLACK}Северо-восток STR_MAPGEN_SOUTHEAST :{BLACK}Юго-восток @@ -3441,7 +3456,9 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Вруч STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Поворот карты: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Название карты: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Имя файла с изображением, используемым для карты высот STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Размер: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Размеры исходного изображения для карты высот. Для наилучшего результата они должны соответствовать размерам карты OpenTTD: 256, 512, 1024 и{NBSP}т.{NBSP}д. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} × {NUM} STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Максимальная высота @@ -3456,6 +3473,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Плос STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Создать ровную землю STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Случайный рельеф STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Высота над уровнем моря: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Выберите высоту ландшафта над уровнем моря STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Поднять уровень ровной земли на 1 STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Опустить уровень ровной земли на 1 @@ -4753,8 +4771,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(ждать {ST STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(в пути {STRING}, график не составлен) STR_TIMETABLE_STAY_FOR :и ждать {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :и идти в {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}д{P ень ня ней} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}тик{P "" а ов} STR_TIMETABLE_TOTAL_TIME :{BLACK}Весь маршрут займёт {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Движение по маршруту займёт {STRING} (не всё учтено) @@ -4763,10 +4779,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Этот STR_TIMETABLE_STATUS_LATE :{BLACK}Этот транспорт опаздывает на {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Этот транспорт опережает график на {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}График движения ещё не установлен -STR_TIMETABLE_STATUS_START_AT :{BLACK}Отсчёт времени начнётся с {STRING} +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Этот график будет запущен {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}До запуска графика осталось {COMMA} секунд{P а ы ""} + +STR_TIMETABLE_START :{BLACK}Запуск графика +STR_TIMETABLE_START_TOOLTIP :{BLACK}Выберите время запуска графика. Ctrl+щелчок запустит транспортные средства, следующие по этому маршруту, через равные промежутки времени, если график движения по маршруту полностью рассчитан. -STR_TIMETABLE_STARTING_DATE :{BLACK}Начальная дата -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Выберите начальную дату для этого графика. Ctrl+щелчок равномерно распределит все транспортные средства, следующие по этому маршруту, если время движения по нему полностью рассчитано. +STR_TIMETABLE_START_SECONDS_QUERY :Секунд до запуска графика STR_TIMETABLE_CHANGE_TIME :{BLACK}Изменить время STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Изменить время исполнения выделенного задания. Ctrl+щелчок устанавливает время для всех заданий. @@ -4790,8 +4809,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Ожид STR_TIMETABLE_SCHEDULED :{BLACK}График STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Переключение между графиком движения и ожидаемым временем прибытия/отправления -STR_TIMETABLE_ARRIVAL :Приб: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :Отпр: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :П: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :О: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :П: {COLOUR}{COMMA} с +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :О: {COLOUR}{COMMA} с # Date window (for timetable) @@ -4894,9 +4915,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Наза STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Вперёд STR_TEXTFILE_WRAP_TEXT :{WHITE}Переносить текст STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Переносить текст так, чтобы он помещался в окне без необходимости прокрутки -STR_TEXTFILE_VIEW_README :{BLACK}Посмотреть инструкцию +STR_TEXTFILE_VIEW_README :{BLACK}Инструкция +STR_TEXTFILE_VIEW_README_TOOLTIP :Просмотр инструкции STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Список изменений +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Просмотр списка изменений STR_TEXTFILE_VIEW_LICENCE :{BLACK}Лицензия +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Просмотр лицензии ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}Инструкция к {STRING} {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Список изменений к {STRING} {STRING} diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index d318688421..b92d562f13 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -425,6 +425,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} ft STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Pretraga: STR_LIST_FILTER_OSKTITLE :{BLACK}Unesi jednu ili više ključnih reči za pretragu liste @@ -886,8 +887,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik na STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik na muzičku numeru radi uklanjanja sa trenutnog rasporeda (samo za Custom1 ili Custom2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Najbolja preduzeća koja su dostigla {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}{NUM} u Tabeli Lige Preduzeća STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Poslovna osoba STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN.gen :poslovne osobe @@ -1791,8 +1790,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Omogući upotre STR_CONFIG_SETTING_LOADING_INDICATORS :Koristiti pokazatelj utovarivanja: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Odaberi da li će se prikazati indikatori utovara i istovara iznad vozila -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Prikazati red vožnje u diskretnim otkucajima: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Prikaži vreme putovanja u redu vožnje u diskretnim otkucajima umesto u danima +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Prikazivanje polaska i dolaska u rasporedima: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Prikazivanje očekivanog vremena dolaska i odlaska u rasporedima @@ -4670,8 +4668,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(stajanje za {S STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(putovanje za {STRING}, bez rasporeda) STR_TIMETABLE_STAY_FOR :i ostani {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :i putuj {STRING} -STR_TIMETABLE_DAYS :{COMMA} dan{P "" a a} -STR_TIMETABLE_TICKS :{COMMA} utkucaj{P "" a a} STR_TIMETABLE_TOTAL_TIME :{BLACK}Za završetak rasporeda trebaće {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Za završetak rasporeda trebaće barem {STRING} (merenja nisu završena) @@ -4680,10 +4676,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Vozilo t STR_TIMETABLE_STATUS_LATE :{BLACK}Vozilo trenutno kasni za {STRING} od rasporeda STR_TIMETABLE_STATUS_EARLY :{BLACK}Vozilo trenutno žuri za {STRING} od rasporeda STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Ovaj raspored još nije počeo -STR_TIMETABLE_STATUS_START_AT :{BLACK}Ovaj raspored počinje {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Datum početka -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Izaberi datum kao početak ovog rasporeda. Ctrl+klik jednako raspoređuje sva vozila koja dele ovu naredbu od datog datuma prema njihovom rasporedu, ukoliko je naredba u potpunosti unesena u vozni red + STR_TIMETABLE_CHANGE_TIME :{BLACK}Promena vremena STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Promena količine vremena za koje će obeležena naredba trajati. Ctrl+klik podešava vreme za sve naredbe diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 7cf9b1410a..6ab2b8c4c6 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -255,6 +255,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}米 STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}米 + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}关键字词: STR_LIST_FILTER_OSKTITLE :{BLACK}输入关键字筛选 @@ -718,8 +719,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}点击 STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}点击音乐曲目以从当前播放列表中删除{}(仅限自定义1或自定义2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}达到 {NUM} 的顶级公司! -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}在{NUM}年,公司表现值排名 STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :运输个体户 STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :运输代理商 @@ -1655,8 +1654,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :允许使用高 STR_CONFIG_SETTING_LOADING_INDICATORS :使用装货进度指示: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :选择是否在车辆上方显示装卸货物进度 -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :使用时间标记而不是天为单位: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :时间表以ticks而不是天显示。 +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :在时刻表中显示到达时间和出发时间: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :在时刻表中显示预期的到达和出发时间 @@ -2580,7 +2578,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}在与Op STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}正在离开游戏! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}在外部网站下载內容的规则及条款可能跟OpenTTD引用的规则及条款不同。{}您需要参照有关网站以取得在OpenTTD安装有关內容的资讯。{}您要継续吗? STR_CONTENT_FILTER_TITLE :{BLACK}标签/名称过滤器 -STR_CONTENT_OPEN_URL :{BLACK}查看主页 +STR_CONTENT_OPEN_URL :{BLACK}主页 STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}打开该扩展包主页 STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}下载 STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}下载选定的内容 @@ -4565,8 +4563,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(停靠 {STRING STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(驶往 {STRING}, 无时间表) STR_TIMETABLE_STAY_FOR :并且停留 {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :并行驶{STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}天 -STR_TIMETABLE_TICKS :{COMMA}{NBSP}个时间标记 STR_TIMETABLE_TOTAL_TIME :{BLACK}该时间表需要 {STRING} 完成 STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}该时间表至少需要 {STRING} 完成(并非全部计划的时间) @@ -4575,10 +4571,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}该车 STR_TIMETABLE_STATUS_LATE :{BLACK}该车辆目前晚点 {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}该车辆目前提前 {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}此时刻表尚未开始 -STR_TIMETABLE_STATUS_START_AT :{BLACK}此时刻表将于 {STRING} 开始 -STR_TIMETABLE_STARTING_DATE :{BLACK}起始日期 -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}选择一个时间作为此时间表的起始日期。按住Ctrl键单击将会给所有共享此时刻表的车辆指定一个时间,以使所有共享车辆保持运行间隔,但前提是时间表已为所有命令设定计划执行时间。 + STR_TIMETABLE_CHANGE_TIME :{BLACK}改变时间 STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}改变高亮选择的命令执行的时间,按住Ctrl单击可为所有命令设置时间 @@ -4602,8 +4596,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}预期 STR_TIMETABLE_SCHEDULED :{BLACK}表定时间 STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}切换显示(根据实际情况计算的)预期时间或表定时间 -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} # Date window (for timetable) @@ -4707,8 +4699,11 @@ STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}取消 STR_TEXTFILE_WRAP_TEXT :{WHITE}強迫文字换行 STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}強迫宽于窗格的內文自动换行 STR_TEXTFILE_VIEW_README :{BLACK}查看说明 +STR_TEXTFILE_VIEW_README_TOOLTIP :查看此项目的说明文件 STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}更新日志 +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :查看此项目的许可证 STR_TEXTFILE_VIEW_LICENCE :{BLACK}版权信息 +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :查看此项目的许可证 ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} {STRING} 的说明 STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} {STRING} 的更新日志 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index e04ca99626..7a01b41ad6 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -318,6 +318,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} st{P STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filter: STR_LIST_FILTER_OSKTITLE :{BLACK}Vložiť aspoň jedno klúčové slovo pre filtrovanie @@ -779,8 +780,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kliknú STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kliknite na hudobnú stopu pre jej odstránenie z programu (len Vlastný1 alebo Vlastný2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Najlepšie spoločnosti, ktoré dosiahli rok {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tabuľka spoločnosti v roku {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Obchodník STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN.g :Obchodníci @@ -1704,8 +1703,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Povolí použit STR_CONFIG_SETTING_LOADING_INDICATORS :Zobraziť ukazovatele nakladania/vykladania: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Zvoľte či indikátory nakladania/vykladania budú zobrazené nad vozidlom. -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Zobraziť cestovné poriadky v tiknutiach namiesto dní: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Zobrazí časy cestovania v cestovnom poriadku v herných tiknutiach namiesto dní +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Zobraziť príchody a odchody v cestovných poriadkoch: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Zobrazí predpokladané časy príchodov a odchodov v časových rozpisoch. @@ -4583,8 +4581,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(prestávka {ST STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(cesta {STRING}, nerozvrhnuté) STR_TIMETABLE_STAY_FOR :prestávka {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :a cestuj {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}d{P eň ni ní} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tiknut{P ie ia í} STR_TIMETABLE_TOTAL_TIME :{BLACK}Na dokončenie cestovného poriadku je potrebných {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Na dokončenie cestovného poriadku je potrebných aspoň {STRING} (nie všetko je určené) @@ -4593,10 +4589,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Toto voz STR_TIMETABLE_STATUS_LATE :{BLACK}Toto vozidlo mešká {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Toto vozidlo ide {STRING} skôr STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Tento cestovný poriadok ešte nezačal -STR_TIMETABLE_STATUS_START_AT :{BLACK}Tento cestovný poriadok začne {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Začiatočný dátum -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vyberte dátum začiatku cestovného poriadku. Ctrl+klik rozdelí od daného dátumu rovnomerne všetky vozidlá zdieľajúce tieto príkazy na základe ich relatívneho poradia, ak je cestovný poriadok kompletne vyplnený + STR_TIMETABLE_CHANGE_TIME :{BLACK}Zmeniť čas STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Zmeniť dĺžku trvania označeného príkazu. Ctrl+klik nastaví čas pre všetky príkazy @@ -4620,8 +4614,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Očakáv STR_TIMETABLE_SCHEDULED :{BLACK}Plánované STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Prepnúť medzi očakávaným a plánovaným -STR_TIMETABLE_ARRIVAL :P: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :O: {COLOUR}{DATE_TINY} # Date window (for timetable) diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 4425bcc73b..7c28205376 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -378,6 +378,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} ft STR_UNITS_HEIGHT_METRIC :{DECIMAL} m STR_UNITS_HEIGHT_SI :{DECIMAL} m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtriraj niz: STR_LIST_FILTER_OSKTITLE :{BLACK}Vnesite niz za filtriranje @@ -819,8 +820,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klikni n STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikni na skladbo, če jo želiš odstraniti iz programa (samo Poljubno1 ali Poljubno2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Najboljša podjetja, ki so dosegla {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Seznam najboljših podjetij v {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Poslovnež STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Podjetnik @@ -1632,8 +1631,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Omogoči uporab STR_CONFIG_SETTING_LOADING_INDICATORS :Uporabi pregledno polnenje: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Izbira prikaza stanja med polnjenjem vozil. -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Prikaz urnikov v pikah namesto dneh: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Prikaži čase potovanja v časovnih tabelah kot enote igre namesto dni. +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Prikaži prihod in odhod v urnikih: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Prikaži pričakovane čase odhodov in prihodov v časovnih tabelah. @@ -4167,8 +4165,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(počakaj najve STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(Potuj z največ {STRING}, brez časovne tabele) STR_TIMETABLE_STAY_FOR :in ostani za {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :s potovanjem za {STRING} -STR_TIMETABLE_DAYS :{COMMA} d{P an neva nevi ni} -STR_TIMETABLE_TICKS :{COMMA} pik{P a i e ""} STR_TIMETABLE_TOTAL_TIME :{BLACK}Ta urnik bo potreboval {STRING} do zaključka STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Ta urnik bo potreboval vsaj {STRING} do zaključka (ni vse zajeto v urniku) @@ -4177,10 +4173,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}To vozil STR_TIMETABLE_STATUS_LATE :{BLACK}To vozilo zamuja za {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}To vozilo prehiteva za {STRING} . STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Ta urnik se še ni začel -STR_TIMETABLE_STATUS_START_AT :{BLACK}Ta urnik se bo začel ob {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Začetni datum -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Izberi datum za začetek te časovne tabele. Ctrl+klik nastavi začetek te časovne tabele in razporedi vsa vozila, ki si delijo ta ukaz, enakomerno glede na njihov relativni ukaz, če je ta popolnoma naravnan po časovni tabeli + STR_TIMETABLE_CHANGE_TIME :{BLACK}Spremeni čas STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Spremeni čas, ki naj bi ga označeni ukaz porabil diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 6450180b39..1c27e5fd52 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -238,6 +238,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtro: STR_LIST_FILTER_OSKTITLE :{BLACK}Introduce texto para filtrar @@ -699,8 +700,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clica en STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clica sobre la canción para quitarla del programa actual (solo Personalizado1 y 2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top de empresas que han alcanzado {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tabla clasificatoria de empresas en {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Persona de negocios STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Empresario @@ -1599,8 +1598,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Activa el uso d STR_CONFIG_SETTING_LOADING_INDICATORS :Usar indicadores de carga: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Permite escoger si se deben de mostrar indicadores de carga encima de los vehículos que están en estaciones -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostrar horario en tics en vez de en días: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Muestra los tiempos de viaje en los horarios en tics en lugar de en días +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar salidas y llegadas en los horarios: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Muestra fechas de llegada y salida previstas en los horarios @@ -4466,8 +4464,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(permanecer {ST STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar durante {STRING}, sin programar) STR_TIMETABLE_STAY_FOR :y permanecer {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :y viajar durante {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}día{P "" s} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tic{P "" s} STR_TIMETABLE_TOTAL_TIME :{BLACK}El horario tardará {STRING} en recorrerse STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}El horario tardará al menos {STRING} en recorrerse (no todas las órdenes) @@ -4476,10 +4472,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Este veh STR_TIMETABLE_STATUS_LATE :{BLACK}Este vehículo actualmente está retrasado {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Este vehículo actualmente está adelantado {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este horario no ha comenzado -STR_TIMETABLE_STATUS_START_AT :{BLACK}Este horario comenzará el {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Fecha de inicio -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecciona la fecha de inicio del horario. Ctrl+click distribuye uniformemente todos los vehículos que compartan este horario a partir de la fecha proporcionada, basados en su orden relativo, siempre que el horario esté completamente rellenado + STR_TIMETABLE_CHANGE_TIME :{BLACK}Modificar duración STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modifica la duración de la orden seleccionada. Ctrl+clic establece la duración para todas las órdenes diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 6233052156..c73c53cd4e 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -238,6 +238,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtrar: STR_LIST_FILTER_OSKTITLE :{BLACK}Indicar texto a filtrar @@ -699,8 +700,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clic en STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clic en la pista de música para quitarla del programa actual (solo Personal 1 y 2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Lista de empresas que han llegado a {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tabla de clasificación de empresas en {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Empresario(a) STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Empresario @@ -1599,8 +1598,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Activar el uso STR_CONFIG_SETTING_LOADING_INDICATORS :Usar indicadores de carga: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Mostrar indicadores sobre los vehículos mientras cargan o descargan -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Mostrar tiempo de viaje en ticks en lugar de días: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Mostrar los tiempos de viaje en los itinerarios en impulsos de reloj de sistema (ticks) en lugar de días +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar salidas y llegadas en itinerarios: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostrar tiempos anticipados de llegadas y salidas en los itinerarios @@ -4467,8 +4465,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(esperar {STRIN STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(viajar {STRING}, no programado) STR_TIMETABLE_STAY_FOR :y esperar {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :y viajar {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}día{P "" s} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick{P "" s} STR_TIMETABLE_TOTAL_TIME :{BLACK}El itinerario completo se recorre en {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}El itinerario completo se recorre en {STRING} (no todo programado) @@ -4477,10 +4473,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Este veh STR_TIMETABLE_STATUS_LATE :{BLACK}Este vehículo va retrasado por {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Este vehículo va adelantado por {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este itinerario no ha comenzado -STR_TIMETABLE_STATUS_START_AT :{BLACK}Este itinerario comenzará el {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Fecha de inicio -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Elegir una fecha de inicio del itinerario. Ctrl+Clic para distribuir uniformemente todos los demás vehículos que lo compartan, siempre y cuando esté programado completamente + STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambiar tiempo STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modifica la cantidad de tiempo que la orden seleccionada debe tomar. Ctrl+clic modifica la duración para todas las órdenes diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 914b670c1d..8749a84be0 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -255,6 +255,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Sökfilter: STR_LIST_FILTER_OSKTITLE :{BLACK}Skriv in ett eller flera sökord att filtrera listan efter @@ -716,8 +717,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klicka p STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klicka på ett musikstycke för att ta bort det från spellistan (endast Personlig1 och Personlig2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}De bästa företagen som nådde {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Företagslista för {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Affärsman STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entreprenör @@ -1651,8 +1650,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Möjliggör anv STR_CONFIG_SETTING_LOADING_INDICATORS :Använd lastningsindikatorer: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Välj om lastningsindikatorer visas ovanför lastande och avlastande fordon, eller ej -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Visa tidtabeller räknat i ticks istället för dagar: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Visa restider i tidtabeller i antal tick istället för dagar +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Visa ankomster och avgångar i tidtabeller: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Visa förväntade ankomst- och avgångstider i tidtabeller @@ -4545,8 +4543,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(stanna {STRING STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(resor för {STRING}, ej schemalagd) STR_TIMETABLE_STAY_FOR :och stanna i {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :och res i {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}dag{P "" ar} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick STR_TIMETABLE_TOTAL_TIME :{BLACK}Den här tidtabellen kommer ta {STRING} att slutföra STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Denna tidtabell kommer att ta åtminstone {STRING} att slutföra (allt är inte inlagt i en tidtabell) @@ -4555,10 +4551,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Detta fo STR_TIMETABLE_STATUS_LATE :{BLACK}Detta fordon är för tillfället {STRING} sen STR_TIMETABLE_STATUS_EARLY :{BLACK}Detta fordon är för tillfället {STRING} tidig STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Den här tidtabellen har inte startat ännu -STR_TIMETABLE_STATUS_START_AT :{BLACK}Den här tidtabellen kommer starta {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Startdatum -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Välj ett datum som startpunkt för den här tidtabellen. Om tidtabellen är fullt tidssatt så gör ett Ctrl+klick alla fordon som delar dessa order fördelas jämt från det givna datumet, baserat på deras relativa ordning + STR_TIMETABLE_CHANGE_TIME :{BLACK}Ändra tid STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ändra hur lång tid den markerade ordern bör ta. Ctrl+klick ställer in tiden för alla ordrar @@ -4582,8 +4576,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}Förvän STR_TIMETABLE_SCHEDULED :{BLACK}Schemalagt STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Ändra mellan förväntat och schemalagt -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} # Date window (for timetable) diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 1d164e49ee..577a6f955e 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -229,6 +229,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}மீ STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}மீ + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}வடிகட்டி தொடர்: STR_LIST_FILTER_OSKTITLE :{BLACK}Enter filter string @@ -674,8 +675,6 @@ STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}நி STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}தற்போதைய பிரோகிராமிலிருந்து இசைத்தடத்தினை நீக்க சொடுக்கவும் (பயனரால் மாற்றப்பட்ட1 அல்லது 2 மட்டும்) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}{NUM} அடைந்த சிறந்த நிறுவனங்கள் -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}நிறுவனங்களின் பட்டியல் {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :வியாபாரி STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :தொழில்முனைவோர் @@ -1456,8 +1455,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :வாகனங STR_CONFIG_SETTING_LOADING_INDICATORS :ஏற்றுதல் குறிகாட்டிகளைப் பயன்படுத்தவும்: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :வாகனங்களை ஏற்றுவதற்கு அல்லது இறக்குவதற்கு மேலே ஏற்றுதல் குறிகாட்டிகள் காட்டப்படுகிறதா என்பதைத் தேர்ந்தெடுக்கவும் -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :கால அட்டவணையை நாட்களில் அல்லாமல் சொடுக்குகளில் காட்டு: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :கால அட்டவணையை நாட்களில் அல்லாமல் சொடுக்குகளில் காட்டு +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :கால அட்டவணைகளில் காலங்களைக் காட்டவும்: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :எதிர்பார்த்த வருகை மற்றும் புறப்படும் நேரங்களை கால அட்டவணையில் காட்டவும் @@ -3999,8 +3997,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :({STRING} வ STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(பயணி {STRING}, நேர அட்டவணை இடப்படாதது) STR_TIMETABLE_STAY_FOR :மற்றும் {STRING} இற்கு நிற்கவும் STR_TIMETABLE_AND_TRAVEL_FOR :மற்றும் {STRING} இற்கு பயணிக்கவும் -STR_TIMETABLE_DAYS :{COMMA}{NBSP}நாள்{P "" "நாட்கள்"} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}நொடி{P "" கள்} STR_TIMETABLE_TOTAL_TIME :{BLACK}இந்த கால அட்டவணை முடிய {STRING} காலமாகும் STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}இந்த கால அட்டவணை முடிய குரைந்தபட்சம் {STRING} காலமாவது ஆகும்.(ஏனெனில் அனைத்தும் கால அட்டவணைபடவில்லை) @@ -4009,9 +4005,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}இந STR_TIMETABLE_STATUS_LATE :{BLACK}இந்த வாகனம் {STRING} காலதாமதமாக ஓடிக்கொண்டிருக்கிறது STR_TIMETABLE_STATUS_EARLY :{BLACK}இந்த வாகனம் {STRING} சீக்கிரமாக ஓடிக்கொண்டிருக்கிறது STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}கால அட்டவணை இன்னும் தொடங்கவில்லை -STR_TIMETABLE_STATUS_START_AT :{BLACK}இந்த கால அட்டவணை {STRING} அன்று தொடங்கும் -STR_TIMETABLE_STARTING_DATE :{BLACK}ஆரம்ப தேதி + STR_TIMETABLE_CHANGE_TIME :{BLACK}நேரத்தை மாற்று STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}இந்தக் கட்டளையின் கால அளவினை மாற்றவும் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 1eb2d8a276..cb5798c642 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -226,6 +226,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} ฟ STR_UNITS_HEIGHT_METRIC :{DECIMAL} เมตร STR_UNITS_HEIGHT_SI :{DECIMAL} ม. + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}คำกรอง: STR_LIST_FILTER_OSKTITLE :{BLACK}ใส่คำกรอง @@ -671,8 +672,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}คล STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}คลิกที่ชื่อเพลงเพื่อลบออกจากโปรแกรม (Custom1 or Custom2 เท่านั้น) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}บริษัทชั้นนำที่ก้าวไปสู่ {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}ตารางแสดงการแข่งขันของบริษัทใน {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :นักธุรกิจ STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :ผู้ประกอบการ @@ -1490,8 +1489,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :เปิดใ STR_CONFIG_SETTING_LOADING_INDICATORS :แสดงสถานะการขนถ่ายเมื่อกำลังขนถ่ายที่สถานี: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :เลือกเพื่อแสดงตัวเลขปริมาณการบรรทุกขณะขนถ่ายที่สถานีของพาหนะ -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :แสดงตารางเวลาในแบบติ๊กแทนแบบวัน: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :แสดงเวลาในการเดินทางในตารางเวลาเป็น ticks แทนที่ days +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :แสดงเวลามาถึงและออกไปในตารางเวลา: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :แสดงการคาดการณ์เวลาในการเดินทางไปถึงหรือเวลาออกของยานพาหนะในตารางเวลา @@ -4128,8 +4126,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(ตารา STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(ตารางการเดินทางของ {STRING}, ไม่ได้ถูกกำหนดเวลาไว้) STR_TIMETABLE_STAY_FOR :หยุดเป็นเวลา {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :และเดินทาง {STRING} -STR_TIMETABLE_DAYS :{COMMA} วัน -STR_TIMETABLE_TICKS :{COMMA} tick STR_TIMETABLE_TOTAL_TIME :{BLACK}ตารางเวลานี้เสร็จสิ้นโดยใช้เวลาทั้งหมด {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}ตารางเวลานี้ใช้เวลารวมทั้งสิ้น {STRING} (และยังไม่สมบูรณ์) @@ -4138,10 +4134,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}ยา STR_TIMETABLE_STATUS_LATE :{BLACK}ยานพาหนะนี้เดินทางช้ากว่าเวลาปกติอยู่ {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}ยานพาหนะนี้เดินทางเร็วกว่าเวลาปกติอยู่ {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}ตารางเวลายังไม่เริ่มต้น -STR_TIMETABLE_STATUS_START_AT :{BLACK}ตารางเวลานี้จะเริ่มใน {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}วันที่เริ่มต้น -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}เลือกวันที่ที่จะให้เริ่มต้นตารางเวลา. Ctrl+Click เพื่อให้ยานพาหนะที่ใช้ตารางเวลานี้เริ่มต้นที่จุดเดียวกัน, ถ้าตารางเวลาสมบูรณ์แล้ว + STR_TIMETABLE_CHANGE_TIME :{BLACK}ปรับเปลี่ยนเวลา STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}เปลี่ยนเวลาที่ตำแหน่งไฮไลท์ในรายการ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 36b7a26cc3..03e036c28a 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -255,6 +255,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}米 STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}公尺 + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}篩選: STR_LIST_FILTER_OSKTITLE :{BLACK}輸入一個或多個關鍵字詞以篩選此列表 @@ -717,8 +718,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}點擊 STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}點選音樂從目前清單中移除 (僅限「自訂一」或「自訂二」 # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}公司已達到 {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}公司排行榜 {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :商人 STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :企業家 @@ -1644,8 +1643,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :啟用可以為 STR_CONFIG_SETTING_LOADING_INDICATORS :使用裝載進度指示:{STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :選擇是否在車輛裝卸的時候顯示裝載狀況。 -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :顯示時刻表時以刻度數目取代日為單位:{STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :在時刻表上以刻度數目取代日數顯示運行時間。 +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :顯示時刻表排定的到離時間:{STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :在時刻表上顯示預料的到站、出發時間。 @@ -4538,8 +4536,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :等待 {STRING} STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(運行 {STRING} ,未指定時間) STR_TIMETABLE_STAY_FOR :並等待 {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :並運行 {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}日 -STR_TIMETABLE_TICKS :{COMMA}{NBSP}個時間標記 STR_TIMETABLE_TOTAL_TIME :{BLACK}此時刻表跑完全程需時 {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}此時刻表跑完全程至少需時 {STRING} (此表尚未完成) @@ -4548,10 +4544,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}此車 STR_TIMETABLE_STATUS_LATE :{BLACK}此車輛目前比表定時間遲 {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}此車輛目前比表定時間早 {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}此時刻表尚未實施 -STR_TIMETABLE_STATUS_START_AT :{BLACK}此時刻表實施日期為 {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}實施日期 -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}選擇此時刻表開始實施的日期。如按住Ctrl鍵點選此掣,而時刻表每一項指令皆已指定持續時間,則系統會使所有共用此時刻表的車輛之間的間隔平均。 + STR_TIMETABLE_CHANGE_TIME :{BLACK}修改時刻 STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}修改選取指令所需的時間。按住 Ctrl 點選可設定所有指令的時間。 @@ -4575,8 +4569,6 @@ STR_TIMETABLE_EXPECTED :{BLACK}實際 STR_TIMETABLE_SCHEDULED :{BLACK}表定時間 STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}切換顯示 (根據實際情況的) 預期時間 或 表定時間 -STR_TIMETABLE_ARRIVAL :到: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :發: {COLOUR}{DATE_TINY} # Date window (for timetable) diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index a176d5e3ed..eecec8e4e7 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -256,6 +256,10 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m +STR_UNITS_DAYS :{COMMA}{NBSP}gün{P "ler" } +STR_UNITS_SECONDS :{COMMA}{NBSP}saniye{P "ler" } +STR_UNITS_TICKS :{COMMA}{NBSP}tik{P "ler" } + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtre: STR_LIST_FILTER_OSKTITLE :{BLACK}Listeyi filtrelemek için anahtar sözcük girin @@ -517,6 +521,7 @@ STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' Hakk STR_ABOUT_MENU_SPRITE_ALIGNER :Nesne hizalayıcı STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Çerçeveleri aç/kapa STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Kirli blokları renklendir/renklendirme +STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Araç ana hatlarını değiştir # Place in highscore window ###length 15 @@ -718,8 +723,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kullanı STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kullanılan programdan kaldırılacak parçaya tıklayın (Özel1 veya Özel2 için) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK} {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK} {NUM} senesindeki şirket ligi +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}En iyi şirketler STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :İş insanı STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Girişimci @@ -1073,6 +1077,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Temel m STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Kullanılacak temel müzik kümesini seçin STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Temel müzik hakkında daha fazla bilgi +STR_BASESET_STATUS :{STRING} {RED}({NUM} eksik/bozuk dosya{P "lar" }) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Desteklenen çözünürlük listesi alınamadı STR_ERROR_FULLSCREEN_FAILED :{WHITE}Tam ekran kipi başarısız @@ -1655,8 +1660,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Araçları grup STR_CONFIG_SETTING_LOADING_INDICATORS :Araç yükleme bilgisini göster: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Yükleme veya boşaltma yapan araçların üzerinde yükleme işaretlerinin görünüp görünmeyeceğini seçin -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Zaman tablosunda gün yerine işlemci zamanı kullan: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Zaman çizelgelerinde yolculuk sürelerini gün yerine oyun zamanı cinsinden göster +STR_CONFIG_SETTING_TIMETABLE_MODE :Birim zaman için zaman çizelgesi: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Araç zaman çizelgeleri için kullanılan zaman birimlerini seçin +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Gün +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Saniye +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :tikler STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Çıkış ve varışları çizelgelerde göster: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Zaman çizelgelerinde tahmini varış ve ayrılış zamanlarını göster @@ -2345,7 +2354,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Bu oyun STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Parola koy STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Erişimi kısıtlamak için oyuna parola koy -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Görünürlük +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Görünürlük: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Halka açık listelemede öbür oyuncuların sizin sunucunuzu görüp göremeyeceği STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} istemci STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Azami istemci sayısı: @@ -2580,7 +2589,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}OpenTTD' STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}OpenTTD'den çıkıyorsunuz! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Harici sitelerden içerik indirmenin şart ve koşulları değişiklik gösterir.{}İndirdiğiniz içeriği OpenTTD'ye nasıl kuracağınıza dair talimatlar için harici sitelere bakmalısınız.{}Devam etmek istiyor musunuz? STR_CONTENT_FILTER_TITLE :{BLACK}Etiket/isim süzgeci: -STR_CONTENT_OPEN_URL :{BLACK}İnternet sitesine git +STR_CONTENT_OPEN_URL :{BLACK}Website STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Bu içeriğin internet sitesi STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}İndir STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Seçili içeriği indirmeye başla @@ -3366,6 +3375,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Kaydet STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Ön ayarı geçerli seçili isimle kaydet # NewGRF parameters window +STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Temel grafik parametrelerini değiştirin STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}NewGRF parametrelerini değiştir STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Kapat STR_NEWGRF_PARAMETERS_RESET :{BLACK}Sıfırla @@ -4564,8 +4574,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :({STRING} kalma STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :({STRING} için seyahat, hareket saati yok) STR_TIMETABLE_STAY_FOR :{STRING} bekle STR_TIMETABLE_AND_TRAVEL_FOR :ve şuraya sefer yap: {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}gün -STR_TIMETABLE_TICKS :{COMMA}{NBSP}birim STR_TIMETABLE_TOTAL_TIME :{BLACK}Bu zaman çizelgesinin bitmesi {STRING} sürecek STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Bu zaman çizelgesinin bitmesi en az {STRING} sürecek (tamamı hesaplanmadı) @@ -4574,10 +4582,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Bu araç STR_TIMETABLE_STATUS_LATE :{BLACK}Bu araç {STRING} geç çalışıyor STR_TIMETABLE_STATUS_EARLY :{BLACK}Bu araç {STRING} erken çalışıyor STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Bu çizelge henüz başlatılmadı -STR_TIMETABLE_STATUS_START_AT :{BLACK}Bu çizelge {STRING} tarihinde başlayacak +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Bu zaman çizelgesi {STRING} itibariyla başlayacak +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Bu zaman çizelgesi {COMMA} saniye içinde başlayacak + +STR_TIMETABLE_START :{BLACK}Zaman Çizelgesini Başlat +STR_TIMETABLE_START_TOOLTIP :{BLACK}Bu zaman çizelgesinin ne zaman başlayacağını seçin. Sipariş tamamen zaman çizelgesine uygunsa, Ctrl+Tıklama bu sırayı paylaşan tüm araçların startını göreceli sıralarına göre eşit olarak dağıtır -STR_TIMETABLE_STARTING_DATE :{BLACK}Başlangıç tarihi -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Bu zaman çizelgesinin başlangıcı olarak bir tarih seçin. Ctrl+Tıklama eğer komuta zaman çizelgesi uygulanmışsa bu komutu paylaşan tüm araçlara göreli komutlarını baz alarak belirtilen tarihten itibaren eşit dağıtır. +STR_TIMETABLE_START_SECONDS_QUERY :Zaman çizelgesinin başlamasına saniyeler kaldı STR_TIMETABLE_CHANGE_TIME :{BLACK}Zamanı değiştir STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Seçili talimatın harcaması gereken süreyi değiştir. Ctrl+Tıklama bütün talimatların süresini değiştirir @@ -4601,8 +4612,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Beklenen STR_TIMETABLE_SCHEDULED :{BLACK}Programlanan STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Beklenen ile programlanan arasında geçiş yap -STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :D: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :A: {COLOUR}{COMMA} saniye +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :{COLOUR}{COMMA} saniye # Date window (for timetable) @@ -4705,9 +4718,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Gezinme STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Gezinme geçmişinde ileri dönme STR_TEXTFILE_WRAP_TEXT :{WHITE}Metni kaydır STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Metni, okumak için gezinmeyi önlemek üzere kaydır -STR_TEXTFILE_VIEW_README :{BLACK}Benioku dosyasını göster +STR_TEXTFILE_VIEW_README :{BLACK}Benioku +STR_TEXTFILE_VIEW_README_TOOLTIP :Bu içeriğe ilişkin benioku dosyasını görüntüle STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Değişiklik kayıtları +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Bu içerik için değişiklik günlüğünü görüntüle STR_TEXTFILE_VIEW_LICENCE :{BLACK}Lisans +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Bu içeriğin lisansını incele ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} adlı {STRING}'nin benioku dosyası STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} adlı {STRING}'nin değişiklik kaydı @@ -5170,6 +5186,7 @@ STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Aracın STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Araçlar sadece istasyonlarda bekleyebilir STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Araç bu istasyonda durmuyor STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... zaman çizelgesi eksik +STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... zaman çizelgesi henüz başlamadı # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... çok fazla tabela var diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index a497550f16..3e9de47466 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -363,6 +363,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}м STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}м + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Фільтр: STR_LIST_FILTER_OSKTITLE :{BLACK}Введіть одне чи більше слів для фільтрування списку @@ -827,8 +828,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Вибе STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Клацніть мишою на мелодії для її видалення зі списку (лише Набір1 та Набір2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Кращі компанії, які досягли {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Таблиця компаній з {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Підприємець STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Підприємець @@ -1746,8 +1745,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Вмикає в STR_CONFIG_SETTING_LOADING_INDICATORS :Показувати індикатори завантаження: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Вмикає\вимикає відображення індикатора процесу завантаження над транспортними засобами. -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Показувати розклад в тіках замість днів: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Відображати час руху в розкладах в тіках замість днів +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Показувати час прибуття та відправлення у розкладах: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Відображати очікуваний час прибуття та відправлення у розкладі @@ -4627,8 +4625,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(стояти STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(їхати протягом {STRING}, без розкладу) STR_TIMETABLE_STAY_FOR :і стояти {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :і прямувати до {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}д{P ень ні нів} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}одиниц{P я і ь} STR_TIMETABLE_TOTAL_TIME :{BLACK}Цей розклад займе {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Цей розклад займе якнайменше {STRING} (не все враховано) @@ -4637,10 +4633,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Цей STR_TIMETABLE_STATUS_LATE :{BLACK}Цей транспорт запізнюється на {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Цей транспорт випереджує розклад на {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Цей розклад ще не почався -STR_TIMETABLE_STATUS_START_AT :{BLACK}Цей розклад почнеться о {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Дата початку -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Оберіть дату як точку відліку даного розкладу. Ctrl+клац мишою рівномірно розподіляє весь транспорт, що має ці спільні завдання, згідно його відносного порядку розміщення, якщо порядок повністю розписаний у розкладі + STR_TIMETABLE_CHANGE_TIME :{BLACK}Змінити час STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Змінити час, впродовж якого має виконуватись наказ. Ctrl+клац змінить час в усіх завданнях diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 2060def919..afa61cebac 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -219,6 +219,7 @@ STR_UNITS_FORCE_SI :{NBSP}{DECIMAL} STR_UNITS_HEIGHT_IMPERIAL :{NBSP}{DECIMAL} فٹ STR_UNITS_HEIGHT_SI :{NBSP}{DECIMAL} میٹر + # Common window strings STR_LIST_FILTER_OSKTITLE :{BLACK} چھان کے الفاظ درج کیجیئے STR_LIST_FILTER_TOOLTIP :{BLACK} فھرست کے چھان کے لیے کوئی حرف دیجیئے @@ -644,8 +645,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}موجو STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}موجودہ پروگرام میں سے نکالنے کے لئے گانے پر کلک کریں (صرف اپنی مرضی کے مطابق 1 یا 2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}سر فہرست کمپنیاں جو {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}کمپنیوں کی فہرست میں {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :کاروباری STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :سرمایہ دار @@ -1281,7 +1280,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :گاڑیوں ک STR_CONFIG_SETTING_LOADING_INDICATORS :سامان بھرنے کی نشانی دکھائیں: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :اوقات کا جدول دنوں کی بجائے ٹِکس میں دکھائیں: {STRING} +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :قوقات کے جدول میں آمد اور روانگی دکھائیں: {STRING} @@ -2678,6 +2677,7 @@ STR_TIMETABLE_TRAVEL_FOR_SPEED :{STRING} کے + STR_TIMETABLE_CHANGE_SPEED :{BLACK}حد رفتار تبدیل کریں STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}منتخب کردہ حکم کی زیادہ سے زیادہ حد رفتار تبدیل کریں diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index f8c1178640..d29cbb867c 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -255,6 +255,10 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m +STR_UNITS_DAYS :{COMMA}{NBSP}ngày +STR_UNITS_SECONDS :{COMMA}{NBSP}giây +STR_UNITS_TICKS :{COMMA}{NBSP}tick + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Lọc: STR_LIST_FILTER_OSKTITLE :{BLACK}Nhập một hoặc nhiều từ khóa để lọc danh sách @@ -718,8 +722,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Click v STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Click vào bài nhạc để xóa khỏi chương trình hiện tại (cho "Tự chọn 1" hay "Tự chọn 2") # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Những công ty đứng đầu đã đạt được {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Bảng tầm cỡ công ty trong {NUM} +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Những công ty hàng đầu STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Doanh Nhân STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Nhà Thầu @@ -1488,7 +1491,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Nguyên Bản STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Kiểu nền đất: {STRING} -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Chỉ cho TerraGenesis) Địa hình nhiều đồi núi +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Chọn độ cao của đồi núi trên địa hình STR_CONFIG_SETTING_INDUSTRY_DENSITY :Mật độ nhà máy: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Thiết lập số nhà máy sẽ được tạo ra và mức độ dùy trì trong ván chơi @@ -1508,7 +1511,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Điều chỉnh STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Độ gồ ghề của địa chất: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Chỉ cho TerraGenesis) Chọn mức độ trùng điệp của núi: địa hình bằng phẳng thì ít hơn, địa hình đồi núi thì nhiều hơn. Địa hình gồ ghề có nhiều núi và trông có vẻ lặp lại +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Chọn hình dạng và số lượng đồi núi. Địa hình bằng phẳng có ít núi nhưng chúng sẽ rộng hơn, trong khi địa hình gồ ghề có nhiều núi với kích cỡ nhỏ. ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Rất Phẳng STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Phẳng @@ -1516,7 +1519,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Gồ Ghề STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Rất Gồ Ghề STR_CONFIG_SETTING_VARIETY :Phân bổ sự đa dạng: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Chỉ cho TerraGenesis) Điều chỉnh liệu rằng bản đồ gồm cả vùng núi cao và vùng đồng bằng. Đây chỉ là điều chỉnh cho sự bằng phẳng hơn, các thiết lập khác sẽ điều chỉnh cho vùng núi. +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Điều chỉnh liệu rằng bản đồ gồm cả vùng núi cao và vùng đồng bằng. Độ đa dạng càng cao thì sự chênh lệch về độ cao giữa vùng núi và vùng đồng bằng càng nhiều. STR_CONFIG_SETTING_RIVER_AMOUNT :Số lượng sông ngòi: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Chọn số lượng sông ngòi được khởi tạo @@ -1536,6 +1539,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Lái bên trái STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Lái bên phải STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Xoay bản đồ địa hình: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Chọn chiều xoay của ảnh địa hình để dùng trong thế giới của trò chơi ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Ngược chiều đồng hồ STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Xuôi chiều đồng hồ @@ -1656,8 +1660,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Cho phép sử STR_CONFIG_SETTING_LOADING_INDICATORS :Hiển thị quá trình nạp hàng: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Lựa chọn liệu có chỉ thị tỉ lệ bốc xếp hiển thị khi bốc xếp hàng -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Hiện lịch trình ở dạng số nhịp thay vì ngày: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Hiển thị thời gian trong bảng lịch trình bằng bộ đếm trò chơi thay vì ngày +STR_CONFIG_SETTING_TIMETABLE_MODE :Đơn vị thời gian của bảng biểu: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Chọn đơn vị thời gian sử dụng cho bảng biểu của phương tiện +###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Ngày +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Giây +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Tick STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Hiển thị nơi đến và nơi đi trên lịch trình: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Hiển thị thời gian đi và đến trong bảng lịch trình @@ -2346,7 +2354,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Tên c STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Đặt mật khẩu STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Bảo vệ game của bạn bằng mật khẩu nếu bạn không muốn người khác vào tùy tiện -STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Hiển thị +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Hiển thị: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Cho phép người khác thấy server của bạn trong danh sách công khai STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} máy trạm STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Số máy trạm tối đa: @@ -2581,7 +2589,7 @@ STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Tìm nh STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Bạn đang thoát khỏi OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Có nhiều điều kiện và điều khoản để tải nội dung từ những trang ngoài.{}Bạn sẽ phải tham khảo trang ngoài để đọc những hướng dẫn cài nội dung vào OpenTTD.{}Bạn có muốn tiếp tục? STR_CONTENT_FILTER_TITLE :{BLACK}Lọc theo tên: -STR_CONTENT_OPEN_URL :{BLACK}Đến trang web +STR_CONTENT_OPEN_URL :{BLACK}Trang web STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Đến trang web của nội dung này STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Tải về STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Tải các nội dung đã chọn về @@ -3201,10 +3209,13 @@ STR_MAPGEN_MAPSIZE :{BLACK}Kích th STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Lựa chọn kích thước bản đồ theo đơn vị ô. Số lượng ô thực sự có thể nhỏ hơn 1 chút. STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Số lượng đô thị: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Chọn độ dày đặc của thị trấn, hoặc nhập một số tự chọn STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Tên thị trấn: STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Lựa chọn kiểu tên thị trấn STR_MAPGEN_DATE :{BLACK}Thời điểm: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Chọn ngày bắt đầu STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Số lượng nhà máy: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :Chọn độ dày đặc của nhà máy, hoặc nhập một số tự chọn STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Độ cao đỉnh cao nhất: STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Tăng chiều cao tối đa của đỉnh cao nhất lên một đơn vị STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Giảm độ cao tối đa của đỉnh cao nhất trên bản đồ một đơn vị @@ -3218,10 +3229,12 @@ STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Giảm STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Kiểu nền đất: STR_MAPGEN_SEA_LEVEL :{BLACK}Mực nước biển: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Chọn mực nước biển STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Số sông/suối: STR_MAPGEN_SMOOTHNESS :{BLACK}Độ phẳng phiu: STR_MAPGEN_VARIETY :{BLACK}Phân bổ sự đa dạng: STR_MAPGEN_GENERATE :{WHITE}Khởi Tạo +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Kiến tạo thế giới và chơi với OpenTTD! STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Thiết Lập NewGRF STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Hiển thị tùy chỉnh NewGRF STR_MAPGEN_AI_SETTINGS :{BLACK}Thiết lập AI @@ -3254,6 +3267,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :Catalan # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Rìa bản đồ: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Chọn loại ranh giới của thế giới của trò chơi STR_MAPGEN_NORTHWEST :{BLACK}Tây Bắc STR_MAPGEN_NORTHEAST :{BLACK}Đông Bắc STR_MAPGEN_SOUTHEAST :{BLACK}Đông Nam @@ -3266,6 +3280,7 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Bằng T STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Xoay bản đồ địa hình: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Tên bản đồ địa hình: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Tên tập tin bản đồ địa hình STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Cỡ: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} @@ -3281,6 +3296,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Đất b STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Tạo ra đất bằng STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Nền đất ngẫu nhiên STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Độ cao của đồng bằng: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Chọn độ cao của đất so với mực nước biển STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Hạ độ cao của đồng bằng xuống một STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Nâng độ cao của đồng bằng lên một @@ -4566,8 +4582,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(ở lại {STR STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(di chuyển đến {STRING}, chưa có lịch trình) STR_TIMETABLE_STAY_FOR :và ở lại trong {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :và di chuyển trong {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}ngày -STR_TIMETABLE_TICKS :{COMMA}{NBSP}nhịp STR_TIMETABLE_TOTAL_TIME :{BLACK}Lịch trình này sẽ mất {STRING} để hoàn thành STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Lịch trình này sẽ mất ít nhất {STRING} để hoàn thành (không phải tất cả điểm được lập lịch trình) @@ -4576,10 +4590,12 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Phương STR_TIMETABLE_STATUS_LATE :{BLACK}Phương tiện này đang chạy trễ dự kiến {STRING} STR_TIMETABLE_STATUS_EARLY :{BLACK}Phương tiện này đang chạy sớm hơn dự kiến {STRING} STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Bảng lịch trình này chưa khởi tạo -STR_TIMETABLE_STATUS_START_AT :{BLACK}Bảng lịch trình sẽ bắt đầu lúc {STRING} +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Bảng biểu sẽ bắt đầu lúc {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Lịch trình này sẽ bắt đầu trong {COMMA} giây + +STR_TIMETABLE_START :{BLACK}Khởi động bảng biểu -STR_TIMETABLE_STARTING_DATE :{BLACK}Ngày bắt đầu -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Lựa chọn ngày bắt đầu trong bảng lịch trình này. Ctrl+Click phân bổ cho tất cả các phương tiện chia sẻ lộ trình này bắt đầu từ ngày được chọn một cách đồng đều theo thứ tự tương đối giữa chúng, nếu như lộ trình đã lên lịch đầy đủ. +STR_TIMETABLE_START_SECONDS_QUERY :Số giây cho đến khi lịch trình bắt đầu STR_TIMETABLE_CHANGE_TIME :{BLACK}Đổi thời gian STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Thay đổi thời lượng của điểm lộ trình được phép sử dụng. Ctrl+Click đặt thời gian cho mọi lộ trình @@ -4603,8 +4619,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}Mong mu STR_TIMETABLE_SCHEDULED :{BLACK}Chốt lịch STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Chuyển giữa lịch mong muốn và lịch được chốt -STR_TIMETABLE_ARRIVAL :ĐN: {COLOUR}{DATE_TINY} -STR_TIMETABLE_DEPARTURE :KH: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_DATE :Đến: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :Đến: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :Đến: {COLOUR}{COMMA} giây +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :Đến: {COLOUR}{COMMA} giây # Date window (for timetable) @@ -4707,9 +4725,12 @@ STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Trở v STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Trở về sau trong lịch sử điều hướng STR_TEXTFILE_WRAP_TEXT :{WHITE}Ép văn bản STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Ép chữ cái vừa khung cửa sổ để khỏi phải cuộn chuột -STR_TEXTFILE_VIEW_README :{BLACK}Xem readme +STR_TEXTFILE_VIEW_README :{BLACK}Readme +STR_TEXTFILE_VIEW_README_TOOLTIP :Xem readme của nội dung này STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Lịch sử thay đổi +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Xem lịch sử thay đổi của nội dung này STR_TEXTFILE_VIEW_LICENCE :{BLACK}Giấy phép +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Xem giấy phép của nội dung này ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}Readme của {STRING} {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Lịch sử thay đổi của {STRING} {STRING} diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index e7fac0868b..c50e759abb 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -231,6 +231,7 @@ STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}m STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}m + # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Hidlydd: STR_LIST_FILTER_OSKTITLE :{BLACK}Rhowch un neu fwy o allweddeiriau i hildio'r rhestr @@ -673,8 +674,6 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Cliciwch STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Cliciwch i dynnu trac cerddoriaeth o'r rhaglen gyfredol (Cyfaddas 1 Neu Cyfaddas 2 yn unig) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Y Cwmnïau Brig a gyrhaeddodd Lefel {NUM} -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Y Tabl Cynghrair Cwmnïau yn {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Rheolwr Busnes STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Entrepreneur @@ -1525,8 +1524,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Galluogi defnyd STR_CONFIG_SETTING_LOADING_INDICATORS :Dangos llwytho: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Dewis a fydd dangosyddion llwytho'n cael eu dangos uwch cerbydau sy'n llwytho neu dadlwytho -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Dangos amserlen fesul ticiau yn hytrach na dyddiau: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Dangos amseroedd teithio mewn amserlenni mewn ticiau yn hytrach na dyddiau +###length 3 STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Dangos cyrraedd a gadael mewn amserlenni: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Dangos amseroedd cyrraedd a gadael rhagdybiedig mewn amserlenni @@ -4156,8 +4154,6 @@ STR_TIMETABLE_STAY_FOR_ESTIMATED :(aros am {STRIN STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(teithio am {STRING}, heb ei amserlennu) STR_TIMETABLE_STAY_FOR :aros am {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :a theithio am {STRING} -STR_TIMETABLE_DAYS :{COMMA}{NBSP}diwrnod -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tic STR_TIMETABLE_TOTAL_TIME :{BLACK}Bydd yr amserlen hon yn cymryd {STRING} i'w chwblhau STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Bydd yr amserlen hon yn cymryd o leiaf {STRING} i'w chwblhau (heb ei hamserlennu'n llwyr) @@ -4166,10 +4162,8 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Mae'r ce STR_TIMETABLE_STATUS_LATE :{BLACK}Mae'r cerbyd hwn yn rhedeg {STRING} yn hwyr ar hyn o bryd STR_TIMETABLE_STATUS_EARLY :{BLACK}Mae'r cerbyd hwn yn rhedeg {STRING} yn gynnar ar hyn o bryd STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Nid yw'r amserlen yma wedi dechrau -STR_TIMETABLE_STATUS_START_AT :{BLACK}Bydd yr amserlen yma'n dechrau ar {STRING} -STR_TIMETABLE_STARTING_DATE :{BLACK}Dyddiad dechrau -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Dewis dyddiad fel pwynt dechrau ar gyfer yr amserlen yma. Mae Ctrl+Clic yn gosod pwynt dechrau yr amselen yma ac yn dosbarthu'r holl gerbydau sy'n rhannu'r gorchymyn yma yn gyson yn ôl eu trefn cymharol, os yw'r gorchymyn wedi ei amserlennu'n llwyr + STR_TIMETABLE_CHANGE_TIME :{BLACK}Newid Amser STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Newid faint o amser y dylai'r gorchymyn a amlygwyd ei gymryd diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 0220dc42fd..7bd1d17f22 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -802,7 +802,6 @@ void LinkGraphLegendWindow::UpdateWidgetSize(int widget, Dimension *size, [[mayb void LinkGraphLegendWindow::DrawWidget(const Rect &r, int widget) const { Rect br = r.Shrink(WidgetDimensions::scaled.bevel); - if (this->IsWidgetLowered(widget)) br = br.Translate(WidgetDimensions::scaled.pressed, WidgetDimensions::scaled.pressed); if (IsInsideMM(widget, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST + 1)) { if (this->IsWidgetDisabled(widget)) return; CompanyID cid = (CompanyID)(widget - WID_LGL_COMPANY_FIRST); diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index a9b1f70802..46c4a3bf32 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -867,7 +867,7 @@ void QueryString::DrawEditBox(const Window *w, int wid) const Rect fr = r.Indent(clearbtn_width, !rtl); DrawFrameRect(cr, wi->colour, wi->IsLowered() ? FR_LOWERED : FR_NONE); - DrawSpriteIgnorePadding(rtl ? SPR_IMG_DELETE_RIGHT : SPR_IMG_DELETE_LEFT, PAL_NONE, cr, wi->IsLowered(), SA_CENTER); + DrawSpriteIgnorePadding(rtl ? SPR_IMG_DELETE_RIGHT : SPR_IMG_DELETE_LEFT, PAL_NONE, cr, SA_CENTER); if (this->text.bytes == 1) GfxFillRect(cr.Shrink(WidgetDimensions::scaled.bevel), _colour_gradient[wi->colour & 0xF][2], FILLRECT_CHECKER); DrawFrameRect(fr, wi->colour, FR_LOWERED | FR_DARKENED); @@ -876,7 +876,7 @@ void QueryString::DrawEditBox(const Window *w, int wid) const fr = fr.Shrink(WidgetDimensions::scaled.framerect); /* Limit the drawing of the string inside the widget boundaries */ DrawPixelInfo dpi; - if (!FillDrawPixelInfo(&dpi, fr.left, fr.top, fr.Width(), fr.Height())) return; + if (!FillDrawPixelInfo(&dpi, fr)) return; AutoRestoreBackup dpi_backup(_cur_dpi, &dpi); diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index e05fde9d74..bd76488dd6 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -327,7 +327,7 @@ enum ContentListFilterCriteria { /** Window that lists the content that's at the content server */ class NetworkContentListWindow : public Window, ContentCallback { /** List with content infos. */ - typedef GUIList GUIContentList; + typedef GUIList GUIContentList; static const uint EDITBOX_MAX_SIZE = 50; ///< Maximum size of the editbox in characters. @@ -1082,13 +1082,15 @@ static const NWidgetPart _nested_network_content_list_widgets[] = { 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), + NWidget(NWID_VERTICAL), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + 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_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_TEXTFILE_VIEW_README_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_TEXTFILE_VIEW_LICENCE_TOOLTIP), + EndContainer(), EndContainer(), EndContainer(), EndContainer(), @@ -1107,7 +1109,7 @@ static const NWidgetPart _nested_network_content_list_widgets[] = { /* Resize button. */ NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_RESIZEBOX, COLOUR_LIGHT_BLUE), + NWidget(WWT_RESIZEBOX, COLOUR_LIGHT_BLUE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE), EndContainer(), EndContainer(), }; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index f92dccfc02..1d240e5369 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -83,7 +83,7 @@ static DropDownList BuildVisibilityDropDownList() return list; } -typedef GUIList GUIGameServerList; +typedef GUIList GUIGameServerList; typedef int ServerListPosition; static const ServerListPosition SLP_INVALID = -1; @@ -576,8 +576,13 @@ public: this->SetWidgetLoweredState(WID_NG_REFRESH, sel != nullptr && sel->refreshing); /* 'NewGRF Settings' button invisible if no NewGRF is used */ - this->GetWidget(WID_NG_NEWGRF_SEL)->SetDisplayedPlane(sel == nullptr || sel->status != NGLS_ONLINE || sel->info.grfconfig == nullptr); - this->GetWidget(WID_NG_NEWGRF_MISSING_SEL)->SetDisplayedPlane(sel == nullptr || sel->status != NGLS_ONLINE || sel->info.grfconfig == nullptr || !sel->info.version_compatible || sel->info.compatible); + bool changed = false; + changed |= this->GetWidget(WID_NG_NEWGRF_SEL)->SetDisplayedPlane(sel == nullptr || sel->status != NGLS_ONLINE || sel->info.grfconfig == nullptr ? SZSP_NONE : 0); + changed |= this->GetWidget(WID_NG_NEWGRF_MISSING_SEL)->SetDisplayedPlane(sel == nullptr || sel->status != NGLS_ONLINE || sel->info.grfconfig == nullptr || !sel->info.version_compatible || sel->info.compatible ? SZSP_NONE : 0); + if (changed) { + this->ReInit(); + return; + } #ifdef __EMSCRIPTEN__ this->SetWidgetDisabledState(WID_NG_SEARCH_INTERNET, true); @@ -589,74 +594,68 @@ public: this->DrawWidgets(); } + StringID GetHeaderString() const + { + if (this->server == nullptr) return STR_NETWORK_SERVER_LIST_GAME_INFO; + switch (this->server->status) { + case NGLS_OFFLINE: return STR_NETWORK_SERVER_LIST_SERVER_OFFLINE; + case NGLS_ONLINE: return STR_NETWORK_SERVER_LIST_GAME_INFO; + case NGLS_FULL: return STR_NETWORK_SERVER_LIST_SERVER_FULL; + case NGLS_BANNED: return STR_NETWORK_SERVER_LIST_SERVER_BANNED; + case NGLS_TOO_OLD: return STR_NETWORK_SERVER_LIST_SERVER_TOO_OLD; + default: NOT_REACHED(); + } + } + void DrawDetails(const Rect &r) const { NetworkGameList *sel = this->server; - /* Height for the title banner */ - int HEADER_HEIGHT = 3 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.frametext.Vertical(); - - Rect hr = r.WithHeight(HEADER_HEIGHT).Shrink(WidgetDimensions::scaled.frametext); Rect tr = r.Shrink(WidgetDimensions::scaled.frametext); - tr.top += HEADER_HEIGHT; + StringID header_msg = this->GetHeaderString(); + int header_height = GetStringHeight(header_msg, tr.Width()) + + (sel == nullptr ? 0 : GetStringHeight(sel->info.server_name, tr.Width())) + + WidgetDimensions::scaled.frametext.Vertical(); + + /* Height for the title banner */ + Rect hr = r.WithHeight(header_height).Shrink(WidgetDimensions::scaled.frametext); + tr.top += header_height; /* Draw the right menu */ /* Create the nice grayish rectangle at the details top */ - GfxFillRect(r.WithHeight(HEADER_HEIGHT).Shrink(WidgetDimensions::scaled.bevel.left, WidgetDimensions::scaled.bevel.top, WidgetDimensions::scaled.bevel.right, 0), PC_DARK_BLUE); - if (sel == nullptr) { - DrawString(hr.left, hr.right, hr.top, STR_NETWORK_SERVER_LIST_GAME_INFO, TC_FROMSTRING, SA_HOR_CENTER); - } else if (sel->status != NGLS_ONLINE) { - StringID message = INVALID_STRING_ID; - switch (sel->status) { - case NGLS_OFFLINE: message = STR_NETWORK_SERVER_LIST_SERVER_OFFLINE; break; - case NGLS_FULL: message = STR_NETWORK_SERVER_LIST_SERVER_FULL; break; - case NGLS_BANNED: message = STR_NETWORK_SERVER_LIST_SERVER_BANNED; break; - case NGLS_TOO_OLD: message = STR_NETWORK_SERVER_LIST_SERVER_TOO_OLD; break; - - /* Handled by the if-case above. */ - case NGLS_ONLINE: NOT_REACHED(); - } + GfxFillRect(r.WithHeight(header_height).Shrink(WidgetDimensions::scaled.bevel), PC_DARK_BLUE); + hr.top = DrawStringMultiLine(hr, header_msg, TC_FROMSTRING, SA_HOR_CENTER); + if (sel == nullptr) return; - DrawString(hr.left, hr.right, hr.top, message, TC_FROMSTRING, SA_HOR_CENTER); // server offline - DrawStringMultiLine(hr.left, hr.right, hr.top + GetCharacterHeight(FS_NORMAL), hr.bottom, sel->info.server_name, TC_ORANGE, SA_HOR_CENTER); // game name - DrawString(tr.left, tr.right, tr.top, message, TC_FROMSTRING, SA_HOR_CENTER); // server offline + hr.top = DrawStringMultiLine(hr, sel->info.server_name, TC_ORANGE, SA_HOR_CENTER); // game name + if (sel->status != NGLS_ONLINE) { + tr.top = DrawStringMultiLine(tr, header_msg, TC_FROMSTRING, SA_HOR_CENTER); } else { // show game info - - DrawString(hr.left, hr.right, hr.top, STR_NETWORK_SERVER_LIST_GAME_INFO, TC_FROMSTRING, SA_HOR_CENTER); - DrawStringMultiLine(hr.left, hr.right, hr.top + GetCharacterHeight(FS_NORMAL), hr.bottom, sel->info.server_name, TC_ORANGE, SA_HOR_CENTER); // game name - SetDParam(0, sel->info.clients_on); SetDParam(1, sel->info.clients_max); SetDParam(2, sel->info.companies_on); SetDParam(3, sel->info.companies_max); - DrawString(tr, STR_NETWORK_SERVER_LIST_CLIENTS); - tr.top += GetCharacterHeight(FS_NORMAL); + tr.top = DrawStringMultiLine(tr, STR_NETWORK_SERVER_LIST_CLIENTS); SetDParam(0, STR_CLIMATE_TEMPERATE_LANDSCAPE + sel->info.landscape); - DrawString(tr, STR_NETWORK_SERVER_LIST_LANDSCAPE); // landscape - tr.top += GetCharacterHeight(FS_NORMAL); + tr.top = DrawStringMultiLine(tr, STR_NETWORK_SERVER_LIST_LANDSCAPE); // landscape SetDParam(0, sel->info.map_width); SetDParam(1, sel->info.map_height); - DrawString(tr, STR_NETWORK_SERVER_LIST_MAP_SIZE); // map size - tr.top += GetCharacterHeight(FS_NORMAL); + tr.top = DrawStringMultiLine(tr, STR_NETWORK_SERVER_LIST_MAP_SIZE); // map size SetDParamStr(0, sel->info.server_revision); - DrawString(tr, STR_NETWORK_SERVER_LIST_SERVER_VERSION); // server version - tr.top += GetCharacterHeight(FS_NORMAL); + tr.top = DrawStringMultiLine(tr, STR_NETWORK_SERVER_LIST_SERVER_VERSION); // server version SetDParamStr(0, sel->connection_string); StringID invite_or_address = StrStartsWith(sel->connection_string, "+") ? STR_NETWORK_SERVER_LIST_INVITE_CODE : STR_NETWORK_SERVER_LIST_SERVER_ADDRESS; - DrawString(tr, invite_or_address); // server address / invite code - tr.top += GetCharacterHeight(FS_NORMAL); + tr.top = DrawStringMultiLine(tr, invite_or_address); // server address / invite code - SetDParam(0, sel->info.start_date.base()); - DrawString(tr, STR_NETWORK_SERVER_LIST_START_DATE); // start date - tr.top += GetCharacterHeight(FS_NORMAL); + SetDParam(0, sel->info.start_date); + tr.top = DrawStringMultiLine(tr, STR_NETWORK_SERVER_LIST_START_DATE); // start date - SetDParam(0, sel->info.game_date.base()); - DrawString(tr, STR_NETWORK_SERVER_LIST_CURRENT_DATE); // current date - tr.top += GetCharacterHeight(FS_NORMAL); + SetDParam(0, sel->info.game_date); + tr.top = DrawStringMultiLine(tr, STR_NETWORK_SERVER_LIST_CURRENT_DATE); // current date if (sel->info.gamescript_version != -1) { SetDParamStr(0, sel->info.gamescript_name); @@ -667,12 +666,12 @@ public: tr.top += WidgetDimensions::scaled.vsep_wide; if (!sel->info.compatible) { - DrawString(tr, sel->info.version_compatible ? STR_NETWORK_SERVER_LIST_GRF_MISMATCH : STR_NETWORK_SERVER_LIST_VERSION_MISMATCH, TC_FROMSTRING, SA_HOR_CENTER); // server mismatch + DrawStringMultiLine(tr, sel->info.version_compatible ? STR_NETWORK_SERVER_LIST_GRF_MISMATCH : STR_NETWORK_SERVER_LIST_VERSION_MISMATCH, TC_FROMSTRING, SA_HOR_CENTER); // server mismatch } else if (sel->info.clients_on == sel->info.clients_max) { /* Show: server full, when clients_on == max_clients */ - DrawString(tr, STR_NETWORK_SERVER_LIST_SERVER_FULL, TC_FROMSTRING, SA_HOR_CENTER); // server full + DrawStringMultiLine(tr, STR_NETWORK_SERVER_LIST_SERVER_FULL, TC_FROMSTRING, SA_HOR_CENTER); // server full } else if (sel->info.use_password) { - DrawString(tr, STR_NETWORK_SERVER_LIST_PASSWORD, TC_FROMSTRING, SA_HOR_CENTER); // password warning + DrawStringMultiLine(tr, STR_NETWORK_SERVER_LIST_PASSWORD, TC_FROMSTRING, SA_HOR_CENTER); // password warning } } } @@ -882,11 +881,11 @@ static const NWidgetPart _nested_network_game_widgets[] = { NWidget(WWT_DEFSIZEBOX, COLOUR_LIGHT_BLUE), EndContainer(), NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, WID_NG_MAIN), - NWidget(NWID_VERTICAL), SetPIP(10, 7, 0), - NWidget(NWID_HORIZONTAL), SetPIP(10, 7, 10), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_wide, 0), SetPadding(WidgetDimensions::unscaled.sparse_resize), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), /* LEFT SIDE */ - NWidget(NWID_VERTICAL), SetPIP(0, 7, 0), - NWidget(NWID_HORIZONTAL), SetPIP(0, 7, 0), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_wide, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NG_FILTER_LABEL), SetDataTip(STR_LIST_FILTER_TITLE, STR_NULL), NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NG_FILTER), SetMinimalSize(251, 12), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), @@ -911,29 +910,23 @@ static const NWidgetPart _nested_network_game_widgets[] = { EndContainer(), EndContainer(), /* RIGHT SIDE */ - NWidget(NWID_VERTICAL), SetPIP(0, 7, 0), - NWidget(NWID_HORIZONTAL), SetPIP(0, 7, 0), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_wide, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NG_CLIENT_LABEL), SetDataTip(STR_NETWORK_SERVER_LIST_PLAYER_NAME, STR_NULL), NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NG_CLIENT), SetMinimalSize(151, 12), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE, STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP), EndContainer(), - NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, WID_NG_DETAILS), - NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(5, 5, 5), - NWidget(WWT_EMPTY, INVALID_COLOUR, WID_NG_DETAILS_SPACER), SetMinimalSize(140, 0), SetMinimalTextLines(15, 24 + WidgetDimensions::unscaled.vsep_normal), SetResize(0, 1), SetFill(1, 1), // Make sure it's at least this wide - NWidget(NWID_HORIZONTAL, NC_NONE), SetPIP(5, 5, 5), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_NG_NEWGRF_MISSING_SEL), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_NEWGRF_MISSING), SetFill(1, 0), SetDataTip(STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON, STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP), - NWidget(NWID_SPACER), SetFill(1, 0), - EndContainer(), + NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), + NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, WID_NG_DETAILS), SetMinimalSize(140, 0), SetMinimalTextLines(15, 0), SetResize(0, 1), + EndContainer(), + NWidget(NWID_VERTICAL, NC_EQUALSIZE), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_NG_NEWGRF_MISSING_SEL), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_NEWGRF_MISSING), SetFill(1, 0), SetDataTip(STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON, STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP), EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(5, 5, 5), - NWidget(NWID_SPACER), SetFill(1, 0), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_NG_NEWGRF_SEL), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_NEWGRF), SetFill(1, 0), SetDataTip(STR_INTRO_NEWGRF_SETTINGS, STR_NULL), - NWidget(NWID_SPACER), SetFill(1, 0), - EndContainer(), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_NG_NEWGRF_SEL), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_NEWGRF), SetFill(1, 0), SetDataTip(STR_INTRO_NEWGRF_SETTINGS, STR_NULL), EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(5, 5, 5), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_JOIN), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_JOIN_GAME, STR_NULL), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_REFRESH), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_REFRESH, STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP), EndContainer(), @@ -942,23 +935,19 @@ static const NWidgetPart _nested_network_game_widgets[] = { EndContainer(), EndContainer(), /* BOTTOM */ - NWidget(NWID_HORIZONTAL), - NWidget(NWID_VERTICAL), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 7, 4), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_SEARCH_INTERNET), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET, STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_SEARCH_LAN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN, STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_ADD), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_ADD_SERVER, STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_START), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_START_SERVER, STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_CANCEL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_BUTTON_CANCEL, STR_NULL), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 6), SetResize(1, 0), SetFill(1, 0), - EndContainer(), - NWidget(NWID_VERTICAL), - NWidget(NWID_SPACER), SetFill(0, 1), - NWidget(WWT_RESIZEBOX, COLOUR_LIGHT_BLUE), - EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_SEARCH_INTERNET), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET, STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_SEARCH_LAN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN, STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_ADD), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_ADD_SERVER, STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_START), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_START_SERVER, STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_CANCEL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_BUTTON_CANCEL, STR_NULL), EndContainer(), EndContainer(), + /* Resize button. */ + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_RESIZEBOX, COLOUR_LIGHT_BLUE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE), + EndContainer(), EndContainer(), }; @@ -1168,62 +1157,62 @@ static const NWidgetPart _nested_network_start_server_window_widgets[] = { NWidget(WWT_CAPTION, COLOUR_LIGHT_BLUE), SetDataTip(STR_NETWORK_START_SERVER_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), EndContainer(), NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, WID_NSS_BACKGROUND), - NWidget(NWID_VERTICAL), SetPIP(10, 6, 10), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 6, 10), - NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_wide, 0), SetPadding(WidgetDimensions::unscaled.sparse), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), /* Game name widgets */ NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_GAMENAME_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NEW_GAME_NAME, STR_NULL), NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NSS_GAMENAME), SetMinimalSize(10, 12), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE, STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP), EndContainer(), - EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 6, 10), - NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), - NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_VISIBILITY_LABEL, STR_NULL), - NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_BTN), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP), - EndContainer(), - NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), - NWidget(NWID_SPACER), SetFill(1, 1), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_SETPWD), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_SET_PASSWORD, STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), + NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_VISIBILITY_LABEL, STR_NULL), + NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_BTN), SetFill(1, 0), SetDataTip(STR_JUST_STRING, STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP), + EndContainer(), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), + NWidget(NWID_SPACER), SetFill(1, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_SETPWD), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_SET_PASSWORD, STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP), + EndContainer(), EndContainer(), - EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 6, 10), - NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), - NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS, STR_NULL), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTND), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_TXT), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_CLIENTS_SELECT, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), - NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTNU), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), + NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS, STR_NULL), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTND), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_TXT), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_CLIENTS_SELECT, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_CLIENTS_BTNU), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP), + EndContainer(), EndContainer(), - EndContainer(), - NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), - NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES, STR_NULL), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTND), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_TXT), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_COMPANIES_SELECT, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), - NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTNU), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), + NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES, STR_NULL), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTND), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_TXT), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_COMPANIES_SELECT, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTNU), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), + EndContainer(), EndContainer(), EndContainer(), EndContainer(), - /* 'generate game' and 'load game' buttons */ - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 6, 10), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_GENERATE_GAME), SetDataTip(STR_INTRO_NEW_GAME, STR_INTRO_TOOLTIP_NEW_GAME), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_LOAD_GAME), SetDataTip(STR_INTRO_LOAD_GAME, STR_INTRO_TOOLTIP_LOAD_GAME), SetFill(1, 0), - EndContainer(), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), + /* 'generate game' and 'load game' buttons */ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_GENERATE_GAME), SetDataTip(STR_INTRO_NEW_GAME, STR_INTRO_TOOLTIP_NEW_GAME), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_LOAD_GAME), SetDataTip(STR_INTRO_LOAD_GAME, STR_INTRO_TOOLTIP_LOAD_GAME), SetFill(1, 0), + EndContainer(), - /* 'play scenario' and 'play heightmap' buttons */ - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 6, 10), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_PLAY_SCENARIO), SetDataTip(STR_INTRO_PLAY_SCENARIO, STR_INTRO_TOOLTIP_PLAY_SCENARIO), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_PLAY_HEIGHTMAP), SetDataTip(STR_INTRO_PLAY_HEIGHTMAP, STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP), SetFill(1, 0), + /* 'play scenario' and 'play heightmap' buttons */ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_PLAY_SCENARIO), SetDataTip(STR_INTRO_PLAY_SCENARIO, STR_INTRO_TOOLTIP_PLAY_SCENARIO), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_PLAY_HEIGHTMAP), SetDataTip(STR_INTRO_PLAY_HEIGHTMAP, STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP), SetFill(1, 0), + EndContainer(), EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 0, 10), - NWidget(NWID_SPACER), SetFill(1, 0), + NWidget(NWID_HORIZONTAL), SetPIPRatio(1, 0, 1), NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NSS_CANCEL), SetDataTip(STR_BUTTON_CANCEL, STR_NULL), SetMinimalSize(128, 12), - NWidget(NWID_SPACER), SetFill(1, 0), EndContainer(), EndContainer(), EndContainer(), @@ -1260,36 +1249,36 @@ static const NWidgetPart _nested_client_list_widgets[] = { NWidget(WWT_PANEL, COLOUR_GREY), NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER, STR_NULL), SetPadding(4, 4, 0, 4), SetPIP(0, 2, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_NAME, STR_NULL), + NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_NAME, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_NAME), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_SERVER_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CL_SERVER_SELECTOR), NWidget(NWID_VERTICAL), NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY, STR_NULL), + NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_CL_SERVER_VISIBILITY), SetDataTip(STR_JUST_STRING, STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE, STR_NULL), + NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_INVITE_CODE), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_INVITE_CODE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), EndContainer(), NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE, STR_NULL), + NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_CONNECTION_TYPE), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_STRING, STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_CONNECTION_TYPE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_STRING, STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), EndContainer(), EndContainer(), EndContainer(), EndContainer(), NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER, STR_NULL), SetPadding(4, 4, 4, 4), SetPIP(0, 2, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER_NAME, STR_NULL), + NWidget(WWT_TEXT, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER_NAME, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_NAME), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_NAME), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_CLIENT_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP), EndContainer(), EndContainer(), @@ -1298,7 +1287,7 @@ static const NWidgetPart _nested_client_list_widgets[] = { NWidget(NWID_VERTICAL), NWidget(WWT_MATRIX, COLOUR_GREY, WID_CL_MATRIX), SetMinimalSize(180, 0), SetResize(1, 1), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_CL_SCROLLBAR), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_COMPANY_COUNT), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetPadding(2, 1, 2, 1), SetAlignment(SA_CENTER), SetDataTip(STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT, STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_COMPANY_COUNT), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 1, 2, 1), SetAlignment(SA_CENTER), SetDataTip(STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT, STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP), EndContainer(), EndContainer(), NWidget(NWID_VERTICAL), diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index 4edcb14d50..92e1581ab3 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -1269,11 +1269,16 @@ struct SpriteAlignerWindow : Window { Scrollbar *vscroll; std::map offs_start_map; ///< Mapping of starting offsets for the sprites which have been aligned in the sprite aligner window. + static inline ZoomLevel zoom = ZOOM_LVL_END; static bool centre; static bool crosshair; SpriteAlignerWindow(WindowDesc *desc, WindowNumber wno) : Window(desc) { + /* On first opening, set initial zoom to current zoom level. */ + if (SpriteAlignerWindow::zoom == ZOOM_LVL_END) SpriteAlignerWindow::zoom = _gui_zoom; + SpriteAlignerWindow::zoom = Clamp(SpriteAlignerWindow::zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); + this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_SA_SCROLLBAR); this->vscroll->SetCount(_newgrf_debug_sprite_picker.sprites.size()); @@ -1284,6 +1289,8 @@ struct SpriteAlignerWindow : Window { /* Oh yes, we assume there is at least one normal sprite! */ while (GetSpriteType(this->current_sprite) != SpriteType::Normal) this->current_sprite++; + + this->InvalidateData(0, true); } void SetStringParameters(int widget) const override @@ -1296,8 +1303,8 @@ struct SpriteAlignerWindow : Window { break; case WID_SA_OFFSETS_ABS: - SetDParam(0, spr->x_offs); - SetDParam(1, spr->y_offs); + SetDParam(0, UnScaleByZoom(spr->x_offs, SpriteAlignerWindow::zoom)); + SetDParam(1, UnScaleByZoom(spr->y_offs, SpriteAlignerWindow::zoom)); break; case WID_SA_OFFSETS_REL: { @@ -1306,8 +1313,8 @@ struct SpriteAlignerWindow : Window { */ const auto key_offs_pair = this->offs_start_map.find(this->current_sprite); if (key_offs_pair != this->offs_start_map.end()) { - SetDParam(0, spr->x_offs - key_offs_pair->second.first); - SetDParam(1, spr->y_offs - key_offs_pair->second.second); + SetDParam(0, UnScaleByZoom(spr->x_offs - key_offs_pair->second.first, SpriteAlignerWindow::zoom)); + SetDParam(1, UnScaleByZoom(spr->y_offs - key_offs_pair->second.second, SpriteAlignerWindow::zoom)); } else { SetDParam(0, 0); SetDParam(1, 0); @@ -1348,19 +1355,24 @@ struct SpriteAlignerWindow : Window { int x; int y; if (SpriteAlignerWindow::centre) { - x = -UnScaleGUI(spr->x_offs) + (ir.Width() - UnScaleGUI(spr->width)) / 2; - y = -UnScaleGUI(spr->y_offs) + (ir.Height() - UnScaleGUI(spr->height)) / 2; + x = -UnScaleByZoom(spr->x_offs, SpriteAlignerWindow::zoom) + (ir.Width() - UnScaleByZoom(spr->width, SpriteAlignerWindow::zoom)) / 2; + y = -UnScaleByZoom(spr->y_offs, SpriteAlignerWindow::zoom) + (ir.Height() - UnScaleByZoom(spr->height, SpriteAlignerWindow::zoom)) / 2; } else { x = ir.Width() / 2; y = ir.Height() / 2; } DrawPixelInfo new_dpi; - if (!FillDrawPixelInfo(&new_dpi, ir.left, ir.top, ir.Width(), ir.Height())) break; + if (!FillDrawPixelInfo(&new_dpi, ir)) break; AutoRestoreBackup dpi_backup(_cur_dpi, &new_dpi); - DrawSprite(this->current_sprite, PAL_NONE, x, y, nullptr, ZOOM_LVL_GUI); - if (this->crosshair) { + DrawSprite(this->current_sprite, PAL_NONE, x, y, nullptr, SpriteAlignerWindow::zoom); + + Rect outline = {0, 0, UnScaleByZoom(spr->width, SpriteAlignerWindow::zoom) - 1, UnScaleByZoom(spr->height, SpriteAlignerWindow::zoom) - 1}; + outline = outline.Translate(x + UnScaleByZoom(spr->x_offs, SpriteAlignerWindow::zoom),y + UnScaleByZoom(spr->y_offs, SpriteAlignerWindow::zoom)); + DrawRectOutline(outline.Expand(1), PC_LIGHT_BLUE, 1, 1); + + if (SpriteAlignerWindow::crosshair) { GfxDrawLine(x, 0, x, ir.Height() - 1, PC_WHITE, 1, 1); GfxDrawLine(0, y, ir.Width() - 1, y, PC_WHITE, 1, 1); } @@ -1377,7 +1389,7 @@ struct SpriteAlignerWindow : Window { Rect ir = r.Shrink(WidgetDimensions::scaled.matrix); for (int i = this->vscroll->GetPosition(); i < max; i++) { SetDParam(0, list[i]); - DrawString(ir, STR_JUST_COMMA, TC_BLACK, SA_RIGHT | SA_FORCE); + DrawString(ir, STR_JUST_COMMA, list[i] == this->current_sprite ? TC_WHITE : TC_BLACK, SA_RIGHT | SA_FORCE); ir.top += step_size; } break; @@ -1445,12 +1457,13 @@ struct SpriteAlignerWindow : Window { if (this->offs_start_map.count(this->current_sprite) == 0) { this->offs_start_map[this->current_sprite] = XyOffs(spr->x_offs, spr->y_offs); } + int amt = ScaleByZoom(_ctrl_pressed ? 8 : 1, SpriteAlignerWindow::zoom); switch (widget) { /* Move eight units at a time if ctrl is pressed. */ - case WID_SA_UP: spr->y_offs -= _ctrl_pressed ? 8 : 1; break; - case WID_SA_DOWN: spr->y_offs += _ctrl_pressed ? 8 : 1; break; - case WID_SA_LEFT: spr->x_offs -= _ctrl_pressed ? 8 : 1; break; - case WID_SA_RIGHT: spr->x_offs += _ctrl_pressed ? 8 : 1; break; + case WID_SA_UP: spr->y_offs -= amt; break; + case WID_SA_DOWN: spr->y_offs += amt; break; + case WID_SA_LEFT: spr->x_offs -= amt; break; + case WID_SA_RIGHT: spr->x_offs += amt; break; } /* Of course, we need to redraw the sprite, but where is it used? * Everywhere is a safe bet. */ @@ -1475,6 +1488,13 @@ struct SpriteAlignerWindow : Window { this->SetWidgetLoweredState(widget, SpriteAlignerWindow::crosshair); this->SetDirty(); break; + + default: + if (IsInsideBS(widget, WID_SA_ZOOM, ZOOM_LVL_SPR_COUNT)) { + SpriteAlignerWindow::zoom = ZoomLevel(widget - WID_SA_ZOOM); + this->InvalidateData(0, true); + } + break; } } @@ -1503,6 +1523,12 @@ struct SpriteAlignerWindow : Window { this->RaiseWidget(WID_SA_PICKER); this->vscroll->SetCount(_newgrf_debug_sprite_picker.sprites.size()); } + + SpriteAlignerWindow::zoom = Clamp(SpriteAlignerWindow::zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); + for (ZoomLevel z = ZOOM_LVL_NORMAL; z < ZOOM_LVL_SPR_COUNT; z++) { + this->SetWidgetsDisabledState(z < _settings_client.gui.zoom_min || z > _settings_client.gui.zoom_max, WID_SA_ZOOM + z); + this->SetWidgetsLoweredState(SpriteAlignerWindow::zoom == z, WID_SA_ZOOM + z); + } } void OnResize() override @@ -1522,53 +1548,65 @@ static const NWidgetPart _nested_sprite_aligner_widgets[] = { NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(NWID_HORIZONTAL), SetPIP(0, 0, 10), - NWidget(NWID_VERTICAL), SetPIP(10, 5, 10), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 5, 10), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SA_PREVIOUS), SetDataTip(STR_SPRITE_ALIGNER_PREVIOUS_BUTTON, STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SA_GOTO), SetDataTip(STR_SPRITE_ALIGNER_GOTO_BUTTON, STR_SPRITE_ALIGNER_GOTO_TOOLTIP), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SA_NEXT), SetDataTip(STR_SPRITE_ALIGNER_NEXT_BUTTON, STR_SPRITE_ALIGNER_NEXT_TOOLTIP), SetFill(1, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), SetPadding(WidgetDimensions::unscaled.sparse_resize), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SA_PREVIOUS), SetDataTip(STR_SPRITE_ALIGNER_PREVIOUS_BUTTON, STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SA_GOTO), SetDataTip(STR_SPRITE_ALIGNER_GOTO_BUTTON, STR_SPRITE_ALIGNER_GOTO_TOOLTIP), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SA_NEXT), SetDataTip(STR_SPRITE_ALIGNER_NEXT_BUTTON, STR_SPRITE_ALIGNER_NEXT_TOOLTIP), SetFill(1, 0), SetResize(1, 0), EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(10, 5, 10), - NWidget(NWID_SPACER), SetFill(1, 1), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetFill(1, 1), SetResize(1, 0), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SA_UP), SetDataTip(SPR_ARROW_UP, STR_SPRITE_ALIGNER_MOVE_TOOLTIP), SetResize(0, 0), SetMinimalSize(11, 11), - NWidget(NWID_SPACER), SetFill(1, 1), + NWidget(NWID_SPACER), SetFill(1, 1), SetResize(1, 0), EndContainer(), - NWidget(NWID_HORIZONTAL_LTR), SetPIP(10, 5, 10), + NWidget(NWID_HORIZONTAL_LTR), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), NWidget(NWID_VERTICAL), - NWidget(NWID_SPACER), SetFill(1, 1), + NWidget(NWID_SPACER), SetFill(1, 1), SetResize(0, 1), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SA_LEFT), SetDataTip(SPR_ARROW_LEFT, STR_SPRITE_ALIGNER_MOVE_TOOLTIP), SetResize(0, 0), SetMinimalSize(11, 11), - NWidget(NWID_SPACER), SetFill(1, 1), + NWidget(NWID_SPACER), SetFill(1, 1), SetResize(0, 1), EndContainer(), - NWidget(WWT_PANEL, COLOUR_DARK_BLUE, WID_SA_SPRITE), SetDataTip(STR_NULL, STR_SPRITE_ALIGNER_SPRITE_TOOLTIP), + NWidget(WWT_PANEL, COLOUR_DARK_BLUE, WID_SA_SPRITE), SetDataTip(STR_NULL, STR_SPRITE_ALIGNER_SPRITE_TOOLTIP), SetResize(1, 1), SetFill(1, 1), EndContainer(), NWidget(NWID_VERTICAL), - NWidget(NWID_SPACER), SetFill(1, 1), + NWidget(NWID_SPACER), SetFill(1, 1), SetResize(0, 1), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SA_RIGHT), SetDataTip(SPR_ARROW_RIGHT, STR_SPRITE_ALIGNER_MOVE_TOOLTIP), SetResize(0, 0), SetMinimalSize(11, 11), - NWidget(NWID_SPACER), SetFill(1, 1), + NWidget(NWID_SPACER), SetFill(1, 1), SetResize(0, 1), EndContainer(), EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(10, 5, 10), - NWidget(NWID_SPACER), SetFill(1, 1), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetFill(1, 1), SetResize(1, 0), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SA_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SPRITE_ALIGNER_MOVE_TOOLTIP), SetResize(0, 0), SetMinimalSize(11, 11), - NWidget(NWID_SPACER), SetFill(1, 1), + NWidget(NWID_SPACER), SetFill(1, 1), SetResize(1, 0), EndContainer(), - NWidget(WWT_LABEL, COLOUR_GREY, WID_SA_OFFSETS_ABS), SetDataTip(STR_SPRITE_ALIGNER_OFFSETS_ABS, STR_NULL), SetFill(1, 0), SetPadding(0, 10, 0, 10), - NWidget(WWT_LABEL, COLOUR_GREY, WID_SA_OFFSETS_REL), SetDataTip(STR_SPRITE_ALIGNER_OFFSETS_REL, STR_NULL), SetFill(1, 0), SetPadding(0, 10, 0, 10), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 5, 10), - NWidget(WWT_TEXTBTN_2, COLOUR_GREY, WID_SA_CENTRE), SetDataTip(STR_SPRITE_ALIGNER_CENTRE_OFFSET, STR_NULL), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SA_RESET_REL), SetDataTip(STR_SPRITE_ALIGNER_RESET_BUTTON, STR_SPRITE_ALIGNER_RESET_TOOLTIP), SetFill(1, 0), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_CROSSHAIR), SetDataTip(STR_SPRITE_ALIGNER_CROSSHAIR, STR_NULL), SetFill(1, 0), + NWidget(WWT_LABEL, COLOUR_GREY, WID_SA_OFFSETS_ABS), SetDataTip(STR_SPRITE_ALIGNER_OFFSETS_ABS, STR_NULL), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_LABEL, COLOUR_GREY, WID_SA_OFFSETS_REL), SetDataTip(STR_SPRITE_ALIGNER_OFFSETS_REL, STR_NULL), SetFill(1, 0), SetResize(1, 0), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(WWT_TEXTBTN_2, COLOUR_GREY, WID_SA_CENTRE), SetDataTip(STR_SPRITE_ALIGNER_CENTRE_OFFSET, STR_NULL), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SA_RESET_REL), SetDataTip(STR_SPRITE_ALIGNER_RESET_BUTTON, STR_SPRITE_ALIGNER_RESET_TOOLTIP), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_CROSSHAIR), SetDataTip(STR_SPRITE_ALIGNER_CROSSHAIR, STR_NULL), SetFill(1, 0), SetResize(1, 0), EndContainer(), EndContainer(), - NWidget(NWID_VERTICAL), SetPIP(10, 5, 10), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_PICKER), SetDataTip(STR_SPRITE_ALIGNER_PICKER_BUTTON, STR_SPRITE_ALIGNER_PICKER_TOOLTIP), SetFill(1, 0), NWidget(NWID_HORIZONTAL), NWidget(WWT_MATRIX, COLOUR_GREY, WID_SA_LIST), SetResize(1, 1), SetMatrixDataTip(1, 0, STR_NULL), SetFill(1, 1), SetScrollbar(WID_SA_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SA_SCROLLBAR), EndContainer(), + NWidget(NWID_VERTICAL), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_NORMAL), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_MIN, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_2X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_IN_2X, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_4X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_NORMAL, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_8X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_16X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_32X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X, STR_NULL), SetFill(1, 0), + EndContainer(), EndContainer(), EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_RESIZEBOX, COLOUR_GREY), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE), + EndContainer(), EndContainer(), }; diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 2330876f05..45d038d094 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -616,7 +616,7 @@ void PostCheckNewGRFLoadWarnings(); * Window for showing NewGRF files */ struct NewGRFWindow : public Window, NewGRFScanCallback { - typedef GUIList GUIGRFConfigList; + typedef GUIList GUIGRFConfigList; static const uint EDITBOX_MAX_SIZE = 50; @@ -1937,15 +1937,17 @@ static const NWidgetPart _nested_newgrf_infopanel_widgets[] = { /* Right side, info buttons. */ NWidget(NWID_VERTICAL), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_OPEN_URL), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_CONTENT_OPEN_URL, STR_CONTENT_OPEN_URL_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_NEWGRF_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_OPEN_URL), SetFill(1, 0), SetResize(1, 0), + SetDataTip(STR_CONTENT_OPEN_URL, STR_CONTENT_OPEN_URL_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_NEWGRF_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), + SetDataTip(STR_TEXTFILE_VIEW_README, STR_TEXTFILE_VIEW_README_TOOLTIP), + EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_NEWGRF_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), + SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_NEWGRF_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), - SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), + SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_TEXTFILE_VIEW_LICENCE_TOOLTIP), EndContainer(), EndContainer(), @@ -1994,7 +1996,7 @@ static const NWidgetPart _nested_newgrf_widgets[] = { /* Resize button. */ NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_RESIZEBOX, COLOUR_MAUVE), + NWidget(WWT_RESIZEBOX, COLOUR_MAUVE), SetDataTip(RWV_HIDE_BEVEL, STR_TOOLTIP_RESIZE), EndContainer(), EndContainer(), }; diff --git a/src/newgrf_object.h b/src/newgrf_object.h index 03282fe89d..5f5cc3c89f 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -114,7 +114,7 @@ struct ObjectSpec { /** * Test if this object is enabled. - * @return True iif this object is enabled. + * @return True iff this object is enabled. */ bool IsEnabled() const { return this->views > 0; } diff --git a/src/newgrf_town.cpp b/src/newgrf_town.cpp index 7e63c3a3f5..36461b9418 100644 --- a/src/newgrf_town.cpp +++ b/src/newgrf_town.cpp @@ -51,16 +51,16 @@ case 0x8A: return this->t->grow_counter / TOWN_GROWTH_TICKS; case 0x92: return this->t->flags; // In original game, 0x92 and 0x93 are really one word. Since flags is a byte, this is to adjust case 0x93: return 0; - case 0x94: return ClampTo(this->t->cache.squared_town_zone_radius[0]); - case 0x95: return GB(ClampTo(this->t->cache.squared_town_zone_radius[0]), 8, 8); - case 0x96: return ClampTo(this->t->cache.squared_town_zone_radius[1]); - case 0x97: return GB(ClampTo(this->t->cache.squared_town_zone_radius[1]), 8, 8); - case 0x98: return ClampTo(this->t->cache.squared_town_zone_radius[2]); - case 0x99: return GB(ClampTo(this->t->cache.squared_town_zone_radius[2]), 8, 8); - case 0x9A: return ClampTo(this->t->cache.squared_town_zone_radius[3]); - case 0x9B: return GB(ClampTo(this->t->cache.squared_town_zone_radius[3]), 8, 8); - case 0x9C: return ClampTo(this->t->cache.squared_town_zone_radius[4]); - case 0x9D: return GB(ClampTo(this->t->cache.squared_town_zone_radius[4]), 8, 8); + case 0x94: return ClampTo(this->t->cache.squared_town_zone_radius[HZB_TOWN_EDGE]); + case 0x95: return GB(ClampTo(this->t->cache.squared_town_zone_radius[HZB_TOWN_EDGE]), 8, 8); + case 0x96: return ClampTo(this->t->cache.squared_town_zone_radius[HZB_TOWN_OUTSKIRT]); + case 0x97: return GB(ClampTo(this->t->cache.squared_town_zone_radius[HZB_TOWN_OUTSKIRT]), 8, 8); + case 0x98: return ClampTo(this->t->cache.squared_town_zone_radius[HZB_TOWN_OUTER_SUBURB]); + case 0x99: return GB(ClampTo(this->t->cache.squared_town_zone_radius[HZB_TOWN_OUTER_SUBURB]), 8, 8); + case 0x9A: return ClampTo(this->t->cache.squared_town_zone_radius[HZB_TOWN_INNER_SUBURB]); + case 0x9B: return GB(ClampTo(this->t->cache.squared_town_zone_radius[HZB_TOWN_INNER_SUBURB]), 8, 8); + case 0x9C: return ClampTo(this->t->cache.squared_town_zone_radius[HZB_TOWN_CENTRE]); + case 0x9D: return GB(ClampTo(this->t->cache.squared_town_zone_radius[HZB_TOWN_CENTRE]), 8, 8); case 0x9E: return this->t->ratings[0]; case 0x9F: return GB(this->t->ratings[0], 8, 8); case 0xA0: return this->t->ratings[1]; diff --git a/src/object_gui.cpp b/src/object_gui.cpp index f0fc53d263..b12ad8c85f 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -43,7 +43,7 @@ enum BuildObjectHotkeys { /** The window used for building objects. */ class BuildObjectWindow : public Window { - typedef GUIList GUIObjectClassList; ///< Type definition for the list to hold available object classes. + typedef GUIList GUIObjectClassList; ///< Type definition for the list to hold available object classes. static const uint EDITBOX_MAX_SIZE = 16; ///< The maximum number of characters for the filter edit box. @@ -335,14 +335,15 @@ public: DrawPixelInfo tmp_dpi; /* Set up a clipping area for the preview. */ - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); if (spec->grf_prop.grffile == nullptr) { extern const DrawTileSprites _objects[]; const DrawTileSprites *dts = &_objects[spec->grf_prop.local_id]; - DrawOrigTileSeqInGUI(r.Width() / 2 - 1, (r.Height() + matrix_height / 2) / 2 - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), dts, PAL_NONE); + DrawOrigTileSeqInGUI(ir.Width() / 2 - 1, (ir.Height() + matrix_height / 2) / 2 - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), dts, PAL_NONE); } else { - DrawNewObjectTileInGUI(r.Width() / 2 - 1, (r.Height() + matrix_height / 2) / 2 - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), spec, GB(widget, 16, 16)); + DrawNewObjectTileInGUI(ir.Width() / 2 - 1, (ir.Height() + matrix_height / 2) / 2 - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), spec, GB(widget, 16, 16)); } } break; @@ -355,22 +356,23 @@ public: const ObjectSpec *spec = objclass->GetSpec(obj_index); if (spec == nullptr) break; - if (!spec->IsAvailable()) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), PC_BLACK, FILLRECT_CHECKER); - } DrawPixelInfo tmp_dpi; /* Set up a clipping area for the preview. */ - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); if (spec->grf_prop.grffile == nullptr) { extern const DrawTileSprites _objects[]; const DrawTileSprites *dts = &_objects[spec->grf_prop.local_id]; - DrawOrigTileSeqInGUI(r.Width() / 2 - 1, r.Height() - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), dts, PAL_NONE); + DrawOrigTileSeqInGUI(ir.Width() / 2 - 1, ir.Height() - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), dts, PAL_NONE); } else { - DrawNewObjectTileInGUI(r.Width() / 2 - 1, r.Height() - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), spec, + DrawNewObjectTileInGUI(ir.Width() / 2 - 1, ir.Height() - this->object_margin - ScaleSpriteTrad(TILE_PIXELS), spec, std::min(_selected_object_view, spec->views - 1)); } } + if (!spec->IsAvailable()) { + GfxFillRect(ir, PC_BLACK, FILLRECT_CHECKER); + } break; } diff --git a/src/os/macosx/font_osx.cpp b/src/os/macosx/font_osx.cpp index 58b02b277a..ae0a3d3320 100644 --- a/src/os/macosx/font_osx.cpp +++ b/src/os/macosx/font_osx.cpp @@ -242,7 +242,8 @@ const Sprite *CoreTextFontCache::InternalGetGlyph(GlyphID key, bool use_aa) /* Limit glyph size to prevent overflows later on. */ if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) usererror("Font glyph is too large"); - SpriteLoader::Sprite sprite; + SpriteLoader::SpriteCollection spritecollection; + SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_NORMAL]; sprite.AllocateData(ZOOM_LVL_NORMAL, width * height); sprite.type = SpriteType::Font; sprite.colours = (use_aa ? SCC_PAL | SCC_ALPHA : SCC_PAL); @@ -292,7 +293,7 @@ const Sprite *CoreTextFontCache::InternalGetGlyph(GlyphID key, bool use_aa) } GlyphEntry new_glyph; - new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(&sprite, SimpleSpriteAlloc); + new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, SimpleSpriteAlloc); new_glyph.width = (byte)std::round(CTFontGetAdvancesForGlyphs(this->font.get(), kCTFontOrientationDefault, &glyph, nullptr, 1)); this->SetGlyphPtr(key, &new_glyph); diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index 136323927b..f1ea911d18 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -229,7 +229,8 @@ void Win32FontCache::ClearFontCache() GetGlyphOutline(this->dc, key, GGO_GLYPH_INDEX | (aa ? GGO_GRAY8_BITMAP : GGO_BITMAP), &gm, size, bmp, &mat); /* GDI has rendered the glyph, now we allocate a sprite and copy the image into it. */ - SpriteLoader::Sprite sprite; + SpriteLoader::SpriteCollection spritecollection; + SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_NORMAL]; sprite.AllocateData(ZOOM_LVL_NORMAL, width * height); sprite.type = SpriteType::Font; sprite.colours = (aa ? SCC_PAL | SCC_ALPHA : SCC_PAL); @@ -269,7 +270,7 @@ void Win32FontCache::ClearFontCache() } GlyphEntry new_glyph; - new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(&sprite, SimpleSpriteAlloc); + new_glyph.sprite = BlitterFactory::GetCurrentBlitter()->Encode(spritecollection, SimpleSpriteAlloc); new_glyph.width = gm.gmCellIncX; this->SetGlyphPtr(key, &new_glyph); diff --git a/src/pathfinder/npf/aystar.cpp b/src/pathfinder/npf/aystar.cpp index 227c73d389..2a4436dca2 100644 --- a/src/pathfinder/npf/aystar.cpp +++ b/src/pathfinder/npf/aystar.cpp @@ -315,4 +315,7 @@ void AyStar::Init(uint num_buckets) * When that one gets full it reserves another one, till this number * That is why it can stay this high */ this->openlist_queue.Init(102400); + + /* Set a reasonable default limit */ + this->max_search_nodes = AYSTAR_DEF_MAX_SEARCH_NODES; } diff --git a/src/pathfinder/npf/aystar.h b/src/pathfinder/npf/aystar.h index 72b1411afe..dda930d3c8 100644 --- a/src/pathfinder/npf/aystar.h +++ b/src/pathfinder/npf/aystar.h @@ -25,6 +25,8 @@ #include "../../core/pod_pool.hpp" #include "../../3rdparty/robin_hood/robin_hood.h" +static const int AYSTAR_DEF_MAX_SEARCH_NODES = 10000; ///< Reference limit for #AyStar::max_search_nodes + /** Return status of #AyStar methods. */ enum AystarStatus { AYSTAR_FOUND_END_NODE, ///< An end node was found. diff --git a/src/pathfinder/pathfinder_type.h b/src/pathfinder/pathfinder_type.h index 563b81d7a9..fae685a526 100644 --- a/src/pathfinder/pathfinder_type.h +++ b/src/pathfinder/pathfinder_type.h @@ -11,6 +11,7 @@ #define PATHFINDER_TYPE_H #include "../tile_type.h" +#include "npf/aystar.h" /** Length (penalty) of one tile with NPF */ static const int NPF_TILE_LENGTH = 100; diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 81fff3ec27..251cf6421d 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1105,7 +1105,7 @@ private: Scrollbar *vscroll; ///< Vertical scrollbar of the new station list. Scrollbar *vscroll2; ///< Vertical scrollbar of the matrix with new stations. - typedef GUIList GUIStationClassList; ///< Type definition for the list to hold available station classes. + typedef GUIList GUIStationClassList; ///< Type definition for the list to hold available station classes. static const uint EDITBOX_MAX_SIZE = 16; ///< The maximum number of characters for the filter edit box. @@ -1195,14 +1195,10 @@ public: _railstation.newstations = newstation; this->CreateNestedTree(); - NWidgetStacked *newst_additions = this->GetWidget(WID_BRAS_SHOW_NEWST_ADDITIONS); - newst_additions->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); - newst_additions = this->GetWidget(WID_BRAS_SHOW_NEWST_MATRIX); - newst_additions->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); - newst_additions = this->GetWidget(WID_BRAS_SHOW_NEWST_DEFSIZE); - newst_additions->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); - newst_additions = this->GetWidget(WID_BRAS_SHOW_NEWST_RESIZE); - newst_additions->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); + this->GetWidget(WID_BRAS_SHOW_NEWST_ADDITIONS)->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); + this->GetWidget(WID_BRAS_SHOW_NEWST_MATRIX)->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); + this->GetWidget(WID_BRAS_SHOW_NEWST_DEFSIZE)->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); + this->GetWidget(WID_BRAS_SHOW_NEWST_RESIZE)->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); /* Hide the station class filter if no stations other than the default one are available. */ this->GetWidget(WID_BRAS_FILTER_CONTAINER)->SetDisplayedPlane(newstation ? 0 : SZSP_NONE); if (newstation) { @@ -1468,29 +1464,33 @@ public: DrawPixelInfo tmp_dpi; switch (GB(widget, 0, 16)) { - case WID_BRAS_PLATFORM_DIR_X: + case WID_BRAS_PLATFORM_DIR_X: { /* Set up a clipping area for the '/' station preview */ - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (r.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (r.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); + int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); + int y = (ir.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); if (!DrawStationTile(x, y, _cur_railtype, AXIS_X, _railstation.station_class, _railstation.station_type)) { StationPickerDrawSprite(x, y, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 2); } } break; + } - case WID_BRAS_PLATFORM_DIR_Y: + case WID_BRAS_PLATFORM_DIR_Y: { /* Set up a clipping area for the '\' station preview */ - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (r.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (r.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); + int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); + int y = (ir.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); if (!DrawStationTile(x, y, _cur_railtype, AXIS_Y, _railstation.station_class, _railstation.station_type)) { StationPickerDrawSprite(x, y, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 3); } } break; + } case WID_BRAS_NEWST_LIST: { Rect ir = r.Shrink(WidgetDimensions::scaled.matrix); @@ -1512,19 +1512,20 @@ public: assert(type < _railstation.station_count); /* Check station availability callback */ const StationSpec *statspec = StationClass::Get(_railstation.station_class)->GetSpec(type); - if (!IsStationAvailable(statspec)) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), PC_BLACK, FILLRECT_CHECKER); - } /* Set up a clipping area for the station preview. */ - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (r.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (r.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); + int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); + int y = (ir.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); if (!DrawStationTile(x, y, _cur_railtype, _railstation.orientation, _railstation.station_class, type)) { StationPickerDrawSprite(x, y, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 2 + _railstation.orientation); } } + if (!IsStationAvailable(statspec)) { + GfxFillRect(ir, PC_BLACK, FILLRECT_CHECKER); + } break; } } @@ -1758,7 +1759,7 @@ static const NWidgetPart _nested_station_builder_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), SetPadding(WidgetDimensions::unscaled.picker), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BRAS_FILTER_CONTAINER), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), @@ -2364,10 +2365,11 @@ struct BuildRailDepotWindow : public PickerWindowBase { if (!IsInsideMM(widget, WID_BRAD_DEPOT_NE, WID_BRAD_DEPOT_NW + 1)) return; DrawPixelInfo tmp_dpi; - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (r.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (r.Height() + ScaleSpriteTrad(48)) / 2 - ScaleSpriteTrad(31); + int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); + int y = (ir.Height() + ScaleSpriteTrad(48)) / 2 - ScaleSpriteTrad(31); DrawTrainDepotSprite(x, y, widget - WID_BRAD_DEPOT_NE + DIAGDIR_NE, _cur_railtype); } } @@ -2554,15 +2556,16 @@ struct BuildRailWaypointWindow : PickerWindowBase { const StationSpec *statspec = this->waypoints->GetSpec(type); DrawPixelInfo tmp_dpi; - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (r.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (r.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); + int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); + int y = (ir.Height() + ScaleSpriteTrad(58)) / 2 - ScaleSpriteTrad(31); DrawWaypointSprite(x, y, type, _cur_railtype); } if (!IsStationAvailable(statspec)) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), PC_BLACK, FILLRECT_CHECKER); + GfxFillRect(ir, PC_BLACK, FILLRECT_CHECKER); } } } @@ -2819,9 +2822,7 @@ DropDownList GetRailTypeDropDownList(bool for_replacement, bool all_option) list.push_back(std::make_unique(rti->strings.replace_text, rt, !HasBit(avail_railtypes, rt))); } else { StringID str = rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING; - auto iconitem = std::make_unique(rti->gui_sprites.build_x_rail, PAL_NONE, str, rt, !HasBit(avail_railtypes, rt)); - iconitem->SetDimension(d); - list.push_back(std::move(iconitem)); + list.push_back(std::make_unique(d, rti->gui_sprites.build_x_rail, PAL_NONE, str, rt, !HasBit(avail_railtypes, rt))); } } diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 70ec13828f..64a3ff0441 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -2523,6 +2523,8 @@ static const Roadside _town_road_types[][2] = { { ROADSIDE_STREET_LIGHTS, ROADSIDE_PAVED } }; +static_assert(lengthof(_town_road_types) == HZB_END); + static const Roadside _town_road_types_2[][2] = { { ROADSIDE_GRASS, ROADSIDE_GRASS }, { ROADSIDE_PAVED, ROADSIDE_PAVED }, @@ -2531,6 +2533,8 @@ static const Roadside _town_road_types_2[][2] = { { ROADSIDE_STREET_LIGHTS, ROADSIDE_PAVED } }; +static_assert(lengthof(_town_road_types_2) == HZB_END); + static void TileLoop_Road(TileIndex tile) { diff --git a/src/road_gui.cpp b/src/road_gui.cpp index fa27e02244..4e836d2951 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1154,10 +1154,11 @@ struct BuildRoadDepotWindow : public PickerWindowBase { if (!IsInsideMM(widget, WID_BROD_DEPOT_NE, WID_BROD_DEPOT_NW + 1)) return; DrawPixelInfo tmp_dpi; - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (r.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (r.Height() + ScaleSpriteTrad(48)) / 2 - ScaleSpriteTrad(31); + int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); + int y = (ir.Height() + ScaleSpriteTrad(48)) / 2 - ScaleSpriteTrad(31); DrawRoadDepotSprite(x, y, (DiagDirection)(widget - WID_BROD_DEPOT_NE + DIAGDIR_NE), _cur_roadtype); } } @@ -1228,7 +1229,7 @@ private: Scrollbar *vscrollMatrix; ///< Vertical scrollbar of the station picker matrix. uint building_height = 2; ///< Road stop building height for image size - typedef GUIList GUIRoadStopClassList; ///< Type definition for the list to hold available road stop classes. + typedef GUIList GUIRoadStopClassList; ///< Type definition for the list to hold available road stop classes. static const uint EDITBOX_MAX_SIZE = 16; ///< The maximum number of characters for the filter edit box. @@ -1583,18 +1584,19 @@ public: const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(_roadstop_gui_settings.roadstop_type); bool disabled = (spec != nullptr && widget < WID_BROS_STATION_X && HasBit(spec->flags, RSF_DRIVE_THROUGH_ONLY)); DrawPixelInfo tmp_dpi; - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (r.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (r.Height() + ScaleSpriteTrad(48)) / 2 - ScaleSpriteTrad(31); + int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); + int y = (ir.Height() + ScaleSpriteTrad(48)) / 2 - ScaleSpriteTrad(31); if (spec != nullptr && spec->height > 2) y += (spec->height - 2) * ScaleSpriteTrad(4); if (spec == nullptr || (disabled && !HasBit(spec->flags, RSF_BUILD_MENU_DRAW_DISABLED_VIEWS))) { StationPickerDrawSprite(x, y, st, INVALID_RAILTYPE, _cur_roadtype, widget - WID_BROS_STATION_NE); } else { DrawRoadStopTile(x, y, _cur_roadtype, spec, st, widget - WID_BROS_STATION_NE); } - if (disabled) GfxFillRect(1, 1, r.Width() - 1, r.Height() - 1, PC_BLACK, FILLRECT_CHECKER); } + if (disabled) GfxFillRect(ir, PC_BLACK, FILLRECT_CHECKER); break; } @@ -1620,16 +1622,13 @@ public: const RoadStopSpec *spec = RoadStopClass::Get(_roadstop_gui_settings.roadstop_class)->GetSpec(type); StationType st = GetRoadStationTypeByWindowClass(this->window_class); - if (!IsRoadStopAvailable(spec, st)) { - GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), PC_BLACK, FILLRECT_CHECKER); - } - /* Set up a clipping area for the sprite preview. */ DrawPixelInfo tmp_dpi; - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); + if (FillDrawPixelInfo(&tmp_dpi, ir)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); - int x = (r.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); - int y = (r.Height() + ScaleSpriteTrad(48)) / 2 - ScaleSpriteTrad(31); + int x = (ir.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); + int y = (ir.Height() + ScaleSpriteTrad(48)) / 2 - ScaleSpriteTrad(31); if (spec == nullptr) { StationPickerDrawSprite(x, y, st, INVALID_RAILTYPE, _cur_roadtype, _roadstop_gui_settings.orientation); } else { @@ -1638,6 +1637,9 @@ public: DrawRoadStopTile(x, y, _cur_roadtype, spec, st, (uint8)orientation); } } + if (!IsRoadStopAvailable(spec, st)) { + GfxFillRect(ir, PC_BLACK, FILLRECT_CHECKER); + } break; } } @@ -1779,7 +1781,7 @@ static const NWidgetPart _nested_road_station_picker_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), SetPadding(WidgetDimensions::unscaled.picker), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_FILTER_CONTAINER), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), @@ -1868,7 +1870,7 @@ static const NWidgetPart _nested_tram_station_picker_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_DARK_GREEN), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), SetPadding(WidgetDimensions::unscaled.picker), - NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), SetPIPRatio(1, 0, 1), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_picker, 0), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BROS_FILTER_CONTAINER), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), @@ -2068,7 +2070,7 @@ struct BuildRoadWaypointWindow : PickerWindowBase { uint16_t type = this->list.at(GB(widget, 16, 16)); const RoadStopSpec *spec = this->waypoints->GetSpec(type); DrawPixelInfo tmp_dpi; - if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + if (FillDrawPixelInfo(&tmp_dpi, r)) { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); int x = (r.Width() - ScaleSpriteTrad(64)) / 2 + ScaleSpriteTrad(31); int y = (r.Height() + ScaleSpriteTrad(48)) / 2 - ScaleSpriteTrad(31); @@ -2312,9 +2314,7 @@ DropDownList GetRoadTypeDropDownList(RoadTramTypes rtts, bool for_replacement, b list.push_back(std::make_unique(rti->strings.replace_text, rt, !HasBit(avail_roadtypes, rt))); } else { StringID str = rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING; - auto iconitem = std::make_unique(rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt)); - iconitem->SetDimension(d); - list.push_back(std::move(iconitem)); + list.push_back(std::make_unique(d, rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt))); } } @@ -2353,9 +2353,7 @@ DropDownList GetScenRoadTypeDropDownList(RoadTramTypes rtts) SetDParam(0, rti->strings.menu_text); SetDParam(1, rti->max_speed / 2); StringID str = rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING; - auto item = std::make_unique(rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt)); - item->SetDimension(d); - list.push_back(std::move(item)); + list.push_back(std::make_unique(d, rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt))); } if (list.empty()) { diff --git a/src/roadveh_gui.cpp b/src/roadveh_gui.cpp index 6467de6e6d..5cbab78783 100644 --- a/src/roadveh_gui.cpp +++ b/src/roadveh_gui.cpp @@ -134,7 +134,7 @@ void DrawRoadVehImage(const Vehicle *v, const Rect &r, VehicleID selection, Engi DrawPixelInfo tmp_dpi; int max_width = r.Width(); - if (!FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) return; + if (!FillDrawPixelInfo(&tmp_dpi, r)) return; AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp index 904bcbd4ae..ea08cbdcca 100644 --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -198,7 +198,7 @@ SaveLoadTable GetOrderBackupDescription() SLE_VAR(OrderBackup, group, SLE_UINT16), SLE_CONDVAR(OrderBackup, service_interval, SLE_FILE_U32 | SLE_VAR_U16, SL_MIN_VERSION, SLV_192), SLE_CONDVAR(OrderBackup, service_interval, SLE_UINT16, SLV_192, SL_MAX_VERSION), - SLE_SSTR(OrderBackup, name, SLE_STR), + SLE_STR(OrderBackup, name, SLE_STR, 0), SLE_CONDREF(OrderBackup, clone, REF_VEHICLE, SLV_192, SL_MAX_VERSION), SLE_VAR(OrderBackup, cur_real_order_index, SLE_FILE_U8 | SLE_VAR_U16), SLE_CONDVAR(OrderBackup, cur_implicit_order_index, SLE_FILE_U8 | SLE_VAR_U16, SLV_176, SL_MAX_VERSION), diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 02301dc072..c828363123 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1421,58 +1421,8 @@ size_t SlCalcObjMemberLength(const void *object, const SaveLoad &sld) return 0; } -/** - * Check whether the variable size of the variable in the saveload configuration - * matches with the actual variable size. - * @param sld The saveload configuration to test. - */ -[[maybe_unused]] static bool IsVariableSizeRight(const SaveLoad &sld) -{ - if (GetVarMemType(sld.conv) == SLE_VAR_NULL) return true; - - switch (sld.cmd) { - case SL_VAR: - switch (GetVarMemType(sld.conv)) { - case SLE_VAR_BL: - return sld.size == sizeof(bool); - case SLE_VAR_I8: - case SLE_VAR_U8: - return sld.size == sizeof(int8); - case SLE_VAR_I16: - case SLE_VAR_U16: - return sld.size == sizeof(int16); - case SLE_VAR_I32: - case SLE_VAR_U32: - return sld.size == sizeof(int32); - case SLE_VAR_I64: - case SLE_VAR_U64: - return sld.size == sizeof(int64); - case SLE_VAR_NAME: - return sld.size == sizeof(std::string); - default: - return sld.size == sizeof(void *); - } - case SL_REF: - /* These should all be pointer sized. */ - return sld.size == sizeof(void *); - - case SL_STR: - /* These should be pointer sized, or fixed array. */ - return sld.size == sizeof(void *) || sld.size == sld.length; - - case SL_STDSTR: - /* These should be all pointers to std::string. */ - return sld.size == sizeof(std::string); - - default: - return true; - } -} - static bool SlObjectMember(void *object, const SaveLoad &sld) { - assert_msg(IsVariableSizeRight(sld), "%s, size: %u, length: %u, cmd: %u, conv: 0x%02X", sld.name.c_str(), (uint) sld.size, sld.length, sld.cmd, sld.conv); - if (!SlIsObjectValidInSavegame(sld)) return false; VarType conv = GB(sld.conv, 0, 8); diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index d068bb2352..8056b601f2 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -15,9 +15,11 @@ #include "../fios.h" #include "../strings_type.h" #include "../core/span_type.hpp" +#include "../core/ring_buffer.hpp" #include #include #include +#include extern SaveLoadVersion _sl_version; extern byte _sl_minor_version; @@ -316,6 +318,89 @@ struct SaveLoadCompat { SaveLoadVersion version_to; ///< Save/load the variable before this savegame version. }; +/** + * Get the NumberType of a setting. This describes the integer type + * as it is represented in memory + * @param type VarType holding information about the variable-type + * @return the SLE_VAR_* part of a variable-type description + */ +static inline constexpr VarType GetVarMemType(VarType type) +{ + return type & 0xF0; // GB(type, 4, 4) << 4; +} + +/** + * Get the FileType of a setting. This describes the integer type + * as it is represented in a savegame/file + * @param type VarType holding information about the file-type + * @return the SLE_FILE_* part of a variable-type description + */ +static inline VarType GetVarFileType(VarType type) +{ + return type & 0xF; // GB(type, 0, 4); +} + +/** + * Check if the given saveload type is a numeric type. + * @param conv the type to check + * @return True if it's a numeric type. + */ +static inline constexpr bool IsNumericType(VarType conv) +{ + return GetVarMemType(conv) <= SLE_VAR_U64; +} + +/** + * Return expect size in bytes of a VarType + * @param type VarType to get size of. + * @return size of type in bytes. + */ +static inline constexpr size_t SlVarSize(VarType type) +{ + switch (GetVarMemType(type)) { + case SLE_VAR_BL: return sizeof(bool); + case SLE_VAR_I8: return sizeof(int8_t); + case SLE_VAR_U8: return sizeof(uint8_t); + case SLE_VAR_I16: return sizeof(int16_t); + case SLE_VAR_U16: return sizeof(uint16_t); + case SLE_VAR_I32: return sizeof(int32_t); + case SLE_VAR_U32: return sizeof(uint32_t); + case SLE_VAR_I64: return sizeof(int64_t); + case SLE_VAR_U64: return sizeof(uint64_t); + case SLE_VAR_NULL: return sizeof(void *); + case SLE_VAR_STR: return sizeof(std::string); + case SLE_VAR_STRQ: return sizeof(std::string); + case SLE_VAR_NAME: return sizeof(std::string); + default: NOT_REACHED(); + } +} + +/** + * Check if a saveload cmd/type/length entry matches the size of the variable. + * @param cmd SaveLoadType of entry. + * @param type VarType of entry. + * @param length Array length of entry. + * @param size Actual size of variable. + * @return true iff the sizes match. + */ +static inline constexpr bool SlCheckVarSize(SaveLoadType cmd, VarType type, size_t length, size_t size) +{ + switch (cmd) { + case SL_VAR: return SlVarSize(type) == size; + case SL_REF: return sizeof(void *) == size; + case SL_STR: return sizeof(void *) == size; + case SL_STDSTR: return SlVarSize(type) == size; + case SL_ARR: return SlVarSize(type) * length <= size; // Partial load of array is permitted. + case SL_RING: return sizeof(ring_buffer) == size; + case SL_VECTOR: return sizeof(std::vector) == size; + case SL_REFLIST: return sizeof(std::list) == size; + case SL_REFRING: return sizeof(ring_buffer) == size; + case SL_REFVEC: return sizeof(std::vector) == size; + case SL_SAVEBYTE: return true; + default: NOT_REACHED(); + } +} + /** * Storage of simple variables, references (pointers), and arrays. * @param cmd Load/save type. @see SaveLoadType @@ -323,12 +408,18 @@ struct SaveLoadCompat { * @param base Name of the class or struct containing the variable. * @param variable Name of the variable in the class or struct referenced by \a base. * @param type Storage of the data in memory and in the savegame. + * @param length Number of elements in the array. * @param from First savegame version that has the field. * @param to Last savegame version that has the field. * @param extra Extra data to pass to the address callback function. * @note In general, it is better to use one of the SLE_* macros below. */ -#define SLE_GENERAL_NAME(cmd, name, base, variable, type, length, from, to, extra) SaveLoad {name, cmd, type, length, from, to, cpp_sizeof(base, variable), [] (void *b, size_t) -> void * { assert(b != nullptr); return const_cast(static_cast(std::addressof(static_cast(b)->variable))); }, extra, nullptr} +#define SLE_GENERAL_NAME(cmd, name, base, variable, type, length, from, to, extra) \ + SaveLoad {name, cmd, type, length, from, to, cpp_sizeof(base, variable), [] (void *b, size_t) -> void * { \ + static_assert(SlCheckVarSize(cmd, type, length, sizeof(static_cast(b)->variable))); \ + assert(b != nullptr); \ + return const_cast(static_cast(std::addressof(static_cast(b)->variable))); \ + }, extra, nullptr} /** * Storage of simple variables, references (pointers), and arrays with a custom name. @@ -336,6 +427,7 @@ struct SaveLoadCompat { * @param base Name of the class or struct containing the variable. * @param variable Name of the variable in the class or struct referenced by \a base. * @param type Storage of the data in memory and in the savegame. + * @param length Number of elements in the array. * @param from First savegame version that has the field. * @param to Last savegame version that has the field. * @param extra Extra data to pass to the address callback function. @@ -545,7 +637,10 @@ struct SaveLoadCompat { * @param extra Extra data to pass to the address callback function. * @note In general, it is better to use one of the SLEG_* macros below. */ -#define SLEG_GENERAL(name, cmd, variable, type, length, from, to, extra) SaveLoad {name, cmd, type, length, from, to, sizeof(variable), [] (void *, size_t) -> void * { return static_cast(std::addressof(variable)); }, extra, nullptr} +#define SLEG_GENERAL(name, cmd, variable, type, length, from, to, extra) \ + SaveLoad {name, cmd, type, length, from, to, sizeof(variable), [] (void *, size_t) -> void * { \ + static_assert(SlCheckVarSize(cmd, type, length, sizeof(variable))); \ + return static_cast(std::addressof(variable)); }, extra, nullptr} /** * Storage of a global variable in some savegame versions. @@ -775,38 +870,6 @@ static inline bool IsSavegameVersionBeforeOrAt(SaveLoadVersion major) return _sl_version <= major; } -/** - * Get the NumberType of a setting. This describes the integer type - * as it is represented in memory - * @param type VarType holding information about the variable-type - * @return the SLE_VAR_* part of a variable-type description - */ -static inline VarType GetVarMemType(VarType type) -{ - return type & 0xF0; // GB(type, 4, 4) << 4; -} - -/** - * Get the FileType of a setting. This describes the integer type - * as it is represented in a savegame/file - * @param type VarType holding information about the file-type - * @return the SLE_FILE_* part of a variable-type description - */ -static inline VarType GetVarFileType(VarType type) -{ - return type & 0xF; // GB(type, 0, 4); -} - -/** - * Check if the given saveload type is a numeric type. - * @param conv the type to check - * @return True if it's a numeric type. - */ -static inline bool IsNumericType(VarType conv) -{ - return GetVarMemType(conv) <= SLE_VAR_U64; -} - /** * Get the address of the variable. Null-variables don't have an address, * everything else has a callback function that returns the address based diff --git a/src/script/api/script_airport.cpp b/src/script/api/script_airport.cpp index fc92378006..0df4465e63 100644 --- a/src/script/api/script_airport.cpp +++ b/src/script/api/script_airport.cpp @@ -15,7 +15,7 @@ #include "../../safeguards.h" -extern Town *AirportGetNearestTown(const struct AirportSpec *as, const TileIterator &it, uint &mindist); +extern Town *AirportGetNearestTown(const struct AirportSpec *as, TileIndex tile, const TileIterator &it, uint &mindist); extern uint8 GetAirportNoiseLevelForDistance(const struct AirportSpec *as, uint distance); /* static */ bool ScriptAirport::IsValidAirportType(AirportType type) @@ -142,7 +142,7 @@ extern uint8 GetAirportNoiseLevelForDistance(const struct AirportSpec *as, uint if (_settings_game.economy.station_noise_level) { AirportTileTableIterator it(as->table[0], tile); uint dist; - AirportGetNearestTown(as, it, dist); + AirportGetNearestTown(as, tile, it, dist); return GetAirportNoiseLevelForDistance(as, dist); } @@ -158,7 +158,7 @@ extern uint8 GetAirportNoiseLevelForDistance(const struct AirportSpec *as, uint if (!as->IsWithinMapBounds(0, tile)) return INVALID_TOWN; uint dist; - return AirportGetNearestTown(as, AirportTileTableIterator(as->table[0], tile), dist)->index; + return AirportGetNearestTown(as, tile, AirportTileTableIterator(as->table[0], tile), dist)->index; } /* static */ SQInteger ScriptAirport::GetMaintenanceCostFactor(AirportType type) diff --git a/src/script/api/script_asyncmode.cpp b/src/script/api/script_asyncmode.cpp index afad59187d..4e95460e72 100644 --- a/src/script/api/script_asyncmode.cpp +++ b/src/script/api/script_asyncmode.cpp @@ -39,8 +39,8 @@ ScriptAsyncMode::ScriptAsyncMode(HSQUIRRELVM vm) throw sq_throwerror(vm, "Argument must be a boolean"); } - this->last_mode = this->GetDoCommandMode(); - this->last_instance = this->GetDoCommandModeInstance(); + this->last_mode = this->GetDoCommandAsyncMode(); + this->last_instance = this->GetDoCommandAsyncModeInstance(); this->SetDoCommandAsyncMode(sqasync ? &ScriptAsyncMode::AsyncModeProc : &ScriptAsyncMode::NonAsyncModeProc, this); } @@ -48,8 +48,8 @@ ScriptAsyncMode::ScriptAsyncMode(HSQUIRRELVM vm) void ScriptAsyncMode::FinalRelease() { if (this->GetDoCommandAsyncModeInstance() != this) { - /* Ignore this error if the script already died. */ - if (!ScriptObject::GetActiveInstance()->IsDead()) { + /* Ignore this error if the script is not alive. */ + if (ScriptObject::GetActiveInstance()->IsAlive()) { throw Script_FatalError("Asyncmode object was removed while it was not the latest *Mode object created."); } } diff --git a/src/script/api/script_execmode.cpp b/src/script/api/script_execmode.cpp index 6a34288cb2..007dd1ef58 100644 --- a/src/script/api/script_execmode.cpp +++ b/src/script/api/script_execmode.cpp @@ -31,8 +31,8 @@ ScriptExecMode::ScriptExecMode() void ScriptExecMode::FinalRelease() { if (this->GetDoCommandModeInstance() != this) { - /* Ignore this error if the script already died. */ - if (!ScriptObject::GetActiveInstance()->IsDead()) { + /* Ignore this error if the script is not alive. */ + if (ScriptObject::GetActiveInstance()->IsAlive()) { throw Script_FatalError("ScriptExecMode object was removed while it was not the latest *Mode object created."); } } diff --git a/src/script/api/script_log.cpp b/src/script/api/script_log.cpp index aeb8b03fbe..013e3ff869 100644 --- a/src/script/api/script_log.cpp +++ b/src/script/api/script_log.cpp @@ -58,7 +58,7 @@ /* Also still print to debug window */ DEBUG(script, level, "[%d] [%c] %s", (uint)ScriptObject::GetRootCompany(), logc, line.text.c_str()); - InvalidateWindowData(WC_SCRIPT_DEBUG, 0, ScriptObject::GetRootCompany()); + InvalidateWindowClassesData(WC_SCRIPT_DEBUG, ScriptObject::GetRootCompany()); } /* static */ void ScriptLog::LogOnce(ScriptLogTypes::ScriptLogType level, std::string &&message) diff --git a/src/script/api/script_log_types.hpp b/src/script/api/script_log_types.hpp index e7cdd96a29..2545c738fd 100644 --- a/src/script/api/script_log_types.hpp +++ b/src/script/api/script_log_types.hpp @@ -34,6 +34,7 @@ namespace ScriptLogTypes { struct LogLine { std::string text; ///< The text ScriptLogType type; ///< Text type + uint width; ///< The text width }; /** diff --git a/src/script/api/script_testmode.cpp b/src/script/api/script_testmode.cpp index 70055586fe..a38deff548 100644 --- a/src/script/api/script_testmode.cpp +++ b/src/script/api/script_testmode.cpp @@ -31,8 +31,8 @@ ScriptTestMode::ScriptTestMode() void ScriptTestMode::FinalRelease() { if (this->GetDoCommandModeInstance() != this) { - /* Ignore this error if the script already died. */ - if (!ScriptObject::GetActiveInstance()->IsDead()) { + /* Ignore this error if the script is not alive. */ + if (ScriptObject::GetActiveInstance()->IsAlive()) { throw Script_FatalError("Testmode object was removed while it was not the latest *Mode object created."); } } diff --git a/src/script/api/script_town.cpp b/src/script/api/script_town.cpp index 244c121a85..ab4552d4bf 100644 --- a/src/script/api/script_town.cpp +++ b/src/script/api/script_town.cpp @@ -206,7 +206,7 @@ if (!IsValidTown(town_id)) return false; const Town *t = ::Town::Get(town_id); - return ((uint32)GetDistanceSquareToTile(town_id, tile) <= t->cache.squared_town_zone_radius[0]); + return ((uint32_t)GetDistanceSquareToTile(town_id, tile) <= t->cache.squared_town_zone_radius[HZB_TOWN_EDGE]); } /* static */ bool ScriptTown::HasStatue(TownID town_id) diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 2ef36752ef..9aef087beb 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -709,23 +709,35 @@ static bool SetScriptButtonColour(NWidgetCore &button, bool dead, bool paused) struct ScriptDebugWindow : public Window { static const uint MAX_BREAK_STR_STRING_LENGTH = 256; ///< Maximum length of the break string. - static CompanyID script_debug_company; ///< The AI that is (was last) being debugged. + struct FilterState { + std::string break_string; ///< The string to match to the AI output + CompanyID script_debug_company; ///< The AI that is (was last) being debugged. + bool break_check_enabled; ///< Stop an AI when it prints a matching string + bool case_sensitive_break_check; ///< Is the matching done case-sensitive + }; + + static inline FilterState initial_state = { + "", + INVALID_COMPANY, + true, + false, + }; + int redraw_timer; ///< Timer for redrawing the window, otherwise it'll happen every tick. int last_vscroll_pos; ///< Last position of the scrolling. bool autoscroll; ///< Whether automatically scrolling should be enabled or not. bool show_break_box; ///< Whether the break/debug box is visible. - static bool break_check_enabled; ///< Stop an AI when it prints a matching string - static std::string break_string; ///< The string to match to the AI output QueryString break_editbox; ///< Break editbox - static StringFilter break_string_filter; ///< Log filter for break. - static bool case_sensitive_break_check; ///< Is the matching done case-sensitive + StringFilter break_string_filter; ///< Log filter for break. int highlight_row; ///< The output row that matches the given string, or -1 Scrollbar *vscroll; ///< Cache of the vertical scrollbar. + Scrollbar *hscroll; ///< Cache of the horizontal scrollbar. + FilterState filter; ScriptLogTypes::LogData &GetLogData() const { - if (script_debug_company == OWNER_DEITY) return Game::GetInstance()->GetLogData(); - return Company::Get(script_debug_company)->ai_instance->GetLogData(); + if (this->filter.script_debug_company == OWNER_DEITY) return Game::GetInstance()->GetLogData(); + return Company::Get(this->filter.script_debug_company)->ai_instance->GetLogData(); } /** @@ -734,11 +746,11 @@ struct ScriptDebugWindow : public Window { */ bool IsDead() const { - if (script_debug_company == OWNER_DEITY) { + if (this->filter.script_debug_company == OWNER_DEITY) { GameInstance *game = Game::GetInstance(); return game == nullptr || game->IsDead(); } - return !Company::IsValidAiID(script_debug_company) || Company::Get(script_debug_company)->ai_instance->IsDead(); + return !Company::IsValidAiID(this->filter.script_debug_company) || Company::Get(this->filter.script_debug_company)->ai_instance->IsDead(); } /** @@ -762,9 +774,9 @@ struct ScriptDebugWindow : public Window { void SelectValidDebugCompany() { /* Check if the currently selected company is still active. */ - if (this->IsValidDebugCompany(script_debug_company)) return; + if (this->IsValidDebugCompany(this->filter.script_debug_company)) return; - script_debug_company = INVALID_COMPANY; + this->filter.script_debug_company = INVALID_COMPANY; for (const Company *c : Company::Iterate()) { if (c->is_ai) { @@ -782,15 +794,19 @@ struct ScriptDebugWindow : public Window { * @param desc The description of the window. * @param number The window number (actually unused). */ - ScriptDebugWindow(WindowDesc *desc, WindowNumber number) : Window(desc), break_editbox(MAX_BREAK_STR_STRING_LENGTH) + ScriptDebugWindow(WindowDesc *desc, WindowNumber number, Owner show_company) : Window(desc), break_editbox(MAX_BREAK_STR_STRING_LENGTH) { + this->filter = ScriptDebugWindow::initial_state; + this->break_string_filter = {&this->filter.case_sensitive_break_check, false}; + this->CreateNestedTree(); - this->vscroll = this->GetScrollbar(WID_SCRD_SCROLLBAR); + this->vscroll = this->GetScrollbar(WID_SCRD_VSCROLLBAR); + this->hscroll = this->GetScrollbar(WID_SCRD_HSCROLLBAR); this->show_break_box = _settings_client.gui.ai_developer_tools; this->GetWidget(WID_SCRD_BREAK_STRING_WIDGETS)->SetDisplayedPlane(this->show_break_box ? 0 : SZSP_HORIZONTAL); this->FinishInitNested(number); - if (!this->show_break_box) break_check_enabled = false; + if (!this->show_break_box) this->filter.break_check_enabled = false; this->last_vscroll_pos = 0; this->autoscroll = true; @@ -799,14 +815,28 @@ struct ScriptDebugWindow : public Window { this->querystrings[WID_SCRD_BREAK_STR_EDIT_BOX] = &this->break_editbox; SetWidgetsDisabledState(!this->show_break_box, WID_SCRD_BREAK_STR_ON_OFF_BTN, WID_SCRD_BREAK_STR_EDIT_BOX, WID_SCRD_MATCH_CASE_BTN); + this->hscroll->SetStepSize(10); // Speed up horizontal scrollbar /* Restore the break string value from static variable */ - this->break_editbox.text.Assign(this->break_string); + this->break_editbox.text.Assign(this->filter.break_string); - this->SelectValidDebugCompany(); + if (show_company == INVALID_COMPANY) { + this->SelectValidDebugCompany(); + } else { + this->ChangeToScript(show_company); + } + } + + void OnInit() override + { this->InvalidateData(-1); } + ~ScriptDebugWindow() + { + ScriptDebugWindow::initial_state = this->filter; + } + void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override { if (widget == WID_SCRD_LOG_PANEL) { @@ -818,92 +848,26 @@ struct ScriptDebugWindow : public Window { void OnPaint() override { this->SelectValidDebugCompany(); + this->UpdateLogScroll(); /* Draw standard stuff */ this->DrawWidgets(); - - if (this->IsShaded()) return; // Don't draw anything when the window is shaded. - - bool dirty = false; - - /* Paint the company icons */ - for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { - NWidgetCore *button = this->GetWidget(i + WID_SCRD_COMPANY_BUTTON_START); - - bool valid = Company::IsValidAiID(i); - - /* Check whether the validity of the company changed */ - dirty |= (button->IsDisabled() == valid); - - /* Mark dead/paused AIs by setting the background colour. */ - bool dead = valid && Company::Get(i)->ai_instance->IsDead(); - bool paused = valid && Company::Get(i)->ai_instance->IsPaused(); - /* Re-paint if the button was updated. - * (note that it is intentional that SetScriptButtonColour is always called) */ - dirty |= SetScriptButtonColour(*button, dead, paused); - - /* Draw company icon only for valid AI companies */ - if (!valid) continue; - - byte offset = (i == script_debug_company) ? 1 : 0; - DrawCompanyIcon(i, button->pos_x + button->current_x / 2 - 7 + offset, this->GetWidget(WID_SCRD_COMPANY_BUTTON_START + i)->pos_y + 2 + offset); - } - - /* Set button colour for Game Script. */ - GameInstance *game = Game::GetInstance(); - bool valid = game != nullptr; - bool dead = valid && game->IsDead(); - bool paused = valid && game->IsPaused(); - - NWidgetCore *button = this->GetWidget(WID_SCRD_SCRIPT_GAME); - dirty |= (button->IsDisabled() == valid) || SetScriptButtonColour(*button, dead, paused); - - if (dirty) this->InvalidateData(-1); - - /* If there are no active companies, don't display anything else. */ - if (script_debug_company == INVALID_COMPANY) return; - - ScriptLogTypes::LogData &log = this->GetLogData(); - - int scroll_count = (int)log.size(); - if (this->vscroll->GetCount() != scroll_count) { - this->vscroll->SetCount(scroll_count); - - /* We need a repaint */ - this->SetWidgetDirty(WID_SCRD_SCROLLBAR); - } - - if (log.empty()) return; - - /* Detect when the user scrolls the window. Enable autoscroll when the - * bottom-most line becomes visible. */ - if (this->last_vscroll_pos != this->vscroll->GetPosition()) { - this->autoscroll = this->vscroll->GetPosition() + this->vscroll->GetCapacity() >= (int)log.size(); - } - if (this->autoscroll) { - if (this->vscroll->SetPosition((int)log.size())) { - /* We need a repaint */ - this->SetWidgetDirty(WID_SCRD_SCROLLBAR); - this->SetWidgetDirty(WID_SCRD_LOG_PANEL); - } - } - this->last_vscroll_pos = this->vscroll->GetPosition(); } void SetStringParameters(int widget) const override { if (widget != WID_SCRD_NAME_TEXT) return; - if (script_debug_company == OWNER_DEITY) { + if (this->filter.script_debug_company == OWNER_DEITY) { const GameInfo *info = Game::GetInfo(); assert(info != nullptr); SetDParam(0, STR_AI_DEBUG_NAME_AND_VERSION); SetDParamStr(1, info->GetName()); SetDParam(2, info->GetVersion()); - } else if (script_debug_company == INVALID_COMPANY || !Company::IsValidAiID(script_debug_company)) { + } else if (this->filter.script_debug_company == INVALID_COMPANY || !Company::IsValidAiID(this->filter.script_debug_company)) { SetDParam(0, STR_EMPTY); } else { - const AIInfo *info = Company::Get(script_debug_company)->ai_info; + const AIInfo *info = Company::Get(this->filter.script_debug_company)->ai_info; assert(info != nullptr); SetDParam(0, STR_AI_DEBUG_NAME_AND_VERSION); SetDParamStr(1, info->GetName()); @@ -913,9 +877,40 @@ struct ScriptDebugWindow : public Window { void DrawWidget(const Rect &r, int widget) const override { - if (script_debug_company == INVALID_COMPANY) return; + switch (widget) { + case WID_SCRD_LOG_PANEL: + this->DrawWidgetLog(r); + break; - if (widget != WID_SCRD_LOG_PANEL) return; + default: + if (IsInsideBS(widget, WID_SCRD_COMPANY_BUTTON_START, MAX_COMPANIES)) { + this->DrawWidgetCompanyButton(r, widget, WID_SCRD_COMPANY_BUTTON_START); + } + break; + } + } + + /** + * Draw a company button icon. + * @param r Rect area to draw within. + * @param widget Widget index to start. + * @param start Widget index of first company button. + */ + void DrawWidgetCompanyButton(const Rect &r, int widget, int start) const + { + if (this->IsWidgetDisabled(widget)) return; + CompanyID cid = (CompanyID)(widget - start); + Dimension sprite_size = GetSpriteSize(SPR_COMPANY_ICON); + DrawCompanyIcon(cid, CenterBounds(r.left, r.right, sprite_size.width), CenterBounds(r.top, r.bottom, sprite_size.height)); + } + + /** + * Draw the AI/GS log. + * @param r Rect area to draw within. + */ + void DrawWidgetLog(const Rect &r) const + { + if (this->filter.script_debug_company == INVALID_COMPANY) return; ScriptLogTypes::LogData &log = this->GetLogData(); if (log.empty()) return; @@ -941,20 +936,96 @@ struct ScriptDebugWindow : public Window { if (colour == TC_BLACK) colour = TC_WHITE; // Make black text readable by inverting it to white. } - DrawString(tr, line.text, colour, SA_LEFT | SA_FORCE); + DrawString(-this->hscroll->GetPosition(), tr.right, tr.top, line.text, colour, SA_LEFT | SA_FORCE); tr.top += this->resize.step_height; } } + /** + * Update the scrollbar and scroll position of the log panel. + */ + void UpdateLogScroll() + { + this->SetWidgetsDisabledState(this->filter.script_debug_company == INVALID_COMPANY, WID_SCRD_VSCROLLBAR, WID_SCRD_HSCROLLBAR); + if (this->filter.script_debug_company == INVALID_COMPANY) return; + + ScriptLogTypes::LogData &log = this->GetLogData(); + + int scroll_count = (int)log.size(); + if (this->vscroll->GetCount() != scroll_count) { + this->vscroll->SetCount(scroll_count); + + /* We need a repaint */ + this->SetWidgetDirty(WID_SCRD_VSCROLLBAR); + } + + if (log.empty()) return; + + /* Detect when the user scrolls the window. Enable autoscroll when the bottom-most line becomes visible. */ + if (this->last_vscroll_pos != this->vscroll->GetPosition()) { + this->autoscroll = this->vscroll->GetPosition() + this->vscroll->GetCapacity() >= (int)log.size(); + } + + if (this->autoscroll && this->vscroll->SetPosition((int)log.size())) { + /* We need a repaint */ + this->SetWidgetDirty(WID_SCRD_VSCROLLBAR); + this->SetWidgetDirty(WID_SCRD_LOG_PANEL); + } + + this->last_vscroll_pos = this->vscroll->GetPosition(); + } + + /** + * Update state of all Company (AI) buttons. + */ + void UpdateAIButtonsState() + { + /* Update company buttons */ + for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { + /* Mark dead/paused AIs by setting the background colour. */ + bool valid = Company::IsValidAiID(i); + bool dead = valid && Company::Get(i)->ai_instance->IsDead(); + bool paused = valid && Company::Get(i)->ai_instance->IsPaused(); + + NWidgetCore *button = this->GetWidget(i + WID_SCRD_COMPANY_BUTTON_START); + button->SetDisabled(!valid); + button->SetLowered(this->filter.script_debug_company == i); + SetScriptButtonColour(*button, dead, paused); + } + } + + /** + * Update state of game script button. + */ + void UpdateGSButtonState() + { + GameInstance *game = Game::GetInstance(); + bool valid = game != nullptr; + bool dead = valid && game->IsDead(); + bool paused = valid && game->IsPaused(); + + NWidgetCore *button = this->GetWidget(WID_SCRD_SCRIPT_GAME); + button->SetDisabled(!valid); + button->SetLowered(this->filter.script_debug_company == OWNER_DEITY); + SetScriptButtonColour(*button, dead, paused); + } + /** * Change all settings to select another Script. * @param show_ai The new AI to show. + * @param new_window Open the script in a new window. */ - void ChangeToScript(CompanyID show_script) + void ChangeToScript(CompanyID show_script, bool new_window = false) { if (!this->IsValidDebugCompany(show_script)) return; - script_debug_company = show_script; + if (new_window) { + ScriptDebugWindow::initial_state = this->filter; + ShowScriptDebugWindow(show_script, true); + return; + } + + this->filter.script_debug_company = show_script; this->highlight_row = -1; // The highlight of one Script make little sense for another Script. @@ -974,16 +1045,16 @@ struct ScriptDebugWindow : public Window { /* Check which button is clicked */ if (IsInsideMM(widget, WID_SCRD_COMPANY_BUTTON_START, WID_SCRD_COMPANY_BUTTON_END + 1)) { - ChangeToScript((CompanyID)(widget - WID_SCRD_COMPANY_BUTTON_START)); + ChangeToScript((CompanyID)(widget - WID_SCRD_COMPANY_BUTTON_START), _ctrl_pressed); } switch (widget) { case WID_SCRD_SCRIPT_GAME: - ChangeToScript(OWNER_DEITY); + ChangeToScript(OWNER_DEITY, _ctrl_pressed); break; case WID_SCRD_RELOAD_TOGGLE: - if (script_debug_company == OWNER_DEITY) { + if (this->filter.script_debug_company == OWNER_DEITY) { if (UserIsAllowedToChangeGameScript()) { Game::Uninitialize(true); Game::StartNew(); @@ -992,31 +1063,31 @@ struct ScriptDebugWindow : public Window { break; } /* First kill the company of the AI, then start a new one. This should start the current AI again */ - DoCommandP(0, CCA_DELETE | script_debug_company << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL); - DoCommandP(0, CCA_NEW_AI | script_debug_company << 16, 0, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | this->filter.script_debug_company << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_NEW_AI | this->filter.script_debug_company << 16, 0, CMD_COMPANY_CTRL); break; case WID_SCRD_SETTINGS: - ShowScriptSettingsWindow(script_debug_company); + ShowScriptSettingsWindow(this->filter.script_debug_company); break; case WID_SCRD_BREAK_STR_ON_OFF_BTN: - this->break_check_enabled = !this->break_check_enabled; + this->filter.break_check_enabled = !this->filter.break_check_enabled; this->InvalidateData(-1); break; case WID_SCRD_MATCH_CASE_BTN: - this->case_sensitive_break_check = !this->case_sensitive_break_check; + this->filter.case_sensitive_break_check = !this->filter.case_sensitive_break_check; this->InvalidateData(-1); break; case WID_SCRD_CONTINUE_BTN: /* Unpause current AI / game script and mark the corresponding script button dirty. */ if (!this->IsDead()) { - if (script_debug_company == OWNER_DEITY) { + if (this->filter.script_debug_company == OWNER_DEITY) { Game::Unpause(); } else { - AI::Unpause(script_debug_company); + AI::Unpause(this->filter.script_debug_company); } } @@ -1048,8 +1119,8 @@ struct ScriptDebugWindow : public Window { if (wid != WID_SCRD_BREAK_STR_EDIT_BOX) return; /* Save the current string to static member so it can be restored next time the window is opened. */ - this->break_string = this->break_editbox.text.buf; - break_string_filter.SetFilterTerm(this->break_string); + this->filter.break_string = this->break_editbox.text.buf; + this->break_string_filter.SetFilterTerm(this->filter.break_string); } /** @@ -1062,7 +1133,9 @@ struct ScriptDebugWindow : public Window { { /* If the log message is related to the active company tab, check the break string. * This needs to be done in gameloop-scope, so the AI is suspended immediately. */ - if (!gui_scope && data == script_debug_company && this->IsValidDebugCompany(script_debug_company) && this->break_check_enabled && !this->break_string_filter.IsEmpty()) { + if (!gui_scope && data == this->filter.script_debug_company && + this->IsValidDebugCompany(this->filter.script_debug_company) && + this->filter.break_check_enabled && !this->break_string_filter.IsEmpty()) { /* Get the log instance of the active company */ ScriptLogTypes::LogData &log = this->GetLogData(); @@ -1072,10 +1145,10 @@ struct ScriptDebugWindow : public Window { if (this->break_string_filter.GetState()) { /* Pause execution of script. */ if (!this->IsDead()) { - if (script_debug_company == OWNER_DEITY) { + if (this->filter.script_debug_company == OWNER_DEITY) { Game::Pause(); } else { - AI::Pause(script_debug_company); + AI::Pause(this->filter.script_debug_company); } } @@ -1094,42 +1167,42 @@ struct ScriptDebugWindow : public Window { this->SelectValidDebugCompany(); - this->vscroll->SetCount(script_debug_company != INVALID_COMPANY ? this->GetLogData().size() : 0); - - /* Update company buttons */ - for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { - this->SetWidgetDisabledState(i + WID_SCRD_COMPANY_BUTTON_START, !Company::IsValidAiID(i)); - this->SetWidgetLoweredState(i + WID_SCRD_COMPANY_BUTTON_START, script_debug_company == i); + uint max_width = 0; + if (this->filter.script_debug_company != INVALID_COMPANY) { + for (auto &line : this->GetLogData()) { + if (line.width == 0 || data == -1) line.width = GetStringBoundingBox(line.text).width; + max_width = std::max(max_width, line.width); + } } - this->SetWidgetDisabledState(WID_SCRD_SCRIPT_GAME, Game::GetGameInstance() == nullptr); - this->SetWidgetLoweredState(WID_SCRD_SCRIPT_GAME, script_debug_company == OWNER_DEITY); + this->vscroll->SetCount(this->filter.script_debug_company != INVALID_COMPANY ? this->GetLogData().size() : 0); + this->hscroll->SetCount(max_width + WidgetDimensions::scaled.frametext.Horizontal()); + + this->UpdateAIButtonsState(); + this->UpdateGSButtonState(); - this->SetWidgetLoweredState(WID_SCRD_BREAK_STR_ON_OFF_BTN, this->break_check_enabled); - this->SetWidgetLoweredState(WID_SCRD_MATCH_CASE_BTN, this->case_sensitive_break_check); + this->SetWidgetLoweredState(WID_SCRD_BREAK_STR_ON_OFF_BTN, this->filter.break_check_enabled); + this->SetWidgetLoweredState(WID_SCRD_MATCH_CASE_BTN, this->filter.case_sensitive_break_check); - this->SetWidgetDisabledState(WID_SCRD_SETTINGS, script_debug_company == INVALID_COMPANY); + this->SetWidgetDisabledState(WID_SCRD_SETTINGS, this->filter.script_debug_company == INVALID_COMPANY); extern CompanyID _local_company; - this->SetWidgetDisabledState(WID_SCRD_RELOAD_TOGGLE, script_debug_company == INVALID_COMPANY || - script_debug_company == _local_company || (script_debug_company == OWNER_DEITY && !UserIsAllowedToChangeGameScript())); - this->SetWidgetDisabledState(WID_SCRD_CONTINUE_BTN, script_debug_company == INVALID_COMPANY || - (script_debug_company == OWNER_DEITY ? !Game::IsPaused() : !AI::IsPaused(script_debug_company))); + this->SetWidgetDisabledState(WID_SCRD_RELOAD_TOGGLE, + this->filter.script_debug_company == INVALID_COMPANY || + this->filter.script_debug_company == _local_company || + (this->filter.script_debug_company == OWNER_DEITY && !UserIsAllowedToChangeGameScript())); + this->SetWidgetDisabledState(WID_SCRD_CONTINUE_BTN, this->filter.script_debug_company == INVALID_COMPANY || + (this->filter.script_debug_company == OWNER_DEITY ? !Game::IsPaused() : !AI::IsPaused(this->filter.script_debug_company))); } void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_SCRD_LOG_PANEL, WidgetDimensions::scaled.framerect.Vertical()); + this->hscroll->SetCapacityFromWidget(this, WID_SCRD_LOG_PANEL); } static HotkeyList hotkeys; }; -CompanyID ScriptDebugWindow::script_debug_company = INVALID_COMPANY; -std::string ScriptDebugWindow::break_string; -bool ScriptDebugWindow::break_check_enabled = true; -bool ScriptDebugWindow::case_sensitive_break_check = false; -StringFilter ScriptDebugWindow::break_string_filter(&ScriptDebugWindow::case_sensitive_break_check, false); - /** Make a number of rows with buttons for each company for the Script debug window. */ NWidgetBase *MakeCompanyButtonRowsScriptDebug(int *biggest_index) { @@ -1197,7 +1270,7 @@ static const NWidgetPart _nested_script_debug_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(NWID_VERTICAL), /* Log panel */ - NWidget(WWT_PANEL, COLOUR_GREY, WID_SCRD_LOG_PANEL), SetMinimalSize(287, 180), SetResize(1, 1), SetScrollbar(WID_SCRD_SCROLLBAR), + NWidget(WWT_PANEL, COLOUR_GREY, WID_SCRD_LOG_PANEL), SetMinimalSize(287, 180), SetResize(1, 1), SetScrollbar(WID_SCRD_VSCROLLBAR), EndContainer(), /* Break string widgets */ NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCRD_BREAK_STRING_WIDGETS), @@ -1213,9 +1286,10 @@ static const NWidgetPart _nested_script_debug_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCRD_CONTINUE_BTN), SetMinimalSize(100, 0), SetFill(0, 1), SetDataTip(STR_AI_DEBUG_CONTINUE, STR_AI_DEBUG_CONTINUE_TOOLTIP), EndContainer(), EndContainer(), + NWidget(NWID_HSCROLLBAR, COLOUR_GREY, WID_SCRD_HSCROLLBAR), EndContainer(), NWidget(NWID_VERTICAL), - NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SCRD_SCROLLBAR), + NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SCRD_VSCROLLBAR), NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), EndContainer(), @@ -1233,14 +1307,32 @@ static WindowDesc _script_debug_desc(__FILE__, __LINE__, /** * Open the Script debug window and select the given company. * @param show_company Display debug information about this AI company. + * @param new_window Show in new window instead of existing window. */ -Window *ShowScriptDebugWindow(CompanyID show_company) +Window *ShowScriptDebugWindow(CompanyID show_company, bool new_window) { if (!_networking || _network_server) { - ScriptDebugWindow *w = (ScriptDebugWindow *)BringWindowToFrontById(WC_SCRIPT_DEBUG, 0); - if (w == nullptr) w = new ScriptDebugWindow(&_script_debug_desc, 0); - if (show_company != INVALID_COMPANY) w->ChangeToScript(show_company); - return w; + int i = 0; + if (new_window) { + /* find next free window number for script debug */ + while (FindWindowById(WC_SCRIPT_DEBUG, i) != nullptr) i++; + } else { + /* Find existing window showing show_company. */ + for (Window *w : Window::Iterate()) { + if (w->window_class == WC_SCRIPT_DEBUG && static_cast(w)->filter.script_debug_company == show_company) { + return BringWindowToFrontById(w->window_class, w->window_number); + } + } + + /* Maybe there's a window showing a different company which can be switched. */ + ScriptDebugWindow *w = static_cast(FindWindowByClass(WC_SCRIPT_DEBUG)); + if (w != nullptr) { + BringWindowToFrontById(w->window_class, w->window_number); + w->ChangeToScript(show_company); + return w; + } + } + return new ScriptDebugWindow(&_script_debug_desc, i, show_company); } else { ShowErrorMessage(STR_ERROR_AI_DEBUG_SERVER_ONLY, INVALID_STRING_ID, WL_INFO); } @@ -1253,7 +1345,7 @@ Window *ShowScriptDebugWindow(CompanyID show_company) */ void InitializeScriptGui() { - ScriptDebugWindow::script_debug_company = INVALID_COMPANY; + ScriptDebugWindow::initial_state.script_debug_company = INVALID_COMPANY; } /** Open the AI debug window if one of the AI scripts has crashed. */ diff --git a/src/script/script_gui.h b/src/script/script_gui.h index 1775d52489..807557ac69 100644 --- a/src/script/script_gui.h +++ b/src/script/script_gui.h @@ -14,7 +14,7 @@ #include "../textfile_type.h" void ShowScriptListWindow(CompanyID slot, bool show_all); -Window *ShowScriptDebugWindow(CompanyID show_company = INVALID_COMPANY); +Window *ShowScriptDebugWindow(CompanyID show_company = INVALID_COMPANY, bool new_window = false); void ShowScriptSettingsWindow(CompanyID slot); void ShowScriptTextfileWindow(TextfileType file_type, CompanyID slot); void ShowScriptDebugWindowIfScriptError(); diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp index aced1057ef..39c28f0716 100644 --- a/src/script/script_instance.cpp +++ b/src/script/script_instance.cpp @@ -80,6 +80,10 @@ void ScriptInstance::Initialize(const std::string &main_script, const std::strin /* Register the API functions and classes */ this->engine->SetGlobalPointer(this->engine); this->RegisterAPI(); + if (this->IsDead()) { + /* Failed to register API; a message has already been logged. */ + return; + } try { ScriptObject::SetAllowDoCommand(false); diff --git a/src/script/script_instance.hpp b/src/script/script_instance.hpp index e77d972462..bd5c685838 100644 --- a/src/script/script_instance.hpp +++ b/src/script/script_instance.hpp @@ -154,6 +154,11 @@ public: */ inline bool IsDead() const { return this->is_dead; } + /** + * Return whether the script is alive. + */ + inline bool IsAlive() const { return !this->IsDead() && !this->in_shutdown; } + /** * Call the script Save function and save all data in the savegame. */ diff --git a/src/settings.cpp b/src/settings.cpp index da11570823..f170362195 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1324,13 +1324,8 @@ static void ZoomMinMaxChanged(int32 new_value) extern void UpdateFontHeightCache(); ConstrainAllViewportsZoom(); GfxClearSpriteCache(); - if (_settings_client.gui.zoom_min > _gui_zoom) { - /* Restrict GUI zoom if it is no longer available. */ - _gui_zoom = _settings_client.gui.zoom_min; - UpdateCursorSize(); - UpdateRouteStepSpriteSize(); - UpdateFontHeightCache(); - LoadStringWidthTable(); + InvalidateWindowClassesData(WC_SPRITE_ALIGNER); + if (AdjustGUIZoom(AGZM_MANUAL)) { ReInitAllWindows(false); } } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 3262d1ff82..45dd9429cb 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -179,6 +179,7 @@ struct GameOptionsWindow : Window { GameSettings *opt; bool reload; int gui_scale; + static inline int active_tab = WID_GO_TAB_GENERAL; enum class QueryTextItem { None, @@ -197,7 +198,7 @@ struct GameOptionsWindow : Window { this->InitNested(WN_GAME_OPTIONS_GAME_OPTIONS); this->OnInvalidateData(0); - this->SetTab(WID_GO_TAB_GENERAL); + this->SetTab(GameOptionsWindow::active_tab); if constexpr (!NetworkSurveyHandler::IsSurveyPossible()) this->GetWidget(WID_GO_SURVEY_SEL)->SetDisplayedPlane(SZSP_NONE); } @@ -239,7 +240,7 @@ struct GameOptionsWindow : Window { std::sort(list.begin(), list.end(), DropDownListStringItem::NatSortFunc); /* Append custom currency at the end */ - list.push_back(std::make_unique(-1, false)); // separator line + list.push_back(std::make_unique(-1, false)); // separator line list.push_back(std::make_unique(STR_GAME_OPTIONS_CURRENCY_CUSTOM, CURRENCY_CUSTOM, HasBit(disabled, CURRENCY_CUSTOM))); break; } @@ -409,6 +410,7 @@ struct GameOptionsWindow : Window { { this->SetWidgetsLoweredState(false, WID_GO_TAB_GENERAL, WID_GO_TAB_GRAPHICS, WID_GO_TAB_SOUND); this->LowerWidget(widget); + GameOptionsWindow::active_tab = widget; int pane = 0; if (widget == WID_GO_TAB_GRAPHICS) pane = 1; @@ -633,6 +635,21 @@ struct GameOptionsWindow : Window { break; } + case WID_GO_BASE_GRF_OPEN_URL: + if (BaseGraphics::GetUsedSet() == nullptr || BaseGraphics::GetUsedSet()->url.empty()) return; + OpenBrowser(BaseGraphics::GetUsedSet()->url); + break; + + case WID_GO_BASE_SFX_OPEN_URL: + if (BaseSounds::GetUsedSet() == nullptr || BaseSounds::GetUsedSet()->url.empty()) return; + OpenBrowser(BaseSounds::GetUsedSet()->url); + break; + + case WID_GO_BASE_MUSIC_OPEN_URL: + if (BaseMusic::GetUsedSet() == nullptr || BaseMusic::GetUsedSet()->url.empty()) return; + OpenBrowser(BaseMusic::GetUsedSet()->url); + break; + default: { int selected; DropDownList list = this->BuildDropDownList(widget, &selected); @@ -784,6 +801,10 @@ struct GameOptionsWindow : Window { this->SetWidgetDisabledState(WID_GO_BASE_GRF_PARAMETERS, BaseGraphics::GetUsedSet() == nullptr || !BaseGraphics::GetUsedSet()->IsConfigurable()); + this->SetWidgetDisabledState(WID_GO_BASE_GRF_OPEN_URL, BaseGraphics::GetUsedSet() == nullptr || BaseGraphics::GetUsedSet()->url.empty()); + this->SetWidgetDisabledState(WID_GO_BASE_SFX_OPEN_URL, BaseSounds::GetUsedSet() == nullptr || BaseSounds::GetUsedSet()->url.empty()); + this->SetWidgetDisabledState(WID_GO_BASE_MUSIC_OPEN_URL, BaseMusic::GetUsedSet() == nullptr || BaseMusic::GetUsedSet()->url.empty()); + for (TextfileType tft = TFT_CONTENT_BEGIN; tft < TFT_CONTENT_END; tft++) { this->SetWidgetDisabledState(WID_GO_BASE_GRF_TEXTFILE + tft, BaseGraphics::GetUsedSet() == nullptr || BaseGraphics::GetUsedSet()->GetTextfile(tft) == nullptr); this->SetWidgetDisabledState(WID_GO_BASE_SFX_TEXTFILE + tft, BaseSounds::GetUsedSet() == nullptr || BaseSounds::GetUsedSet()->GetTextfile(tft) == nullptr); @@ -891,10 +912,15 @@ static const NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_PARAMETERS), SetDataTip(STR_NEWGRF_SETTINGS_SET_PARAMETERS, STR_NULL), EndContainer(), NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_GRF_DESCRIPTION), SetMinimalSize(200, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP), SetFill(1, 0), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), + NWidget(NWID_VERTICAL), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_OPEN_URL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_CONTENT_OPEN_URL, STR_CONTENT_OPEN_URL_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_TEXTFILE_VIEW_README_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_GRF_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_TEXTFILE_VIEW_LICENCE_TOOLTIP), + EndContainer(), EndContainer(), EndContainer(), EndContainer(), @@ -915,10 +941,15 @@ static const NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_SFX, STR_NULL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_SFX_DROPDOWN), SetMinimalSize(100, 12), SetDataTip(STR_JUST_RAW_STRING, STR_GAME_OPTIONS_BASE_SFX_TOOLTIP), SetFill(1, 0), NWidget(WWT_EMPTY, INVALID_COLOUR, WID_GO_BASE_SFX_DESCRIPTION), SetMinimalSize(200, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_NULL, STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP), SetFill(1, 0), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), + NWidget(NWID_VERTICAL), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_OPEN_URL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_CONTENT_OPEN_URL, STR_CONTENT_OPEN_URL_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_TEXTFILE_VIEW_README_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_SFX_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_TEXTFILE_VIEW_LICENCE_TOOLTIP), + EndContainer(), EndContainer(), EndContainer(), @@ -930,10 +961,15 @@ static const NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_JUKEBOX), SetMinimalSize(22, 22), SetDataTip(SPR_IMG_MUSIC, STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW), EndContainer(), EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), + NWidget(NWID_VERTICAL), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_OPEN_URL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_CONTENT_OPEN_URL, STR_CONTENT_OPEN_URL_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_TEXTFILE_VIEW_README_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GO_BASE_MUSIC_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_TEXTFILE_VIEW_LICENCE_TOOLTIP), + EndContainer(), EndContainer(), EndContainer(), EndContainer(), @@ -3178,8 +3214,8 @@ void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clic DrawFrameRect(lr, button_colour, (state == 1) ? FR_LOWERED : FR_NONE); DrawFrameRect(rr, button_colour, (state == 2) ? FR_LOWERED : FR_NONE); - DrawSpriteIgnorePadding(SPR_ARROW_LEFT, PAL_NONE, lr, (state == 1), SA_CENTER); - DrawSpriteIgnorePadding(SPR_ARROW_RIGHT, PAL_NONE, rr, (state == 2), SA_CENTER); + DrawSpriteIgnorePadding(SPR_ARROW_LEFT, PAL_NONE, lr, SA_CENTER); + DrawSpriteIgnorePadding(SPR_ARROW_RIGHT, PAL_NONE, rr, SA_CENTER); /* Grey out the buttons that aren't clickable */ bool rtl = _current_text_dir == TD_RTL; @@ -3206,7 +3242,7 @@ void DrawDropDownButton(int x, int y, Colours button_colour, bool state, bool cl Rect r = {x, y, x + SETTING_BUTTON_WIDTH - 1, y + SETTING_BUTTON_HEIGHT - 1}; DrawFrameRect(r, button_colour, state ? FR_LOWERED : FR_NONE); - DrawSpriteIgnorePadding(SPR_ARROW_DOWN, PAL_NONE, r, state, SA_CENTER); + DrawSpriteIgnorePadding(SPR_ARROW_DOWN, PAL_NONE, r, SA_CENTER); if (!clickable) { GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), colour, FILLRECT_CHECKER); diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 6181240763..d8bfe3a53f 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -38,7 +38,7 @@ struct SignList { /** * A GUIList contains signs and uses a StringFilter for filtering. */ - typedef GUIList GUISignList; + typedef GUIList GUISignList; GUISignList signs; diff --git a/src/sl/misc_sl.cpp b/src/sl/misc_sl.cpp index 0d8fc1a8b5..e0860f5189 100644 --- a/src/sl/misc_sl.cpp +++ b/src/sl/misc_sl.cpp @@ -41,9 +41,14 @@ ZoomLevel _saved_scrollpos_zoom; void SaveViewportBeforeSaveGame() { + /* Don't use GetMainWindow() in case the window does not exist. */ const Window *w = FindWindowById(WC_MAIN_WINDOW, 0); - - if (w != nullptr) { + if (w == nullptr || w->viewport == nullptr) { + /* Ensure saved position is clearly invalid. */ + _saved_scrollpos_x = INT_MAX; + _saved_scrollpos_y = INT_MAX; + _saved_scrollpos_zoom = ZOOM_LVL_END; + } else { _saved_scrollpos_x = w->viewport->scrollpos_x; _saved_scrollpos_y = w->viewport->scrollpos_y; _saved_scrollpos_zoom = w->viewport->zoom; diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 410c5bf503..23b3709465 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1198,7 +1198,7 @@ void SmallMapWindow::RebuildColourIndexIfNecessary() case WID_SM_MAP: { Rect ir = r.Shrink(WidgetDimensions::scaled.bevel); DrawPixelInfo new_dpi; - if (!FillDrawPixelInfo(&new_dpi, ir.left, ir.top, ir.Width(), ir.Height())) return; + if (!FillDrawPixelInfo(&new_dpi, ir)) return; this->DrawSmallMap(&new_dpi); break; } diff --git a/src/sortlist_type.h b/src/sortlist_type.h index ab0e562903..1fa5d806a8 100644 --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -41,12 +41,13 @@ struct Filtering { /** * List template of 'things' \p T to sort in a GUI. * @tparam T Type of data stored in the list to represent each item. + * @tparam P Type of data passed as additional parameter to the sort function. * @tparam F Type of data fed as additional value to the filter function. @see FilterFunction */ -template +template class GUIList : public std::vector { public: - typedef bool SortFunction(const T&, const T&); ///< Signature of sort function. + using SortFunction = std::conditional_t, bool (const T&, const T&), bool (const T&, const T&, const P)>; ///< Signature of sort function. typedef bool FilterFunction(const T*, F); ///< Signature of filter function. protected: @@ -58,6 +59,11 @@ protected: uint16 resort_timer; ///< resort list after a given amount of ticks if set uint16 resort_interval; ///< value to re-initialise resort_timer with after sorting + /* If sort parameters are used then params must be a reference, however if not then params cannot be a reference as + * it will not be able to reference anything. */ + using SortParameterReference = std::conditional_t, P, P&>; + const SortParameterReference params; + /** * Check if the list is sortable * @@ -77,6 +83,8 @@ protected: } public: + /* If sort parameters are not used then we don't require a reference to the params. */ + template >* = nullptr> GUIList() : sort_func_list(nullptr), filter_func_list(nullptr), @@ -84,7 +92,21 @@ public: sort_type(0), filter_type(0), resort_timer(1), - resort_interval(DAY_TICKS * 10) /* Resort every 10 days by default */ + resort_interval(DAY_TICKS * 10), /* Resort every 10 days by default */ + params(nullptr) + {}; + + /* If sort parameters are used then we require a reference to the params. */ + template >* = nullptr> + GUIList(const P& params) : + sort_func_list(nullptr), + filter_func_list(nullptr), + flags(VL_NONE), + sort_type(0), + filter_type(0), + resort_timer(1), + resort_interval(DAY_TICKS * 10), /* Resort every 10 days by default */ + params(params) {}; /** @@ -276,7 +298,11 @@ public: const bool desc = (this->flags & VL_DESC) != 0; - std::sort(std::vector::begin(), std::vector::end(), [&](const T &a, const T &b) { return desc ? compare(b, a) : compare(a, b); }); + if constexpr (std::is_same_v) { + std::sort(std::vector::begin(), std::vector::end(), [&](const T &a, const T &b) { return desc ? compare(b, a) : compare(a, b); }); + } else { + std::sort(std::vector::begin(), std::vector::end(), [&](const T &a, const T &b) { return desc ? compare(b, a, params) : compare(a, b, params); }); + } return true; } diff --git a/src/spritecache.cpp b/src/spritecache.cpp index bd8921dca7..a58b2b9c91 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -204,7 +204,7 @@ uint GetMaxSpriteID() return (uint)_spritecache.size(); } -static bool ResizeSpriteIn(SpriteLoader::Sprite *sprite, ZoomLevel src, ZoomLevel tgt, bool dry_run) +static bool ResizeSpriteIn(SpriteLoader::SpriteCollection &sprite, ZoomLevel src, ZoomLevel tgt, bool dry_run) { uint8 scaled_1 = ScaleByZoom(1, (ZoomLevel)(src - tgt)); @@ -236,7 +236,7 @@ static bool ResizeSpriteIn(SpriteLoader::Sprite *sprite, ZoomLevel src, ZoomLeve return true; } -static void ResizeSpriteOut(SpriteLoader::Sprite *sprite, ZoomLevel zoom, bool dry_run) +static void ResizeSpriteOut(SpriteLoader::SpriteCollection &sprite, ZoomLevel zoom, bool dry_run) { /* Algorithm based on 32bpp_Optimized::ResizeSprite() */ sprite[zoom].width = UnScaleByZoom(sprite[ZOOM_LVL_NORMAL].width, zoom); @@ -326,7 +326,7 @@ static bool PadSingleSprite(SpriteLoader::Sprite *sprite, ZoomLevel zoom, uint p return true; } -static bool PadSprites(SpriteLoader::Sprite *sprite, unsigned int sprite_avail, SpriteEncoder *encoder) +static bool PadSprites(SpriteLoader::SpriteCollection &sprite, unsigned int sprite_avail, SpriteEncoder *encoder) { /* Get minimum top left corner coordinates. */ int min_xoffs = INT32_MAX; @@ -374,7 +374,7 @@ static bool PadSprites(SpriteLoader::Sprite *sprite, unsigned int sprite_avail, return true; } -static bool ResizeSprites(SpriteLoader::Sprite *sprite, unsigned int sprite_avail, SpriteEncoder *encoder, uint8 zoom_levels) +static bool ResizeSprites(SpriteLoader::SpriteCollection &sprite, unsigned int sprite_avail, SpriteEncoder *encoder, uint8 zoom_levels) { ZoomLevel first_avail = static_cast(FindFirstBit(sprite_avail)); ZoomLevel first_needed = static_cast(FindFirstBit(zoom_levels)); @@ -505,7 +505,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty DEBUG(sprite, 9, "Load sprite %d", id); - SpriteLoader::Sprite sprite[ZOOM_LVL_SPR_COUNT]; + SpriteLoader::SpriteCollection sprite; uint8 sprite_avail = 0; sprite[ZOOM_LVL_NORMAL].type = sprite_type; @@ -559,7 +559,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty return (void*)GetRawSprite(SPR_IMG_QUERY, SpriteType::Normal, UINT8_MAX, allocator, encoder); } - if (sprite->type == SpriteType::Font && _font_zoom != ZOOM_LVL_NORMAL) { + if (sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font && _font_zoom != ZOOM_LVL_NORMAL) { /* Make ZOOM_LVL_NORMAL be ZOOM_LVL_GUI */ sprite[ZOOM_LVL_NORMAL].width = sprite[_font_zoom].width; sprite[ZOOM_LVL_NORMAL].height = sprite[_font_zoom].height; @@ -569,7 +569,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty sprite[ZOOM_LVL_NORMAL].colours = sprite[_font_zoom].colours; } - if (sprite->type == SpriteType::Normal) { + if (sprite[ZOOM_LVL_NORMAL].type == SpriteType::Normal) { /* Remove unwanted zoom levels before encoding */ for (ZoomLevel zoom = ZOOM_LVL_BEGIN; zoom != ZOOM_LVL_SPR_END; zoom++) { if (!HasBit(zoom_levels, zoom)) sprite[zoom].data = nullptr; @@ -1011,7 +1011,7 @@ uint32 GetSpriteMainColour(SpriteID sprite_id, PaletteID palette_id) SpriteFile &file = *sc->file; size_t file_pos = sc->file_pos; - SpriteLoader::Sprite sprites[ZOOM_LVL_SPR_COUNT]; + SpriteLoader::SpriteCollection sprites; sprites[ZOOM_LVL_NORMAL].type = SpriteType::Normal; SpriteLoaderGrf sprite_loader(file.GetContainerVersion()); uint8 sprite_avail; diff --git a/src/spriteloader/grf.cpp b/src/spriteloader/grf.cpp index c802a34072..99a54b30dd 100644 --- a/src/spriteloader/grf.cpp +++ b/src/spriteloader/grf.cpp @@ -215,7 +215,7 @@ bool DecodeSingleSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t f return true; } -uint8 LoadSpriteV1(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp) +uint8 LoadSpriteV1(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp) { /* Check the requested colour depth. */ if (load_32bpp) return 0; @@ -256,7 +256,7 @@ uint8 LoadSpriteV1(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t file_p return 0; } -uint8 LoadSpriteV2(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint count, uint16 control_flags, uint8 zoom_levels) +uint8 LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint count, uint16 control_flags, uint8 zoom_levels) { static const ZoomLevel zoom_lvl_map[6] = {ZOOM_LVL_OUT_4X, ZOOM_LVL_NORMAL, ZOOM_LVL_OUT_2X, ZOOM_LVL_OUT_8X, ZOOM_LVL_OUT_16X, ZOOM_LVL_OUT_32X}; @@ -404,7 +404,7 @@ uint8 LoadSpriteV2(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t file_p return loaded_sprites; } -uint8 SpriteLoaderGrf::LoadSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint count, uint16 control_flags, uint8 zoom_levels) +uint8 SpriteLoaderGrf::LoadSprite(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint count, uint16 control_flags, uint8 zoom_levels) { if (this->container_ver >= 2) { return LoadSpriteV2(sprite, file, file_pos, sprite_type, load_32bpp, count, control_flags, zoom_levels); diff --git a/src/spriteloader/grf.hpp b/src/spriteloader/grf.hpp index 171088ceb1..24c8131a6a 100644 --- a/src/spriteloader/grf.hpp +++ b/src/spriteloader/grf.hpp @@ -17,7 +17,7 @@ class SpriteLoaderGrf FINAL : public SpriteLoader { byte container_ver; public: SpriteLoaderGrf(byte container_ver) : container_ver(container_ver) {} - uint8 LoadSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint count, uint16 control_flags, uint8 zoom_levels) override; + uint8 LoadSprite(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint count, uint16 control_flags, uint8 zoom_levels) override; }; #endif /* SPRITELOADER_GRF_HPP */ diff --git a/src/spriteloader/spriteloader.hpp b/src/spriteloader/spriteloader.hpp index 27aa1b5994..12b74653f6 100644 --- a/src/spriteloader/spriteloader.hpp +++ b/src/spriteloader/spriteloader.hpp @@ -65,6 +65,11 @@ public: static ReusableBuffer buffer[ZOOM_LVL_SPR_COUNT]; }; + /** + * Type defining a collection of sprites, one for each zoom level. + */ + using SpriteCollection = std::array; + /** * Load a sprite from the disk and return a sprite struct which is the same for all loaders. * @param[out] sprite The sprites to fill with data. @@ -75,7 +80,7 @@ public: * @param control_flags Control flags, see SpriteCacheCtrlFlags. * @return Bit mask of the zoom levels successfully loaded or 0 if no sprite could be loaded. */ - virtual uint8 LoadSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint count, uint16 control_flags, uint8 zoom_levels) = 0; + virtual uint8 LoadSprite(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint count, uint16 control_flags, uint8 zoom_levels) = 0; virtual ~SpriteLoader() = default; }; @@ -127,7 +132,7 @@ public: /** * Convert a sprite from the loader to our own format. */ - virtual Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) = 0; + virtual Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) = 0; /** * Get the value which the height and width on a sprite have to be aligned by. diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 698684cbe4..3a0e04b1de 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2597,18 +2597,19 @@ uint8 GetAirportNoiseLevelForDistance(const AirportSpec *as, uint distance) * Finds the town nearest to given airport. Based on minimal manhattan distance to any airport's tile. * If two towns have the same distance, town with lower index is returned. * @param as airport's description + * @param tile origin tile (top corner of the airport) * @param it An iterator over all airport tiles * @param[out] mindist Minimum distance to town * @return nearest town to airport */ -Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint &mindist) +Town *AirportGetNearestTown(const AirportSpec *as, TileIndex tile, const TileIterator &it, uint &mindist) { assert(Town::GetNumItems() > 0); Town *nearest = nullptr; - uint perimeter_min_x = TileX(it); - uint perimeter_min_y = TileY(it); + uint perimeter_min_x = TileX(tile); + uint perimeter_min_y = TileY(tile); uint perimeter_max_x = perimeter_min_x + as->size_x - 1; uint perimeter_max_y = perimeter_min_y + as->size_y - 1; @@ -2616,6 +2617,8 @@ Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint std::unique_ptr copy(it.Clone()); for (TileIndex cur_tile = *copy; cur_tile != INVALID_TILE; cur_tile = ++*copy) { + assert(IsInsideBS(TileX(cur_tile), perimeter_min_x, as->size_x)); + assert(IsInsideBS(TileY(cur_tile), perimeter_min_y, as->size_y)); if (TileX(cur_tile) == perimeter_min_x || TileX(cur_tile) == perimeter_max_x || TileY(cur_tile) == perimeter_min_y || TileY(cur_tile) == perimeter_max_y) { Town *t = CalcClosestTownFromTile(cur_tile, mindist + 1); if (t == nullptr) continue; @@ -2643,7 +2646,7 @@ void UpdateAirportsNoise() const AirportSpec *as = st->airport.GetSpec(); AirportTileIterator it(st); uint dist; - Town *nearest = AirportGetNearestTown(as, it, dist); + Town *nearest = AirportGetNearestTown(as, st->airport.tile, it, dist); nearest->noise_reached += GetAirportNoiseLevelForDistance(as, dist); } } @@ -2757,14 +2760,14 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint /* The noise level is the noise from the airport and reduce it to account for the distance to the town center. */ uint dist; - Town *nearest = AirportGetNearestTown(as, iter, dist); + Town *nearest = AirportGetNearestTown(as, tile, iter, dist); uint newnoise_level = nearest->noise_reached + GetAirportNoiseLevelForDistance(as, dist); if (action == AIRPORT_UPGRADE) { const AirportSpec *old_as = st->airport.GetSpec(); AirportTileTableIterator old_iter(old_as->table[st->airport.layout], st->airport.tile); uint old_dist; - Town *old_nearest = AirportGetNearestTown(old_as, old_iter, old_dist); + Town *old_nearest = AirportGetNearestTown(old_as, st->airport.tile, old_iter, old_dist); if (old_nearest == nearest) { newnoise_level -= GetAirportNoiseLevelForDistance(old_as, old_dist); } @@ -2823,7 +2826,7 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint const AirportSpec *old_as = st->airport.GetSpec(); AirportTileTableIterator old_iter(old_as->table[st->airport.layout], st->airport.tile); uint old_dist; - Town *old_nearest = AirportGetNearestTown(old_as, old_iter, old_dist); + Town *old_nearest = AirportGetNearestTown(old_as, st->airport.tile, old_iter, old_dist); if (old_nearest != nearest) { old_nearest->noise_reached -= GetAirportNoiseLevelForDistance(old_as, old_dist); @@ -2918,7 +2921,7 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags) * need of recalculation */ AirportTileIterator it(st); uint dist; - Town *nearest = AirportGetNearestTown(as, it, dist); + Town *nearest = AirportGetNearestTown(as, st->airport.tile, it, dist); nearest->noise_reached -= GetAirportNoiseLevelForDistance(as, dist); if (_settings_game.economy.station_noise_level) { diff --git a/src/station_gui.cpp b/src/station_gui.cpp index ded41f92da..1aa9be8527 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -249,7 +249,7 @@ static void StationsWndShowStationRating(int left, int right, int y, CargoID typ if (w != 0) GfxFillRect(left + padding, y, left + w - 1, y + padding - 1, PC_GREEN); } -typedef GUIList GUIStationList; +typedef GUIList GUIStationList; /** * The list of stations per company. @@ -258,11 +258,19 @@ class CompanyStationsWindow : public Window { protected: /* Runtime saved values */ - static Listing last_sorting; - static byte facilities; // types of stations of interest - static bool include_empty; // whether we should include stations without waiting cargo - static const CargoTypes cargo_filter_max; - static CargoTypes cargo_filter; // bitmap of cargo types to include + struct FilterState { + Listing last_sorting; + byte facilities; ///< types of stations of interest + bool include_empty; ///< whether we should include stations without waiting cargo + CargoTypes cargoes; ///< bitmap of cargo types to include + }; + + static inline FilterState initial_state = { + {false, 0}, + FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK, + true, + ALL_CARGOTYPES, + }; /* Constants for sorting stations */ static const StringID sorter_names[]; @@ -270,7 +278,8 @@ protected: static btree::btree_map station_vehicle_calling_counts; - GUIStationList stations; + FilterState filter; + GUIStationList stations{filter.cargoes}; Scrollbar *vscroll; uint rating_width; @@ -289,19 +298,19 @@ protected: for (const Station *st : Station::Iterate()) { if (st->owner == owner || (st->owner == OWNER_NONE && HasStationInUse(st->index, true, owner))) { - if (this->facilities & st->facilities) { // only stations with selected facilities + if (this->filter.facilities & st->facilities) { // only stations with selected facilities int num_waiting_cargo = 0; for (CargoID j = 0; j < NUM_CARGO; j++) { if (st->goods[j].HasRating()) { num_waiting_cargo++; // count number of waiting cargo - if (HasBit(this->cargo_filter, j)) { + if (HasBit(this->filter.cargoes, j)) { this->stations.push_back(st); break; } } } /* stations without waiting cargo */ - if (num_waiting_cargo == 0 && this->include_empty) { + if (num_waiting_cargo == 0 && this->filter.include_empty) { this->stations.push_back(st); } } @@ -315,7 +324,7 @@ protected: } /** Sort stations by their name */ - static bool StationNameSorter(const Station * const &a, const Station * const &b) + static bool StationNameSorter(const Station * const &a, const Station * const &b, const CargoTypes &) { int r = StrNaturalCompare(a->GetCachedName(), b->GetCachedName()); // Sort by name (natural sorting). if (r == 0) return a->index < b->index; @@ -323,13 +332,13 @@ protected: } /** Sort stations by their type */ - static bool StationTypeSorter(const Station * const &a, const Station * const &b) + static bool StationTypeSorter(const Station * const &a, const Station * const &b, const CargoTypes &) { return a->facilities < b->facilities; } /** Sort stations by their waiting cargo */ - static bool StationWaitingTotalSorter(const Station * const &a, const Station * const &b) + static bool StationWaitingTotalSorter(const Station * const &a, const Station * const &b, const CargoTypes &cargo_filter) { int diff = 0; @@ -341,7 +350,7 @@ protected: } /** Sort stations by their available waiting cargo */ - static bool StationWaitingAvailableSorter(const Station * const &a, const Station * const &b) + static bool StationWaitingAvailableSorter(const Station * const &a, const Station * const &b, const CargoTypes &cargo_filter) { int diff = 0; @@ -353,7 +362,7 @@ protected: } /** Sort stations by their rating */ - static bool StationRatingMaxSorter(const Station * const &a, const Station * const &b) + static bool StationRatingMaxSorter(const Station * const &a, const Station * const &b, const CargoTypes &cargo_filter) { byte maxr1 = 0; byte maxr2 = 0; @@ -367,7 +376,7 @@ protected: } /** Sort stations by their rating */ - static bool StationRatingMinSorter(const Station * const &a, const Station * const &b) + static bool StationRatingMinSorter(const Station * const &a, const Station * const &b, const CargoTypes &cargo_filter) { byte minr1 = 255; byte minr2 = 255; @@ -425,7 +434,7 @@ protected: } /** Sort stations by the number of vehicles calling */ - static bool StationVehiclesCallingSorter(const Station * const &a, const Station * const &b) + static bool StationVehiclesCallingSorter(const Station * const &a, const Station * const &b, const CargoTypes &) { auto get_count = [](const Station * const &st) { auto iter = station_vehicle_calling_counts.find(st->index); @@ -439,7 +448,7 @@ protected: void SortStationsList() { if (this->sorter_funcs[this->stations.SortType()] == &StationVehiclesCallingSorter && this->stations.WouldSort()) { - PrepareStationVehiclesCallingSorter(this->facilities); + PrepareStationVehiclesCallingSorter(this->filter.facilities); } if (!this->stations.Sort()) return; @@ -450,8 +459,12 @@ protected: public: CompanyStationsWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) { - this->stations.SetListing(this->last_sorting); - this->stations.SetSortFuncs(this->sorter_funcs); + /* Load initial filter state. */ + this->filter = CompanyStationsWindow::initial_state; + if (this->filter.cargoes == ALL_CARGOTYPES) this->filter.cargoes = _cargo_mask; + + this->stations.SetListing(this->filter.last_sorting); + this->stations.SetSortFuncs(CompanyStationsWindow::sorter_funcs); this->stations.ForceRebuild(); this->stations.NeedResort(); this->SortStationsList(); @@ -463,26 +476,28 @@ public: uint8 index = 0; for (const CargoSpec *cs : _sorted_standard_cargo_specs) { - if (HasBit(this->cargo_filter, cs->Index())) { + if (HasBit(this->filter.cargoes, cs->Index())) { this->LowerWidget(WID_STL_CARGOSTART + index); } index++; } - if (this->cargo_filter == this->cargo_filter_max) this->cargo_filter = _cargo_mask; + if (this->filter.cargoes == ALL_CARGOTYPES) this->filter.cargoes = _cargo_mask; for (uint i = 0; i < 5; i++) { - if (HasBit(this->facilities, i)) this->LowerWidget(i + WID_STL_TRAIN); + if (HasBit(this->filter.facilities, i)) this->LowerWidget(i + WID_STL_TRAIN); } - this->SetWidgetLoweredState(WID_STL_NOCARGOWAITING, this->include_empty); + this->SetWidgetLoweredState(WID_STL_NOCARGOWAITING, this->filter.include_empty); this->GetWidget(WID_STL_SORTDROPBTN)->widget_data = this->sorter_names[this->stations.SortType()]; } void Close(int data = 0) override { - this->last_sorting = this->stations.GetListing(); - this->Window::Close(); + /* Save filter state. */ + this->filter.last_sorting = this->stations.GetListing(); + CompanyStationsWindow::initial_state = this->filter; + this->Window::Close(data); } void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override @@ -498,8 +513,8 @@ public: case WID_STL_SORTDROPBTN: { Dimension d = {0, 0}; - for (int i = 0; this->sorter_names[i] != INVALID_STRING_ID; i++) { - d = maxdim(d, GetStringBoundingBox(this->sorter_names[i])); + for (int i = 0; CompanyStationsWindow::sorter_names[i] != INVALID_STRING_ID; i++) { + d = maxdim(d, GetStringBoundingBox(CompanyStationsWindow::sorter_names[i])); } d.width += padding.width; d.height += padding.height; @@ -573,7 +588,7 @@ public: /* show cargo waiting and station ratings */ for (const CargoSpec *cs : _sorted_standard_cargo_specs) { CargoID cid = cs->Index(); - if (st->goods[cid].CargoTotalCount() > 0) { + if (st->goods[cid].HasRating()) { /* For RTL we work in exactly the opposite direction. So * decrement the space needed first, then draw to the left * instead of drawing to the left and then incrementing @@ -603,8 +618,6 @@ public: if (widget >= WID_STL_CARGOSTART) { Rect br = r.Shrink(WidgetDimensions::scaled.bevel); const CargoSpec *cs = _sorted_cargo_specs[widget - WID_STL_CARGOSTART]; - int cg_ofst = HasBit(this->cargo_filter, cs->Index()) ? WidgetDimensions::scaled.pressed : 0; - br = br.Translate(cg_ofst, cg_ofst); GfxFillRect(br, cs->rating_colour); TextColour tc = GetContrastColour(cs->rating_colour); DrawString(br.left, br.right, CenterBounds(br.top, br.bottom, GetCharacterHeight(FS_SMALL)), cs->abbrev, tc, SA_HOR_CENTER, false, FS_SMALL); @@ -646,13 +659,13 @@ public: case WID_STL_AIRPLANE: case WID_STL_SHIP: if (_ctrl_pressed) { - ToggleBit(this->facilities, widget - WID_STL_TRAIN); + ToggleBit(this->filter.facilities, widget - WID_STL_TRAIN); this->ToggleWidgetLoweredState(widget); } else { - for (uint i : SetBitIterator(this->facilities)) { + for (uint i : SetBitIterator(this->filter.facilities)) { this->RaiseWidget(i + WID_STL_TRAIN); } - this->facilities = 1 << (widget - WID_STL_TRAIN); + this->filter.facilities = 1 << (widget - WID_STL_TRAIN); this->LowerWidget(widget); } this->stations.ForceRebuild(); @@ -664,7 +677,7 @@ public: this->LowerWidget(i); } - this->facilities = FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK; + this->filter.facilities = FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK; this->stations.ForceRebuild(); this->SetDirty(); break; @@ -675,8 +688,8 @@ public: } this->LowerWidget(WID_STL_NOCARGOWAITING); - this->cargo_filter = _cargo_mask; - this->include_empty = true; + this->filter.cargoes = _cargo_mask; + this->filter.include_empty = true; this->stations.ForceRebuild(); this->SetDirty(); break; @@ -693,15 +706,15 @@ public: case WID_STL_NOCARGOWAITING: if (_ctrl_pressed) { - this->include_empty = !this->include_empty; + this->filter.include_empty = !this->filter.include_empty; this->ToggleWidgetLoweredState(WID_STL_NOCARGOWAITING); } else { for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) { this->RaiseWidget(WID_STL_CARGOSTART + i); } - this->cargo_filter = 0; - this->include_empty = true; + this->filter.cargoes = 0; + this->filter.include_empty = true; this->LowerWidget(WID_STL_NOCARGOWAITING); } @@ -715,7 +728,7 @@ public: const CargoSpec *cs = _sorted_cargo_specs[widget - WID_STL_CARGOSTART]; if (_ctrl_pressed) { - ToggleBit(this->cargo_filter, cs->Index()); + ToggleBit(this->filter.cargoes, cs->Index()); this->ToggleWidgetLoweredState(widget); } else { for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) { @@ -723,10 +736,10 @@ public: } this->RaiseWidget(WID_STL_NOCARGOWAITING); - this->cargo_filter = 0; - this->include_empty = false; + this->filter.cargoes = 0; + this->filter.include_empty = false; - SetBit(this->cargo_filter, cs->Index()); + SetBit(this->filter.cargoes, cs->Index()); this->LowerWidget(widget); } this->stations.ForceRebuild(); @@ -743,7 +756,7 @@ public: this->stations.SetSortType(index); /* Display the current sort variant */ - this->GetWidget(WID_STL_SORTDROPBTN)->widget_data = this->sorter_names[this->stations.SortType()]; + this->GetWidget(WID_STL_SORTDROPBTN)->widget_data = CompanyStationsWindow::sorter_names[this->stations.SortType()]; this->SetDirty(); } @@ -779,11 +792,6 @@ public: } }; -Listing CompanyStationsWindow::last_sorting = {false, 0}; -byte CompanyStationsWindow::facilities = FACIL_TRAIN | FACIL_TRUCK_STOP | FACIL_BUS_STOP | FACIL_AIRPORT | FACIL_DOCK; -bool CompanyStationsWindow::include_empty = true; -const CargoTypes CompanyStationsWindow::cargo_filter_max = ALL_CARGOTYPES; -CargoTypes CompanyStationsWindow::cargo_filter = ALL_CARGOTYPES; btree::btree_map CompanyStationsWindow::station_vehicle_calling_counts; /* Available station sorting functions */ @@ -840,16 +848,16 @@ static const NWidgetPart _nested_company_stations_widgets[] = { NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(NWID_HORIZONTAL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRAIN), SetMinimalSize(14, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_TRAIN, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRUCK), SetMinimalSize(14, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_LORRY, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_BUS), SetMinimalSize(14, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_BUS, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_SHIP), SetMinimalSize(14, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_SHIP, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_AIRPLANE), SetMinimalSize(14, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_PLANE, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_STL_FACILALL), SetMinimalSize(14, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_ABBREV_ALL, STR_STATION_LIST_SELECT_ALL_FACILITIES), SetTextStyle(TC_BLACK, FS_SMALL), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRAIN), SetMinimalSize(14, 0), SetDataTip(STR_TRAIN, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_TRUCK), SetMinimalSize(14, 0), SetDataTip(STR_LORRY, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_BUS), SetMinimalSize(14, 0), SetDataTip(STR_BUS, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_SHIP), SetMinimalSize(14, 0), SetDataTip(STR_SHIP, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_AIRPLANE), SetMinimalSize(14, 0), SetDataTip(STR_PLANE, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE), SetFill(0, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_STL_FACILALL), SetMinimalSize(14, 0), SetDataTip(STR_ABBREV_ALL, STR_STATION_LIST_SELECT_ALL_FACILITIES), SetTextStyle(TC_BLACK, FS_SMALL), SetFill(0, 1), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(5, 0), SetFill(0, 1), EndContainer(), NWidgetFunction(CargoWidgets), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_NOCARGOWAITING), SetMinimalSize(14, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_ABBREV_NONE, STR_STATION_LIST_NO_WAITING_CARGO), SetTextStyle(TC_BLACK, FS_SMALL), SetFill(0, 1), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_STL_CARGOALL), SetMinimalSize(14, 0), SetMinimalTextLines(1, 0), SetDataTip(STR_ABBREV_ALL, STR_STATION_LIST_SELECT_ALL_TYPES), SetTextStyle(TC_BLACK, FS_SMALL), SetFill(0, 1), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_STL_NOCARGOWAITING), SetMinimalSize(14, 0), SetDataTip(STR_ABBREV_NONE, STR_STATION_LIST_NO_WAITING_CARGO), SetTextStyle(TC_BLACK, FS_SMALL), SetFill(0, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_STL_CARGOALL), SetMinimalSize(14, 0), SetDataTip(STR_ABBREV_ALL, STR_STATION_LIST_SELECT_ALL_TYPES), SetTextStyle(TC_BLACK, FS_SMALL), SetFill(0, 1), NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0), SetFill(1, 1), EndContainer(), EndContainer(), NWidget(NWID_HORIZONTAL), diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 3627a4e796..6547b6cdda 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -691,7 +691,7 @@ public: /* Set up a clipping region for the panel. */ DrawPixelInfo tmp_dpi; - if (!FillDrawPixelInfo(&tmp_dpi, fr.left, fr.top, fr.Width(), fr.Height())) return; + if (!FillDrawPixelInfo(&tmp_dpi, fr)) return; AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); diff --git a/src/strings.cpp b/src/strings.cpp index 6531a5956f..2ed924958d 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1568,9 +1568,9 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters &arg case SCC_TT_TICKS_LONG: // {TT_TICKS_LONG} if (_settings_client.gui.timetable_in_ticks) { auto tmp_params = MakeParameters(args.GetNextParameter()); - buff = FormatString(buff, GetStringPtr(STR_TIMETABLE_TICKS), tmp_params, last); + buff = FormatString(buff, GetStringPtr(STR_UNITS_TICKS), tmp_params, last); } else { - StringID str = _settings_time.time_in_minutes ? STR_TIMETABLE_MINUTES : STR_TIMETABLE_DAYS; + StringID str = _settings_time.time_in_minutes ? STR_TIMETABLE_MINUTES : STR_UNITS_DAYS; int64 ticks = args.GetNextParameter(); int64 ratio = DATE_UNIT_SIZE; int64 units = ticks / ratio; diff --git a/src/table/settings/pathfinding_settings.ini b/src/table/settings/pathfinding_settings.ini index 820c414536..9324a9508b 100644 --- a/src/table/settings/pathfinding_settings.ini +++ b/src/table/settings/pathfinding_settings.ini @@ -195,7 +195,7 @@ cat = SC_EXPERT [SDT_VAR] var = pf.npf.npf_max_search_nodes type = SLE_UINT -def = 10000 +def = AYSTAR_DEF_MAX_SEARCH_NODES min = 500 max = 100000 cat = SC_EXPERT @@ -352,7 +352,7 @@ cat = SC_EXPERT var = pf.yapf.max_search_nodes type = SLE_UINT from = SLV_28 -def = 10000 +def = AYSTAR_DEF_MAX_SEARCH_NODES min = 500 max = 1000000 cat = SC_EXPERT diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index e675bec49a..d5920b1858 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -557,7 +557,7 @@ void TextfileWindow::AfterLoadMarkdown() Rect fr = r.Shrink(WidgetDimensions::scaled.frametext); DrawPixelInfo new_dpi; - if (!FillDrawPixelInfo(&new_dpi, fr.left, fr.top, fr.Width(), fr.Height())) return; + if (!FillDrawPixelInfo(&new_dpi, fr)) return; AutoRestoreBackup dpi_backup(_cur_dpi, &new_dpi); /* Draw content (now coordinates given to DrawString* are local to the new clipping region). */ diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index feecc2f832..5fa3ba9b6f 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -799,7 +799,7 @@ struct TimetableWindow : GeneralVehicleWindow { * timetable at the given time. */ SetDParam(0, STR_JUST_DATE_WALLCLOCK_TINY); SetDParam(1, v->timetable_start); - DrawString(tr, STR_TIMETABLE_STATUS_START_AT); + DrawString(tr, STR_TIMETABLE_STATUS_START_AT_DATE); } else if (!HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) { /* We aren't running on a timetable yet, so how can we be "on time" * when we aren't even "on service"/"on duty"? */ @@ -907,7 +907,7 @@ struct TimetableWindow : GeneralVehicleWindow { this->set_start_date_all = v->orders->IsCompleteTimetable() && _ctrl_pressed; StringID str = STR_JUST_INT; SetDParam(0, _settings_time.NowInTickMinutes().ClockHHMM()); - ShowQueryString(str, STR_TIMETABLE_STARTING_DATE, 31, this, CS_NUMERAL, QSF_ACCEPT_UNCHANGED); + ShowQueryString(str, STR_TIMETABLE_START, 31, this, CS_NUMERAL, QSF_ACCEPT_UNCHANGED); } else { ShowSetDateWindow(this, v->index | (_ctrl_pressed ? 1U << 20 : 0), _scaled_date_ticks, _cur_year, _cur_year + 15, ChangeTimetableStartCallback); @@ -1192,7 +1192,7 @@ static const NWidgetPart _nested_timetable_widgets[] = { NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(NWID_VERTICAL, NC_EQUALSIZE), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_VT_START_DATE_SELECTION), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_START_DATE), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_STARTING_DATE, STR_TIMETABLE_STARTING_DATE_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_START_DATE), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_START, STR_TIMETABLE_START_TOOLTIP), NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_VT_ASSIGN_SCHEDULE), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_ASSIGN_SCHEDULE_DROP_DOWN, STR_TIMETABLE_ASSIGN_SCHEDULE_DROP_DOWN_TOOLTIP), EndContainer(), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_VT_CHANGE_TIME), SetResize(1, 0), SetFill(1, 1), SetDataTip(STR_TIMETABLE_CHANGE_TIME, STR_TIMETABLE_WAIT_TIME_TOOLTIP), diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index a48cadcea4..764da2f3e9 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -95,103 +95,22 @@ enum CallBackFunction { static CallBackFunction _last_started_action = CBF_NONE; ///< Last started user action. - /** - * Drop down list entry for showing a checked/unchecked toggle item. + * Company name list item, with company-colour icon, name, and lock components. */ -class DropDownListCheckedItem : public DropDownListStringItem { - uint checkmark_width; +class DropDownListCompanyItem : public DropDownIcon, true>> { public: - bool checked; - - DropDownListCheckedItem(StringID string, int result, bool masked, bool checked) : DropDownListStringItem(string, result, masked), checked(checked) - { - this->checkmark_width = GetStringBoundingBox(STR_JUST_CHECKMARK).width + WidgetDimensions::scaled.hsep_wide; - } - - uint Width() const override - { - return DropDownListStringItem::Width() + this->checkmark_width; - } - - void Draw(const Rect &r, bool sel, Colours) const override - { - bool rtl = _current_text_dir == TD_RTL; - Rect tr = r.Shrink(WidgetDimensions::scaled.dropdowntext, RectPadding::zero); - if (this->checked) { - DrawString(tr, STR_JUST_CHECKMARK, sel ? TC_WHITE : TC_BLACK); - } - DrawString(tr.Indent(this->checkmark_width, rtl), this->String(), sel ? TC_WHITE : TC_BLACK); - } -}; - -/** - * Drop down list entry for showing a company entry, with companies 'blob'. - */ -class DropDownListCompanyItem : public DropDownListItem { - Dimension icon_size; - Dimension lock_size; -public: - bool greyed; - - DropDownListCompanyItem(int result, bool masked, bool greyed) : DropDownListItem(result, masked), greyed(greyed) - { - this->icon_size = GetSpriteSize(SPR_COMPANY_ICON); - this->lock_size = GetSpriteSize(SPR_LOCK); - } - - bool Selectable() const override + DropDownListCompanyItem(CompanyID company, bool shaded) : DropDownIcon, true>>(SPR_COMPANY_ICON, COMPANY_SPRITE_COLOUR(company), NetworkCompanyIsPassworded(company) ? SPR_LOCK : SPR_EMPTY, PAL_NONE, STR_NULL, company, false, shaded) { - return true; - } - - uint Width() const override - { - CompanyID company = (CompanyID)this->result; SetDParam(0, company); SetDParam(1, company); - return GetStringBoundingBox(STR_COMPANY_NAME_COMPANY_NUM).width + this->icon_size.width + this->lock_size.width + WidgetDimensions::scaled.dropdowntext.Horizontal() + WidgetDimensions::scaled.hsep_wide; - } - - uint Height() const override - { - return std::max(std::max(this->icon_size.height, this->lock_size.height) + WidgetDimensions::scaled.imgbtn.Vertical(), (uint)GetCharacterHeight(FS_NORMAL)); - } - - void Draw(const Rect &r, bool sel, Colours) const override - { - CompanyID company = (CompanyID)this->result; - bool rtl = _current_text_dir == TD_RTL; - - /* It's possible the company is deleted while the dropdown is open */ - if (!Company::IsValidID(company)) return; - - Rect tr = r.Shrink(WidgetDimensions::scaled.dropdowntext, RectPadding::zero); - int icon_y = CenterBounds(r.top, r.bottom, icon_size.height); - int text_y = CenterBounds(r.top, r.bottom, GetCharacterHeight(FS_NORMAL)); - int lock_y = CenterBounds(r.top, r.bottom, lock_size.height); - - DrawCompanyIcon(company, tr.WithWidth(this->icon_size.width, rtl).left, icon_y); - if (NetworkCompanyIsPassworded(company)) { - DrawSprite(SPR_LOCK, PAL_NONE, tr.WithWidth(this->lock_size.width, !rtl).left, lock_y); - } - - SetDParam(0, company); - SetDParam(1, company); - TextColour col; - if (this->greyed) { - col = (sel ? TC_SILVER : TC_GREY) | TC_NO_SHADE; - } else { - col = sel ? TC_WHITE : TC_BLACK; - } - tr = tr.Indent(this->icon_size.width + WidgetDimensions::scaled.hsep_normal, rtl).Indent(this->lock_size.width + WidgetDimensions::scaled.hsep_normal, !rtl); - DrawString(tr.left, tr.right, text_y, STR_COMPANY_NAME_COMPANY_NUM, col); + this->SetString(GetString(STR_COMPANY_NAME_COMPANY_NUM)); } }; DropDownListItem *MakeCompanyDropDownListItem(CompanyID cid) { - return new DropDownListCompanyItem(cid, false, false); + return new DropDownListCompanyItem(cid, false); } /** @@ -219,7 +138,7 @@ static void PopupMainToolbarMenu(Window *w, int widget, const std::initializer_l int i = 0; for (StringID string : strings) { if (string == STR_NULL) { - list.push_back(std::make_unique(-1, false)); + list.push_back(std::make_unique(-1, false)); } else { list.push_back(std::make_unique(string, i, false)); i++; @@ -265,7 +184,7 @@ static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0) for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) { if (!Company::IsValidID(c)) continue; - list.push_back(std::make_unique(c, false, HasBit(grey, c))); + list.push_back(std::make_unique(c, HasBit(grey, c))); } PopupMainToolbarMenu(w, widget, std::move(list), _local_company == COMPANY_SPECTATOR ? (widget == WID_TN_COMPANIES ? CTMN_CLIENT_LIST : CTMN_SPECTATOR) : (int)_local_company); @@ -356,20 +275,20 @@ static CallBackFunction ToolbarOptionsClick(Window *w) list.push_back(std::make_unique(STR_SETTINGS_MENU_NEWGRF_SETTINGS, OME_NEWGRFSETTINGS, false)); list.push_back(std::make_unique(STR_SETTINGS_MENU_ZONING, OME_ZONING, false)); list.push_back(std::make_unique(STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS, OME_TRANSPARENCIES, false)); - list.push_back(std::make_unique(-1, false)); - list.push_back(std::make_unique(STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES, false, HasBit(_display_opt, DO_SHOW_TOWN_NAMES))); - list.push_back(std::make_unique(STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES, false, HasBit(_display_opt, DO_SHOW_STATION_NAMES))); - list.push_back(std::make_unique(STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES, false, HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES))); - list.push_back(std::make_unique(STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS, false, HasBit(_display_opt, DO_SHOW_SIGNS))); - list.push_back(std::make_unique(STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS, false, HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS))); + list.push_back(std::make_unique(-1, false)); + list.push_back(std::make_unique(HasBit(_display_opt, DO_SHOW_TOWN_NAMES), STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES, false)); + list.push_back(std::make_unique(HasBit(_display_opt, DO_SHOW_STATION_NAMES), STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES, false)); + list.push_back(std::make_unique(HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES), STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES, false)); + list.push_back(std::make_unique(HasBit(_display_opt, DO_SHOW_SIGNS), STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS, false)); + list.push_back(std::make_unique(HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS), STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS, false)); if (_settings_client.gui.allow_hiding_waypoint_labels) { - list.push_back(std::make_unique(STR_SETTINGS_MENU_SHOW_HIDDEN_SIGNS, OME_SHOW_HIDDEN_SIGNS, false, HasBit(_extra_display_opt, XDO_SHOW_HIDDEN_SIGNS))); + list.push_back(std::make_unique(HasBit(_extra_display_opt, XDO_SHOW_HIDDEN_SIGNS), STR_SETTINGS_MENU_SHOW_HIDDEN_SIGNS, OME_SHOW_HIDDEN_SIGNS, false)); } - list.push_back(std::make_unique(STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION, false, HasBit(_display_opt, DO_FULL_ANIMATION))); - list.push_back(std::make_unique(STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS, false, HasBit(_display_opt, DO_FULL_DETAIL))); - list.push_back(std::make_unique(STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS, false, IsTransparencySet(TO_HOUSES))); - list.push_back(std::make_unique(STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS, false, IsTransparencySet(TO_SIGNS))); - list.push_back(std::make_unique(STR_SETTINGS_MENU_MONEY_TEXT_EFFECTS, OME_SHOW_MONEYTEXT, false, HasBit(_extra_display_opt, XDO_SHOW_MONEY_TEXT_EFFECTS))); + list.push_back(std::make_unique(HasBit(_display_opt, DO_FULL_ANIMATION), STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION, false)); + list.push_back(std::make_unique(HasBit(_display_opt, DO_FULL_DETAIL), STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS, false)); + list.push_back(std::make_unique(IsTransparencySet(TO_HOUSES), STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS, false)); + list.push_back(std::make_unique(IsTransparencySet(TO_SIGNS), STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS, false)); + list.push_back(std::make_unique(HasBit(_extra_display_opt, XDO_SHOW_MONEY_TEXT_EFFECTS), STR_SETTINGS_MENU_MONEY_TEXT_EFFECTS, OME_SHOW_MONEYTEXT, false)); ShowDropDownList(w, std::move(list), 0, WID_TN_SETTINGS, 140, true); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); @@ -1348,7 +1267,7 @@ static CallBackFunction MenuClickHelp(int index) case HME_PICKER: return PlacePickerTool(); case HME_HELP: ShowHelpWindow(); break; case HME_CONSOLE: IConsoleSwitch(); break; - case HME_SCRIPT_DEBUG: ShowScriptDebugWindow(); break; + case HME_SCRIPT_DEBUG: ShowScriptDebugWindow(INVALID_COMPANY, _ctrl_pressed); break; case HME_SCREENSHOT: ShowScreenshotWindow(); break; case HME_FRAMERATE: ShowFramerateWindow(); break; case HME_MODIFIER_KEYS: ShowModifierKeyToggleWindow(); break; diff --git a/src/town.h b/src/town.h index d2156ab6a1..2bac82d8a5 100644 --- a/src/town.h +++ b/src/town.h @@ -156,7 +156,7 @@ struct Town : TownPool::PoolItem<&_town_pool> { if (this->cache.population == 0) return 0; // no population? no noise /* 3 is added (the noise of the lowest airport), so the user can at least build a small airfield. */ - return (this->cache.population / _settings_game.economy.town_noise_population[_settings_game.difficulty.town_council_tolerance]) + 3; + return ClampTo((this->cache.population / _settings_game.economy.town_noise_population[_settings_game.difficulty.town_council_tolerance]) + 3); } void UpdateVirtCoord(); diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 23ee6387b9..68b1334e21 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2074,7 +2074,7 @@ static bool GrowTown(Town *t) */ void UpdateTownRadius(Town *t) { - static const uint32 _town_squared_town_zone_radius_data[23][5] = { + static const uint32_t _town_squared_town_zone_radius_data[23][HZB_END] = { { 4, 0, 0, 0, 0}, // 0 { 16, 0, 0, 0, 0}, { 25, 0, 0, 0, 0}, @@ -2137,11 +2137,11 @@ void UpdateTownRadius(Town *t) /* Actually we are proportional to sqrt() but that's right because we are covering an area. * The offsets are to make sure the radii do not decrease in size when going from the table * to the calculated value.*/ - t->cache.squared_town_zone_radius[0] = mass * 15 - 40; - t->cache.squared_town_zone_radius[1] = mass * 9 - 15; - t->cache.squared_town_zone_radius[2] = 0; - t->cache.squared_town_zone_radius[3] = mass * 5 - 5; - t->cache.squared_town_zone_radius[4] = mass * 3 + 5; + t->cache.squared_town_zone_radius[HZB_TOWN_EDGE] = mass * 15 - 40; + t->cache.squared_town_zone_radius[HZB_TOWN_OUTSKIRT] = mass * 9 - 15; + t->cache.squared_town_zone_radius[HZB_TOWN_OUTER_SUBURB] = 0; + t->cache.squared_town_zone_radius[HZB_TOWN_INNER_SUBURB] = mass * 5 - 5; + t->cache.squared_town_zone_radius[HZB_TOWN_CENTRE] = mass * 3 + 5; } } @@ -4018,9 +4018,9 @@ static void ForAllStationsNearTown(Town *t, Func func) * The true radius is not stored or calculated anywhere, only the squared radius. */ /* The efficiency of this search might be improved for large towns and many stations on the map, * by using an integer square root approximation giving a value not less than the true square root. */ - uint search_radius = t->cache.squared_town_zone_radius[0] / 2; + uint search_radius = t->cache.squared_town_zone_radius[HZB_TOWN_EDGE] / 2; ForAllStationsRadius(t->xy, search_radius, [&](const Station * st) { - if (DistanceSquare(st->xy, t->xy) <= t->cache.squared_town_zone_radius[0]) { + if (DistanceSquare(st->xy, t->xy) <= t->cache.squared_town_zone_radius[HZB_TOWN_EDGE]) { func(st); } }); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index c08b152e24..457d53c1a9 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -38,6 +38,7 @@ #include "core/random_func.hpp" #include "town_kdtree.h" #include "zoom_func.h" +#include "hotkeys.h" #include "widgets/town_widget.h" #include "table/strings.h" @@ -48,7 +49,7 @@ TownKdtree _town_local_authority_kdtree(&Kdtree_TownXYFunc); -typedef GUIList GUITownList; +typedef GUIList GUITownList; static void PlaceProc_House(TileIndex tile); @@ -56,7 +57,7 @@ static const NWidgetPart _nested_town_authority_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_BROWN), NWidget(WWT_CAPTION, COLOUR_BROWN, WID_TA_CAPTION), SetDataTip(STR_LOCAL_AUTHORITY_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_TA_ZONE_BUTTON), SetMinimalSize(50, 0), SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical() + 2), SetDataTip(STR_LOCAL_AUTHORITY_ZONE, STR_LOCAL_AUTHORITY_ZONE_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_TA_ZONE_BUTTON), SetMinimalSize(50, 0), SetDataTip(STR_LOCAL_AUTHORITY_ZONE, STR_LOCAL_AUTHORITY_ZONE_TOOLTIP), NWidget(WWT_SHADEBOX, COLOUR_BROWN), NWidget(WWT_DEFSIZEBOX, COLOUR_BROWN), NWidget(WWT_STICKYBOX, COLOUR_BROWN), @@ -864,7 +865,7 @@ static const NWidgetPart _nested_town_directory_widgets[] = { NWidget(WWT_PANEL, COLOUR_BROWN, WID_TD_LIST), SetDataTip(0x0, STR_TOWN_DIRECTORY_LIST_TOOLTIP), SetFill(1, 0), SetResize(1, 1), SetScrollbar(WID_TD_SCROLLBAR), EndContainer(), NWidget(WWT_PANEL, COLOUR_BROWN), - NWidget(WWT_TEXT, COLOUR_BROWN, WID_TD_WORLD_POPULATION), SetPadding(2, 0, 2, 2), SetMinimalTextLines(1, 0), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TOWN_DIRECTORY_INFO, STR_NULL), + NWidget(WWT_TEXT, COLOUR_BROWN, WID_TD_WORLD_POPULATION), SetPadding(2, 0, 2, 2), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TOWN_DIRECTORY_INFO, STR_NULL), EndContainer(), EndContainer(), NWidget(NWID_VERTICAL), @@ -874,6 +875,11 @@ static const NWidgetPart _nested_town_directory_widgets[] = { EndContainer(), }; +/** Enum referring to the Hotkeys in the town directory window */ +enum TownDirectoryHotkeys { + TDHK_FOCUS_FILTER_BOX, ///< Focus the filter box +}; + /** Town directory window class. */ struct TownDirectoryWindow : public Window { private: @@ -887,7 +893,7 @@ private: StringFilter string_filter; ///< Filter for towns QueryString townname_editbox; ///< Filter editbox - GUITownList towns; + GUITownList towns{TownDirectoryWindow::last_sorting.order}; Scrollbar *vscroll; @@ -916,31 +922,31 @@ private: } /** Sort by town name */ - static bool TownNameSorter(const Town * const &a, const Town * const &b) + static bool TownNameSorter(const Town * const &a, const Town * const &b, const bool &) { return StrNaturalCompare(a->GetCachedName(), b->GetCachedName()) < 0; // Sort by name (natural sorting). } /** Sort by population (default descending, as big towns are of the most interest). */ - static bool TownPopulationSorter(const Town * const &a, const Town * const &b) + static bool TownPopulationSorter(const Town * const &a, const Town * const &b, const bool &order) { - uint32 a_population = a->cache.population; - uint32 b_population = b->cache.population; - if (a_population == b_population) return TownDirectoryWindow::TownNameSorter(a, b); + uint32_t a_population = a->cache.population; + uint32_t b_population = b->cache.population; + if (a_population == b_population) return TownDirectoryWindow::TownNameSorter(a, b, order); return a_population < b_population; } /** Sort by town rating */ - static bool TownRatingSorter(const Town * const &a, const Town * const &b) + static bool TownRatingSorter(const Town * const &a, const Town * const &b, const bool &order) { - bool before = !TownDirectoryWindow::last_sorting.order; // Value to get 'a' before 'b'. + bool before = !order; // Value to get 'a' before 'b'. /* Towns without rating are always after towns with rating. */ if (HasBit(a->have_ratings, _local_company)) { if (HasBit(b->have_ratings, _local_company)) { - int16 a_rating = a->ratings[_local_company]; - int16 b_rating = b->ratings[_local_company]; - if (a_rating == b_rating) return TownDirectoryWindow::TownNameSorter(a, b); + int16_t a_rating = a->ratings[_local_company]; + int16_t b_rating = b->ratings[_local_company]; + if (a_rating == b_rating) return TownDirectoryWindow::TownNameSorter(a, b, order); return a_rating < b_rating; } return before; @@ -948,8 +954,8 @@ private: if (HasBit(b->have_ratings, _local_company)) return !before; /* Sort unrated towns always on ascending town name. */ - if (before) return TownDirectoryWindow::TownNameSorter(a, b); - return TownDirectoryWindow::TownNameSorter(b, a); + if (before) return TownDirectoryWindow::TownNameSorter(a, b, order); + return TownDirectoryWindow::TownNameSorter(b, a, order); } public: @@ -1190,7 +1196,28 @@ public: this->towns.ForceResort(); } } + + EventState OnHotkey(int hotkey) override + { + switch (hotkey) { + case TDHK_FOCUS_FILTER_BOX: + this->SetFocusedWidget(WID_TD_FILTER); + SetFocusedWindow(this); // The user has asked to give focus to the text box, so make sure this window is focused. + break; + default: + return ES_NOT_HANDLED; + } + return ES_HANDLED; + } + + static HotkeyList hotkeys; +}; + +static Hotkey towndirectory_hotkeys[] = { + Hotkey('F', "focus_filter_box", TDHK_FOCUS_FILTER_BOX), + HOTKEY_LIST_END }; +HotkeyList TownDirectoryWindow::hotkeys("towndirectory", towndirectory_hotkeys); Listing TownDirectoryWindow::last_sorting = {false, 0}; @@ -1213,7 +1240,8 @@ static WindowDesc _town_directory_desc(__FILE__, __LINE__, WDP_AUTO, "list_towns", 208, 202, WC_TOWN_DIRECTORY, WC_NONE, 0, - std::begin(_nested_town_directory_widgets), std::end(_nested_town_directory_widgets) + std::begin(_nested_town_directory_widgets), std::end(_nested_town_directory_widgets), + &TownDirectoryWindow::hotkeys ); void ShowTownDirectory() diff --git a/src/tracerestrict_gui.cpp b/src/tracerestrict_gui.cpp index 4e6ada101e..257adf3e41 100644 --- a/src/tracerestrict_gui.cpp +++ b/src/tracerestrict_gui.cpp @@ -4043,7 +4043,7 @@ public: return; case WID_TRSL_FILTER_BY_CARGO: // Cargo filter dropdown - ShowDropDownList(this, this->BuildCargoDropDownList(), this->cargo_filter_criteria, widget); + ShowDropDownList(this, this->BuildCargoDropDownList(false), this->cargo_filter_criteria, widget); break; case WID_TRSL_ALL_VEHICLES: // All vehicles button @@ -4189,7 +4189,7 @@ public: break; case WID_TRSL_FILTER_BY_CARGO: // Select a cargo filter criteria - this->SetCargoFilterIndex(index); + this->SetCargoFilter(index); break; default: NOT_REACHED(); diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 3fa8ee24e7..4691f786d4 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -107,7 +107,7 @@ void DrawTrainImage(const Train *v, const Rect &r, VehicleID selection, EngineIm int highlight_r = 0; int max_width = r.Width(); - if (!FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) return; + if (!FillDrawPixelInfo(&tmp_dpi, r)) return; { AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi); diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index 0f5f568ef6..0966ba8fc3 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -128,17 +128,15 @@ class BuildTreesWindow : public Window public: BuildTreesWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc), tree_to_plant(-1), mode(PM_NORMAL) { - this->InitNested(window_number); + this->CreateNestedTree(); ResetObjectToPlace(); this->LowerWidget(WID_BT_MODE_NORMAL); - /* Show scenario editor tools in editor */ - auto *se_tools = this->GetWidget(WID_BT_SE_PANE); if (_game_mode != GM_EDITOR) { - se_tools->SetDisplayedPlane(SZSP_HORIZONTAL); - this->ReInit(); + this->GetWidget(WID_BT_SE_PANE)->SetDisplayedPlane(SZSP_HORIZONTAL); } + this->FinishInitNested(window_number); } void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 17df9f9456..4b97c71359 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -238,6 +238,14 @@ void BaseVehicleListWindow::BuildVehicleList() GenerateVehicleSortList(&this->vehicles, this->vli); + CargoTypes used = 0; + for (const Vehicle *v : this->vehicles) { + for (const Vehicle *u = v; u != nullptr; u = u->Next()) { + if (u->cargo_cap > 0) SetBit(used, u->cargo_type); + } + } + this->used_cargoes = used; + if (this->grouping == GB_NONE) { uint max_unitnumber = 0; for (auto it = this->vehicles.begin(); it != this->vehicles.end(); ++it) { @@ -289,11 +297,14 @@ static GUIVehicleGroupList::FilterFunction * const _filter_funcs[] = { &GroupCargoFilter, }; -/** Set cargo filter list item index. */ -void BaseVehicleListWindow::SetCargoFilterIndex(int index) +/** + * Set cargo filter for the vehicle group list. + * @param cid The cargo to be set. + */ +void BaseVehicleListWindow::SetCargoFilter(CargoID cid) { - if (this->cargo_filter_criteria != index) { - this->cargo_filter_criteria = index; + if (this->cargo_filter_criteria != cid) { + this->cargo_filter_criteria = cid; /* Deactivate filter if criteria is 'Show All', activate it otherwise. */ this->vehgroups.SetFilterState(this->cargo_filter_criteria != CF_ANY); this->vehgroups.SetFilterType(0); @@ -368,7 +379,12 @@ StringID BaseVehicleListWindow::GetCargoFilterLabel(CargoID cid) const } } -DropDownList BaseVehicleListWindow::BuildCargoDropDownList() const +/** + * Build drop down list for cargo filter selection. + * @param full If true, build list with all cargo types, instead of only used cargo types. + * @return Drop down list for cargo filter. + */ +DropDownList BaseVehicleListWindow::BuildCargoDropDownList(bool full) const { DropDownList list; @@ -380,8 +396,10 @@ DropDownList BaseVehicleListWindow::BuildCargoDropDownList() const list.push_back(std::make_unique(this->GetCargoFilterLabel(CF_NONE), CF_NONE, false)); /* Add cargos */ + Dimension d = GetLargestCargoIconSize(); for (const CargoSpec *cs : _sorted_cargo_specs) { - list.push_back(std::make_unique(cs->name, cs->Index(), false)); + if (!full && !HasBit(this->used_cargoes, cs->Index())) continue; + list.push_back(std::make_unique(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false, !HasBit(this->used_cargoes, cs->Index()))); } return list; @@ -2274,7 +2292,7 @@ public: break; case WID_VL_FILTER_BY_CARGO: - size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList()).width + padding.width); + size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width); break; case WID_VL_MANAGE_VEHICLES_DROPDOWN: { @@ -2409,7 +2427,7 @@ public: return; case WID_VL_FILTER_BY_CARGO: // Cargo filter dropdown - ShowDropDownList(this, this->BuildCargoDropDownList(), this->cargo_filter_criteria, widget); + ShowDropDownList(this, this->BuildCargoDropDownList(false), this->cargo_filter_criteria, widget); break; case WID_VL_LIST: { // Matrix to show vehicles @@ -2485,7 +2503,7 @@ public: break; case WID_VL_FILTER_BY_CARGO: - this->SetCargoFilterIndex(index); + this->SetCargoFilter(index); break; case WID_VL_MANAGE_VEHICLES_DROPDOWN: @@ -3890,10 +3908,9 @@ public: /* Draw the flag plus orders. */ bool rtl = (_current_text_dir == TD_RTL); uint icon_width = std::max({GetScaledSpriteSize(SPR_WARNING_SIGN).width, GetScaledSpriteSize(SPR_FLAG_VEH_STOPPED).width, GetScaledSpriteSize(SPR_FLAG_VEH_RUNNING).width}); - int lowered = this->IsWidgetLowered(widget) ? WidgetDimensions::scaled.pressed : 0; - Rect tr = r.Shrink(WidgetDimensions::scaled.framerect).Translate(lowered, lowered); + Rect tr = r.Shrink(WidgetDimensions::scaled.framerect); SpriteID image = ((v->vehstatus & VS_STOPPED) != 0) ? SPR_FLAG_VEH_STOPPED : (HasBit(v->vehicle_flags, VF_PATHFINDER_LOST)) ? SPR_WARNING_SIGN : SPR_FLAG_VEH_RUNNING; - DrawSpriteIgnorePadding(image, PAL_NONE, tr.WithWidth(icon_width, rtl), false, SA_CENTER); + DrawSpriteIgnorePadding(image, PAL_NONE, tr.WithWidth(icon_width, rtl), SA_CENTER); tr = tr.Indent(icon_width + WidgetDimensions::scaled.imgbtn.Horizontal(), rtl); DrawString(tr.left, tr.right, CenterBounds(tr.top, tr.bottom, GetCharacterHeight(FS_NORMAL)), str, text_colour, SA_HOR_CENTER); } diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index dcdb7ffb9d..1f787ecdf3 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -21,7 +21,7 @@ #include #include -typedef GUIList GUIVehicleList; +typedef GUIList GUIVehicleList; struct GUIVehicleGroup { VehicleList::const_iterator vehicles_begin; ///< Pointer to beginning element of this vehicle group. @@ -64,7 +64,7 @@ struct GUIVehicleGroup { } }; -typedef GUIList GUIVehicleGroupList; +typedef GUIList GUIVehicleGroupList; struct BaseVehicleListWindow : public Window { enum GroupBy : byte { @@ -88,6 +88,7 @@ public: VehicleID vehicle_sel; ///< Selected vehicle CargoID cargo_filter_criteria; ///< Selected cargo filter index uint order_arrow_width; ///< Width of the arrow in the small order list. + CargoTypes used_cargoes; typedef GUIVehicleGroupList::SortFunction VehicleGroupSortFunction; typedef GUIVehicleList::SortFunction VehicleIndividualSortFunction; @@ -130,11 +131,11 @@ public: void SortVehicleList(); void CountOwnVehicles(); void BuildVehicleList(); - void SetCargoFilterIndex(int index); + void SetCargoFilter(byte index); void SetCargoFilterArray(); void FilterVehicleList(); StringID GetCargoFilterLabel(CargoID cid) const; - DropDownList BuildCargoDropDownList() const; + DropDownList BuildCargoDropDownList(bool full) const; Dimension GetActionDropdownSize(bool show_autoreplace, bool show_group, bool show_template_replace, StringID change_order_str = 0); DropDownList BuildActionDropdownList(bool show_autoreplace, bool show_group, bool show_template_replace, StringID change_order_str = 0, bool show_create_group = false, bool consider_top_level = false); diff --git a/src/video/opengl.cpp b/src/video/opengl.cpp index d80d1cceac..d7c9c8ec3a 100644 --- a/src/video/opengl.cpp +++ b/src/video/opengl.cpp @@ -1267,23 +1267,23 @@ void OpenGLBackend::ReleaseAnimBuffer(const Rect &update_rect) } } -/* virtual */ Sprite *OpenGLBackend::Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) +/* virtual */ Sprite *OpenGLBackend::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) { /* Allocate and construct sprite data. */ 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_SPR_COUNT, sprite->colours); + new (gl_sprite) OpenGLSprite(sprite[ZOOM_LVL_NORMAL].width, sprite[ZOOM_LVL_NORMAL].height, sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font ? 1 : ZOOM_LVL_SPR_COUNT, sprite[ZOOM_LVL_NORMAL].colours); /* Upload texture data. */ - for (int i = 0; i < (sprite->type == SpriteType::Font ? 1 : ZOOM_LVL_SPR_COUNT); i++) { + for (int i = 0; i < (sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font ? 1 : ZOOM_LVL_SPR_COUNT); i++) { gl_sprite->Update(sprite[i].width, sprite[i].height, i, sprite[i].data); } - dest_sprite->height = sprite->height; - dest_sprite->width = sprite->width; - dest_sprite->x_offs = sprite->x_offs; - dest_sprite->y_offs = sprite->y_offs; + dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height; + dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width; + dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs; + dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs; dest_sprite->next = nullptr; dest_sprite->missing_zoom_levels = 0; diff --git a/src/video/opengl.h b/src/video/opengl.h index 14fe247eb9..921247cd30 100644 --- a/src/video/opengl.h +++ b/src/video/opengl.h @@ -108,7 +108,7 @@ public: /* SpriteEncoder */ uint GetSpriteAlignment() override { return 1u << (ZOOM_LVL_SPR_COUNT - 1); } - Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; + Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator) override; }; diff --git a/src/widget.cpp b/src/widget.cpp index c271524578..35e9ae6770 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -29,9 +29,9 @@ enum WidgetDrawDistances { /* WWT_IMGBTN(_2) */ WD_IMGBTN_LEFT = 1, ///< Left offset of the image in the button. - WD_IMGBTN_RIGHT = 2, ///< Right offset of the image in the button. + WD_IMGBTN_RIGHT = 1, ///< Right offset of the image in the button. WD_IMGBTN_TOP = 1, ///< Top offset of image in the button. - WD_IMGBTN_BOTTOM = 2, ///< Bottom offset of image in the button. + WD_IMGBTN_BOTTOM = 1, ///< Bottom offset of image in the button. /* WWT_INSET */ WD_INSET_LEFT = 2, ///< Left offset of string. @@ -150,11 +150,11 @@ const WidgetDimensions WidgetDimensions::unscaled = { {WD_CLOSEBOX_LEFT, WD_CLOSEBOX_TOP, WD_CLOSEBOX_RIGHT, WD_CLOSEBOX_BOTTOM}, ///< closebox {WD_CAPTIONTEXT_LEFT, WD_CAPTIONTEXT_TOP, WD_CAPTIONTEXT_RIGHT, WD_CAPTIONTEXT_BOTTOM}, ///< captiontext {WD_DROPDOWNTEXT_LEFT, WD_DROPDOWNTEXT_TOP, WD_DROPDOWNTEXT_RIGHT, WD_DROPDOWNTEXT_BOTTOM}, ///< dropdowntext + {WD_BEVEL_LEFT, WD_BEVEL_TOP * 2, WD_BEVEL_RIGHT, WD_BEVEL_BOTTOM * 2}, ///< dropdownmenu {20, 10, 20, 10}, ///< modalpopup {3, 3, 3, 3}, ///< picker {10, 8, 10, 8}, ///< sparse window padding - {10, 8, 10, 1}, ///< resizable sparse window padding - 1, ///< pressed + {10, 8, 10, 0}, ///< resizable sparse window padding 1, ///< vsep_picker WD_PAR_VSEP_NORMAL, ///< vsep_normal 4, ///< vsep_sparse @@ -225,9 +225,9 @@ void SetupWidgetDimensions() WidgetDimensions::scaled.closebox = ScaleGUITrad(WidgetDimensions::unscaled.closebox); WidgetDimensions::scaled.captiontext = ScaleGUITrad(WidgetDimensions::unscaled.captiontext); WidgetDimensions::scaled.dropdowntext = ScaleGUITrad(WidgetDimensions::unscaled.dropdowntext); + WidgetDimensions::scaled.dropdownlist = ScaleGUITrad(WidgetDimensions::unscaled.dropdownlist); WidgetDimensions::scaled.modalpopup = ScaleGUITrad(WidgetDimensions::unscaled.modalpopup); - WidgetDimensions::scaled.pressed = ScaleGUITrad(WidgetDimensions::unscaled.pressed); WidgetDimensions::scaled.vsep_normal = ScaleGUITrad(WidgetDimensions::unscaled.vsep_normal); WidgetDimensions::scaled.vsep_wide = ScaleGUITrad(WidgetDimensions::unscaled.vsep_wide); WidgetDimensions::scaled.hsep_normal = ScaleGUITrad(WidgetDimensions::unscaled.hsep_normal); @@ -453,7 +453,7 @@ void DrawFrameRect(int left, int top, int right, int bottom, Colours colour, Fra } } -void DrawSpriteIgnorePadding(SpriteID img, PaletteID pal, const Rect &r, bool clicked, StringAlignment align) +void DrawSpriteIgnorePadding(SpriteID img, PaletteID pal, const Rect &r, StringAlignment align) { Point offset; Dimension d = GetSpriteSize(img, &offset); @@ -461,8 +461,7 @@ void DrawSpriteIgnorePadding(SpriteID img, PaletteID pal, const Rect &r, bool cl d.height -= offset.y; Point p = GetAlignedPosition(r, d, align); - int o = clicked ? WidgetDimensions::scaled.pressed : 0; - DrawSprite(img, pal, p.x + o - offset.x, p.y + o - offset.y); + DrawSprite(img, pal, p.x - offset.x, p.y - offset.y); } /** @@ -470,7 +469,7 @@ void DrawSpriteIgnorePadding(SpriteID img, PaletteID pal, const Rect &r, bool cl * @param r Rectangle of the button. * @param type Widget type (#WWT_IMGBTN or #WWT_IMGBTN_2). * @param colour Colour of the button. - * @param clicked Button is lowered. + * @param clicked Button is clicked. * @param img Sprite to draw. * @param align Alignment of the sprite. */ @@ -480,14 +479,14 @@ static inline void DrawImageButtons(const Rect &r, WidgetType type, Colours colo DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE); if ((type & WWT_MASK) == WWT_IMGBTN_2 && clicked) img++; // Show different image when clicked for #WWT_IMGBTN_2. - DrawSpriteIgnorePadding(img, PAL_NONE, r, clicked, align); + DrawSpriteIgnorePadding(img, PAL_NONE, r, align); } /** * Draw the label-part of a widget. * @param r Rectangle of the label background. * @param type Widget type (#WWT_TEXTBTN, #WWT_TEXTBTN_2, or #WWT_LABEL). - * @param clicked Label is rendered lowered. + * @param clicked Label is clicked. * @param colour Colour of the text. * @param str Text to draw. * @param align Alignment of the text. @@ -499,8 +498,7 @@ static inline void DrawLabel(const Rect &r, WidgetType type, bool clicked, TextC if ((type & WWT_MASK) == WWT_TEXTBTN_2 && clicked) str++; Dimension d = GetStringBoundingBox(str, fs); Point p = GetAlignedPosition(r, d, align); - int o = clicked ? WidgetDimensions::scaled.pressed : 0; - DrawString(r.left + o, r.right + o, p.y + o, str, colour, align, false, fs); + DrawString(r.left, r.right, p.y, str, colour, align, false, fs); } /** @@ -779,11 +777,16 @@ static inline void DrawDebugBox(const Rect &r, Colours colour, bool clicked) * @param colour Colour of the resize box. * @param at_left Resize box is at left-side of the window, * @param clicked Box is lowered. + * @param bevel Draw bevel iff set. */ -static inline void DrawResizeBox(const Rect &r, Colours colour, bool at_left, bool clicked) +static inline void DrawResizeBox(const Rect &r, Colours colour, bool at_left, bool clicked, bool bevel) { - DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE); - DrawSpriteIgnorePadding(at_left ? SPR_WINDOW_RESIZE_LEFT : SPR_WINDOW_RESIZE_RIGHT, PAL_NONE, r.Shrink(ScaleGUITrad(2)), clicked, at_left ? (SA_LEFT | SA_BOTTOM | SA_FORCE) : (SA_RIGHT | SA_BOTTOM | SA_FORCE)); + if (bevel) { + DrawFrameRect(r.left, r.top, r.right, r.bottom, colour, (clicked) ? FR_LOWERED : FR_NONE); + } else if (clicked) { + GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), _colour_gradient[colour][6]); + } + DrawSpriteIgnorePadding(at_left ? SPR_WINDOW_RESIZE_LEFT : SPR_WINDOW_RESIZE_RIGHT, PAL_NONE, r.Shrink(ScaleGUITrad(2)), at_left ? (SA_LEFT | SA_BOTTOM | SA_FORCE) : (SA_RIGHT | SA_BOTTOM | SA_FORCE)); } /** @@ -835,8 +838,8 @@ void DrawCaption(const Rect &r, Colours colour, Owner owner, TextColour text_col * Draw a button with a dropdown (#WWT_DROPDOWN and #NWID_BUTTON_DROPDOWN). * @param r Rectangle containing the widget. * @param colour Background colour of the widget. - * @param clicked_button The button-part is lowered. - * @param clicked_dropdown The drop-down part is lowered. + * @param clicked_button The button-part is clicked. + * @param clicked_dropdown The drop-down part is clicked. * @param str Text of the button. * @param align Alignment of the text within the dropdown. * @@ -850,15 +853,13 @@ static inline void DrawButtonDropdown(const Rect &r, Colours colour, bool clicke DrawFrameRect(r.left, r.top, r.right - dd_width, r.bottom, colour, clicked_button ? FR_LOWERED : FR_NONE); DrawImageButtons(r.WithWidth(dd_width, true), WWT_DROPDOWN, colour, clicked_dropdown, SPR_ARROW_DOWN, SA_CENTER); if (str != STR_NULL) { - int o = clicked_button ? WidgetDimensions::scaled.pressed : 0; - DrawString(r.left + WidgetDimensions::scaled.dropdowntext.left + o, r.right - dd_width - WidgetDimensions::scaled.dropdowntext.right + o, CenterBounds(r.top, r.bottom, GetCharacterHeight(FS_NORMAL)) + o, str, TC_BLACK, align); + DrawString(r.left + WidgetDimensions::scaled.dropdowntext.left, r.right - dd_width - WidgetDimensions::scaled.dropdowntext.right, CenterBounds(r.top, r.bottom, GetCharacterHeight(FS_NORMAL)), str, TC_BLACK, align); } } else { DrawFrameRect(r.left + dd_width, r.top, r.right, r.bottom, colour, clicked_button ? FR_LOWERED : FR_NONE); DrawImageButtons(r.WithWidth(dd_width, false), WWT_DROPDOWN, colour, clicked_dropdown, SPR_ARROW_DOWN, SA_CENTER); if (str != STR_NULL) { - int o = clicked_button ? WidgetDimensions::scaled.pressed : 0; - DrawString(r.left + dd_width + WidgetDimensions::scaled.dropdowntext.left + o, r.right - WidgetDimensions::scaled.dropdowntext.right + o, CenterBounds(r.top, r.bottom, GetCharacterHeight(FS_NORMAL)) + o, str, TC_BLACK, align); + DrawString(r.left + dd_width + WidgetDimensions::scaled.dropdowntext.left, r.right - WidgetDimensions::scaled.dropdowntext.right, CenterBounds(r.top, r.bottom, GetCharacterHeight(FS_NORMAL)), str, TC_BLACK, align); } } } @@ -908,7 +909,7 @@ void Window::DrawSortButtonState(int widget, SortButtonState state) const /* Sort button uses the same sprites as vertical scrollbar */ Dimension dim = NWidgetScrollbar::GetVerticalDimension(); - DrawSpriteIgnorePadding(state == SBS_DOWN ? SPR_ARROW_DOWN : SPR_ARROW_UP, PAL_NONE, r.WithWidth(dim.width, _current_text_dir == TD_LTR), this->IsWidgetLowered(widget), SA_CENTER); + DrawSpriteIgnorePadding(state == SBS_DOWN ? SPR_ARROW_DOWN : SPR_ARROW_UP, PAL_NONE, r.WithWidth(dim.width, _current_text_dir == TD_LTR), SA_CENTER); } /** @@ -1534,10 +1535,13 @@ void NWidgetStacked::FillDirtyWidgets(std::vector &dirty_widgets) /** * Select which plane to show (for #NWID_SELECTION only). * @param plane Plane number to display. + * @return true iff the shown plane changed. */ -void NWidgetStacked::SetDisplayedPlane(int plane) +bool NWidgetStacked::SetDisplayedPlane(int plane) { + if (this->shown_plane == plane) return false; this->shown_plane = plane; + return true; } NWidgetPIPContainer::NWidgetPIPContainer(WidgetType tp, NWidContainerFlags flags) : NWidgetContainer(tp) @@ -2810,7 +2814,7 @@ NWidgetLeaf::NWidgetLeaf(WidgetType tp, Colours colour, int index, uint32 data, this->SetFill(1, 0); this->SetResize(1, 0); this->SetMinimalSize(0, WD_CAPTION_HEIGHT); - this->SetMinimalTextLines(1, WidgetDimensions::unscaled.framerect.Vertical(), FS_NORMAL); + this->SetMinimalTextLines(1, WidgetDimensions::unscaled.captiontext.Vertical(), FS_NORMAL); this->SetDataTip(data, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS); break; @@ -2841,7 +2845,7 @@ NWidgetLeaf::NWidgetLeaf(WidgetType tp, Colours colour, int index, uint32 data, case WWT_RESIZEBOX: this->SetFill(0, 0); this->SetMinimalSize(WD_RESIZEBOX_WIDTH, 12); - this->SetDataTip(STR_NULL, STR_TOOLTIP_RESIZE); + this->SetDataTip(RWV_SHOW_BEVEL, STR_TOOLTIP_RESIZE); break; case WWT_CLOSEBOX: @@ -3149,8 +3153,7 @@ void NWidgetLeaf::Draw(const Window *w) break; case WWT_RESIZEBOX: - assert(this->widget_data == 0); - DrawResizeBox(r, this->colour, this->pos_x < (w->width / 2), !!(w->flags & WF_SIZING)); + DrawResizeBox(r, this->colour, this->pos_x < (w->width / 2), !!(w->flags & WF_SIZING), this->widget_data == 0); break; case WWT_CLOSEBOX: diff --git a/src/widget_type.h b/src/widget_type.h index 5f1bbdf163..38bdd7a998 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -39,6 +39,12 @@ enum ArrowWidgetValues { AWV_RIGHT, ///< Force the arrow to the right }; +/** WidgetData values for a resize box widget. */ +enum ResizeWidgetValues { + RWV_SHOW_BEVEL, ///< Bevel of resize box is shown. + RWV_HIDE_BEVEL, ///< Bevel of resize box is hidden. +}; + /** * Window widget types, nested widget types, and nested widget part types. */ @@ -482,7 +488,7 @@ public: NWidgetCore *GetWidgetFromPos(int x, int y) override; void FillDirtyWidgets(std::vector &dirty_widgets) override; - void SetDisplayedPlane(int plane); + bool SetDisplayedPlane(int plane); int shown_plane; ///< Plane being displayed (for #NWID_SELECTION only). int index; ///< If non-negative, index in the #Window::nested_array. diff --git a/src/widgets/ai_widget.h b/src/widgets/ai_widget.h index 3753941609..964026ff79 100644 --- a/src/widgets/ai_widget.h +++ b/src/widgets/ai_widget.h @@ -27,7 +27,7 @@ enum AIConfigWidgets { WID_AIC_MOVE_DOWN, ///< Move down button. WID_AIC_CHANGE, ///< Select another AI button. WID_AIC_CONFIGURE, ///< Change AI settings button. - WID_AIC_CLOSE, ///< Close window button. + WID_AIC_OPEN_URL, ///< Open AI URL. WID_AIC_TEXTFILE, ///< Open AI readme, changelog (+1) or license (+2). WID_AIC_CONTENT_DOWNLOAD = WID_AIC_TEXTFILE + TFT_CONTENT_END, ///< Download content button. }; diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index 0a309c14d1..8a65c3968c 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -21,85 +21,9 @@ #include "../safeguards.h" -void DropDownListItem::Draw(const Rect &r, bool, Colours bg_colour) const -{ - int c1 = _colour_gradient[bg_colour][3]; - int c2 = _colour_gradient[bg_colour][7]; - - int mid = CenterBounds(r.top, r.bottom, 0); - GfxFillRect(r.left, mid - WidgetDimensions::scaled.bevel.bottom, r.right, mid - 1, c1); - GfxFillRect(r.left, mid, r.right, mid + WidgetDimensions::scaled.bevel.top - 1, c2); -} - -DropDownListStringItem::DropDownListStringItem(StringID string, int result, bool masked) : DropDownListItem(result, masked), string(GetString(string)) -{ -} - -DropDownListStringItem::DropDownListStringItem(const std::string &string, int result, bool masked) : DropDownListItem(result, masked) -{ - /* A raw string may contain parsable tokens, so it needs to be passed through GetString. */ - SetDParamStr(0, string); - this->string = GetString(STR_JUST_RAW_STRING); -} - -uint DropDownListStringItem::Width() const -{ - return GetStringBoundingBox(this->String()).width + WidgetDimensions::scaled.dropdowntext.Horizontal(); -} - -void DropDownListStringItem::Draw(const Rect &r, bool sel, Colours) const -{ - Rect ir = r.Shrink(WidgetDimensions::scaled.dropdowntext); - DrawString(ir.left, ir.right, r.top, this->String(), (sel ? TC_WHITE : TC_BLACK) | this->colour_flags); -} - -/** - * Natural sorting comparator function for DropDownList::sort(). - * @param first Left side of comparison. - * @param second Right side of comparison. - * @return true if \a first precedes \a second. - * @warning All items in the list need to be derivates of DropDownListStringItem. - */ -/* static */ bool DropDownListStringItem::NatSortFunc(std::unique_ptr const &first, std::unique_ptr const &second) -{ - std::string str1 = static_cast(first.get())->String(); - std::string str2 = static_cast(second.get())->String(); - return StrNaturalCompare(str1, str2) < 0; -} - -DropDownListIconItem::DropDownListIconItem(SpriteID sprite, PaletteID pal, StringID string, int result, bool masked) : DropDownListStringItem(string, result, masked), sprite(sprite), pal(pal) -{ - this->dim = GetSpriteSize(sprite); - this->sprite_y = dim.height; -} - -uint DropDownListIconItem::Height() const -{ - return std::max(this->dim.height, (uint)GetCharacterHeight(FS_NORMAL)); -} - -uint DropDownListIconItem::Width() const -{ - return DropDownListStringItem::Width() + this->dim.width + WidgetDimensions::scaled.hsep_wide; -} - -void DropDownListIconItem::Draw(const Rect &r, bool sel, Colours) const -{ - bool rtl = _current_text_dir == TD_RTL; - Rect ir = r.Shrink(WidgetDimensions::scaled.dropdowntext); - Rect tr = ir.Indent(this->dim.width + WidgetDimensions::scaled.hsep_normal, rtl); - DrawSprite(this->sprite, this->pal, ir.WithWidth(this->dim.width, rtl).left, CenterBounds(r.top, r.bottom, this->sprite_y)); - DrawString(tr.left, tr.right, CenterBounds(r.top, r.bottom, GetCharacterHeight(FS_NORMAL)), this->String(), (sel ? TC_WHITE : TC_BLACK) | this->colour_flags); -} - -void DropDownListIconItem::SetDimension(Dimension d) -{ - this->dim = d; -} - static const NWidgetPart _nested_dropdown_menu_widgets[] = { NWidget(NWID_HORIZONTAL), - NWidget(WWT_PANEL, COLOUR_END, WID_DM_ITEMS), SetMinimalSize(1, 1), SetScrollbar(WID_DM_SCROLL), EndContainer(), + NWidget(WWT_PANEL, COLOUR_END, WID_DM_ITEMS), SetScrollbar(WID_DM_SCROLL), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_DM_SHOW_SCROLL), NWidget(NWID_VSCROLLBAR, COLOUR_END, WID_DM_SCROLL), EndContainer(), @@ -118,71 +42,54 @@ struct DropdownWindow : Window { WindowClass parent_wnd_class; ///< Parent window class. WindowNumber parent_wnd_num; ///< Parent window number. int parent_button; ///< Parent widget number where the window is dropped from. + Rect wi_rect; ///< Rect of the button that opened the dropdown. const DropDownList list; ///< List with dropdown menu items. - int selected_index; ///< Index of the selected item in the list. - byte click_delay; ///< Timer to delay selection. - bool drag_mode; + int selected_result; ///< Result value of the selected item in the list. + byte click_delay = 0; ///< Timer to delay selection. + bool drag_mode = true; bool instant_close; ///< Close the window when the mouse button is raised. - int scrolling; ///< If non-zero, auto-scroll the item list (one time). + int scrolling = 0; ///< If non-zero, auto-scroll the item list (one time). GUITimer scrolling_timer; ///< Timer for auto-scroll of the item list. Point position; ///< Position of the topleft corner of the window. Scrollbar *vscroll; DropDownSyncFocus sync_parent_focus; ///< Call parent window's OnFocus[Lost](). + Dimension items_dim; ///< Calculated cropped and padded dimension for the items widget. + /** * Create a dropdown menu. * @param parent Parent window. * @param list Dropdown item list. - * @param selected Index of the selected item in the list. + * @param selected Initial selected result of the list. * @param button Widget of the parent window doing the dropdown. + * @param wi_rect Rect of the button that opened the dropdown. * @param instant_close Close the window when the mouse button is raised. - * @param position Topleft position of the dropdown menu window. - * @param size Size of the dropdown menu window. * @param wi_colour Colour of the parent widget. - * @param scroll Dropdown menu has a scrollbar. */ - DropdownWindow(Window *parent, DropDownList &&list, int selected, int button, bool instant_close, const Point &position, const Dimension &size, Colours wi_colour, bool scroll, DropDownSyncFocus sync_parent_focus) - : Window(&_dropdown_desc), list(std::move(list)) + DropdownWindow(Window *parent, DropDownList &&list, int selected, int button, const Rect wi_rect, bool instant_close, Colours wi_colour, DropDownSyncFocus sync_parent_focus) + : Window(&_dropdown_desc) + , parent_button(button) + , wi_rect(wi_rect) + , list(std::move(list)) + , selected_result(selected) + , instant_close(instant_close) + , sync_parent_focus(sync_parent_focus) { assert(!this->list.empty()); - this->position = position; this->parent_wnd_class = parent->window_class; this->parent_wnd_num = parent->window_number; - this->sync_parent_focus = sync_parent_focus; this->CreateNestedTree(); + this->GetWidget(WID_DM_ITEMS)->colour = wi_colour; + this->GetWidget(WID_DM_SCROLL)->colour = wi_colour; this->vscroll = this->GetScrollbar(WID_DM_SCROLL); - - uint items_width = size.width - (scroll ? NWidgetScrollbar::GetVerticalDimension().width : 0); - NWidgetCore *nwi = this->GetWidget(WID_DM_ITEMS); - nwi->SetMinimalSizeAbsolute(items_width, size.height + WidgetDimensions::scaled.fullbevel.Vertical() * 2); - nwi->colour = wi_colour; - - nwi = this->GetWidget(WID_DM_SCROLL); - nwi->colour = wi_colour; - - this->GetWidget(WID_DM_SHOW_SCROLL)->SetDisplayedPlane(scroll ? 0 : SZSP_NONE); + this->UpdateSizeAndPosition(parent); this->FinishInitNested(0); CLRBITS(this->flags, WF_WHITE_BORDER); - /* Total length of list */ - int list_height = 0; - for (const auto &item : this->list) { - list_height += item->Height(); - } - - /* Capacity is the average number of items visible */ - this->vscroll->SetCapacity(size.height * this->list.size() / list_height); - this->vscroll->SetCount(this->list.size()); - - this->parent_button = button; - this->selected_index = selected; - this->click_delay = 0; - this->drag_mode = true; - this->instant_close = instant_close; this->scrolling_timer = GUITimer(MILLISECONDS_PER_TICK); } @@ -198,14 +105,81 @@ struct DropdownWindow : Window { Point pt = _cursor.pos; pt.x -= w2->left; pt.y -= w2->top; - w2->OnDropdownClose(pt, this->parent_button, this->selected_index, this->instant_close); + w2->OnDropdownClose(pt, this->parent_button, this->selected_result, this->instant_close); if (_focused_window == this) { SetFocusedWindow(w2); } } } - virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override + /** + * Fit dropdown list into available height, rounding to average item size. Width is adjusted if scrollbar is present. + * @param[in,out] desired Desired dimensions of dropdown list. + * @param list Dimensions of the list itself, without padding or cropping. + * @param available_height Available height to fit list within. + */ + void FitAvailableHeight(Dimension &desired, const Dimension &list, uint available_height) + { + if (desired.height < available_height) return; + + /* If the dropdown doesn't fully fit, we a need a dropdown. */ + uint avg_height = list.height / (uint)this->list.size(); + uint rows = std::max((available_height - WidgetDimensions::scaled.dropdownlist.Vertical()) / avg_height, 1U); + + desired.width = std::max(list.width, desired.width - NWidgetScrollbar::GetVerticalDimension().width); + desired.height = rows * avg_height + WidgetDimensions::scaled.dropdownlist.Vertical(); + } + + /** + * Update size and position of window to fit dropdown list into available space. + */ + void UpdateSizeAndPosition(Window *parent) + { + Rect button_rect = this->wi_rect.Translate(parent->left, parent->top); + + /* Get the dimensions required for the list. */ + Dimension list_dim = GetDropDownListDimension(this->list); + + /* Set up dimensions for the items widget. */ + Dimension widget_dim = list_dim; + widget_dim.width += WidgetDimensions::scaled.dropdownlist.Horizontal(); + widget_dim.height += WidgetDimensions::scaled.dropdownlist.Vertical(); + + /* Width should match at least the width of the parent widget. */ + widget_dim.width = std::max(widget_dim.width, button_rect.Width()); + + /* Available height below (or above, if the dropdown is placed above the widget). */ + uint available_height_below = std::max(GetMainViewBottom() - button_rect.bottom - 1, 0); + uint available_height_above = std::max(button_rect.top - 1 - GetMainViewTop(), 0); + + /* Is it better to place the dropdown above the widget? */ + if (widget_dim.height > available_height_below && available_height_above > available_height_below) { + FitAvailableHeight(widget_dim, list_dim, available_height_above); + this->position.y = button_rect.top - widget_dim.height; + } else { + FitAvailableHeight(widget_dim, list_dim, available_height_below); + this->position.y = button_rect.bottom + 1; + } + + this->position.x = (_current_text_dir == TD_RTL) ? button_rect.right + 1 - (int)widget_dim.width : button_rect.left; + + this->items_dim = widget_dim; + this->GetWidget(WID_DM_SHOW_SCROLL)->SetDisplayedPlane(list_dim.height > widget_dim.height ? 0 : SZSP_NONE); + + /* Capacity is the average number of items visible */ + this->vscroll->SetCapacity((widget_dim.height - WidgetDimensions::scaled.dropdownlist.Vertical()) * this->list.size() / list_dim.height); + this->vscroll->SetCount(this->list.size()); + + /* If the dropdown is positioned above the parent widget, start selection at the bottom. */ + if (this->position.y < button_rect.top && list_dim.height > widget_dim.height) this->vscroll->UpdatePosition(INT_MAX); + } + + void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + { + if (widget == WID_DM_ITEMS) *size = this->items_dim; + } + + Point OnInitialPosition([[maybe_unused]] int16_t sm_width, [[maybe_unused]] int16_t sm_height, [[maybe_unused]] int window_number) override { return this->position; } @@ -219,8 +193,8 @@ struct DropdownWindow : Window { { if (GetWidgetFromPos(this, _cursor.pos.x - this->left, _cursor.pos.y - this->top) < 0) return false; - const Rect &r = this->GetWidget(WID_DM_ITEMS)->GetCurrentRect().Shrink(WidgetDimensions::scaled.fullbevel); - int y = _cursor.pos.y - this->top - r.top - WidgetDimensions::scaled.fullbevel.top; + const Rect &r = this->GetWidget(WID_DM_ITEMS)->GetCurrentRect().Shrink(WidgetDimensions::scaled.dropdownlist); + int y = _cursor.pos.y - this->top - r.top; int pos = this->vscroll->GetPosition(); for (const auto &item : this->list) { @@ -247,7 +221,7 @@ struct DropdownWindow : Window { Colours colour = this->GetWidget(widget)->colour; - Rect ir = r.Shrink(WidgetDimensions::scaled.fullbevel).Shrink(RectPadding::zero, WidgetDimensions::scaled.fullbevel); + Rect ir = r.Shrink(WidgetDimensions::scaled.dropdownlist); int y = ir.top; int pos = this->vscroll->GetPosition(); for (const auto &item : this->list) { @@ -257,14 +231,12 @@ struct DropdownWindow : Window { if (--pos >= 0) continue; if (y + item_height - 1 <= ir.bottom) { - bool selected = (this->selected_index == item->result); - if (selected) GfxFillRect(ir.left, y, ir.right, y + item_height - 1, PC_BLACK); + Rect full{ir.left, y, ir.right, y + item_height - 1}; - item->Draw({ir.left, y, ir.right, y + item_height - 1}, selected, colour); + bool selected = (this->selected_result == item->result) && item->Selectable(); + if (selected) GfxFillRect(full, PC_BLACK); - if (item->masked) { - GfxFillRect(ir.left, y, ir.right, y + item_height - 1, _colour_gradient[colour][5], FILLRECT_CHECKER); - } + item->Draw(full, full.Shrink(WidgetDimensions::scaled.dropdowntext, RectPadding::zero), selected, colour); } y += item_height; } @@ -276,7 +248,7 @@ struct DropdownWindow : Window { int item; if (this->GetDropDownItem(item)) { this->click_delay = 4; - this->selected_index = item; + this->selected_result = item; this->SetDirty(); } } @@ -307,7 +279,7 @@ struct DropdownWindow : Window { this->window_class = WC_INVALID; this->SetDirty(); - w2->OnDropdownSelect(this->parent_button, this->selected_index); + w2->OnDropdownSelect(this->parent_button, this->selected_result); this->Close(); return; } @@ -336,8 +308,8 @@ struct DropdownWindow : Window { if (!this->GetDropDownItem(item)) return; } - if (this->selected_index != item) { - this->selected_index = item; + if (this->selected_result != item) { + this->selected_result = item; this->SetDirty(); } } @@ -372,6 +344,7 @@ Dimension GetDropDownListDimension(const DropDownList &list) dim.height += item->Height(); dim.width = std::max(dim.width, item->Width()); } + dim.width += WidgetDimensions::scaled.dropdowntext.Horizontal(); return dim; } @@ -388,66 +361,8 @@ Dimension GetDropDownListDimension(const DropDownList &list) */ void ShowDropDownListAt(Window *w, DropDownList &&list, int selected, int button, Rect wi_rect, Colours wi_colour, bool instant_close, DropDownSyncFocus sync_parent_focus) { - CloseWindowById(WC_DROPDOWN_MENU, 0); - - /* The preferred position is just below the dropdown calling widget */ - int top = w->top + wi_rect.bottom + 1; - - /* The preferred width equals the calling widget */ - uint width = wi_rect.Width(); - - /* Get the height and width required for the list. */ - Dimension dim = GetDropDownListDimension(list); - dim.width += WidgetDimensions::scaled.fullbevel.Horizontal(); - - /* Scrollbar needed? */ - bool scroll = false; - - /* Is it better to place the dropdown above the widget? */ - bool above = false; - - /* Available height below (or above, if the dropdown is placed above the widget). */ - uint available_height = std::max(GetMainViewBottom() - top - (int)WidgetDimensions::scaled.fullbevel.Vertical() * 2, 0); - - /* If the dropdown doesn't fully fit below the widget... */ - if (dim.height > available_height) { - - uint available_height_above = std::max(w->top + wi_rect.top - GetMainViewTop() - (int)WidgetDimensions::scaled.fullbevel.Vertical() * 2, 0); - - /* Put the dropdown above if there is more available space. */ - if (available_height_above > available_height) { - above = true; - available_height = available_height_above; - } - - /* If the dropdown doesn't fully fit, we need a dropdown. */ - if (dim.height > available_height) { - scroll = true; - uint avg_height = dim.height / (uint)list.size(); - - /* Fit the list; create at least one row, even if there is no height available. */ - uint rows = std::max(available_height / avg_height, 1); - dim.height = rows * avg_height; - - /* Add space for the scrollbar. */ - dim.width += NWidgetScrollbar::GetVerticalDimension().width; - } - - /* Set the top position if needed. */ - if (above) { - top = w->top + wi_rect.top - dim.height - WidgetDimensions::scaled.fullbevel.Vertical() * 2; - } - } - - dim.width = std::max(width, dim.width); - - Point dw_pos = { w->left + (_current_text_dir == TD_RTL ? wi_rect.right + 1 - (int)width : wi_rect.left), top}; - DropdownWindow *dropdown = new DropdownWindow(w, std::move(list), selected, button, instant_close, dw_pos, dim, wi_colour, scroll, sync_parent_focus); - - /* The dropdown starts scrolling downwards when opening it towards - * the top and holding down the mouse button. It can be fooled by - * opening the dropdown scrolled to the very bottom. */ - if (above && scroll) dropdown->vscroll->UpdatePosition(INT_MAX); + CloseWindowByClass(WC_DROPDOWN_MENU); + new DropdownWindow(w, std::move(list), selected, button, wi_rect, instant_close, wi_colour, sync_parent_focus); } /** diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index beae42ce66..d4f36c281e 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -12,7 +12,11 @@ #include "../window_type.h" #include "../gfx_func.h" -#include "table/strings.h" +#include "../gfx_type.h" +#include "../string_func.h" +#include "../strings_func.h" +#include "../table/strings.h" +#include "../window_gui.h" #include enum DropDownSyncFocus { @@ -23,60 +27,193 @@ enum DropDownSyncFocus { }; /** - * Base list item class from which others are derived. If placed in a list it - * will appear as a horizontal line in the menu. + * Base list item class from which others are derived. */ class DropDownListItem { public: - int result; ///< Result code to return to window on selection - bool masked; ///< Masked and unselectable item + int result; ///< Result value to return to window on selection. + bool masked; ///< Masked and unselectable item. + bool shaded; ///< Shaded item, affects text colour. + TextColour colour_flags = TC_BEGIN; - DropDownListItem(int result, bool masked) : result(result), masked(masked) {} + explicit DropDownListItem(int result, bool masked = false, bool shaded = false) : result(result), masked(masked), shaded(shaded) {} virtual ~DropDownListItem() = default; - virtual bool Selectable() const { return false; } - virtual uint Height() const { return GetCharacterHeight(FS_NORMAL); } + virtual bool Selectable() const { return true; } + virtual uint Height() const { return 0; } virtual uint Width() const { return 0; } - virtual void Draw(const Rect &r, bool sel, Colours bg_colour) const; + + virtual void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const + { + if (this->masked) GfxFillRect(full, _colour_gradient[bg_colour][5], FILLRECT_CHECKER); + } + + TextColour GetColour(bool sel) const + { + if (this->shaded) return (sel ? TC_SILVER : TC_GREY) | TC_NO_SHADE; + return (sel ? TC_WHITE : TC_BLACK) | this->colour_flags; + } }; /** - * Common string list item. + * Drop down divider component. + * @tparam TBase Base component. + * @tparam TFs Font size -- used to determine height. */ -class DropDownListStringItem : public DropDownListItem { +template +class DropDownDivider : public TBase { public: - std::string string; ///< String of item - TextColour colour_flags = TC_BEGIN; + template + explicit DropDownDivider(Args&&... args) : TBase(std::forward(args)...) {} + + bool Selectable() const override { return false; } + uint Height() const override { return std::max(GetCharacterHeight(TFs), this->TBase::Height()); } + + void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const override + { + uint8_t c1 = _colour_gradient[bg_colour][3]; + uint8_t c2 = _colour_gradient[bg_colour][7]; + + int mid = CenterBounds(full.top, full.bottom, 0); + GfxFillRect(full.left, mid - WidgetDimensions::scaled.bevel.bottom, full.right, mid - 1, c1); + GfxFillRect(full.left, mid, full.right, mid + WidgetDimensions::scaled.bevel.top - 1, c2); + } +}; - DropDownListStringItem(StringID string, int result, bool masked); - DropDownListStringItem(const std::string &string, int result, bool masked); +/** + * Drop down string component. + * @tparam TBase Base component. + * @tparam TFs Font size. + * @tparam TEnd Position string at end if true, or start if false. + */ +template +class DropDownString : public TBase { + std::string string; ///< String to be drawn. + Dimension dim; ///< Dimensions of string. +public: + template + explicit DropDownString(StringID string, Args&&... args) : TBase(std::forward(args)...) + { + this->SetString(GetString(string)); + } + + template + explicit DropDownString(const std::string &string, Args&&... args) : TBase(std::forward(args)...) + { + SetDParamStr(0, string); + this->SetString(GetString(STR_JUST_RAW_STRING)); + } + + void SetString(std::string &&string) + { + this->string = std::move(string); + this->dim = GetStringBoundingBox(this->string, TFs); + } + + uint Height() const override + { + return std::max(this->dim.height, this->TBase::Height()); + } + + uint Width() const override { return this->dim.width + this->TBase::Width(); } + + void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override + { + bool rtl = TEnd ^ (_current_text_dir == TD_RTL); + DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), this->string, this->GetColour(sel), SA_CENTER, false, TFs); + this->TBase::Draw(full, r.Indent(this->dim.width, rtl), sel, bg_colour); + } - bool Selectable() const override { return true; } - uint Width() const override; - void Draw(const Rect &r, bool sel, Colours bg_colour) const override; - const std::string &String() const { return this->string; } void SetColourFlags(TextColour colour_flags) { this->colour_flags = colour_flags; } - static bool NatSortFunc(std::unique_ptr const &first, std::unique_ptr const &second); + /** + * Natural sorting comparator function for DropDownList::sort(). + * @param first Left side of comparison. + * @param second Right side of comparison. + * @return true if \a first precedes \a second. + * @warning All items in the list need to be derivates of DropDownListStringItem. + */ + static bool NatSortFunc(std::unique_ptr const &first, std::unique_ptr const &second) + { + const std::string &str1 = static_cast(first.get())->string; + const std::string &str2 = static_cast(second.get())->string; + return StrNaturalCompare(str1, str2) < 0; + } }; /** - * List item with icon and string. + * Drop down icon component. + * @tparam TBase Base component. + * @tparam TEnd Position icon at end if true, or start if false. */ -class DropDownListIconItem : public DropDownListStringItem { - SpriteID sprite; - PaletteID pal; - Dimension dim; - uint sprite_y; +template +class DropDownIcon : public TBase { + SpriteID sprite; ///< Sprite ID to be drawn. + PaletteID palette; ///< Palette ID to use. + Dimension dsprite; ///< Bounding box dimensions of sprite. + Dimension dbounds; ///< Bounding box dimensions of bounds. public: - DropDownListIconItem(SpriteID sprite, PaletteID pal, StringID string, int result, bool masked); + template + explicit DropDownIcon(SpriteID sprite, PaletteID palette, Args&&... args) : TBase(std::forward(args)...), sprite(sprite), palette(palette) + { + this->dsprite = GetSpriteSize(this->sprite); + this->dbounds = this->dsprite; + } + + template + explicit DropDownIcon(const Dimension &dim, SpriteID sprite, PaletteID palette, Args&&... args) : TBase(std::forward(args)...), sprite(sprite), palette(palette), dbounds(dim) + { + this->dsprite = GetSpriteSize(this->sprite); + } + + uint Height() const override { return std::max(this->dbounds.height, this->TBase::Height()); } + uint Width() const override { return this->dbounds.width + WidgetDimensions::scaled.hsep_normal + this->TBase::Width(); } + + void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override + { + bool rtl = TEnd ^ (_current_text_dir == TD_RTL); + Rect ir = r.WithWidth(this->dbounds.width, rtl); + DrawSprite(this->sprite, this->palette, CenterBounds(ir.left, ir.right, this->dsprite.width), CenterBounds(r.top, r.bottom, this->dsprite.height)); + this->TBase::Draw(full, r.Indent(this->dbounds.width + WidgetDimensions::scaled.hsep_normal, rtl), sel, bg_colour); + } +}; - uint Height() const override; - uint Width() const override; - void Draw(const Rect &r, bool sel, Colours bg_colour) const override; - void SetDimension(Dimension d); +/** + * Drop down checkmark component. + * @tparam TBase Base component. + * @tparam TFs Font size. + * @tparam TEnd Position checkmark at end if true, or start if false. + */ +template +class DropDownCheck : public TBase { + bool checked; ///< Is item checked. + Dimension dim; ///< Dimension of checkmark. +public: + template + explicit DropDownCheck(bool checked, Args&&... args) : TBase(std::forward(args)...), checked(checked) + { + this->dim = GetStringBoundingBox(STR_JUST_CHECKMARK, TFs); + } + + uint Height() const override { return std::max(this->dim.height, this->TBase::Height()); } + uint Width() const override { return this->dim.width + WidgetDimensions::scaled.hsep_wide + this->TBase::Width(); } + + void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override + { + bool rtl = TEnd ^ (_current_text_dir == TD_RTL); + if (this->checked) { + DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), STR_JUST_CHECKMARK, this->GetColour(sel), SA_CENTER, false, TFs); + } + this->TBase::Draw(full, r.Indent(this->dim.width + WidgetDimensions::scaled.hsep_wide, rtl), sel, bg_colour); + } }; +/* Commonly used drop down list items. */ +using DropDownListDividerItem = DropDownDivider; +using DropDownListStringItem = DropDownString; +using DropDownListIconItem = DropDownIcon>; +using DropDownListCheckedItem = DropDownCheck>; + /** * A drop down list is a collection of drop down list items. */ diff --git a/src/widgets/game_widget.h b/src/widgets/game_widget.h index 6ab78fa8e9..3a2d2d7082 100644 --- a/src/widgets/game_widget.h +++ b/src/widgets/game_widget.h @@ -19,9 +19,9 @@ enum GSConfigWidgets { WID_GSC_SETTINGS, ///< Panel to draw the Game Script settings on WID_GSC_SCROLLBAR, ///< Scrollbar to scroll through the selected AIs. WID_GSC_CHANGE, ///< Select another Game Script button. + WID_GSC_OPEN_URL, ///< Open GS URL. WID_GSC_TEXTFILE, ///< Open GS readme, changelog (+1) or license (+2). WID_GSC_CONTENT_DOWNLOAD = WID_GSC_TEXTFILE + TFT_CONTENT_END, ///< Download content button. - WID_GSC_ACCEPT, ///< Accept ("Close") button WID_GSC_RESET, ///< Reset button. WID_GSC_SETTING_DROPDOWN = -1, ///< Dynamically created dropdown for changing setting value. diff --git a/src/widgets/network_widget.h b/src/widgets/network_widget.h index 766d72e473..087436a516 100644 --- a/src/widgets/network_widget.h +++ b/src/widgets/network_widget.h @@ -34,7 +34,6 @@ enum NetworkGameWidgets { WID_NG_LASTJOINED_SPACER, ///< Spacer after last joined server panel. WID_NG_DETAILS, ///< Panel with game details. - WID_NG_DETAILS_SPACER, ///< Spacer for game actual details. WID_NG_JOIN, ///< 'Join game' button. WID_NG_REFRESH, ///< 'Refresh server' button. WID_NG_NEWGRF, ///< 'NewGRF Settings' button. diff --git a/src/widgets/newgrf_debug_widget.h b/src/widgets/newgrf_debug_widget.h index 484abd5337..bf0bc1705e 100644 --- a/src/widgets/newgrf_debug_widget.h +++ b/src/widgets/newgrf_debug_widget.h @@ -46,6 +46,8 @@ enum SpriteAlignerWidgets { WID_SA_PICKER, ///< Sprite picker. WID_SA_LIST, ///< Queried sprite list. WID_SA_SCROLLBAR, ///< Scrollbar for sprite list. + WID_SA_ZOOM, ///< Zoom level buttons (from ZOOM_LVL_BEGIN to ZOOM_LVL_SPR_COUNT). + WID_SA_ZOOM_LAST = WID_SA_ZOOM + ZOOM_LVL_SPR_COUNT - 1, ///< Marker for last zoom level button. WID_SA_RESET_REL, ///< Reset relative sprite offset WID_SA_CENTRE, ///< Toggle centre sprite. WID_SA_CROSSHAIR, ///< Toggle crosshair. diff --git a/src/widgets/script_widget.h b/src/widgets/script_widget.h index 0566995f8d..d4ba17e452 100644 --- a/src/widgets/script_widget.h +++ b/src/widgets/script_widget.h @@ -41,7 +41,7 @@ enum ScriptDebugWidgets { WID_SCRD_SCRIPT_GAME, ///< Game Script button. WID_SCRD_RELOAD_TOGGLE, ///< Reload button. WID_SCRD_LOG_PANEL, ///< Panel where the log is in. - WID_SCRD_SCROLLBAR, ///< Scrollbar of the log panel. + WID_SCRD_VSCROLLBAR, ///< Vertical scrollbar of the log panel. WID_SCRD_COMPANY_BUTTON_START, ///< Buttons in the VIEW. WID_SCRD_COMPANY_BUTTON_END = WID_SCRD_COMPANY_BUTTON_START + MAX_COMPANIES - 1, ///< Last possible button in the VIEW. WID_SCRD_BREAK_STRING_WIDGETS, ///< The panel to handle the breaking on string. @@ -49,6 +49,7 @@ enum ScriptDebugWidgets { WID_SCRD_BREAK_STR_EDIT_BOX, ///< Edit box for the string to break on. WID_SCRD_MATCH_CASE_BTN, ///< Checkbox to use match caching or not. WID_SCRD_CONTINUE_BTN, ///< Continue button. + WID_SCRD_HSCROLLBAR, ///< Horizontal scrollbar of the log panel. }; #endif /* WIDGETS_SCRIPT_WIDGET_H */ diff --git a/src/widgets/settings_widget.h b/src/widgets/settings_widget.h index 0ae2a2bdf0..06b94bb049 100644 --- a/src/widgets/settings_widget.h +++ b/src/widgets/settings_widget.h @@ -28,17 +28,20 @@ enum GameOptionsWidgets { WID_GO_GUI_SCALE_MAIN_TOOLBAR, ///< Toggle for bigger main toolbar. WID_GO_BASE_GRF_DROPDOWN, ///< Use to select a base GRF. WID_GO_BASE_GRF_PARAMETERS, ///< Base GRF parameters. + WID_GO_BASE_GRF_OPEN_URL, ///< Open base GRF URL. WID_GO_BASE_GRF_TEXTFILE, ///< Open base GRF readme, changelog (+1) or license (+2). WID_GO_BASE_GRF_DESCRIPTION = WID_GO_BASE_GRF_TEXTFILE + TFT_CONTENT_END, ///< Description of selected base GRF. WID_GO_BASE_SFX_DROPDOWN, ///< Use to select a base SFX. WID_GO_TEXT_SFX_VOLUME, ///< Sound effects volume label. WID_GO_BASE_SFX_VOLUME, ///< Change sound effects volume. + WID_GO_BASE_SFX_OPEN_URL, ///< Open base SFX URL. WID_GO_BASE_SFX_TEXTFILE, ///< Open base SFX readme, changelog (+1) or license (+2). WID_GO_BASE_SFX_DESCRIPTION = WID_GO_BASE_SFX_TEXTFILE + TFT_CONTENT_END, ///< Description of selected base SFX. WID_GO_BASE_MUSIC_DROPDOWN, ///< Use to select a base music set. WID_GO_TEXT_MUSIC_VOLUME, ///< Music volume label. WID_GO_BASE_MUSIC_VOLUME, ///< Change music volume. WID_GO_BASE_MUSIC_JUKEBOX, ///< Open the jukebox. + WID_GO_BASE_MUSIC_OPEN_URL, ///< Open base music URL. WID_GO_BASE_MUSIC_TEXTFILE, ///< Open base music readme, changelog (+1) or license (+2). WID_GO_BASE_MUSIC_DESCRIPTION = WID_GO_BASE_MUSIC_TEXTFILE + TFT_CONTENT_END, ///< Description of selected base music set. WID_GO_VIDEO_ACCEL_BUTTON, ///< Toggle for video acceleration. diff --git a/src/window.cpp b/src/window.cpp index d69d238fb7..09d858bfb4 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -977,8 +977,9 @@ void Window::ReInit(int rx, int ry, bool reposition) this->SetDirtyAsBlocks(); // Mark whole current window as dirty. /* Save current size. */ - int window_width = this->width; - int window_height = this->height; + int window_width = this->width * _gui_scale / this->scale; + int window_height = this->height * _gui_scale / this->scale; + this->scale = _gui_scale; this->OnInit(); /* Re-initialize the window from the ground up. No need to change the nested_array, as all widgets stay where they are. */ @@ -1888,7 +1889,7 @@ void Window::InitNested(WindowNumber window_number) * Empty constructor, initialization has been moved to #InitNested() called from the constructor of the derived class. * @param desc The description of the window. */ -Window::Window(WindowDesc *desc) : window_desc(desc), mouse_capture_widget(-1) +Window::Window(WindowDesc *desc) : window_desc(desc), scale(_gui_scale), mouse_capture_widget(-1) { } @@ -1927,9 +1928,12 @@ void InitWindowSystem() _scrolling_viewport_bound = { 0, 0, 0, 0 }; _mouse_hovering = false; + SetupWidgetDimensions(); NWidgetLeaf::InvalidateDimensionCache(); // Reset cached sizes of several widgets. NWidgetScrollbar::InvalidateDimensionCache(); + InitDepotWindowBlockSizes(); + ShowFirstError(); } diff --git a/src/window_gui.h b/src/window_gui.h index ef3866519d..fba710786d 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -53,12 +53,12 @@ struct WidgetDimensions { RectPadding closebox; RectPadding captiontext; ///< Offsets of text within a caption. RectPadding dropdowntext; ///< Offsets of text within a dropdown widget. + RectPadding dropdownlist; ///< Offsets used by a dropdown list itself. RectPadding modalpopup; ///< Padding for a modal popup. RectPadding picker; ///< Padding for a picker (dock, station, etc) window. RectPadding sparse; ///< Padding used for 'sparse' widget window, usually containing multiple frames. RectPadding sparse_resize; ///< Padding used for a resizeable 'sparse' widget window, usually containing multiple frames. - int pressed; ///< Offset for contents of depressed widget. int vsep_picker; ///< Vertical spacing of picker-window widgets. int vsep_normal; ///< Normal vertical spacing. int vsep_sparse; ///< Normal vertical spacing for 'sparse' widget window. @@ -283,8 +283,10 @@ public: WindowFlags flags; ///< Window flags WindowNumber window_number; ///< Window number within the window class - uint8 timeout_timer; ///< Timer value of the WF_TIMEOUT for flags. - uint8 white_border_timer; ///< Timer value of the WF_WHITE_BORDER for flags. + int scale; ///< Scale of this window -- used to determine how to resize. + + uint8_t timeout_timer; ///< Timer value of the WF_TIMEOUT for flags. + uint8_t white_border_timer; ///< Timer value of the WF_WHITE_BORDER for flags. int left; ///< x position of left edge of the window int top; ///< y position of top edge of the window