Merge branch upstream/master
This commit is contained in:
@@ -10,6 +10,7 @@ notifications:
|
||||
only-by:
|
||||
- DorpsGek
|
||||
commit-comment:
|
||||
discussion:
|
||||
pull-request:
|
||||
issue:
|
||||
tag-created:
|
||||
|
||||
7
.github/ISSUE_TEMPLATE.md
vendored
7
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,7 +0,0 @@
|
||||
## Version of OpenTTD
|
||||
|
||||
## Expected result
|
||||
|
||||
## Actual result
|
||||
|
||||
## Steps to reproduce
|
||||
17
.github/ISSUE_TEMPLATE/bug.md
vendored
Normal file
17
.github/ISSUE_TEMPLATE/bug.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
name: Bugs
|
||||
about: Found a bug in OpenTTD?
|
||||
title: "Bug Report"
|
||||
---
|
||||
|
||||
## Version of OpenTTD
|
||||
<!-- Fill in below what version of OpenTTD you are using, including your OS. -->
|
||||
|
||||
## Expected result
|
||||
<!-- Describe in a few words what you expected to happen. -->
|
||||
|
||||
## Actual result
|
||||
<!-- Describe in a few words what actually happens. -->
|
||||
|
||||
## Steps to reproduce
|
||||
<!-- As detailed as possible, please tell us how we can reproduce this. Feel free to attach a savegame (zip it first) to make it more clear. -->
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Suggestions and ideas?
|
||||
url: https://www.tt-forums.net/viewforum.php?f=32
|
||||
about: Have a suggestion or an idea for a cool new feature? Post them on our forum!
|
||||
12
.github/ISSUE_TEMPLATE/crash.md
vendored
Normal file
12
.github/ISSUE_TEMPLATE/crash.md
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
name: Crash
|
||||
about: Did OpenTTD crash?
|
||||
title: "Crash Report"
|
||||
---
|
||||
<!-- Please zip the crash.log, crash.dmp and crash.sav and attach it to this crash report. -->
|
||||
|
||||
## Version of OpenTTD
|
||||
<!-- Fill in below what version of OpenTTD you are using, including your OS. -->
|
||||
|
||||
## Steps to reproduce
|
||||
<!-- Please spend a few words if you can reproduce this problem. -->
|
||||
4
.github/workflows/ci-build.yml
vendored
4
.github/workflows/ci-build.yml
vendored
@@ -94,7 +94,7 @@ jobs:
|
||||
- name: Test
|
||||
run: |
|
||||
cd build
|
||||
ctest -j $(nproc)
|
||||
ctest -j $(nproc) --timeout 120
|
||||
|
||||
macos:
|
||||
name: Mac OS
|
||||
@@ -175,5 +175,5 @@ jobs:
|
||||
- name: Test
|
||||
run: |
|
||||
cd build
|
||||
ctest -j $(sysctl -n hw.logicalcpu)
|
||||
ctest -j $(sysctl -n hw.logicalcpu) --timeout 120
|
||||
|
||||
|
||||
@@ -4,10 +4,12 @@ if(NOT BINARY_NAME)
|
||||
set(BINARY_NAME openttd)
|
||||
endif()
|
||||
|
||||
project(${BINARY_NAME})
|
||||
project(${BINARY_NAME}
|
||||
VERSION 1.12.0
|
||||
)
|
||||
|
||||
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
|
||||
message(FATAL_ERROR "In-source builds not allowed. Please run \"cmake ..\" from the bin directory")
|
||||
message(FATAL_ERROR "In-source builds not allowed. Please run \"cmake ..\" from the build directory. You may need to delete \"${CMAKE_SOURCE_DIR}/CMakeCache.txt\" first.")
|
||||
endif()
|
||||
|
||||
# Debug mode by default.
|
||||
@@ -72,6 +74,9 @@ add_custom_target(find_version
|
||||
${CMAKE_COMMAND}
|
||||
-DFIND_VERSION_BINARY_DIR=${CMAKE_BINARY_DIR}/generated
|
||||
-DCPACK_BINARY_DIR=${CMAKE_BINARY_DIR}
|
||||
-DREV_MAJOR=${PROJECT_VERSION_MAJOR}
|
||||
-DREV_MINOR=${PROJECT_VERSION_MINOR}
|
||||
-DREV_BUILD=${PROJECT_VERSION_PATCH}
|
||||
$<$<BOOL:ANDROID>:-DANDROID=TRUE>
|
||||
-P "${CMAKE_SOURCE_DIR}/cmake/scripts/FindVersion.cmake"
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
@@ -233,6 +238,7 @@ if(MSVC)
|
||||
target_sources(openttd PRIVATE "${CMAKE_SOURCE_DIR}/os/windows/openttd.manifest")
|
||||
endif()
|
||||
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/bin)
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/src)
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/media)
|
||||
|
||||
@@ -253,7 +259,7 @@ if(IPO_FOUND)
|
||||
set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL True)
|
||||
set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO True)
|
||||
endif()
|
||||
set_target_properties(openttd PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin")
|
||||
set_target_properties(openttd PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
|
||||
process_compile_flags()
|
||||
|
||||
include(LinkPackage)
|
||||
|
||||
42
COMPILING.md
42
COMPILING.md
@@ -2,26 +2,27 @@
|
||||
|
||||
## Required/optional libraries
|
||||
|
||||
The following libraries are used by OpenTTD for:
|
||||
OpenTTD makes use of the following external libraries:
|
||||
|
||||
- zlib: (de)compressing of old (0.3.0-1.0.5) savegames, content downloads,
|
||||
- (encouraged) zlib: (de)compressing of old (0.3.0-1.0.5) savegames, content downloads,
|
||||
heightmaps
|
||||
- liblzo2: (de)compressing of old (pre 0.3.0) savegames
|
||||
- liblzma: (de)compressing of savegames (1.1.0 and later)
|
||||
- libpng: making screenshots and loading heightmaps
|
||||
- (encouraged) liblzma: (de)compressing of savegames (1.1.0 and later)
|
||||
- (encouraged) libpng: making screenshots and loading heightmaps
|
||||
- (optional) liblzo2: (de)compressing of old (pre 0.3.0) savegames
|
||||
|
||||
For Linux, the following additional libraries are used (for non-dedicated only):
|
||||
|
||||
- libSDL2: hardware access (video, sound, mouse)
|
||||
- libfreetype: loading generic fonts and rendering them
|
||||
- libfontconfig: searching for fonts, resolving font names to actual fonts
|
||||
- libicu: handling of right-to-left scripts (e.g. Arabic and Persian) and
|
||||
natural sorting of strings (Linux only)
|
||||
- libSDL2: hardware access (video, sound, mouse) (not required for Windows or macOS)
|
||||
natural sorting of strings
|
||||
|
||||
OpenTTD does not require any of the libraries to be present, but without
|
||||
liblzma you cannot open most recent savegames and without zlib you cannot
|
||||
open most older savegames or use the content downloading system.
|
||||
Without libSDL/liballegro on non-Windows and non-macOS machines you have
|
||||
no graphical user interface; you would be building a dedicated server.
|
||||
|
||||
## Windows:
|
||||
## Windows
|
||||
|
||||
You need Microsoft Visual Studio 2017 or more recent.
|
||||
|
||||
@@ -77,6 +78,8 @@ files himself via the `ZERO_CHECK` project.
|
||||
|
||||
## All other platforms
|
||||
Minimum required version of CMake is 3.9.
|
||||
By default this produces a Debug build with assertations enabled.
|
||||
This is a far slower build than release builds.
|
||||
|
||||
```bash
|
||||
mkdir build
|
||||
@@ -88,6 +91,25 @@ make
|
||||
For more information on how to use CMake (including how to make Release builds),
|
||||
we urge you to read [their excellent manual](https://cmake.org/cmake/help/latest/guide/user-interaction/index.html).
|
||||
|
||||
## CMake Options
|
||||
|
||||
Via CMake, several options can be influenced to get different types of
|
||||
builds.
|
||||
|
||||
- `-DCMAKE_BUILD_TYPE=RelWithDebInfo`: build a release build. This is
|
||||
significant faster than a debug build, but has far less useful information
|
||||
in case of a crash.
|
||||
- `-DOPTION_DEDICATED=ON`: build OpenTTD without a GUI. Useful if you are
|
||||
running a headless server, as it requires less libraries to operate.
|
||||
- `-DOPTION_USE_ASSERTS=OFF`: disable asserts. Use with care, as assert
|
||||
statements capture early signs of trouble. Release builds have them
|
||||
disabled by default.
|
||||
- `-DOPTION_USE_THREADS=OFF`: disable the use of threads. This will block
|
||||
the interface in many places, and in general gives a worse experience of
|
||||
the game. Use with care.
|
||||
- `-DOPTION_TOOLS_ONLY=ON`: only build tools like `strgen`. Does not build
|
||||
the game itself. Useful for cross-compiling.
|
||||
|
||||
## Supported compilers
|
||||
|
||||
Every compiler that is supported by CMake and supports C++17, should be
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
- Ingo von Borstel (planetmaker) - General coding, Support (since 1.1)
|
||||
- Remko Bijker (Rubidium) - Lead coder and way more (since 0.4.5)
|
||||
- José Soler (Terkhen) - General coding (since 1.0)
|
||||
- Leif Linse (Zuu) - AI/Game Script (since 1.2)
|
||||
|
||||
### Inactive Developers:
|
||||
|
||||
@@ -28,6 +27,7 @@
|
||||
- Christoph Mallon (Tron) - Programmer, code correctness police (0.3 - 0.5)
|
||||
- Patric Stout (TrueBrain) - NoProgrammer (0.3 - 1.2), sys op (active)
|
||||
- Thijs Marinussen (Yexo) - AI Framework, General (0.6 - 1.3)
|
||||
- Leif Linse (Zuu) - AI/Game Script (1.2 - 1.6)
|
||||
|
||||
### Retired Developers:
|
||||
|
||||
|
||||
20
README.md
20
README.md
@@ -46,15 +46,13 @@ OpenTTD has a [community-maintained wiki](https://wiki.openttd.org/), including
|
||||
|
||||
OpenTTD has been ported to several platforms and operating systems.
|
||||
|
||||
The currently working platforms are:
|
||||
The currently supported platforms are:
|
||||
|
||||
- FreeBSD (SDL)
|
||||
- Haiku (SDL)
|
||||
- Linux (SDL)
|
||||
- macOS (universal) (Cocoa video and sound drivers)
|
||||
- OpenBSD (SDL)
|
||||
- OS/2 (SDL)
|
||||
- Windows (Win32 GDI (faster) or SDL)
|
||||
- Linux (SDL (OpenGL and non-OpenGL))
|
||||
- macOS (universal) (Cocoa)
|
||||
- Windows (Win32 GDI / OpenGL)
|
||||
|
||||
Other platforms may also work (in particular various BSD systems), but we don't actively test or maintain these.
|
||||
|
||||
### 1.3.1) Legacy support
|
||||
Platforms, languages and compilers change.
|
||||
@@ -79,9 +77,9 @@ For some platforms, you will need to refer to [the installation guide](https://w
|
||||
The free data files, split into OpenGFX for graphics, OpenSFX for sounds and
|
||||
OpenMSX for music can be found at:
|
||||
|
||||
- https://www.openttd.org/download-opengfx for OpenGFX
|
||||
- https://www.openttd.org/download-opensfx for OpenSFX
|
||||
- https://www.openttd.org/download-openmsx for OpenMSX
|
||||
- https://www.openttd.org/downloads/opengfx-releases/ for OpenGFX
|
||||
- https://www.openttd.org/downloads/opensfx-releases/ for OpenSFX
|
||||
- https://www.openttd.org/downloads/openmsx-releases/ for OpenMSX
|
||||
|
||||
Please follow the readme of these packages about the installation procedure.
|
||||
The Windows installer can optionally download and install these packages.
|
||||
|
||||
2
bin/CMakeLists.txt
Normal file
2
bin/CMakeLists.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
add_subdirectory(ai)
|
||||
add_subdirectory(game)
|
||||
40
bin/ai/CMakeLists.txt
Normal file
40
bin/ai/CMakeLists.txt
Normal file
@@ -0,0 +1,40 @@
|
||||
set(AI_COMPAT_SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_0.7.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.0.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.1.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.2.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.3.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.4.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.5.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.6.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.7.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.8.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.9.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.10.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.11.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.12.nut
|
||||
)
|
||||
|
||||
foreach(AI_COMPAT_SOURCE_FILE IN LISTS AI_COMPAT_SOURCE_FILES)
|
||||
string(REPLACE "${CMAKE_SOURCE_DIR}/bin/" "" AI_COMPAT_SOURCE_FILE_NAME "${AI_COMPAT_SOURCE_FILE}")
|
||||
string(CONCAT AI_COMPAT_BINARY_FILE "${CMAKE_BINARY_DIR}/" "${AI_COMPAT_SOURCE_FILE_NAME}")
|
||||
|
||||
add_custom_command(OUTPUT ${AI_COMPAT_BINARY_FILE}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${AI_COMPAT_SOURCE_FILE}
|
||||
${AI_COMPAT_BINARY_FILE}
|
||||
MAIN_DEPENDENCY ${AI_COMPAT_SOURCE_FILE}
|
||||
COMMENT "Copying ${AI_COMPAT_SOURCE_FILE_NAME}"
|
||||
)
|
||||
|
||||
list(APPEND AI_COMPAT_BINARY_FILES ${AI_COMPAT_BINARY_FILE})
|
||||
endforeach()
|
||||
|
||||
# Create a new target which copies all compat files
|
||||
add_custom_target(ai_compat_files
|
||||
DEPENDS ${AI_COMPAT_BINARY_FILES}
|
||||
)
|
||||
|
||||
add_dependencies(openttd
|
||||
ai_compat_files
|
||||
)
|
||||
37
bin/game/CMakeLists.txt
Normal file
37
bin/game/CMakeLists.txt
Normal file
@@ -0,0 +1,37 @@
|
||||
set(GS_COMPAT_SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.2.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.3.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.4.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.5.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.6.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.7.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.8.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.9.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.10.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.11.nut
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.12.nut
|
||||
)
|
||||
|
||||
foreach(GS_COMPAT_SOURCE_FILE IN LISTS GS_COMPAT_SOURCE_FILES)
|
||||
string(REPLACE "${CMAKE_SOURCE_DIR}/bin/" "" GS_COMPAT_SOURCE_FILE_NAME "${GS_COMPAT_SOURCE_FILE}")
|
||||
string(CONCAT GS_COMPAT_BINARY_FILE "${CMAKE_BINARY_DIR}/" "${GS_COMPAT_SOURCE_FILE_NAME}")
|
||||
|
||||
add_custom_command(OUTPUT ${GS_COMPAT_BINARY_FILE}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${GS_COMPAT_SOURCE_FILE}
|
||||
${GS_COMPAT_BINARY_FILE}
|
||||
MAIN_DEPENDENCY ${GS_COMPAT_SOURCE_FILE}
|
||||
COMMENT "Copying ${GS_COMPAT_SOURCE_FILE_NAME}"
|
||||
)
|
||||
|
||||
list(APPEND GS_COMPAT_BINARY_FILES ${GS_COMPAT_BINARY_FILE})
|
||||
endforeach()
|
||||
|
||||
# Create a new target which copies all compat files
|
||||
add_custom_target(gs_compat_files
|
||||
DEPENDS ${GS_COMPAT_BINARY_FILES}
|
||||
)
|
||||
|
||||
add_dependencies(openttd
|
||||
gs_compat_files
|
||||
)
|
||||
@@ -4,20 +4,22 @@
|
||||
#
|
||||
macro(compile_flags)
|
||||
if(MSVC)
|
||||
# Switch to MT (static) instead of MD (dynamic) binary
|
||||
if(VCPKG_TARGET_TRIPLET MATCHES "-static" AND NOT VCPKG_TARGET_TRIPLET MATCHES "-md")
|
||||
# Switch to MT (static) instead of MD (dynamic) binary
|
||||
|
||||
# For MSVC two generators are available
|
||||
# - a command line generator (Ninja) using CMAKE_BUILD_TYPE to specify the
|
||||
# configuration of the build tree
|
||||
# - an IDE generator (Visual Studio) using CMAKE_CONFIGURATION_TYPES to
|
||||
# specify all configurations that will be available in the generated solution
|
||||
list(APPEND MSVC_CONFIGS "${CMAKE_BUILD_TYPE}" "${CMAKE_CONFIGURATION_TYPES}")
|
||||
# For MSVC two generators are available
|
||||
# - a command line generator (Ninja) using CMAKE_BUILD_TYPE to specify the
|
||||
# configuration of the build tree
|
||||
# - an IDE generator (Visual Studio) using CMAKE_CONFIGURATION_TYPES to
|
||||
# specify all configurations that will be available in the generated solution
|
||||
list(APPEND MSVC_CONFIGS "${CMAKE_BUILD_TYPE}" "${CMAKE_CONFIGURATION_TYPES}")
|
||||
|
||||
# Set usage of static runtime for all configurations
|
||||
foreach(MSVC_CONFIG ${MSVC_CONFIGS})
|
||||
string(TOUPPER "CMAKE_CXX_FLAGS_${MSVC_CONFIG}" MSVC_FLAGS)
|
||||
string(REPLACE "/MD" "/MT" ${MSVC_FLAGS} "${${MSVC_FLAGS}}")
|
||||
endforeach()
|
||||
# Set usage of static runtime for all configurations
|
||||
foreach(MSVC_CONFIG ${MSVC_CONFIGS})
|
||||
string(TOUPPER "CMAKE_CXX_FLAGS_${MSVC_CONFIG}" MSVC_FLAGS)
|
||||
string(REPLACE "/MD" "/MT" ${MSVC_FLAGS} "${${MSVC_FLAGS}}")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# "If /Zc:rvalueCast is specified, the compiler follows section 5.4 of the
|
||||
# C++11 standard". We need C++11 for the way we use threads.
|
||||
|
||||
@@ -35,9 +35,9 @@ function(create_grf_command)
|
||||
-DNFORENUM_EXECUTABLE=${NFORENUM_EXECUTABLE}
|
||||
-DGRFCODEC_EXECUTABLE=${GRFCODEC_EXECUTABLE}
|
||||
-P ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake
|
||||
MAIN_DEPENDENCY ${GRF_NFO_SOURCE_FILES}
|
||||
MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake
|
||||
DEPENDS ${GRF_PNG_BINARY_FILES}
|
||||
${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake
|
||||
${GRF_NFO_SOURCE_FILES}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMENT "Generating ${GRF_SOURCE_FOLDER_NAME}.grf"
|
||||
)
|
||||
|
||||
@@ -27,11 +27,13 @@ install(TARGETS openttd
|
||||
install(DIRECTORY
|
||||
${CMAKE_BINARY_DIR}/lang
|
||||
${CMAKE_BINARY_DIR}/baseset
|
||||
${CMAKE_SOURCE_DIR}/bin/ai
|
||||
${CMAKE_SOURCE_DIR}/bin/game
|
||||
${CMAKE_BINARY_DIR}/ai
|
||||
${CMAKE_BINARY_DIR}/game
|
||||
${CMAKE_SOURCE_DIR}/bin/scripts
|
||||
DESTINATION ${DATA_DESTINATION_DIR}
|
||||
COMPONENT language_files)
|
||||
COMPONENT language_files
|
||||
REGEX "ai/[^\.]+$" EXCLUDE # Ignore subdirs in ai dir
|
||||
)
|
||||
|
||||
install(FILES
|
||||
${CMAKE_SOURCE_DIR}/COPYING.md
|
||||
|
||||
@@ -39,6 +39,20 @@ foreach(NFO_LINE IN LISTS NFO_LINES)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
execute_process(COMMAND ${NFORENUM_EXECUTABLE} -s sprites/${GRF_SOURCE_FOLDER_NAME}.nfo)
|
||||
execute_process(COMMAND ${GRFCODEC_EXECUTABLE} -n -s -e -p1 ${GRF_SOURCE_FOLDER_NAME}.grf)
|
||||
execute_process(COMMAND ${NFORENUM_EXECUTABLE} -s sprites/${GRF_SOURCE_FOLDER_NAME}.nfo RESULT_VARIABLE RESULT)
|
||||
if(RESULT)
|
||||
if(NOT RESULT MATCHES "^[0-9]*$")
|
||||
message(FATAL_ERROR "Failed to run NFORenum (${RESULT}), please check NFORENUM_EXECUTABLE variable")
|
||||
endif()
|
||||
message(FATAL_ERROR "NFORenum failed")
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND ${GRFCODEC_EXECUTABLE} -n -s -e -p1 ${GRF_SOURCE_FOLDER_NAME}.grf RESULT_VARIABLE RESULT)
|
||||
if(RESULT)
|
||||
if(NOT RESULT MATCHES "^[0-9]*$")
|
||||
message(FATAL_ERROR "Failed to run GRFCodec (${RESULT}), please check GRFCODEC_EXECUTABLE variable")
|
||||
endif()
|
||||
message(FATAL_ERROR "GRFCodec failed")
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${GRF_SOURCE_FOLDER_NAME}.grf ${GRF_BINARY_FILE})
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
if(NOT REV_MAJOR)
|
||||
set(REV_MAJOR 0)
|
||||
endif()
|
||||
if(NOT REV_MINOR)
|
||||
set(REV_MINOR 0)
|
||||
endif()
|
||||
if(NOT REV_BUILD)
|
||||
set(REV_BUILD 0)
|
||||
endif()
|
||||
|
||||
#
|
||||
# Finds the current version of the current folder.
|
||||
#
|
||||
|
||||
557
docs/company_colour_indexes.html
Normal file
557
docs/company_colour_indexes.html
Normal file
@@ -0,0 +1,557 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
||||
<!-- derived from Iron Horse branch at https://github.com/andythenorth/iron-horse/tree/company_colour_indexes -->
|
||||
<head>
|
||||
<title>OpenTTD Company Colour Indexes</title>
|
||||
<meta charset="UTF-8" />
|
||||
<style>
|
||||
th {
|
||||
vertical-align: top;
|
||||
border-bottom: solid 1px #ddd;
|
||||
padding-top: 30px;
|
||||
padding-right: 15px;
|
||||
text-align: right;
|
||||
}
|
||||
tr.top td {
|
||||
padding-top: 20px;
|
||||
}
|
||||
tr.bottom td {
|
||||
border-bottom: solid 1px #ddd;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
td {
|
||||
text-align: right;
|
||||
}
|
||||
span {
|
||||
border: solid 1px #000;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
margin-left: 0px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Company Colour Indexes</h1>
|
||||
<p>Hex / dec indexes into the DOS palette</p>
|
||||
<p>
|
||||
Visual representation of values derived from <a href="https://github.com/frosch123/TTDViewer/blob/master/src/recolor.xml#L186">https://github.com/frosch123/TTDViewer/blob/master/src/recolor.xml#L186</a>
|
||||
</p>
|
||||
<table style="margin-top:30px;">
|
||||
<tbody>
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_DARK_BLUE</th>
|
||||
<td><span style="background-color:rgb( 8, 24, 88)"></span></td>
|
||||
<td><span style="background-color:rgb( 12, 36, 104)"></span></td>
|
||||
<td><span style="background-color:rgb( 20, 52, 124)"></span></td>
|
||||
<td><span style="background-color:rgb( 28, 68, 140)"></span></td>
|
||||
<td><span style="background-color:rgb( 40, 92, 164)"></span></td>
|
||||
<td><span style="background-color:rgb( 56, 120, 188)"></span></td>
|
||||
<td><span style="background-color:rgb( 72, 152, 216)"></span></td>
|
||||
<td><span style="background-color:rgb(100, 172, 224)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0xc6</td>
|
||||
<td>0xc7</td>
|
||||
<td>0xc8</td>
|
||||
<td>0xc9</td>
|
||||
<td>0xca</td>
|
||||
<td>0xcb</td>
|
||||
<td>0xcc</td>
|
||||
<td>0xcd</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>198</td>
|
||||
<td>199</td>
|
||||
<td>200</td>
|
||||
<td>201</td>
|
||||
<td>202</td>
|
||||
<td>203</td>
|
||||
<td>204</td>
|
||||
<td>205</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_PALE_GREEN</th>
|
||||
<td><span style="background-color:rgb( 16, 52, 24)"></span></td>
|
||||
<td><span style="background-color:rgb( 32, 72, 44)"></span></td>
|
||||
<td><span style="background-color:rgb( 56, 96, 72)"></span></td>
|
||||
<td><span style="background-color:rgb( 76, 116, 88)"></span></td>
|
||||
<td><span style="background-color:rgb( 96, 136, 108)"></span></td>
|
||||
<td><span style="background-color:rgb(120, 164, 136)"></span></td>
|
||||
<td><span style="background-color:rgb(152, 192, 168)"></span></td>
|
||||
<td><span style="background-color:rgb(184, 220, 200)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x60</td>
|
||||
<td>0x61</td>
|
||||
<td>0x62</td>
|
||||
<td>0x63</td>
|
||||
<td>0x64</td>
|
||||
<td>0x65</td>
|
||||
<td>0x66</td>
|
||||
<td>0x67</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>96</td>
|
||||
<td>97</td>
|
||||
<td>98</td>
|
||||
<td>99</td>
|
||||
<td>100</td>
|
||||
<td>101</td>
|
||||
<td>102</td>
|
||||
<td>103</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_PINK</th>
|
||||
<td><span style="background-color:rgb(112, 16, 32)"></span></td>
|
||||
<td><span style="background-color:rgb(136, 32, 52)"></span></td>
|
||||
<td><span style="background-color:rgb(160, 56, 76)"></span></td>
|
||||
<td><span style="background-color:rgb(188, 84, 108)"></span></td>
|
||||
<td><span style="background-color:rgb(204, 104, 124)"></span></td>
|
||||
<td><span style="background-color:rgb(220, 132, 144)"></span></td>
|
||||
<td><span style="background-color:rgb(236, 156, 164)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 188, 192)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x2a</td>
|
||||
<td>0x2b</td>
|
||||
<td>0x2c</td>
|
||||
<td>0x2d</td>
|
||||
<td>0x2e</td>
|
||||
<td>0x2f</td>
|
||||
<td>0x30</td>
|
||||
<td>0x31</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>42</td>
|
||||
<td>43</td>
|
||||
<td>44</td>
|
||||
<td>45</td>
|
||||
<td>46</td>
|
||||
<td>47</td>
|
||||
<td>48</td>
|
||||
<td>49</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_YELLOW</th>
|
||||
<td><span style="background-color:rgb(128, 68, 8)"></span></td>
|
||||
<td><span style="background-color:rgb(156, 96, 16)"></span></td>
|
||||
<td><span style="background-color:rgb(184, 120, 24)"></span></td>
|
||||
<td><span style="background-color:rgb(212, 156, 32)"></span></td>
|
||||
<td><span style="background-color:rgb(232, 184, 16)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 212, 0)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 248, 128)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 252, 192)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x3e</td>
|
||||
<td>0x3f</td>
|
||||
<td>0x40</td>
|
||||
<td>0x41</td>
|
||||
<td>0x42</td>
|
||||
<td>0x43</td>
|
||||
<td>0x44</td>
|
||||
<td>0x45</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>62</td>
|
||||
<td>63</td>
|
||||
<td>64</td>
|
||||
<td>65</td>
|
||||
<td>66</td>
|
||||
<td>67</td>
|
||||
<td>68</td>
|
||||
<td>69</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_RED</th>
|
||||
<td><span style="background-color:rgb( 92, 0, 0)"></span></td>
|
||||
<td><span style="background-color:rgb(128, 0, 0)"></span></td>
|
||||
<td><span style="background-color:rgb(160, 0, 0)"></span></td>
|
||||
<td><span style="background-color:rgb(196, 0, 0)"></span></td>
|
||||
<td><span style="background-color:rgb(224, 0, 0)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 52, 52)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 100, 88)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 144, 124)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0xb3</td>
|
||||
<td>0xb4</td>
|
||||
<td>0xb5</td>
|
||||
<td>0xb6</td>
|
||||
<td>0xb7</td>
|
||||
<td>0xa4</td>
|
||||
<td>0xa5</td>
|
||||
<td>0xa6</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>179</td>
|
||||
<td>180</td>
|
||||
<td>181</td>
|
||||
<td>182</td>
|
||||
<td>183</td>
|
||||
<td>164</td>
|
||||
<td>165</td>
|
||||
<td>166</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_LIGHT_BLUE</th>
|
||||
<td><span style="background-color:rgb( 16, 64, 96)"></span></td>
|
||||
<td><span style="background-color:rgb( 24, 80, 108)"></span></td>
|
||||
<td><span style="background-color:rgb( 40, 96, 120)"></span></td>
|
||||
<td><span style="background-color:rgb( 52, 112, 132)"></span></td>
|
||||
<td><span style="background-color:rgb( 80, 140, 160)"></span></td>
|
||||
<td><span style="background-color:rgb(116, 172, 192)"></span></td>
|
||||
<td><span style="background-color:rgb(156, 204, 220)"></span></td>
|
||||
<td><span style="background-color:rgb(204, 240, 252)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x9a</td>
|
||||
<td>0x9b</td>
|
||||
<td>0x9c</td>
|
||||
<td>0x9d</td>
|
||||
<td>0x9e</td>
|
||||
<td>0x9f</td>
|
||||
<td>0xa0</td>
|
||||
<td>0xa1</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>154</td>
|
||||
<td>155</td>
|
||||
<td>156</td>
|
||||
<td>157</td>
|
||||
<td>158</td>
|
||||
<td>159</td>
|
||||
<td>160</td>
|
||||
<td>161</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_GREEN</th>
|
||||
<td><span style="background-color:rgb( 32, 80, 4)"></span></td>
|
||||
<td><span style="background-color:rgb( 48, 96, 4)"></span></td>
|
||||
<td><span style="background-color:rgb( 64, 112, 12)"></span></td>
|
||||
<td><span style="background-color:rgb( 84, 132, 20)"></span></td>
|
||||
<td><span style="background-color:rgb( 92, 156, 52)"></span></td>
|
||||
<td><span style="background-color:rgb(108, 176, 64)"></span></td>
|
||||
<td><span style="background-color:rgb(124, 200, 76)"></span></td>
|
||||
<td><span style="background-color:rgb(144, 224, 92)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x52</td>
|
||||
<td>0x53</td>
|
||||
<td>0x54</td>
|
||||
<td>0x55</td>
|
||||
<td>0xce</td>
|
||||
<td>0xcf</td>
|
||||
<td>0xd0</td>
|
||||
<td>0xd1</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>82</td>
|
||||
<td>83</td>
|
||||
<td>84</td>
|
||||
<td>85</td>
|
||||
<td>206</td>
|
||||
<td>207</td>
|
||||
<td>208</td>
|
||||
<td>209</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_DARK_GREEN</th>
|
||||
<td><span style="background-color:rgb( 28, 52, 24)"></span></td>
|
||||
<td><span style="background-color:rgb( 44, 68, 32)"></span></td>
|
||||
<td><span style="background-color:rgb( 60, 88, 48)"></span></td>
|
||||
<td><span style="background-color:rgb( 80, 104, 60)"></span></td>
|
||||
<td><span style="background-color:rgb(104, 124, 76)"></span></td>
|
||||
<td><span style="background-color:rgb(128, 148, 92)"></span></td>
|
||||
<td><span style="background-color:rgb(152, 176, 108)"></span></td>
|
||||
<td><span style="background-color:rgb(180, 204, 124)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x58</td>
|
||||
<td>0x59</td>
|
||||
<td>0x5a</td>
|
||||
<td>0x5b</td>
|
||||
<td>0x5c</td>
|
||||
<td>0x5d</td>
|
||||
<td>0x5e</td>
|
||||
<td>0x5f</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>88</td>
|
||||
<td>89</td>
|
||||
<td>90</td>
|
||||
<td>91</td>
|
||||
<td>92</td>
|
||||
<td>93</td>
|
||||
<td>94</td>
|
||||
<td>95</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_BLUE</th>
|
||||
<td><span style="background-color:rgb( 0, 52, 160)"></span></td>
|
||||
<td><span style="background-color:rgb( 0, 72, 184)"></span></td>
|
||||
<td><span style="background-color:rgb( 0, 96, 212)"></span></td>
|
||||
<td><span style="background-color:rgb( 24, 120, 220)"></span></td>
|
||||
<td><span style="background-color:rgb( 56, 144, 232)"></span></td>
|
||||
<td><span style="background-color:rgb( 88, 168, 240)"></span></td>
|
||||
<td><span style="background-color:rgb(128, 196, 252)"></span></td>
|
||||
<td><span style="background-color:rgb(188, 224, 252)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x92</td>
|
||||
<td>0x93</td>
|
||||
<td>0x94</td>
|
||||
<td>0x95</td>
|
||||
<td>0x96</td>
|
||||
<td>0x97</td>
|
||||
<td>0x98</td>
|
||||
<td>0x99</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>146</td>
|
||||
<td>147</td>
|
||||
<td>148</td>
|
||||
<td>149</td>
|
||||
<td>150</td>
|
||||
<td>151</td>
|
||||
<td>152</td>
|
||||
<td>153</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_CREAM</th>
|
||||
<td><span style="background-color:rgb(116, 68, 40)"></span></td>
|
||||
<td><span style="background-color:rgb(136, 84, 56)"></span></td>
|
||||
<td><span style="background-color:rgb(164, 96, 64)"></span></td>
|
||||
<td><span style="background-color:rgb(184, 112, 80)"></span></td>
|
||||
<td><span style="background-color:rgb(204, 128, 96)"></span></td>
|
||||
<td><span style="background-color:rgb(212, 148, 112)"></span></td>
|
||||
<td><span style="background-color:rgb(224, 168, 128)"></span></td>
|
||||
<td><span style="background-color:rgb(236, 188, 148)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x72</td>
|
||||
<td>0x73</td>
|
||||
<td>0x74</td>
|
||||
<td>0x75</td>
|
||||
<td>0x76</td>
|
||||
<td>0x77</td>
|
||||
<td>0x78</td>
|
||||
<td>0x79</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>114</td>
|
||||
<td>115</td>
|
||||
<td>116</td>
|
||||
<td>117</td>
|
||||
<td>118</td>
|
||||
<td>119</td>
|
||||
<td>120</td>
|
||||
<td>121</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_MAUVE</th>
|
||||
<td><span style="background-color:rgb( 36, 40, 68)"></span></td>
|
||||
<td><span style="background-color:rgb( 48, 52, 84)"></span></td>
|
||||
<td><span style="background-color:rgb( 64, 64, 100)"></span></td>
|
||||
<td><span style="background-color:rgb( 80, 80, 116)"></span></td>
|
||||
<td><span style="background-color:rgb(100, 100, 136)"></span></td>
|
||||
<td><span style="background-color:rgb(132, 132, 164)"></span></td>
|
||||
<td><span style="background-color:rgb(172, 172, 192)"></span></td>
|
||||
<td><span style="background-color:rgb(212, 212, 224)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x80</td>
|
||||
<td>0x81</td>
|
||||
<td>0x82</td>
|
||||
<td>0x83</td>
|
||||
<td>0x84</td>
|
||||
<td>0x85</td>
|
||||
<td>0x86</td>
|
||||
<td>0x87</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>128</td>
|
||||
<td>129</td>
|
||||
<td>130</td>
|
||||
<td>131</td>
|
||||
<td>132</td>
|
||||
<td>133</td>
|
||||
<td>134</td>
|
||||
<td>135</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_PURPLE</th>
|
||||
<td><span style="background-color:rgb( 40, 20, 112)"></span></td>
|
||||
<td><span style="background-color:rgb( 64, 44, 144)"></span></td>
|
||||
<td><span style="background-color:rgb( 88, 64, 172)"></span></td>
|
||||
<td><span style="background-color:rgb(104, 76, 196)"></span></td>
|
||||
<td><span style="background-color:rgb(120, 88, 224)"></span></td>
|
||||
<td><span style="background-color:rgb(140, 104, 252)"></span></td>
|
||||
<td><span style="background-color:rgb(160, 136, 252)"></span></td>
|
||||
<td><span style="background-color:rgb(188, 168, 252)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x88</td>
|
||||
<td>0x89</td>
|
||||
<td>0x8a</td>
|
||||
<td>0x8b</td>
|
||||
<td>0x8c</td>
|
||||
<td>0x8d</td>
|
||||
<td>0x8e</td>
|
||||
<td>0x8f</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>136</td>
|
||||
<td>137</td>
|
||||
<td>138</td>
|
||||
<td>139</td>
|
||||
<td>140</td>
|
||||
<td>141</td>
|
||||
<td>142</td>
|
||||
<td>143</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_ORANGE</th>
|
||||
<td><span style="background-color:rgb(184, 120, 24)"></span></td>
|
||||
<td><span style="background-color:rgb(204, 136, 8)"></span></td>
|
||||
<td><span style="background-color:rgb(228, 144, 4)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 156, 0)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 176, 48)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 196, 100)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 216, 152)"></span></td>
|
||||
<td><span style="background-color:rgb(244, 220, 176)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x40</td>
|
||||
<td>0xc0</td>
|
||||
<td>0xc1</td>
|
||||
<td>0xc2</td>
|
||||
<td>0xc3</td>
|
||||
<td>0xc4</td>
|
||||
<td>0xc5</td>
|
||||
<td>0x27</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>64</td>
|
||||
<td>192</td>
|
||||
<td>193</td>
|
||||
<td>194</td>
|
||||
<td>195</td>
|
||||
<td>196</td>
|
||||
<td>197</td>
|
||||
<td>39</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_BROWN</th>
|
||||
<td><span style="background-color:rgb( 72, 44, 4)"></span></td>
|
||||
<td><span style="background-color:rgb( 88, 60, 20)"></span></td>
|
||||
<td><span style="background-color:rgb(104, 80, 44)"></span></td>
|
||||
<td><span style="background-color:rgb(124, 104, 72)"></span></td>
|
||||
<td><span style="background-color:rgb(152, 132, 92)"></span></td>
|
||||
<td><span style="background-color:rgb(184, 160, 120)"></span></td>
|
||||
<td><span style="background-color:rgb(212, 188, 148)"></span></td>
|
||||
<td><span style="background-color:rgb(244, 220, 176)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x20</td>
|
||||
<td>0x21</td>
|
||||
<td>0x22</td>
|
||||
<td>0x23</td>
|
||||
<td>0x24</td>
|
||||
<td>0x25</td>
|
||||
<td>0x26</td>
|
||||
<td>0x27</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>32</td>
|
||||
<td>33</td>
|
||||
<td>34</td>
|
||||
<td>35</td>
|
||||
<td>36</td>
|
||||
<td>37</td>
|
||||
<td>38</td>
|
||||
<td>39</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_GREY</th>
|
||||
<td><span style="background-color:rgb( 64, 64, 64)"></span></td>
|
||||
<td><span style="background-color:rgb( 80, 80, 80)"></span></td>
|
||||
<td><span style="background-color:rgb(100, 100, 100)"></span></td>
|
||||
<td><span style="background-color:rgb(116, 116, 116)"></span></td>
|
||||
<td><span style="background-color:rgb(132, 132, 132)"></span></td>
|
||||
<td><span style="background-color:rgb(148, 148, 148)"></span></td>
|
||||
<td><span style="background-color:rgb(168, 168, 168)"></span></td>
|
||||
<td><span style="background-color:rgb(184, 184, 184)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x4</td>
|
||||
<td>0x5</td>
|
||||
<td>0x6</td>
|
||||
<td>0x7</td>
|
||||
<td>0x8</td>
|
||||
<td>0x9</td>
|
||||
<td>0xa</td>
|
||||
<td>0xb</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>4</td>
|
||||
<td>5</td>
|
||||
<td>6</td>
|
||||
<td>7</td>
|
||||
<td>8</td>
|
||||
<td>9</td>
|
||||
<td>10</td>
|
||||
<td>11</td>
|
||||
</tr>
|
||||
|
||||
<tr class="top">
|
||||
<th rowspan="3">COLOUR_WHITE</th>
|
||||
<td><span style="background-color:rgb(132, 132, 132)"></span></td>
|
||||
<td><span style="background-color:rgb(148, 148, 148)"></span></td>
|
||||
<td><span style="background-color:rgb(168, 168, 168)"></span></td>
|
||||
<td><span style="background-color:rgb(184, 184, 184)"></span></td>
|
||||
<td><span style="background-color:rgb(200, 200, 200)"></span></td>
|
||||
<td><span style="background-color:rgb(216, 216, 216)"></span></td>
|
||||
<td><span style="background-color:rgb(232, 232, 232)"></span></td>
|
||||
<td><span style="background-color:rgb(252, 252, 252)"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x8</td>
|
||||
<td>0x9</td>
|
||||
<td>0xa</td>
|
||||
<td>0xb</td>
|
||||
<td>0xc</td>
|
||||
<td>0xd</td>
|
||||
<td>0xe</td>
|
||||
<td>0xf</td>
|
||||
</tr>
|
||||
<tr class="bottom">
|
||||
<td>8</td>
|
||||
<td>9</td>
|
||||
<td>10</td>
|
||||
<td>11</td>
|
||||
<td>12</td>
|
||||
<td>13</td>
|
||||
<td>14</td>
|
||||
<td>15</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -211,3 +211,10 @@ Last updated: 2011-02-16
|
||||
communication from an admin tool reach the programme. See section 1
|
||||
'Starting a server' further up for the ports and protocols used by OpenTTD.
|
||||
The ports can be configured in the config file.
|
||||
|
||||
- My advertising server warns a lot about getaddrinfo taking N seconds
|
||||
This could be a transient issue with your (local) DNS server, but if the
|
||||
problem persists there is likely a configuration issue in DNS resolving
|
||||
on your computer. This seems to be a common configuration issue for
|
||||
Docker instances, where the DNS resolving waits for a time out of usually
|
||||
5 seconds.
|
||||
|
||||
Binary file not shown.
@@ -4,7 +4,7 @@
|
||||
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
-1 * 0 0C "OpenTTD GUI graphics"
|
||||
-1 * 3 05 15 \b 186 // OPENTTD_SPRITE_COUNT
|
||||
-1 * 3 05 15 \b 191 // OPENTTD_SPRITE_COUNT
|
||||
-1 sprites/openttdgui.png 8bpp 66 8 64 31 -31 7 normal
|
||||
-1 sprites/openttdgui.png 8bpp 146 8 64 31 -31 7 normal
|
||||
-1 sprites/openttdgui.png 8bpp 226 8 64 31 -31 7 normal
|
||||
@@ -191,3 +191,8 @@
|
||||
-1 sprites/openttdgui_convert_tram.png 8bpp 24 0 32 32 0 0 normal
|
||||
-1 sprites/openttdgui.png 8bpp 513 440 10 10 0 0 normal
|
||||
-1 sprites/openttdgui.png 8bpp 526 440 10 10 0 0 normal
|
||||
-1 sprites/openttdgui.png 8bpp 539 440 12 10 0 0 normal
|
||||
-1 sprites/openttdgui.png 8bpp 553 440 12 10 0 0 normal
|
||||
-1 sprites/openttdgui.png 8bpp 567 440 12 10 0 0 normal
|
||||
-1 sprites/openttdgui.png 8bpp 581 440 10 10 0 0 normal
|
||||
-1 sprites/openttdgui.png 8bpp 593 440 10 10 0 0 normal
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 44 KiB |
@@ -69,10 +69,14 @@ Module.preRun.push(function() {
|
||||
}
|
||||
|
||||
window.openttd_server_list = function() {
|
||||
add_server = Module.cwrap("em_openttd_add_server", null, ["string", "number"]);
|
||||
add_server = Module.cwrap("em_openttd_add_server", null, ["string"]);
|
||||
|
||||
/* Add servers that support WebSocket here. Example:
|
||||
* add_server("localhost", 3979); */
|
||||
/* Add servers that support WebSocket here. Examples:
|
||||
* add_server("localhost");
|
||||
* add_server("localhost:3979");
|
||||
* add_server("127.0.0.1:3979");
|
||||
* add_server("[::1]:3979");
|
||||
*/
|
||||
}
|
||||
|
||||
var leftButtonDown = false;
|
||||
|
||||
@@ -7,6 +7,7 @@ class Regression extends AIInfo {
|
||||
function GetAPIVersion() { return "1.12"; }
|
||||
function GetDate() { return "2007-03-18"; }
|
||||
function CreateInstance() { return "Regression"; }
|
||||
function UseAsRandomAI() { return false; }
|
||||
}
|
||||
|
||||
RegisterAI(Regression());
|
||||
|
||||
@@ -7,6 +7,7 @@ class StationList extends AIInfo {
|
||||
function GetAPIVersion() { return "1.12"; }
|
||||
function GetDate() { return "2007-03-18"; }
|
||||
function CreateInstance() { return "StationList"; }
|
||||
function UseAsRandomAI() { return false; }
|
||||
}
|
||||
|
||||
RegisterAI(StationList());
|
||||
|
||||
12
src/3rdparty/squirrel/squirrel/sqarray.h
vendored
12
src/3rdparty/squirrel/squirrel/sqarray.h
vendored
@@ -17,9 +17,9 @@ public:
|
||||
return newarray;
|
||||
}
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void Mark(SQCollectable **chain);
|
||||
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override;
|
||||
#endif
|
||||
void Finalize(){
|
||||
void Finalize() override {
|
||||
_values.resize(0);
|
||||
}
|
||||
bool Get(const SQInteger nidx,SQObjectPtr &val)
|
||||
@@ -78,9 +78,13 @@ public:
|
||||
ShrinkIfNeeded();
|
||||
return true;
|
||||
}
|
||||
void Release()
|
||||
void Release() override
|
||||
{
|
||||
sq_delete(this,SQArray);
|
||||
this->_sharedstate->DelayFinalFree(this);
|
||||
}
|
||||
void FinalFree() override
|
||||
{
|
||||
sq_delete(this, SQArray);
|
||||
}
|
||||
SQObjectPtrVec _values;
|
||||
};
|
||||
|
||||
18
src/3rdparty/squirrel/squirrel/sqclass.h
vendored
18
src/3rdparty/squirrel/squirrel/sqclass.h
vendored
@@ -59,7 +59,7 @@ public:
|
||||
}
|
||||
void Finalize();
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void Mark(SQCollectable ** );
|
||||
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
|
||||
#endif
|
||||
SQInteger Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);
|
||||
SQInstance *CreateInstance();
|
||||
@@ -126,31 +126,33 @@ public:
|
||||
}
|
||||
return false;
|
||||
}
|
||||
void Release() {
|
||||
void Release() override {
|
||||
_uiRef++;
|
||||
try {
|
||||
if (_hook) { _hook(_userpointer,0);}
|
||||
} catch (...) {
|
||||
_uiRef--;
|
||||
if (_uiRef == 0) {
|
||||
SQInteger size = _memsize;
|
||||
this->~SQInstance();
|
||||
SQ_FREE(this, size);
|
||||
this->_sharedstate->DelayFinalFree(this);
|
||||
}
|
||||
throw;
|
||||
}
|
||||
_uiRef--;
|
||||
if(_uiRef > 0) return;
|
||||
this->_sharedstate->DelayFinalFree(this);
|
||||
}
|
||||
void FinalFree() override
|
||||
{
|
||||
SQInteger size = _memsize;
|
||||
this->~SQInstance();
|
||||
SQ_FREE(this, size);
|
||||
}
|
||||
void Finalize();
|
||||
void Finalize() override;
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void Mark(SQCollectable ** );
|
||||
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override;
|
||||
#endif
|
||||
bool InstanceOf(SQClass *trg);
|
||||
bool GetMetaMethod(SQVM *v,SQMetaMethod mm,SQObjectPtr &res);
|
||||
bool GetMetaMethod(SQVM *v,SQMetaMethod mm,SQObjectPtr &res) override;
|
||||
|
||||
SQClass *_class;
|
||||
SQUserPointer _userpointer;
|
||||
|
||||
6
src/3rdparty/squirrel/squirrel/sqclosure.h
vendored
6
src/3rdparty/squirrel/squirrel/sqclosure.h
vendored
@@ -32,7 +32,7 @@ public:
|
||||
bool Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write);
|
||||
static bool Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &ret);
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void Mark(SQCollectable **chain);
|
||||
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
|
||||
void Finalize(){_outervalues.resize(0); }
|
||||
#endif
|
||||
SQObjectPtr _env;
|
||||
@@ -66,7 +66,7 @@ public:
|
||||
bool Yield(SQVM *v);
|
||||
bool Resume(SQVM *v,SQInteger target);
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void Mark(SQCollectable **chain);
|
||||
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
|
||||
void Finalize(){_stack.resize(0);_closure=_null_;}
|
||||
#endif
|
||||
SQObjectPtr _closure;
|
||||
@@ -106,7 +106,7 @@ public:
|
||||
sq_delete(this,SQNativeClosure);
|
||||
}
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void Mark(SQCollectable **chain);
|
||||
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
|
||||
void Finalize(){_outervalues.resize(0);}
|
||||
#endif
|
||||
SQInteger _nparamscheck;
|
||||
|
||||
131
src/3rdparty/squirrel/squirrel/sqobject.cpp
vendored
131
src/3rdparty/squirrel/squirrel/sqobject.cpp
vendored
@@ -486,104 +486,81 @@ bool SQFunctionProto::Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr
|
||||
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
|
||||
#define START_MARK() if(!(_uiRef&MARK_FLAG)){ \
|
||||
_uiRef|=MARK_FLAG;
|
||||
|
||||
#define END_MARK() RemoveFromChain(&_sharedstate->_gc_chain, this); \
|
||||
AddToChain(chain, this); }
|
||||
|
||||
void SQVM::Mark(SQCollectable **chain)
|
||||
void SQVM::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue)
|
||||
{
|
||||
START_MARK()
|
||||
SQSharedState::MarkObject(_lasterror,chain);
|
||||
SQSharedState::MarkObject(_errorhandler,chain);
|
||||
SQSharedState::MarkObject(_debughook,chain);
|
||||
SQSharedState::MarkObject(_roottable, chain);
|
||||
SQSharedState::MarkObject(temp_reg, chain);
|
||||
for(SQUnsignedInteger i = 0; i < _stack.size(); i++) SQSharedState::MarkObject(_stack[i], chain);
|
||||
for(SQUnsignedInteger j = 0; j < _vargsstack.size(); j++) SQSharedState::MarkObject(_vargsstack[j], chain);
|
||||
for(SQInteger k = 0; k < _callsstacksize; k++) SQSharedState::MarkObject(_callsstack[k]._closure, chain);
|
||||
END_MARK()
|
||||
SQSharedState::EnqueueMarkObject(_lasterror,queue);
|
||||
SQSharedState::EnqueueMarkObject(_errorhandler,queue);
|
||||
SQSharedState::EnqueueMarkObject(_debughook,queue);
|
||||
SQSharedState::EnqueueMarkObject(_roottable, queue);
|
||||
SQSharedState::EnqueueMarkObject(temp_reg, queue);
|
||||
for(SQUnsignedInteger i = 0; i < _stack.size(); i++) SQSharedState::EnqueueMarkObject(_stack[i], queue);
|
||||
for(SQUnsignedInteger j = 0; j < _vargsstack.size(); j++) SQSharedState::EnqueueMarkObject(_vargsstack[j], queue);
|
||||
for(SQInteger k = 0; k < _callsstacksize; k++) SQSharedState::EnqueueMarkObject(_callsstack[k]._closure, queue);
|
||||
}
|
||||
|
||||
void SQArray::Mark(SQCollectable **chain)
|
||||
void SQArray::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue)
|
||||
{
|
||||
START_MARK()
|
||||
SQInteger len = _values.size();
|
||||
for(SQInteger i = 0;i < len; i++) SQSharedState::MarkObject(_values[i], chain);
|
||||
END_MARK()
|
||||
}
|
||||
void SQTable::Mark(SQCollectable **chain)
|
||||
{
|
||||
START_MARK()
|
||||
if(_delegate) _delegate->Mark(chain);
|
||||
SQInteger len = _numofnodes;
|
||||
for(SQInteger i = 0; i < len; i++){
|
||||
SQSharedState::MarkObject(_nodes[i].key, chain);
|
||||
SQSharedState::MarkObject(_nodes[i].val, chain);
|
||||
}
|
||||
END_MARK()
|
||||
SQInteger len = _values.size();
|
||||
for(SQInteger i = 0;i < len; i++) SQSharedState::EnqueueMarkObject(_values[i], queue);
|
||||
}
|
||||
|
||||
void SQClass::Mark(SQCollectable **chain)
|
||||
void SQTable::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue)
|
||||
{
|
||||
START_MARK()
|
||||
_members->Mark(chain);
|
||||
if(_base) _base->Mark(chain);
|
||||
SQSharedState::MarkObject(_attributes, chain);
|
||||
for(SQUnsignedInteger i =0; i< _defaultvalues.size(); i++) {
|
||||
SQSharedState::MarkObject(_defaultvalues[i].val, chain);
|
||||
SQSharedState::MarkObject(_defaultvalues[i].attrs, chain);
|
||||
}
|
||||
for(SQUnsignedInteger j =0; j< _methods.size(); j++) {
|
||||
SQSharedState::MarkObject(_methods[j].val, chain);
|
||||
SQSharedState::MarkObject(_methods[j].attrs, chain);
|
||||
}
|
||||
for(SQUnsignedInteger k =0; k< _metamethods.size(); k++) {
|
||||
SQSharedState::MarkObject(_metamethods[k], chain);
|
||||
}
|
||||
END_MARK()
|
||||
if(_delegate) queue.Enqueue(_delegate);
|
||||
SQInteger len = _numofnodes;
|
||||
for(SQInteger i = 0; i < len; i++){
|
||||
SQSharedState::EnqueueMarkObject(_nodes[i].key, queue);
|
||||
SQSharedState::EnqueueMarkObject(_nodes[i].val, queue);
|
||||
}
|
||||
}
|
||||
|
||||
void SQInstance::Mark(SQCollectable **chain)
|
||||
void SQClass::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue)
|
||||
{
|
||||
START_MARK()
|
||||
_class->Mark(chain);
|
||||
SQUnsignedInteger nvalues = _class->_defaultvalues.size();
|
||||
for(SQUnsignedInteger i =0; i< nvalues; i++) {
|
||||
SQSharedState::MarkObject(_values[i], chain);
|
||||
}
|
||||
END_MARK()
|
||||
queue.Enqueue(_members);
|
||||
if(_base) queue.Enqueue(_base);
|
||||
SQSharedState::EnqueueMarkObject(_attributes, queue);
|
||||
for(SQUnsignedInteger i =0; i< _defaultvalues.size(); i++) {
|
||||
SQSharedState::EnqueueMarkObject(_defaultvalues[i].val, queue);
|
||||
SQSharedState::EnqueueMarkObject(_defaultvalues[i].attrs, queue);
|
||||
}
|
||||
for(SQUnsignedInteger j =0; j< _methods.size(); j++) {
|
||||
SQSharedState::EnqueueMarkObject(_methods[j].val, queue);
|
||||
SQSharedState::EnqueueMarkObject(_methods[j].attrs, queue);
|
||||
}
|
||||
for(SQUnsignedInteger k =0; k< _metamethods.size(); k++) {
|
||||
SQSharedState::EnqueueMarkObject(_metamethods[k], queue);
|
||||
}
|
||||
}
|
||||
|
||||
void SQGenerator::Mark(SQCollectable **chain)
|
||||
void SQInstance::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue)
|
||||
{
|
||||
START_MARK()
|
||||
for(SQUnsignedInteger i = 0; i < _stack.size(); i++) SQSharedState::MarkObject(_stack[i], chain);
|
||||
for(SQUnsignedInteger j = 0; j < _vargsstack.size(); j++) SQSharedState::MarkObject(_vargsstack[j], chain);
|
||||
SQSharedState::MarkObject(_closure, chain);
|
||||
END_MARK()
|
||||
queue.Enqueue(_class);
|
||||
SQUnsignedInteger nvalues = _class->_defaultvalues.size();
|
||||
for(SQUnsignedInteger i =0; i< nvalues; i++) {
|
||||
SQSharedState::EnqueueMarkObject(_values[i], queue);
|
||||
}
|
||||
}
|
||||
|
||||
void SQClosure::Mark(SQCollectable **chain)
|
||||
void SQGenerator::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue)
|
||||
{
|
||||
START_MARK()
|
||||
for(SQUnsignedInteger i = 0; i < _outervalues.size(); i++) SQSharedState::MarkObject(_outervalues[i], chain);
|
||||
for(SQUnsignedInteger i = 0; i < _defaultparams.size(); i++) SQSharedState::MarkObject(_defaultparams[i], chain);
|
||||
END_MARK()
|
||||
for(SQUnsignedInteger i = 0; i < _stack.size(); i++) SQSharedState::EnqueueMarkObject(_stack[i], queue);
|
||||
for(SQUnsignedInteger j = 0; j < _vargsstack.size(); j++) SQSharedState::EnqueueMarkObject(_vargsstack[j], queue);
|
||||
SQSharedState::EnqueueMarkObject(_closure, queue);
|
||||
}
|
||||
|
||||
void SQNativeClosure::Mark(SQCollectable **chain)
|
||||
void SQClosure::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue)
|
||||
{
|
||||
START_MARK()
|
||||
for(SQUnsignedInteger i = 0; i < _outervalues.size(); i++) SQSharedState::MarkObject(_outervalues[i], chain);
|
||||
END_MARK()
|
||||
for(SQUnsignedInteger i = 0; i < _outervalues.size(); i++) SQSharedState::EnqueueMarkObject(_outervalues[i], queue);
|
||||
for(SQUnsignedInteger i = 0; i < _defaultparams.size(); i++) SQSharedState::EnqueueMarkObject(_defaultparams[i], queue);
|
||||
}
|
||||
|
||||
void SQUserData::Mark(SQCollectable **chain){
|
||||
START_MARK()
|
||||
if(_delegate) _delegate->Mark(chain);
|
||||
END_MARK()
|
||||
void SQNativeClosure::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue)
|
||||
{
|
||||
for(SQUnsignedInteger i = 0; i < _outervalues.size(); i++) SQSharedState::EnqueueMarkObject(_outervalues[i], queue);
|
||||
}
|
||||
|
||||
void SQUserData::EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue){
|
||||
if(_delegate) queue.Enqueue(_delegate);
|
||||
}
|
||||
|
||||
void SQCollectable::UnMark() { _uiRef&=~MARK_FLAG; }
|
||||
|
||||
47
src/3rdparty/squirrel/squirrel/sqobject.h
vendored
47
src/3rdparty/squirrel/squirrel/sqobject.h
vendored
@@ -2,7 +2,7 @@
|
||||
#ifndef _SQOBJECT_H_
|
||||
#define _SQOBJECT_H_
|
||||
|
||||
#include <limits>
|
||||
#include <vector>
|
||||
#include "squtils.h"
|
||||
|
||||
#define SQ_CLOSURESTREAM_HEAD (('S'<<24)|('Q'<<16)|('I'<<8)|('R'))
|
||||
@@ -345,11 +345,54 @@ struct SQCollectable : public SQRefCounted {
|
||||
SQCollectable *_prev;
|
||||
SQSharedState *_sharedstate;
|
||||
virtual void Release()=0;
|
||||
virtual void Mark(SQCollectable **chain)=0;
|
||||
virtual void EnqueueMarkObjectForChildren(class SQGCMarkerQueue &queue)=0;
|
||||
void UnMark();
|
||||
virtual void Finalize()=0;
|
||||
static void AddToChain(SQCollectable **chain,SQCollectable *c);
|
||||
static void RemoveFromChain(SQCollectable **chain,SQCollectable *c);
|
||||
|
||||
/**
|
||||
* Helper to perform the final memory freeing of this instance. Since the destructor might
|
||||
* release more objects, this can cause a very deep recursion. As such, the calls to this
|
||||
* are to be done via _sharedstate->DelayFinalFree which ensures the calls to this method
|
||||
* are done in an iterative instead of recursive approach.
|
||||
*/
|
||||
virtual void FinalFree() {}
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper container for state to change the garbage collection from a recursive to an iterative approach.
|
||||
* The iterative approach provides effectively a depth first search approach.
|
||||
*/
|
||||
class SQGCMarkerQueue {
|
||||
std::vector<SQCollectable*> stack; ///< The elements to still process, with the most recent elements at the back.
|
||||
public:
|
||||
/** Whether there are any elements left to process. */
|
||||
bool IsEmpty() { return this->stack.empty(); }
|
||||
|
||||
/**
|
||||
* Remove the most recently added element from the queue.
|
||||
* Removal when the queue is empty results in undefined behaviour.
|
||||
*/
|
||||
SQCollectable *Pop()
|
||||
{
|
||||
SQCollectable *collectable = this->stack.back();
|
||||
this->stack.pop_back();
|
||||
return collectable;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a collectable to the queue, but only when it has not been marked yet.
|
||||
* When adding it to the queue, the collectable will be marked, so subsequent calls
|
||||
* will not add it again.
|
||||
*/
|
||||
void Enqueue(SQCollectable *collectable)
|
||||
{
|
||||
if ((collectable->_uiRef & MARK_FLAG) == 0) {
|
||||
collectable->_uiRef |= MARK_FLAG;
|
||||
this->stack.push_back(collectable);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
94
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
94
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
@@ -99,6 +99,7 @@ SQSharedState::SQSharedState()
|
||||
_notifyallexceptions = false;
|
||||
_scratchpad=NULL;
|
||||
_scratchpadsize=0;
|
||||
_collectable_free_processing = false;
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
_gc_chain=NULL;
|
||||
#endif
|
||||
@@ -226,20 +227,48 @@ SQInteger SQSharedState::GetMetaMethodIdxByName(const SQObjectPtr &name)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function that is to be used instead of calling FinalFree directly on the instance,
|
||||
* so the frees can happen iteratively. This as in the FinalFree the references to any other
|
||||
* objects are released, which can cause those object to be freed yielding a potentially
|
||||
* very deep stack in case of for example a link list.
|
||||
*
|
||||
* This is done internally by a vector onto which the to be freed instances are pushed. When
|
||||
* this is called when not already processing, this method will actually call the FinalFree
|
||||
* function which might cause more elements to end up in the queue which this method then
|
||||
* picks up continueing until it has processed all instances in that queue.
|
||||
* @param collectable The collectable to (eventually) free.
|
||||
*/
|
||||
void SQSharedState::DelayFinalFree(SQCollectable *collectable)
|
||||
{
|
||||
this->_collectable_free_queue.push_back(collectable);
|
||||
|
||||
if (!this->_collectable_free_processing) {
|
||||
this->_collectable_free_processing = true;
|
||||
while (!this->_collectable_free_queue.empty()) {
|
||||
SQCollectable *collectable = this->_collectable_free_queue.back();
|
||||
this->_collectable_free_queue.pop_back();
|
||||
collectable->FinalFree();
|
||||
}
|
||||
this->_collectable_free_processing = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
|
||||
void SQSharedState::MarkObject(SQObjectPtr &o,SQCollectable **chain)
|
||||
void SQSharedState::EnqueueMarkObject(SQObjectPtr &o,SQGCMarkerQueue &queue)
|
||||
{
|
||||
switch(type(o)){
|
||||
case OT_TABLE:_table(o)->Mark(chain);break;
|
||||
case OT_ARRAY:_array(o)->Mark(chain);break;
|
||||
case OT_USERDATA:_userdata(o)->Mark(chain);break;
|
||||
case OT_CLOSURE:_closure(o)->Mark(chain);break;
|
||||
case OT_NATIVECLOSURE:_nativeclosure(o)->Mark(chain);break;
|
||||
case OT_GENERATOR:_generator(o)->Mark(chain);break;
|
||||
case OT_THREAD:_thread(o)->Mark(chain);break;
|
||||
case OT_CLASS:_class(o)->Mark(chain);break;
|
||||
case OT_INSTANCE:_instance(o)->Mark(chain);break;
|
||||
case OT_TABLE:queue.Enqueue(_table(o));break;
|
||||
case OT_ARRAY:queue.Enqueue(_array(o));break;
|
||||
case OT_USERDATA:queue.Enqueue(_userdata(o));break;
|
||||
case OT_CLOSURE:queue.Enqueue(_closure(o));break;
|
||||
case OT_NATIVECLOSURE:queue.Enqueue(_nativeclosure(o));break;
|
||||
case OT_GENERATOR:queue.Enqueue(_generator(o));break;
|
||||
case OT_THREAD:queue.Enqueue(_thread(o));break;
|
||||
case OT_CLASS:queue.Enqueue(_class(o));break;
|
||||
case OT_INSTANCE:queue.Enqueue(_instance(o));break;
|
||||
default: break; //shutup compiler
|
||||
}
|
||||
}
|
||||
@@ -248,27 +277,36 @@ void SQSharedState::MarkObject(SQObjectPtr &o,SQCollectable **chain)
|
||||
SQInteger SQSharedState::CollectGarbage(SQVM *vm)
|
||||
{
|
||||
SQInteger n=0;
|
||||
SQCollectable *tchain=NULL;
|
||||
SQVM *vms = _thread(_root_vm);
|
||||
|
||||
vms->Mark(&tchain);
|
||||
SQGCMarkerQueue queue;
|
||||
queue.Enqueue(vms);
|
||||
#ifdef WITH_ASSERT
|
||||
SQInteger x = _table(_thread(_root_vm)->_roottable)->CountUsed();
|
||||
#endif
|
||||
_refs_table.Mark(&tchain);
|
||||
MarkObject(_registry,&tchain);
|
||||
MarkObject(_consts,&tchain);
|
||||
MarkObject(_metamethodsmap,&tchain);
|
||||
MarkObject(_table_default_delegate,&tchain);
|
||||
MarkObject(_array_default_delegate,&tchain);
|
||||
MarkObject(_string_default_delegate,&tchain);
|
||||
MarkObject(_number_default_delegate,&tchain);
|
||||
MarkObject(_generator_default_delegate,&tchain);
|
||||
MarkObject(_thread_default_delegate,&tchain);
|
||||
MarkObject(_closure_default_delegate,&tchain);
|
||||
MarkObject(_class_default_delegate,&tchain);
|
||||
MarkObject(_instance_default_delegate,&tchain);
|
||||
MarkObject(_weakref_default_delegate,&tchain);
|
||||
_refs_table.EnqueueMarkObject(queue);
|
||||
EnqueueMarkObject(_registry,queue);
|
||||
EnqueueMarkObject(_consts,queue);
|
||||
EnqueueMarkObject(_metamethodsmap,queue);
|
||||
EnqueueMarkObject(_table_default_delegate,queue);
|
||||
EnqueueMarkObject(_array_default_delegate,queue);
|
||||
EnqueueMarkObject(_string_default_delegate,queue);
|
||||
EnqueueMarkObject(_number_default_delegate,queue);
|
||||
EnqueueMarkObject(_generator_default_delegate,queue);
|
||||
EnqueueMarkObject(_thread_default_delegate,queue);
|
||||
EnqueueMarkObject(_closure_default_delegate,queue);
|
||||
EnqueueMarkObject(_class_default_delegate,queue);
|
||||
EnqueueMarkObject(_instance_default_delegate,queue);
|
||||
EnqueueMarkObject(_weakref_default_delegate,queue);
|
||||
|
||||
SQCollectable *tchain=NULL;
|
||||
|
||||
while (!queue.IsEmpty()) {
|
||||
SQCollectable *q = queue.Pop();
|
||||
q->EnqueueMarkObjectForChildren(queue);
|
||||
SQCollectable::RemoveFromChain(&_gc_chain, q);
|
||||
SQCollectable::AddToChain(&tchain, q);
|
||||
}
|
||||
|
||||
SQCollectable *t = _gc_chain;
|
||||
SQCollectable *nx = NULL;
|
||||
@@ -357,12 +395,12 @@ RefTable::~RefTable()
|
||||
}
|
||||
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void RefTable::Mark(SQCollectable **chain)
|
||||
void RefTable::EnqueueMarkObject(SQGCMarkerQueue &queue)
|
||||
{
|
||||
RefNode *nodes = (RefNode *)_nodes;
|
||||
for(SQUnsignedInteger n = 0; n < _numofslots; n++) {
|
||||
if(type(nodes->obj) != OT_NULL) {
|
||||
SQSharedState::MarkObject(nodes->obj,chain);
|
||||
SQSharedState::EnqueueMarkObject(nodes->obj,queue);
|
||||
}
|
||||
nodes++;
|
||||
}
|
||||
|
||||
9
src/3rdparty/squirrel/squirrel/sqstate.h
vendored
9
src/3rdparty/squirrel/squirrel/sqstate.h
vendored
@@ -34,7 +34,7 @@ struct RefTable {
|
||||
void AddRef(SQObject &obj);
|
||||
SQBool Release(SQObject &obj);
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void Mark(SQCollectable **chain);
|
||||
void EnqueueMarkObject(SQGCMarkerQueue &queue);
|
||||
#endif
|
||||
void Finalize();
|
||||
private:
|
||||
@@ -61,9 +61,10 @@ struct SQSharedState
|
||||
public:
|
||||
SQChar* GetScratchPad(SQInteger size);
|
||||
SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name);
|
||||
void DelayFinalFree(SQCollectable *collectable);
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
SQInteger CollectGarbage(SQVM *vm);
|
||||
static void MarkObject(SQObjectPtr &o,SQCollectable **chain);
|
||||
static void EnqueueMarkObject(SQObjectPtr &o,SQGCMarkerQueue &queue);
|
||||
#endif
|
||||
SQObjectPtrVec *_metamethods;
|
||||
SQObjectPtr _metamethodsmap;
|
||||
@@ -74,6 +75,10 @@ public:
|
||||
SQObjectPtr _registry;
|
||||
SQObjectPtr _consts;
|
||||
SQObjectPtr _constructoridx;
|
||||
/** Queue to make freeing of collectables iterative. */
|
||||
std::vector<SQCollectable *> _collectable_free_queue;
|
||||
/** Whether someone is already processing the _collectable_free_queue. */
|
||||
bool _collectable_free_processing;
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
SQCollectable *_gc_chain;
|
||||
#endif
|
||||
|
||||
10
src/3rdparty/squirrel/squirrel/sqtable.h
vendored
10
src/3rdparty/squirrel/squirrel/sqtable.h
vendored
@@ -50,7 +50,7 @@ public:
|
||||
newtable->_delegate = NULL;
|
||||
return newtable;
|
||||
}
|
||||
void Finalize();
|
||||
void Finalize() override;
|
||||
SQTable *Clone();
|
||||
~SQTable()
|
||||
{
|
||||
@@ -60,7 +60,7 @@ public:
|
||||
SQ_FREE(_nodes, _numofnodes * sizeof(_HashNode));
|
||||
}
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void Mark(SQCollectable **chain);
|
||||
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue) override;
|
||||
#endif
|
||||
inline _HashNode *_Get(const SQObjectPtr &key,SQHash hash)
|
||||
{
|
||||
@@ -81,7 +81,11 @@ public:
|
||||
|
||||
SQInteger CountUsed(){ return _usednodes;}
|
||||
void Clear();
|
||||
void Release()
|
||||
void Release() override
|
||||
{
|
||||
this->_sharedstate->DelayFinalFree(this);
|
||||
}
|
||||
void FinalFree() override
|
||||
{
|
||||
sq_delete(this, SQTable);
|
||||
}
|
||||
|
||||
2
src/3rdparty/squirrel/squirrel/squserdata.h
vendored
2
src/3rdparty/squirrel/squirrel/squserdata.h
vendored
@@ -18,7 +18,7 @@ struct SQUserData : SQDelegable
|
||||
return ud;
|
||||
}
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void Mark(SQCollectable **chain);
|
||||
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
|
||||
void Finalize(){SetDelegate(NULL);}
|
||||
#endif
|
||||
void Release() {
|
||||
|
||||
2
src/3rdparty/squirrel/squirrel/sqvm.h
vendored
2
src/3rdparty/squirrel/squirrel/sqvm.h
vendored
@@ -113,7 +113,7 @@ public:
|
||||
#endif
|
||||
|
||||
#ifndef NO_GARBAGE_COLLECTOR
|
||||
void Mark(SQCollectable **chain);
|
||||
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
|
||||
#endif
|
||||
void Finalize();
|
||||
void GrowCallStack() {
|
||||
|
||||
@@ -192,7 +192,7 @@ struct AIListWindow : public Window {
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_AIL_LIST: { // Select one of the AIs
|
||||
int sel = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_AIL_LIST, 0, this->line_height) - 1;
|
||||
int sel = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_AIL_LIST) - 1;
|
||||
if (sel < (int)this->info_list->size()) {
|
||||
this->selected = sel;
|
||||
this->SetDirty();
|
||||
@@ -691,31 +691,20 @@ static const NWidgetPart _nested_ai_config_widgets[] = {
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL), SetPIP(4, 4, 4),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_YELLOW, WID_AIC_DECREASE), SetFill(0, 1), SetDataTip(AWV_DECREASE, STR_NULL),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_YELLOW, WID_AIC_INCREASE), SetFill(0, 1), SetDataTip(AWV_INCREASE, STR_NULL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(6, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_MAUVE, WID_AIC_NUMBER), SetDataTip(STR_DIFFICULTY_LEVEL_SETTING_MAXIMUM_NO_COMPETITORS, STR_NULL), SetFill(1, 0), SetPadding(1, 0, 0, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_MOVE_UP), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_CONFIG_MOVE_UP, STR_AI_CONFIG_MOVE_UP_TOOLTIP),
|
||||
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(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 9),
|
||||
NWidget(WWT_FRAME, COLOUR_MAUVE), SetDataTip(STR_AI_CONFIG_GAMESCRIPT, STR_NULL), SetPadding(0, 5, 4, 5),
|
||||
NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIC_GAMELIST), SetSizingType(NWST_STEP), SetMinimalSize(288, 14), SetFill(1, 0), SetMatrixDataTip(1, 1, STR_AI_CONFIG_GAMELIST_TOOLTIP),
|
||||
NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIC_GAMELIST), SetMinimalSize(288, 14), SetFill(1, 0), SetMatrixDataTip(1, 1, STR_AI_CONFIG_GAMELIST_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CHANGE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_CONFIG_CHANGE, STR_AI_CONFIG_CHANGE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONFIGURE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_CONFIG_CONFIGURE, STR_AI_CONFIG_CONFIGURE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CLOSE), SetFill(1, 0), SetMinimalSize(93, 12), SetDataTip(STR_AI_SETTINGS_CLOSE, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CHANGE), SetFill(1, 0), SetMinimalSize(93, 0), SetDataTip(STR_AI_CONFIG_CHANGE, STR_AI_CONFIG_CHANGE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONFIGURE), SetFill(1, 0), SetMinimalSize(93, 0), SetDataTip(STR_AI_CONFIG_CONFIGURE, STR_AI_CONFIG_CONFIGURE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CLOSE), SetFill(1, 0), SetMinimalSize(93, 0), SetDataTip(STR_AI_SETTINGS_CLOSE, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONTENT_DOWNLOAD), SetFill(1, 0), SetMinimalSize(279, 12), SetPadding(0, 7, 9, 7), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONTENT_DOWNLOAD), SetFill(1, 0), SetMinimalSize(279, 0), SetPadding(0, 7, 9, 7), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -787,7 +776,9 @@ struct AIConfigWindow : public Window {
|
||||
break;
|
||||
|
||||
case WID_AIC_LIST:
|
||||
this->line_height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
|
||||
this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
|
||||
this->line_height = GetMinSizing(NWST_STEP, this->line_height);
|
||||
resize->height = this->line_height;
|
||||
size->height = 8 * this->line_height;
|
||||
break;
|
||||
|
||||
@@ -899,7 +890,7 @@ struct AIConfigWindow : public Window {
|
||||
}
|
||||
|
||||
case WID_AIC_LIST: { // Select a slot
|
||||
this->selected_slot = (CompanyID)this->vscroll->GetScrolledRowFromWidget(pt.y, this, widget, 0, this->line_height);
|
||||
this->selected_slot = (CompanyID)this->vscroll->GetScrolledRowFromWidget(pt.y, this, widget);
|
||||
this->InvalidateData();
|
||||
if (click_count > 1 && this->selected_slot != INVALID_COMPANY) ShowAIListWindow((CompanyID)this->selected_slot);
|
||||
break;
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "command_func.h"
|
||||
#include "group.h"
|
||||
#include "autoreplace_base.h"
|
||||
#include "core/bitmath_func.hpp"
|
||||
#include "core/pool_func.hpp"
|
||||
|
||||
#include "safeguards.h"
|
||||
@@ -64,7 +65,7 @@ void RemoveAllEngineReplacement(EngineRenewList *erl)
|
||||
EngineID EngineReplacement(EngineRenewList erl, EngineID engine, GroupID group, bool *replace_when_old)
|
||||
{
|
||||
const EngineRenew *er = GetEngineReplacement(erl, engine, group);
|
||||
if (er == nullptr && (group == DEFAULT_GROUP || (Group::IsValidID(group) && !Group::Get(group)->replace_protection))) {
|
||||
if (er == nullptr && (group == DEFAULT_GROUP || (Group::IsValidID(group) && !HasBit(Group::Get(group)->flags, GroupFlags::GF_REPLACE_PROTECTION)))) {
|
||||
/* We didn't find anything useful in the vehicle's own group so we will try ALL_GROUP */
|
||||
er = GetEngineReplacement(erl, engine, ALL_GROUP);
|
||||
}
|
||||
|
||||
@@ -741,6 +741,9 @@ CommandCost CmdAutoreplaceVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||
const Company *c = Company::Get(_current_company);
|
||||
bool wagon_removal = c->settings.renew_keep_length;
|
||||
|
||||
const Group *g = Group::GetIfValid(v->group_id);
|
||||
if (g != nullptr) wagon_removal = HasBit(g->flags, GroupFlags::GF_REPLACE_WAGON_REMOVAL);
|
||||
|
||||
/* Test whether any replacement is set, before issuing a whole lot of commands that would end in nothing changed */
|
||||
Vehicle *w = v;
|
||||
bool any_replacements = false;
|
||||
|
||||
@@ -82,7 +82,7 @@ class ReplaceVehicleWindow : public Window {
|
||||
bool replace_engines; ///< If \c true, engines are replaced, if \c false, wagons are replaced (only for trains).
|
||||
bool reset_sel_engine; ///< Also reset #sel_engine while updating left and/or right and no valid engine selected.
|
||||
GroupID sel_group; ///< Group selected to replace.
|
||||
int details_height; ///< Minimal needed height of the details panels (found so far).
|
||||
int details_height; ///< Minimal needed height of the details panels, in text lines (found so far).
|
||||
byte sort_criteria; ///< Criteria of sorting vehicles.
|
||||
bool descending_sort_order; ///< Order of sorting vehicles.
|
||||
bool show_hidden_engines; ///< Whether to show the hidden engines.
|
||||
@@ -230,7 +230,7 @@ public:
|
||||
this->engines[0].ForceRebuild();
|
||||
this->engines[1].ForceRebuild();
|
||||
this->reset_sel_engine = true;
|
||||
this->details_height = ((vehicletype == VEH_TRAIN) ? 10 : 9) * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
this->details_height = ((vehicletype == VEH_TRAIN) ? 10 : 9);
|
||||
this->sel_engine[0] = INVALID_ENGINE;
|
||||
this->sel_engine[1] = INVALID_ENGINE;
|
||||
this->show_hidden_engines = _engine_sort_show_hidden_engines[vehicletype];
|
||||
@@ -275,7 +275,7 @@ public:
|
||||
|
||||
case WID_RV_LEFT_DETAILS:
|
||||
case WID_RV_RIGHT_DETAILS:
|
||||
size->height = this->details_height;
|
||||
size->height = FONT_HEIGHT_NORMAL * this->details_height + padding.height;
|
||||
break;
|
||||
|
||||
case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: {
|
||||
@@ -378,8 +378,15 @@ public:
|
||||
break;
|
||||
|
||||
case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: {
|
||||
const Company *c = Company::Get(_local_company);
|
||||
SetDParam(0, c->settings.renew_keep_length ? STR_CONFIG_SETTING_ON : STR_CONFIG_SETTING_OFF);
|
||||
bool remove_wagon;
|
||||
const Group *g = Group::GetIfValid(this->sel_group);
|
||||
if (g != nullptr) {
|
||||
remove_wagon = HasBit(g->flags, GroupFlags::GF_REPLACE_WAGON_REMOVAL);
|
||||
} else {
|
||||
const Company *c = Company::Get(_local_company);
|
||||
remove_wagon = c->settings.renew_keep_length;
|
||||
}
|
||||
SetDParam(0, remove_wagon ? STR_CONFIG_SETTING_ON : STR_CONFIG_SETTING_OFF);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -478,7 +485,7 @@ public:
|
||||
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(side == 0 ? WID_RV_LEFT_DETAILS : WID_RV_RIGHT_DETAILS);
|
||||
int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT,
|
||||
nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine[side], ted);
|
||||
needed_height = std::max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM);
|
||||
needed_height = std::max(needed_height, (text_end - (int)nwi->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL);
|
||||
}
|
||||
}
|
||||
if (needed_height != this->details_height) { // Details window are not high enough, enlarge them.
|
||||
@@ -531,9 +538,16 @@ public:
|
||||
}
|
||||
break;
|
||||
|
||||
case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: // toggle renew_keep_length
|
||||
DoCommandP(0, GetCompanySettingIndex("company.renew_keep_length"), Company::Get(_local_company)->settings.renew_keep_length ? 0 : 1, CMD_CHANGE_COMPANY_SETTING);
|
||||
case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: {
|
||||
const Group *g = Group::GetIfValid(this->sel_group);
|
||||
if (g != nullptr) {
|
||||
DoCommandP(0, this->sel_group | (GroupFlags::GF_REPLACE_WAGON_REMOVAL << 16), (HasBit(g->flags, GroupFlags::GF_REPLACE_WAGON_REMOVAL) ? 0 : 1) | (_ctrl_pressed << 1), CMD_SET_GROUP_FLAG);
|
||||
} else {
|
||||
// toggle renew_keep_length
|
||||
DoCommandP(0, GetCompanySettingIndex("company.renew_keep_length"), Company::Get(_local_company)->settings.renew_keep_length ? 0 : 1, CMD_CHANGE_COMPANY_SETTING);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_RV_START_REPLACE: { // Start replacing
|
||||
if (this->GetWidget<NWidgetLeaf>(widget)->ButtonHit(pt)) {
|
||||
|
||||
@@ -274,7 +274,7 @@ template <class Tbase_set>
|
||||
return p;
|
||||
}
|
||||
|
||||
#include "network/network_content.h"
|
||||
#include "network/core/tcp_content_type.h"
|
||||
|
||||
template <class Tbase_set> const char *TryGetBaseSetFile(const ContentInfo *ci, bool md5sum, const Tbase_set *s)
|
||||
{
|
||||
|
||||
@@ -1061,7 +1061,7 @@ struct BuildVehicleWindow : Window {
|
||||
CargoID cargo_filter[NUM_CARGO + 3]; ///< Available cargo filters; CargoID or CF_ANY or CF_NONE or CF_ENGINES
|
||||
StringID cargo_filter_texts[NUM_CARGO + 4]; ///< Texts for filter_cargo, terminated by INVALID_STRING_ID
|
||||
byte cargo_filter_criteria; ///< Selected cargo filter
|
||||
int details_height; ///< Minimal needed height of the details panels (found so far).
|
||||
int details_height; ///< Minimal needed height of the details panels, in text lines (found so far).
|
||||
Scrollbar *vscroll;
|
||||
TestedEngineDetails te; ///< Tested cost and capacity after refit.
|
||||
|
||||
@@ -1121,7 +1121,7 @@ struct BuildVehicleWindow : Window {
|
||||
widget->tool_tip = STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP + type;
|
||||
widget->SetLowered(this->show_hidden_engines);
|
||||
|
||||
this->details_height = ((this->vehicle_type == VEH_TRAIN) ? 10 : 9) * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
this->details_height = ((this->vehicle_type == VEH_TRAIN) ? 10 : 9);
|
||||
|
||||
this->FinishInitNested(tile == INVALID_TILE ? (int)type : tile);
|
||||
|
||||
@@ -1559,7 +1559,7 @@ struct BuildVehicleWindow : Window {
|
||||
break;
|
||||
|
||||
case WID_BV_PANEL:
|
||||
size->height = this->details_height;
|
||||
size->height = FONT_HEIGHT_NORMAL * this->details_height + padding.height;
|
||||
break;
|
||||
|
||||
case WID_BV_SORT_ASCENDING_DESCENDING: {
|
||||
@@ -1627,12 +1627,12 @@ struct BuildVehicleWindow : Window {
|
||||
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(WID_BV_PANEL);
|
||||
int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT,
|
||||
nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine, this->te);
|
||||
needed_height = std::max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM);
|
||||
needed_height = std::max(needed_height, (text_end - (int)nwi->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL);
|
||||
}
|
||||
if (needed_height != this->details_height) { // Details window are not high enough, enlarge them.
|
||||
int resize = needed_height - this->details_height;
|
||||
this->details_height = needed_height;
|
||||
this->ReInit(0, resize);
|
||||
this->ReInit(0, resize * FONT_HEIGHT_NORMAL);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,8 +84,7 @@ void SetupCargoForClimate(LandscapeID l)
|
||||
*/
|
||||
CargoID GetCargoIDByLabel(CargoLabel cl)
|
||||
{
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : CargoSpec::Iterate()) {
|
||||
if (cs->label == cl) return cs->Index();
|
||||
}
|
||||
|
||||
@@ -103,8 +102,7 @@ CargoID GetCargoIDByBitnum(uint8 bitnum)
|
||||
{
|
||||
if (bitnum == INVALID_CARGO) return CT_INVALID;
|
||||
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : CargoSpec::Iterate()) {
|
||||
if (cs->bitnum == bitnum) return cs->Index();
|
||||
}
|
||||
|
||||
@@ -132,7 +130,6 @@ SpriteID CargoSpec::GetCargoIcon() const
|
||||
std::vector<const CargoSpec *> _sorted_cargo_specs; ///< Cargo specifications sorted alphabetically by name.
|
||||
uint8 _sorted_standard_cargo_specs_size; ///< Number of standard cargo specifications stored in the _sorted_cargo_specs array.
|
||||
|
||||
|
||||
/** Sort cargo specifications by their name. */
|
||||
static bool CargoSpecNameSorter(const CargoSpec * const &a, const CargoSpec * const &b)
|
||||
{
|
||||
@@ -169,9 +166,8 @@ static bool CargoSpecClassSorter(const CargoSpec * const &a, const CargoSpec * c
|
||||
void InitializeSortedCargoSpecs()
|
||||
{
|
||||
_sorted_cargo_specs.clear();
|
||||
const CargoSpec *cargo;
|
||||
/* Add each cargo spec to the list. */
|
||||
FOR_ALL_CARGOSPECS(cargo) {
|
||||
for (const CargoSpec *cargo : CargoSpec::Iterate()) {
|
||||
_sorted_cargo_specs.push_back(cargo);
|
||||
}
|
||||
|
||||
@@ -181,7 +177,7 @@ void InitializeSortedCargoSpecs()
|
||||
_standard_cargo_mask = 0;
|
||||
|
||||
_sorted_standard_cargo_specs_size = 0;
|
||||
FOR_ALL_SORTED_CARGOSPECS(cargo) {
|
||||
for (const auto &cargo : _sorted_cargo_specs) {
|
||||
if (cargo->classes & CC_SPECIAL) break;
|
||||
_sorted_standard_cargo_specs_size++;
|
||||
SetBit(_standard_cargo_mask, cargo->Index());
|
||||
|
||||
@@ -59,7 +59,7 @@ struct CargoSpec {
|
||||
uint8 rating_colour;
|
||||
uint8 weight; ///< Weight of a single unit of this cargo type in 1/16 ton (62.5 kg).
|
||||
uint16 multiplier; ///< Capacity multiplier for vehicles. (8 fractional bits)
|
||||
uint16 initial_payment;
|
||||
uint32 initial_payment; ///< Initial payment rate before inflation is applied.
|
||||
uint8 transit_days[2];
|
||||
|
||||
bool is_freight; ///< Cargo type is considered to be freight (affects train freight multiplier).
|
||||
@@ -122,6 +122,49 @@ struct CargoSpec {
|
||||
|
||||
SpriteID GetCargoIcon() const;
|
||||
|
||||
/**
|
||||
* Iterator to iterate all valid CargoSpec
|
||||
*/
|
||||
struct Iterator {
|
||||
typedef CargoSpec value_type;
|
||||
typedef CargoSpec *pointer;
|
||||
typedef CargoSpec &reference;
|
||||
typedef size_t difference_type;
|
||||
typedef std::forward_iterator_tag iterator_category;
|
||||
|
||||
explicit Iterator(size_t index) : index(index)
|
||||
{
|
||||
this->ValidateIndex();
|
||||
};
|
||||
|
||||
bool operator==(const Iterator &other) const { return this->index == other.index; }
|
||||
bool operator!=(const Iterator &other) const { return !(*this == other); }
|
||||
CargoSpec * operator*() const { return CargoSpec::Get(this->index); }
|
||||
Iterator & operator++() { this->index++; this->ValidateIndex(); return *this; }
|
||||
|
||||
private:
|
||||
size_t index;
|
||||
void ValidateIndex() { while (this->index < CargoSpec::GetArraySize() && !(CargoSpec::Get(this->index)->IsValid())) this->index++; }
|
||||
};
|
||||
|
||||
/*
|
||||
* Iterable ensemble of all valid CargoSpec
|
||||
*/
|
||||
struct IterateWrapper {
|
||||
size_t from;
|
||||
IterateWrapper(size_t from = 0) : from(from) {}
|
||||
Iterator begin() { return Iterator(this->from); }
|
||||
Iterator end() { return Iterator(CargoSpec::GetArraySize()); }
|
||||
bool empty() { return this->begin() == this->end(); }
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns an iterable ensemble of all valid CargoSpec
|
||||
* @param from index of the first CargoSpec to consider
|
||||
* @return an iterable ensemble of all valid CargoSpec
|
||||
*/
|
||||
static IterateWrapper Iterate(size_t from = 0) { return IterateWrapper(from); }
|
||||
|
||||
private:
|
||||
static CargoSpec array[NUM_CARGO]; ///< Array holding all CargoSpecs
|
||||
|
||||
@@ -150,19 +193,8 @@ static inline bool IsCargoInClass(CargoID c, CargoClass cc)
|
||||
return (CargoSpec::Get(c)->classes & cc) != 0;
|
||||
}
|
||||
|
||||
#define FOR_ALL_CARGOSPECS_FROM(var, start) for (size_t cargospec_index = start; var = nullptr, cargospec_index < CargoSpec::GetArraySize(); cargospec_index++) \
|
||||
if ((var = CargoSpec::Get(cargospec_index))->IsValid())
|
||||
#define FOR_ALL_CARGOSPECS(var) FOR_ALL_CARGOSPECS_FROM(var, 0)
|
||||
|
||||
#define FOR_EACH_SET_CARGO_ID(var, cargo_bits) FOR_EACH_SET_BIT_EX(CargoID, var, CargoTypes, cargo_bits)
|
||||
|
||||
/**
|
||||
* Loop header for iterating over cargoes, sorted by name. This includes phony cargoes like regearing cargoes.
|
||||
* @param var Reference getting the cargospec.
|
||||
* @see CargoSpec
|
||||
*/
|
||||
#define FOR_ALL_SORTED_CARGOSPECS(var) for (uint8 index = 0; index < _sorted_cargo_specs.size() && (var = _sorted_cargo_specs[index], true) ; index++)
|
||||
|
||||
/**
|
||||
* Loop header for iterating over 'real' cargoes, sorted by name. Phony cargoes like regearing cargoes are skipped.
|
||||
* @param var Reference getting the cargospec.
|
||||
|
||||
@@ -196,7 +196,7 @@ CommandProc CmdDeleteGroup;
|
||||
CommandProc CmdAddVehicleGroup;
|
||||
CommandProc CmdAddSharedVehicleGroup;
|
||||
CommandProc CmdRemoveAllVehiclesGroup;
|
||||
CommandProc CmdSetGroupReplaceProtection;
|
||||
CommandProc CmdSetGroupFlag;
|
||||
CommandProc CmdSetGroupLivery;
|
||||
|
||||
CommandProc CmdMoveOrder;
|
||||
@@ -362,7 +362,7 @@ static const Command _command_proc_table[] = {
|
||||
DEF_CMD(CmdAddVehicleGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_ADD_VEHICLE_GROUP
|
||||
DEF_CMD(CmdAddSharedVehicleGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_ADD_SHARE_VEHICLE_GROUP
|
||||
DEF_CMD(CmdRemoveAllVehiclesGroup, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_REMOVE_ALL_VEHICLES_GROUP
|
||||
DEF_CMD(CmdSetGroupReplaceProtection, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_GROUP_REPLACE_PROTECTION
|
||||
DEF_CMD(CmdSetGroupFlag, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_GROUP_FLAG
|
||||
DEF_CMD(CmdSetGroupLivery, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_SET_GROUP_LIVERY
|
||||
DEF_CMD(CmdMoveOrder, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_MOVE_ORDER
|
||||
DEF_CMD(CmdChangeTimetable, 0, CMDT_ROUTE_MANAGEMENT ), // CMD_CHANGE_TIMETABLE
|
||||
|
||||
@@ -324,7 +324,7 @@ enum Commands {
|
||||
CMD_ADD_VEHICLE_GROUP, ///< add a vehicle to a group
|
||||
CMD_ADD_SHARED_VEHICLE_GROUP, ///< add all other shared vehicles to a group which are missing
|
||||
CMD_REMOVE_ALL_VEHICLES_GROUP, ///< remove all vehicles from a group
|
||||
CMD_SET_GROUP_REPLACE_PROTECTION, ///< set the autoreplace-protection for a group
|
||||
CMD_SET_GROUP_FLAG, ///< set/clear a flag for a group
|
||||
CMD_SET_GROUP_LIVERY, ///< set the livery for a group
|
||||
|
||||
CMD_MOVE_ORDER, ///< move an order
|
||||
|
||||
@@ -571,8 +571,7 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY)
|
||||
GeneratePresidentName(c);
|
||||
|
||||
SetWindowDirty(WC_GRAPH_LEGEND, 0);
|
||||
SetWindowClassesDirty(WC_CLIENT_LIST_POPUP);
|
||||
SetWindowDirty(WC_CLIENT_LIST, 0);
|
||||
InvalidateWindowData(WC_CLIENT_LIST, 0);
|
||||
InvalidateWindowData(WC_LINKGRAPH_LEGEND, 0);
|
||||
BuildOwnerLegend();
|
||||
InvalidateWindowData(WC_SMALLMAP, 0, 1);
|
||||
@@ -909,6 +908,8 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
CompanyAdminRemove(c_index, (CompanyRemoveReason)reason);
|
||||
|
||||
if (StoryPage::GetNumItems() == 0 || Goal::GetNumItems() == 0) InvalidateWindowData(WC_MAIN_TOOLBAR, 0);
|
||||
InvalidateWindowData(WC_CLIENT_LIST, 0);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -243,10 +243,10 @@ static const NWidgetPart _nested_company_finances_widgets[] = {
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetFill(0, 0), SetMinimalSize(30, 0),
|
||||
NWidget(NWID_VERTICAL), // Vertical column with bank balance amount, loan amount, and total.
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_BALANCE_VALUE), SetDataTip(STR_NULL, STR_NULL),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_LOAN_VALUE), SetDataTip(STR_NULL, STR_NULL),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_BALANCE_VALUE), SetDataTip(STR_FINANCES_TOTAL_CURRENCY, STR_NULL), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_LOAN_VALUE), SetDataTip(STR_FINANCES_TOTAL_CURRENCY, STR_NULL), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CF_LOAN_LINE), SetMinimalSize(0, 2), SetFill(1, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_TOTAL_VALUE), SetDataTip(STR_NULL, STR_NULL),
|
||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_CF_TOTAL_VALUE), SetDataTip(STR_FINANCES_TOTAL_CURRENCY, STR_NULL), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CF_SEL_MAXLOAN),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
@@ -293,6 +293,24 @@ struct CompanyFinancesWindow : Window {
|
||||
SetDParam(1, (CompanyID)this->window_number);
|
||||
break;
|
||||
|
||||
case WID_CF_BALANCE_VALUE: {
|
||||
const Company *c = Company::Get((CompanyID)this->window_number);
|
||||
SetDParam(0, c->money);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_CF_LOAN_VALUE: {
|
||||
const Company *c = Company::Get((CompanyID)this->window_number);
|
||||
SetDParam(0, c->current_loan);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_CF_TOTAL_VALUE: {
|
||||
const Company *c = Company::Get((CompanyID)this->window_number);
|
||||
SetDParam(0, c->money - c->current_loan);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_CF_MAXLOAN_VALUE:
|
||||
SetDParam(0, _economy.max_loan);
|
||||
break;
|
||||
@@ -351,27 +369,6 @@ struct CompanyFinancesWindow : Window {
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_CF_BALANCE_VALUE: {
|
||||
const Company *c = Company::Get((CompanyID)this->window_number);
|
||||
SetDParam(0, c->money);
|
||||
DrawString(r.left, r.right, r.top, STR_FINANCES_TOTAL_CURRENCY, TC_FROMSTRING, SA_RIGHT);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_CF_LOAN_VALUE: {
|
||||
const Company *c = Company::Get((CompanyID)this->window_number);
|
||||
SetDParam(0, c->current_loan);
|
||||
DrawString(r.left, r.right, r.top, STR_FINANCES_TOTAL_CURRENCY, TC_FROMSTRING, SA_RIGHT);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_CF_TOTAL_VALUE: {
|
||||
const Company *c = Company::Get((CompanyID)this->window_number);
|
||||
SetDParam(0, c->money - c->current_loan);
|
||||
DrawString(r.left, r.right, r.top, STR_FINANCES_TOTAL_CURRENCY, TC_FROMSTRING, SA_RIGHT);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_CF_LOAN_LINE:
|
||||
GfxFillRect(r.left, r.top, r.right, r.top, PC_BLACK);
|
||||
break;
|
||||
@@ -957,7 +954,7 @@ public:
|
||||
break;
|
||||
|
||||
case WID_SCL_MATRIX: {
|
||||
uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SCL_MATRIX, 0, this->line_height);
|
||||
uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SCL_MATRIX);
|
||||
if (row >= this->rows) return;
|
||||
|
||||
if (this->livery_class < LC_GROUP_RAIL) {
|
||||
@@ -1176,107 +1173,112 @@ static const NWidgetPart _nested_select_company_manager_face_widgets[] = {
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TOGGLE_LARGE_SMALL_BUTTON), SetFill(1, 0), SetDataTip(STR_FACE_ADVANCED, STR_FACE_ADVANCED_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_MALEFEMALE), // Simple male/female face setting.
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TOGGLE_LARGE_SMALL_BUTTON), SetFill(1, 0), SetDataTip(STR_FACE_ADVANCED, STR_FACE_ADVANCED_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_MALEFEMALE), // Simple male/female face setting.
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_PARTS), // Advanced face parts setting.
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE2), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE2), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_EUR), SetFill(1, 0), SetDataTip(STR_FACE_EUROPEAN, STR_FACE_SELECT_EUROPEAN),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_AFR), SetFill(1, 0), SetDataTip(STR_FACE_AFRICAN, STR_FACE_SELECT_AFRICAN),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 4),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_EYECOLOUR, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_MOUSTACHE_EARRING), SetDataTip(STR_EMPTY, STR_FACE_MOUSTACHE_EARRING_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_HAS_GLASSES_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_GLASSES, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_GLASSES), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetFill(1, 0),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_HAIR_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_HAIR, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_L), SetDataTip(AWV_DECREASE, STR_FACE_HAIR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAIR), SetDataTip(STR_EMPTY, STR_FACE_HAIR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_R), SetDataTip(AWV_INCREASE, STR_FACE_HAIR_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_EYEBROWS_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_EYEBROWS, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_L), SetDataTip(AWV_DECREASE, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYEBROWS), SetDataTip(STR_EMPTY, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_R), SetDataTip(AWV_INCREASE, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_EYECOLOUR_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_EYECOLOUR, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_L), SetDataTip(AWV_DECREASE, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR), SetDataTip(STR_EMPTY, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_R), SetDataTip(AWV_INCREASE, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_GLASSES_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_GLASSES, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_L), SetDataTip(AWV_DECREASE, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_GLASSES), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_R), SetDataTip(AWV_INCREASE, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_NOSE_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_NOSE, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_L), SetDataTip(AWV_DECREASE, STR_FACE_NOSE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_NOSE), SetDataTip(STR_EMPTY, STR_FACE_NOSE_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_R), SetDataTip(AWV_INCREASE, STR_FACE_NOSE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_LIPS_MOUSTACHE_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_MOUSTACHE, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_L), SetDataTip(AWV_DECREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE), SetDataTip(STR_EMPTY, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_R), SetDataTip(AWV_INCREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_CHIN_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_CHIN, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_L), SetDataTip(AWV_DECREASE, STR_FACE_CHIN_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_CHIN), SetDataTip(STR_EMPTY, STR_FACE_CHIN_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_R), SetDataTip(AWV_INCREASE, STR_FACE_CHIN_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_JACKET_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_JACKET, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_L), SetDataTip(AWV_DECREASE, STR_FACE_JACKET_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_JACKET), SetDataTip(STR_EMPTY, STR_FACE_JACKET_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_R), SetDataTip(AWV_INCREASE, STR_FACE_JACKET_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_COLLAR_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_COLLAR, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_L), SetDataTip(AWV_DECREASE, STR_FACE_COLLAR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_COLLAR), SetDataTip(STR_EMPTY, STR_FACE_COLLAR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_R), SetDataTip(AWV_INCREASE, STR_FACE_COLLAR_TOOLTIP),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCMF_SEL_PARTS), // Advanced face parts setting.
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_MALE2), SetFill(1, 0), SetDataTip(STR_FACE_MALE_BUTTON, STR_FACE_MALE_TOOLTIP),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_FEMALE2), SetFill(1, 0), SetDataTip(STR_FACE_FEMALE_BUTTON, STR_FACE_FEMALE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_EUR), SetFill(1, 0), SetDataTip(STR_FACE_EUROPEAN, STR_FACE_SELECT_EUROPEAN),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCMF_ETHNICITY_AFR), SetFill(1, 0), SetDataTip(STR_FACE_AFRICAN, STR_FACE_SELECT_AFRICAN),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 4),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_MOUSTACHE_EARRING), SetDataTip(STR_EMPTY, STR_FACE_MOUSTACHE_EARRING_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAS_GLASSES_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAS_GLASSES), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetFill(1, 0),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_HAIR_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_HAIR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_HAIR), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_HAIR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_HAIR_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_HAIR_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_EYEBROWS_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYEBROWS), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYEBROWS_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_EYEBROWS_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_EYECOLOUR_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_EYECOLOUR_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_EYECOLOUR_TOOLTIP),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_GLASSES_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_GLASSES), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_GLASSES_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_GLASSES_TOOLTIP_2),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_NOSE_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_NOSE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_NOSE), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_NOSE_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_NOSE_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_NOSE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_LIPS_MOUSTACHE_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_LIPS_MOUSTACHE_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_LIPS_MOUSTACHE_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_CHIN_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_CHIN_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_CHIN), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_CHIN_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_CHIN_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_CHIN_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_JACKET_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_JACKET_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_JACKET), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_JACKET_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_JACKET_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_JACKET_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_COLLAR_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_COLLAR_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_COLLAR), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_COLLAR_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_COLLAR_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_COLLAR_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SCMF_TIE_EARRING_TEXT), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_L), SetSizingType(NWST_STEP), SetDataTip(AWV_DECREASE, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING), SetSizingType(NWST_STEP), SetDataTip(STR_EMPTY, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_R), SetSizingType(NWST_STEP), SetDataTip(AWV_INCREASE, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
NWidget(WWT_TEXT, INVALID_COLOUR, WID_SCMF_TIE_EARRING_TEXT), SetFill(1, 0), SetPadding(0, WD_FRAMERECT_RIGHT, 0, WD_FRAMERECT_LEFT),
|
||||
SetDataTip(STR_FACE_EARRING, STR_NULL), SetTextColour(TC_GOLD), SetAlignment(SA_VERT_CENTER | SA_RIGHT),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_L), SetDataTip(AWV_DECREASE, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING), SetDataTip(STR_EMPTY, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
NWidget(WWT_PUSHARROWBTN, COLOUR_GREY, WID_SCMF_TIE_EARRING_R), SetDataTip(AWV_INCREASE, STR_FACE_TIE_EARRING_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
@@ -1305,9 +1307,6 @@ class SelectCompanyManagerFaceWindow : public Window
|
||||
Dimension yesno_dim; ///< Dimension of a yes/no button of a part in the advanced face window.
|
||||
Dimension number_dim; ///< Dimension of a number widget of a part in the advanced face window.
|
||||
|
||||
static const StringID PART_TEXTS_IS_FEMALE[]; ///< Strings depending on #is_female, used to describe parts (2 entries for a part).
|
||||
static const StringID PART_TEXTS[]; ///< Fixed strings to describe parts of the face.
|
||||
|
||||
/**
|
||||
* Draw dynamic a label to the left of the button and a value in the button
|
||||
*
|
||||
@@ -1340,6 +1339,10 @@ class SelectCompanyManagerFaceWindow : public Window
|
||||
this->ge = (GenderEthnicity)GB(this->face, _cmf_info[CMFV_GEN_ETHN].offset, _cmf_info[CMFV_GEN_ETHN].length); // get the gender and ethnicity
|
||||
this->is_female = HasBit(this->ge, GENDER_FEMALE); // get the gender: 0 == male and 1 == female
|
||||
this->is_moust_male = !is_female && GetCompanyManagerFaceBits(this->face, CMFV_HAS_MOUSTACHE, this->ge) != 0; // is a male face with moustache
|
||||
|
||||
this->GetWidget<NWidgetCore>(WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT)->widget_data = this->is_female ? STR_FACE_EARRING : STR_FACE_MOUSTACHE;
|
||||
this->GetWidget<NWidgetCore>(WID_SCMF_TIE_EARRING_TEXT)->widget_data = this->is_female ? STR_FACE_EARRING : STR_FACE_TIE;
|
||||
this->GetWidget<NWidgetCore>(WID_SCMF_LIPS_MOUSTACHE_TEXT)->widget_data = this->is_moust_male ? STR_FACE_MOUSTACHE : STR_FACE_LIPS;
|
||||
}
|
||||
|
||||
public:
|
||||
@@ -1405,6 +1408,21 @@ public:
|
||||
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT:
|
||||
*size = maxdim(*size, GetStringBoundingBox(STR_FACE_EARRING));
|
||||
*size = maxdim(*size, GetStringBoundingBox(STR_FACE_MOUSTACHE));
|
||||
break;
|
||||
|
||||
case WID_SCMF_TIE_EARRING_TEXT:
|
||||
*size = maxdim(*size, GetStringBoundingBox(STR_FACE_EARRING));
|
||||
*size = maxdim(*size, GetStringBoundingBox(STR_FACE_TIE));
|
||||
break;
|
||||
|
||||
case WID_SCMF_LIPS_MOUSTACHE_TEXT:
|
||||
*size = maxdim(*size, GetStringBoundingBox(STR_FACE_LIPS));
|
||||
*size = maxdim(*size, GetStringBoundingBox(STR_FACE_MOUSTACHE));
|
||||
break;
|
||||
|
||||
case WID_SCMF_FACE: {
|
||||
Dimension face_size = GetSpriteSize(SPR_GRADIENT);
|
||||
size->width = std::max(size->width, face_size.width);
|
||||
@@ -1412,35 +1430,6 @@ public:
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT:
|
||||
case WID_SCMF_TIE_EARRING_TEXT: {
|
||||
int offset = (widget - WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT) * 2;
|
||||
*size = maxdim(GetStringBoundingBox(PART_TEXTS_IS_FEMALE[offset]), GetStringBoundingBox(PART_TEXTS_IS_FEMALE[offset + 1]));
|
||||
size->width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
|
||||
size->height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_SCMF_LIPS_MOUSTACHE_TEXT:
|
||||
*size = maxdim(GetStringBoundingBox(STR_FACE_LIPS), GetStringBoundingBox(STR_FACE_MOUSTACHE));
|
||||
size->width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
|
||||
size->height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
break;
|
||||
|
||||
case WID_SCMF_HAS_GLASSES_TEXT:
|
||||
case WID_SCMF_HAIR_TEXT:
|
||||
case WID_SCMF_EYEBROWS_TEXT:
|
||||
case WID_SCMF_EYECOLOUR_TEXT:
|
||||
case WID_SCMF_GLASSES_TEXT:
|
||||
case WID_SCMF_NOSE_TEXT:
|
||||
case WID_SCMF_CHIN_TEXT:
|
||||
case WID_SCMF_JACKET_TEXT:
|
||||
case WID_SCMF_COLLAR_TEXT:
|
||||
*size = GetStringBoundingBox(PART_TEXTS[widget - WID_SCMF_HAS_GLASSES_TEXT]);
|
||||
size->width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
|
||||
size->height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
break;
|
||||
|
||||
case WID_SCMF_HAS_MOUSTACHE_EARRING:
|
||||
case WID_SCMF_HAS_GLASSES:
|
||||
*size = this->yesno_dim;
|
||||
@@ -1525,30 +1514,6 @@ public:
|
||||
void DrawWidget(const Rect &r, int widget) const override
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT:
|
||||
case WID_SCMF_TIE_EARRING_TEXT: {
|
||||
StringID str = PART_TEXTS_IS_FEMALE[(widget - WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT) * 2 + this->is_female];
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top), str, TC_GOLD, SA_RIGHT);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_SCMF_LIPS_MOUSTACHE_TEXT:
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top), (this->is_moust_male) ? STR_FACE_MOUSTACHE : STR_FACE_LIPS, TC_GOLD, SA_RIGHT);
|
||||
break;
|
||||
|
||||
case WID_SCMF_HAS_GLASSES_TEXT:
|
||||
case WID_SCMF_HAIR_TEXT:
|
||||
case WID_SCMF_EYEBROWS_TEXT:
|
||||
case WID_SCMF_EYECOLOUR_TEXT:
|
||||
case WID_SCMF_GLASSES_TEXT:
|
||||
case WID_SCMF_NOSE_TEXT:
|
||||
case WID_SCMF_CHIN_TEXT:
|
||||
case WID_SCMF_JACKET_TEXT:
|
||||
case WID_SCMF_COLLAR_TEXT:
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, Center(r.top, r.bottom - r.top), PART_TEXTS[widget - WID_SCMF_HAS_GLASSES_TEXT], TC_GOLD, SA_RIGHT);
|
||||
break;
|
||||
|
||||
|
||||
case WID_SCMF_HAS_MOUSTACHE_EARRING:
|
||||
if (this->is_female) { // Only for female faces
|
||||
this->DrawFaceStringLabel(WID_SCMF_HAS_MOUSTACHE_EARRING, GetCompanyManagerFaceBits(this->face, CMFV_HAS_TIE_EARRING, this->ge), true);
|
||||
@@ -1736,25 +1701,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/** Both text values of parts of the face that depend on the #is_female boolean value. */
|
||||
const StringID SelectCompanyManagerFaceWindow::PART_TEXTS_IS_FEMALE[] = {
|
||||
STR_FACE_MOUSTACHE, STR_FACE_EARRING, // WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT
|
||||
STR_FACE_TIE, STR_FACE_EARRING, // WID_SCMF_TIE_EARRING_TEXT
|
||||
};
|
||||
|
||||
/** Textual names for parts of the face. */
|
||||
const StringID SelectCompanyManagerFaceWindow::PART_TEXTS[] = {
|
||||
STR_FACE_GLASSES, // WID_SCMF_HAS_GLASSES_TEXT
|
||||
STR_FACE_HAIR, // WID_SCMF_HAIR_TEXT
|
||||
STR_FACE_EYEBROWS, // WID_SCMF_EYEBROWS_TEXT
|
||||
STR_FACE_EYECOLOUR, // WID_SCMF_EYECOLOUR_TEXT
|
||||
STR_FACE_GLASSES, // WID_SCMF_GLASSES_TEXT
|
||||
STR_FACE_NOSE, // WID_SCMF_NOSE_TEXT
|
||||
STR_FACE_CHIN, // WID_SCMF_CHIN_TEXT
|
||||
STR_FACE_JACKET, // WID_SCMF_JACKET_TEXT
|
||||
STR_FACE_COLLAR, // WID_SCMF_COLLAR_TEXT
|
||||
};
|
||||
|
||||
/** Company manager face selection window description */
|
||||
static WindowDesc _select_company_manager_face_desc(
|
||||
WDP_AUTO, "company_face", 0, 0,
|
||||
@@ -1902,8 +1848,7 @@ struct CompanyInfrastructureWindow : Window
|
||||
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width);
|
||||
|
||||
RailType rt;
|
||||
FOR_ALL_SORTED_RAILTYPES(rt) {
|
||||
for (const auto &rt : _sorted_railtypes) {
|
||||
if (HasBit(this->railtypes, rt)) {
|
||||
lines++;
|
||||
SetDParam(0, GetRailTypeInfo(rt)->strings.name);
|
||||
@@ -1925,8 +1870,7 @@ struct CompanyInfrastructureWindow : Window
|
||||
|
||||
size->width = std::max(size->width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width);
|
||||
|
||||
RoadType rt;
|
||||
FOR_ALL_SORTED_ROADTYPES(rt) {
|
||||
for (const auto &rt : _sorted_roadtypes) {
|
||||
if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_DESC)) {
|
||||
lines++;
|
||||
SetDParam(0, GetRoadTypeInfo(rt)->strings.name);
|
||||
@@ -2035,8 +1979,7 @@ struct CompanyInfrastructureWindow : Window
|
||||
|
||||
if (this->railtypes != RAILTYPES_NONE) {
|
||||
/* Draw name of each valid railtype. */
|
||||
RailType rt;
|
||||
FOR_ALL_SORTED_RAILTYPES(rt) {
|
||||
for (const auto &rt : _sorted_railtypes) {
|
||||
if (HasBit(this->railtypes, rt)) {
|
||||
SetDParam(0, GetRailTypeInfo(rt)->strings.name);
|
||||
DrawString(r.left + offs_left, r.right - offs_right, y += FONT_HEIGHT_NORMAL, STR_WHITE_STRING);
|
||||
@@ -2053,8 +1996,7 @@ struct CompanyInfrastructureWindow : Window
|
||||
case WID_CI_RAIL_COUNT: {
|
||||
/* Draw infrastructure count for each valid railtype. */
|
||||
uint32 rail_total = c->infrastructure.GetRailTotal();
|
||||
RailType rt;
|
||||
FOR_ALL_SORTED_RAILTYPES(rt) {
|
||||
for (const auto &rt : _sorted_railtypes) {
|
||||
if (HasBit(this->railtypes, rt)) {
|
||||
this->DrawCountLine(r, y, c->infrastructure.rail[rt], RailMaintenanceCost(rt, c->infrastructure.rail[rt], rail_total));
|
||||
}
|
||||
@@ -2070,8 +2012,7 @@ struct CompanyInfrastructureWindow : Window
|
||||
DrawString(r.left, r.right, y, widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT);
|
||||
|
||||
/* Draw name of each valid roadtype. */
|
||||
RoadType rt;
|
||||
FOR_ALL_SORTED_ROADTYPES(rt) {
|
||||
for (const auto &rt : _sorted_roadtypes) {
|
||||
if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_DESC)) {
|
||||
SetDParam(0, GetRoadTypeInfo(rt)->strings.name);
|
||||
DrawString(r.left + offs_left, r.right - offs_right, y += FONT_HEIGHT_NORMAL, STR_WHITE_STRING);
|
||||
@@ -2084,8 +2025,7 @@ struct CompanyInfrastructureWindow : Window
|
||||
case WID_CI_ROAD_COUNT:
|
||||
case WID_CI_TRAM_COUNT: {
|
||||
uint32 road_tram_total = widget == WID_CI_ROAD_COUNT ? c->infrastructure.GetRoadTotal() : c->infrastructure.GetTramTotal();
|
||||
RoadType rt;
|
||||
FOR_ALL_SORTED_ROADTYPES(rt) {
|
||||
for (const auto &rt : _sorted_roadtypes) {
|
||||
if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_COUNT)) {
|
||||
this->DrawCountLine(r, y, c->infrastructure.road[rt], RoadMaintenanceCost(rt, c->infrastructure.road[rt], road_tram_total));
|
||||
}
|
||||
|
||||
116
src/console.cpp
116
src/console.cpp
@@ -24,8 +24,17 @@ static const uint ICON_TOKEN_COUNT = 20; ///< Maximum number of tokens in on
|
||||
static const uint ICON_MAX_RECURSE = 10; ///< Maximum number of recursion
|
||||
|
||||
/* console parser */
|
||||
IConsoleCmd *_iconsole_cmds; ///< list of registered commands
|
||||
IConsoleAlias *_iconsole_aliases; ///< list of registered aliases
|
||||
/* static */ IConsole::CommandList &IConsole::Commands()
|
||||
{
|
||||
static IConsole::CommandList cmds;
|
||||
return cmds;
|
||||
}
|
||||
|
||||
/* static */ IConsole::AliasList &IConsole::Aliases()
|
||||
{
|
||||
static IConsole::AliasList aliases;
|
||||
return aliases;
|
||||
}
|
||||
|
||||
FILE *_iconsole_output_file;
|
||||
|
||||
@@ -195,49 +204,13 @@ bool GetArgumentInteger(uint32 *value, const char *arg)
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an item to an alphabetically sorted list.
|
||||
* @param base first item of the list
|
||||
* @param item_new the item to add
|
||||
* Creates a copy of a string with underscores removed from it
|
||||
* @param name String to remove the underscores from.
|
||||
* @return A copy of \a name, without underscores.
|
||||
*/
|
||||
template<class T>
|
||||
void IConsoleAddSorted(T **base, T *item_new)
|
||||
static std::string RemoveUnderscores(std::string name)
|
||||
{
|
||||
if (*base == nullptr) {
|
||||
*base = item_new;
|
||||
return;
|
||||
}
|
||||
|
||||
T *item_before = nullptr;
|
||||
T *item = *base;
|
||||
/* The list is alphabetically sorted, insert the new item at the correct location */
|
||||
while (item != nullptr) {
|
||||
if (strcmp(item->name, item_new->name) > 0) break; // insert here
|
||||
|
||||
item_before = item;
|
||||
item = item->next;
|
||||
}
|
||||
|
||||
if (item_before == nullptr) {
|
||||
*base = item_new;
|
||||
} else {
|
||||
item_before->next = item_new;
|
||||
}
|
||||
|
||||
item_new->next = item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove underscores from a string; the string will be modified!
|
||||
* @param[in,out] name String to remove the underscores from.
|
||||
* @return \a name, with its contents modified.
|
||||
*/
|
||||
char *RemoveUnderscores(char *name)
|
||||
{
|
||||
char *q = name;
|
||||
for (const char *p = name; *p != '\0'; p++) {
|
||||
if (*p != '_') *q++ = *p;
|
||||
}
|
||||
*q = '\0';
|
||||
name.erase(std::remove(name.begin(), name.end(), '_'), name.end());
|
||||
return name;
|
||||
}
|
||||
|
||||
@@ -246,15 +219,9 @@ char *RemoveUnderscores(char *name)
|
||||
* @param name name of the command that will be used
|
||||
* @param proc function that will be called upon execution of command
|
||||
*/
|
||||
void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc, IConsoleHook *hook)
|
||||
/* static */ void IConsole::CmdRegister(const std::string &name, IConsoleCmdProc *proc, IConsoleHook *hook)
|
||||
{
|
||||
IConsoleCmd *item_new = MallocT<IConsoleCmd>(1);
|
||||
item_new->name = RemoveUnderscores(stredup(name));
|
||||
item_new->next = nullptr;
|
||||
item_new->proc = proc;
|
||||
item_new->hook = hook;
|
||||
|
||||
IConsoleAddSorted(&_iconsole_cmds, item_new);
|
||||
IConsole::Commands().try_emplace(RemoveUnderscores(name), name, proc, hook);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -262,13 +229,10 @@ void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc, IConsoleHook *
|
||||
* @param name command to be found
|
||||
* @return return Cmdstruct of the found command, or nullptr on failure
|
||||
*/
|
||||
IConsoleCmd *IConsoleCmdGet(const char *name)
|
||||
/* static */ IConsoleCmd *IConsole::CmdGet(const std::string &name)
|
||||
{
|
||||
IConsoleCmd *item;
|
||||
|
||||
for (item = _iconsole_cmds; item != nullptr; item = item->next) {
|
||||
if (strcmp(item->name, name) == 0) return item;
|
||||
}
|
||||
auto item = IConsole::Commands().find(RemoveUnderscores(name));
|
||||
if (item != IConsole::Commands().end()) return &item->second;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -277,22 +241,10 @@ IConsoleCmd *IConsoleCmdGet(const char *name)
|
||||
* @param name name of the alias that will be used
|
||||
* @param cmd name of the command that 'name' will be alias of
|
||||
*/
|
||||
void IConsoleAliasRegister(const char *name, const char *cmd)
|
||||
/* static */ void IConsole::AliasRegister(const std::string &name, const std::string &cmd)
|
||||
{
|
||||
if (IConsoleAliasGet(name) != nullptr) {
|
||||
IConsoleError("an alias with this name already exists; insertion aborted");
|
||||
return;
|
||||
}
|
||||
|
||||
char *new_alias = RemoveUnderscores(stredup(name));
|
||||
char *cmd_aliased = stredup(cmd);
|
||||
IConsoleAlias *item_new = MallocT<IConsoleAlias>(1);
|
||||
|
||||
item_new->next = nullptr;
|
||||
item_new->cmdline = cmd_aliased;
|
||||
item_new->name = new_alias;
|
||||
|
||||
IConsoleAddSorted(&_iconsole_aliases, item_new);
|
||||
auto result = IConsole::Aliases().try_emplace(RemoveUnderscores(name), name, cmd);
|
||||
if (!result.second) IConsoleError("an alias with this name already exists; insertion aborted");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -300,16 +252,13 @@ void IConsoleAliasRegister(const char *name, const char *cmd)
|
||||
* @param name alias to be found
|
||||
* @return return Aliasstruct of the found alias, or nullptr on failure
|
||||
*/
|
||||
IConsoleAlias *IConsoleAliasGet(const char *name)
|
||||
/* static */ IConsoleAlias *IConsole::AliasGet(const std::string &name)
|
||||
{
|
||||
IConsoleAlias *item;
|
||||
|
||||
for (item = _iconsole_aliases; item != nullptr; item = item->next) {
|
||||
if (strcmp(item->name, name) == 0) return item;
|
||||
}
|
||||
|
||||
auto item = IConsole::Aliases().find(RemoveUnderscores(name));
|
||||
if (item != IConsole::Aliases().end()) return &item->second;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* An alias is just another name for a command, or for more commands
|
||||
* Execute it as well.
|
||||
@@ -329,7 +278,7 @@ static void IConsoleAliasExec(const IConsoleAlias *alias, byte tokencount, char
|
||||
return;
|
||||
}
|
||||
|
||||
for (const char *cmdptr = alias->cmdline; *cmdptr != '\0'; cmdptr++) {
|
||||
for (const char *cmdptr = alias->cmdline.c_str(); *cmdptr != '\0'; cmdptr++) {
|
||||
switch (*cmdptr) {
|
||||
case '\'': // ' will double for ""
|
||||
alias_stream = strecpy(alias_stream, "\"", lastof(alias_buffer));
|
||||
@@ -372,7 +321,7 @@ static void IConsoleAliasExec(const IConsoleAlias *alias, byte tokencount, char
|
||||
|
||||
if (param < 0 || param >= tokencount) {
|
||||
IConsoleError("too many or wrong amount of parameters passed to alias, aborting");
|
||||
IConsolePrintF(CC_WARNING, "Usage of alias '%s': %s", alias->name, alias->cmdline);
|
||||
IConsolePrintF(CC_WARNING, "Usage of alias '%s': %s", alias->name.c_str(), alias->cmdline.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -491,8 +440,7 @@ void IConsoleCmdExec(const char *cmdstr, const uint recurse_count)
|
||||
* First try commands, then aliases. Execute
|
||||
* the found action taking into account its hooking code
|
||||
*/
|
||||
RemoveUnderscores(tokens[0]);
|
||||
IConsoleCmd *cmd = IConsoleCmdGet(tokens[0]);
|
||||
IConsoleCmd *cmd = IConsole::CmdGet(tokens[0]);
|
||||
if (cmd != nullptr) {
|
||||
ConsoleHookResult chr = (cmd->hook == nullptr ? CHR_ALLOW : cmd->hook(true));
|
||||
switch (chr) {
|
||||
@@ -508,7 +456,7 @@ void IConsoleCmdExec(const char *cmdstr, const uint recurse_count)
|
||||
}
|
||||
|
||||
t_index--;
|
||||
IConsoleAlias *alias = IConsoleAliasGet(tokens[0]);
|
||||
IConsoleAlias *alias = IConsole::AliasGet(tokens[0]);
|
||||
if (alias != nullptr) {
|
||||
IConsoleAliasExec(alias, t_index, &tokens[1], recurse_count + 1);
|
||||
return;
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "engine_func.h"
|
||||
#include "landscape.h"
|
||||
#include "saveload/saveload.h"
|
||||
#include "network/core/game_info.h"
|
||||
#include "network/network.h"
|
||||
#include "network/network_func.h"
|
||||
#include "network/network_base.h"
|
||||
@@ -58,7 +59,7 @@ public:
|
||||
/** Declare the file storage cache as being invalid, also clears all stored files. */
|
||||
void InvalidateFileList()
|
||||
{
|
||||
this->Clear();
|
||||
this->clear();
|
||||
this->file_list_valid = false;
|
||||
}
|
||||
|
||||
@@ -402,7 +403,7 @@ DEF_CONSOLE_CMD(ConListFiles)
|
||||
}
|
||||
|
||||
_console_file_list.ValidateFileList(true);
|
||||
for (uint i = 0; i < _console_file_list.Length(); i++) {
|
||||
for (uint i = 0; i < _console_file_list.size(); i++) {
|
||||
IConsolePrintF(CC_DEFAULT, "%d) %s", i, _console_file_list[i].title);
|
||||
}
|
||||
|
||||
@@ -730,7 +731,14 @@ DEF_CONSOLE_CMD(ConClientNickChange)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!NetworkServerChangeClientName(client_id, argv[2])) {
|
||||
char *client_name = argv[2];
|
||||
StrTrimInPlace(client_name);
|
||||
if (!NetworkIsValidClientName(client_name)) {
|
||||
IConsoleError("Cannot give a client an empty name");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!NetworkServerChangeClientName(client_id, client_name)) {
|
||||
IConsoleError("Cannot give a client a duplicate name");
|
||||
}
|
||||
|
||||
@@ -899,16 +907,15 @@ DEF_CONSOLE_CMD(ConNetworkReconnect)
|
||||
break;
|
||||
}
|
||||
|
||||
if (StrEmpty(_settings_client.network.last_host)) {
|
||||
if (StrEmpty(_settings_client.network.last_joined)) {
|
||||
IConsolePrint(CC_DEFAULT, "No server for reconnecting.");
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Don't resolve the address first, just print it directly as it comes from the config file. */
|
||||
IConsolePrintF(CC_DEFAULT, "Reconnecting to %s:%d...", _settings_client.network.last_host, _settings_client.network.last_port);
|
||||
IConsolePrintF(CC_DEFAULT, "Reconnecting to %s ...", _settings_client.network.last_joined);
|
||||
|
||||
NetworkClientConnectGame(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port), playas);
|
||||
return true;
|
||||
return NetworkClientConnectGame(_settings_client.network.last_joined, playas);
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConNetworkConnect)
|
||||
@@ -921,37 +928,8 @@ DEF_CONSOLE_CMD(ConNetworkConnect)
|
||||
}
|
||||
|
||||
if (argc < 2) return false;
|
||||
if (_networking) NetworkDisconnect(); // we are in network-mode, first close it!
|
||||
|
||||
const char *port = nullptr;
|
||||
const char *company = nullptr;
|
||||
char *ip = argv[1];
|
||||
/* Default settings: default port and new company */
|
||||
uint16 rport = NETWORK_DEFAULT_PORT;
|
||||
CompanyID join_as = COMPANY_NEW_COMPANY;
|
||||
|
||||
ParseConnectionString(&company, &port, ip);
|
||||
|
||||
IConsolePrintF(CC_DEFAULT, "Connecting to %s...", ip);
|
||||
if (company != nullptr) {
|
||||
join_as = (CompanyID)atoi(company);
|
||||
IConsolePrintF(CC_DEFAULT, " company-no: %d", join_as);
|
||||
|
||||
/* From a user pov 0 is a new company, internally it's different and all
|
||||
* companies are offset by one to ease up on users (eg companies 1-8 not 0-7) */
|
||||
if (join_as != COMPANY_SPECTATOR) {
|
||||
if (join_as > MAX_COMPANIES) return false;
|
||||
join_as--;
|
||||
}
|
||||
}
|
||||
if (port != nullptr) {
|
||||
rport = atoi(port);
|
||||
IConsolePrintF(CC_DEFAULT, " port: %s", port);
|
||||
}
|
||||
|
||||
NetworkClientConnectGame(NetworkAddress(ip, rport), join_as);
|
||||
|
||||
return true;
|
||||
return NetworkClientConnectGame(argv[1], COMPANY_NEW_COMPANY);
|
||||
}
|
||||
|
||||
/*********************************
|
||||
@@ -1365,7 +1343,9 @@ DEF_CONSOLE_CMD(ConRescanNewGRF)
|
||||
return true;
|
||||
}
|
||||
|
||||
RequestNewGRFScan();
|
||||
if (!RequestNewGRFScan()) {
|
||||
IConsoleWarning("NewGRF scanning is already running. Please wait until completed to run again.");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1421,12 +1401,11 @@ DEF_CONSOLE_CMD(ConAlias)
|
||||
|
||||
if (argc < 3) return false;
|
||||
|
||||
alias = IConsoleAliasGet(argv[1]);
|
||||
alias = IConsole::AliasGet(argv[1]);
|
||||
if (alias == nullptr) {
|
||||
IConsoleAliasRegister(argv[1], argv[2]);
|
||||
IConsole::AliasRegister(argv[1], argv[2]);
|
||||
} else {
|
||||
free(alias->cmdline);
|
||||
alias->cmdline = stredup(argv[2]);
|
||||
alias->cmdline = argv[2];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -1451,7 +1430,7 @@ DEF_CONSOLE_CMD(ConScreenShot)
|
||||
ScreenshotType type = SC_VIEWPORT;
|
||||
uint32 width = 0;
|
||||
uint32 height = 0;
|
||||
const char *name = nullptr;
|
||||
std::string name{};
|
||||
uint32 arg_index = 1;
|
||||
|
||||
if (argc > arg_index) {
|
||||
@@ -1520,13 +1499,13 @@ DEF_CONSOLE_CMD(ConInfoCmd)
|
||||
|
||||
if (argc < 2) return false;
|
||||
|
||||
const IConsoleCmd *cmd = IConsoleCmdGet(argv[1]);
|
||||
const IConsoleCmd *cmd = IConsole::CmdGet(argv[1]);
|
||||
if (cmd == nullptr) {
|
||||
IConsoleError("the given command was not found");
|
||||
return true;
|
||||
}
|
||||
|
||||
IConsolePrintF(CC_DEFAULT, "command name: %s", cmd->name);
|
||||
IConsolePrintF(CC_DEFAULT, "command name: %s", cmd->name.c_str());
|
||||
IConsolePrintF(CC_DEFAULT, "command proc: %p", cmd->proc);
|
||||
|
||||
if (cmd->hook != nullptr) IConsoleWarning("command is hooked");
|
||||
@@ -1585,21 +1564,20 @@ DEF_CONSOLE_CMD(ConHelp)
|
||||
const IConsoleCmd *cmd;
|
||||
const IConsoleAlias *alias;
|
||||
|
||||
RemoveUnderscores(argv[1]);
|
||||
cmd = IConsoleCmdGet(argv[1]);
|
||||
cmd = IConsole::CmdGet(argv[1]);
|
||||
if (cmd != nullptr) {
|
||||
cmd->proc(0, nullptr);
|
||||
return true;
|
||||
}
|
||||
|
||||
alias = IConsoleAliasGet(argv[1]);
|
||||
alias = IConsole::AliasGet(argv[1]);
|
||||
if (alias != nullptr) {
|
||||
cmd = IConsoleCmdGet(alias->cmdline);
|
||||
cmd = IConsole::CmdGet(alias->cmdline);
|
||||
if (cmd != nullptr) {
|
||||
cmd->proc(0, nullptr);
|
||||
return true;
|
||||
}
|
||||
IConsolePrintF(CC_ERROR, "ERROR: alias is of special type, please see its execution-line: '%s'", alias->cmdline);
|
||||
IConsolePrintF(CC_ERROR, "ERROR: alias is of special type, please see its execution-line: '%s'", alias->cmdline.c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1626,9 +1604,10 @@ DEF_CONSOLE_CMD(ConListCommands)
|
||||
return true;
|
||||
}
|
||||
|
||||
for (const IConsoleCmd *cmd = _iconsole_cmds; cmd != nullptr; cmd = cmd->next) {
|
||||
if (argv[1] == nullptr || strstr(cmd->name, argv[1]) != nullptr) {
|
||||
if (cmd->hook == nullptr || cmd->hook(false) != CHR_HIDE) IConsolePrintF(CC_DEFAULT, "%s", cmd->name);
|
||||
for (auto &it : IConsole::Commands()) {
|
||||
const IConsoleCmd *cmd = &it.second;
|
||||
if (argv[1] == nullptr || cmd->name.find(argv[1]) != std::string::npos) {
|
||||
if (cmd->hook == nullptr || cmd->hook(false) != CHR_HIDE) IConsolePrintF(CC_DEFAULT, "%s", cmd->name.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1642,9 +1621,10 @@ DEF_CONSOLE_CMD(ConListAliases)
|
||||
return true;
|
||||
}
|
||||
|
||||
for (const IConsoleAlias *alias = _iconsole_aliases; alias != nullptr; alias = alias->next) {
|
||||
if (argv[1] == nullptr || strstr(alias->name, argv[1]) != nullptr) {
|
||||
IConsolePrintF(CC_DEFAULT, "%s => %s", alias->name, alias->cmdline);
|
||||
for (auto &it : IConsole::Aliases()) {
|
||||
const IConsoleAlias *alias = &it.second;
|
||||
if (argv[1] == nullptr || alias->name.find(argv[1]) != std::string::npos) {
|
||||
IConsolePrintF(CC_DEFAULT, "%s => %s", alias->name.c_str(), alias->cmdline.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2138,9 +2118,9 @@ DEF_CONSOLE_CMD(ConNewGRFProfile)
|
||||
|
||||
static void IConsoleDebugLibRegister()
|
||||
{
|
||||
IConsoleCmdRegister("resettile", ConResetTile);
|
||||
IConsoleAliasRegister("dbg_echo", "echo %A; echo %B");
|
||||
IConsoleAliasRegister("dbg_echo2", "echo %!");
|
||||
IConsole::CmdRegister("resettile", ConResetTile);
|
||||
IConsole::AliasRegister("dbg_echo", "echo %A; echo %B");
|
||||
IConsole::AliasRegister("dbg_echo2", "echo %!");
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -2334,139 +2314,138 @@ DEF_CONSOLE_CMD(ConDumpInfo)
|
||||
|
||||
void IConsoleStdLibRegister()
|
||||
{
|
||||
IConsoleCmdRegister("debug_level", ConDebugLevel);
|
||||
IConsoleCmdRegister("echo", ConEcho);
|
||||
IConsoleCmdRegister("echoc", ConEchoC);
|
||||
IConsoleCmdRegister("exec", ConExec);
|
||||
IConsoleCmdRegister("exit", ConExit);
|
||||
IConsoleCmdRegister("part", ConPart);
|
||||
IConsoleCmdRegister("help", ConHelp);
|
||||
IConsoleCmdRegister("info_cmd", ConInfoCmd);
|
||||
IConsoleCmdRegister("list_cmds", ConListCommands);
|
||||
IConsoleCmdRegister("list_aliases", ConListAliases);
|
||||
IConsoleCmdRegister("newgame", ConNewGame);
|
||||
IConsoleCmdRegister("restart", ConRestart);
|
||||
IConsoleCmdRegister("reload", ConReload);
|
||||
IConsoleCmdRegister("getseed", ConGetSeed);
|
||||
IConsoleCmdRegister("getdate", ConGetDate);
|
||||
IConsoleCmdRegister("getsysdate", ConGetSysDate);
|
||||
IConsoleCmdRegister("quit", ConExit);
|
||||
IConsoleCmdRegister("resetengines", ConResetEngines, ConHookNoNetwork);
|
||||
IConsoleCmdRegister("reset_enginepool", ConResetEnginePool, ConHookNoNetwork);
|
||||
IConsoleCmdRegister("return", ConReturn);
|
||||
IConsoleCmdRegister("screenshot", ConScreenShot);
|
||||
IConsoleCmdRegister("script", ConScript);
|
||||
IConsoleCmdRegister("scrollto", ConScrollToTile);
|
||||
IConsoleCmdRegister("alias", ConAlias);
|
||||
IConsoleCmdRegister("load", ConLoad);
|
||||
IConsoleCmdRegister("rm", ConRemove);
|
||||
IConsoleCmdRegister("save", ConSave);
|
||||
IConsoleCmdRegister("saveconfig", ConSaveConfig);
|
||||
IConsoleCmdRegister("ls", ConListFiles);
|
||||
IConsoleCmdRegister("open_cheats", ConOpenCheats);
|
||||
IConsoleCmdRegister("cheats", ConOpenCheats);
|
||||
IConsoleCmdRegister("cd", ConChangeDirectory);
|
||||
IConsoleCmdRegister("pwd", ConPrintWorkingDirectory);
|
||||
IConsoleCmdRegister("clear", ConClearBuffer);
|
||||
IConsoleCmdRegister("setting", ConSetting);
|
||||
IConsoleCmdRegister("setting_newgame", ConSettingNewgame);
|
||||
IConsoleCmdRegister("list_settings",ConListSettings);
|
||||
IConsoleCmdRegister("gamelog", ConGamelogPrint);
|
||||
IConsoleCmdRegister("rescan_newgrf", ConRescanNewGRF);
|
||||
IConsole::CmdRegister("debug_level", ConDebugLevel);
|
||||
IConsole::CmdRegister("echo", ConEcho);
|
||||
IConsole::CmdRegister("echoc", ConEchoC);
|
||||
IConsole::CmdRegister("exec", ConExec);
|
||||
IConsole::CmdRegister("exit", ConExit);
|
||||
IConsole::CmdRegister("part", ConPart);
|
||||
IConsole::CmdRegister("help", ConHelp);
|
||||
IConsole::CmdRegister("info_cmd", ConInfoCmd);
|
||||
IConsole::CmdRegister("list_cmds", ConListCommands);
|
||||
IConsole::CmdRegister("list_aliases", ConListAliases);
|
||||
IConsole::CmdRegister("newgame", ConNewGame);
|
||||
IConsole::CmdRegister("restart", ConRestart);
|
||||
IConsole::CmdRegister("reload", ConReload);
|
||||
IConsole::CmdRegister("getseed", ConGetSeed);
|
||||
IConsole::CmdRegister("getdate", ConGetDate);
|
||||
IConsole::CmdRegister("getsysdate", ConGetSysDate);
|
||||
IConsole::CmdRegister("quit", ConExit);
|
||||
IConsole::CmdRegister("resetengines", ConResetEngines, ConHookNoNetwork);
|
||||
IConsole::CmdRegister("reset_enginepool", ConResetEnginePool, ConHookNoNetwork);
|
||||
IConsole::CmdRegister("return", ConReturn);
|
||||
IConsole::CmdRegister("screenshot", ConScreenShot);
|
||||
IConsole::CmdRegister("script", ConScript);
|
||||
IConsole::CmdRegister("scrollto", ConScrollToTile);
|
||||
IConsole::CmdRegister("alias", ConAlias);
|
||||
IConsole::CmdRegister("load", ConLoad);
|
||||
IConsole::CmdRegister("rm", ConRemove);
|
||||
IConsole::CmdRegister("save", ConSave);
|
||||
IConsole::CmdRegister("saveconfig", ConSaveConfig);
|
||||
IConsole::CmdRegister("ls", ConListFiles);
|
||||
IConsole::CmdRegister("cd", ConChangeDirectory);
|
||||
IConsole::CmdRegister("pwd", ConPrintWorkingDirectory);
|
||||
IConsole::CmdRegister("clear", ConClearBuffer);
|
||||
IConsole::CmdRegister("setting", ConSetting);
|
||||
IConsole::CmdRegister("setting_newgame", ConSettingNewgame);
|
||||
IConsole::CmdRegister("list_settings", ConListSettings);
|
||||
IConsole::CmdRegister("gamelog", ConGamelogPrint);
|
||||
IConsole::CmdRegister("rescan_newgrf", ConRescanNewGRF);
|
||||
IConsole::CmdRegister("cheats", ConOpenCheats);
|
||||
|
||||
IConsoleAliasRegister("dir", "ls");
|
||||
IConsoleAliasRegister("del", "rm %+");
|
||||
IConsoleAliasRegister("newmap", "newgame");
|
||||
IConsoleAliasRegister("patch", "setting %+");
|
||||
IConsoleAliasRegister("set", "setting %+");
|
||||
IConsoleAliasRegister("set_newgame", "setting_newgame %+");
|
||||
IConsoleAliasRegister("list_patches", "list_settings %+");
|
||||
IConsoleAliasRegister("developer", "setting developer %+");
|
||||
IConsole::AliasRegister("dir", "ls");
|
||||
IConsole::AliasRegister("del", "rm %+");
|
||||
IConsole::AliasRegister("newmap", "newgame");
|
||||
IConsole::AliasRegister("patch", "setting %+");
|
||||
IConsole::AliasRegister("set", "setting %+");
|
||||
IConsole::AliasRegister("set_newgame", "setting_newgame %+");
|
||||
IConsole::AliasRegister("list_patches", "list_settings %+");
|
||||
IConsole::AliasRegister("developer", "setting developer %+");
|
||||
|
||||
IConsoleCmdRegister("list_ai_libs", ConListAILibs);
|
||||
IConsoleCmdRegister("list_ai", ConListAI);
|
||||
IConsoleCmdRegister("reload_ai", ConReloadAI);
|
||||
IConsoleCmdRegister("rescan_ai", ConRescanAI);
|
||||
IConsoleCmdRegister("start_ai", ConStartAI);
|
||||
IConsoleCmdRegister("stop_ai", ConStopAI);
|
||||
IConsole::CmdRegister("list_ai_libs", ConListAILibs);
|
||||
IConsole::CmdRegister("list_ai", ConListAI);
|
||||
IConsole::CmdRegister("reload_ai", ConReloadAI);
|
||||
IConsole::CmdRegister("rescan_ai", ConRescanAI);
|
||||
IConsole::CmdRegister("start_ai", ConStartAI);
|
||||
IConsole::CmdRegister("stop_ai", ConStopAI);
|
||||
|
||||
IConsoleCmdRegister("list_game", ConListGame);
|
||||
IConsoleCmdRegister("list_game_libs", ConListGameLibs);
|
||||
IConsoleCmdRegister("rescan_game", ConRescanGame);
|
||||
IConsole::CmdRegister("list_game", ConListGame);
|
||||
IConsole::CmdRegister("list_game_libs", ConListGameLibs);
|
||||
IConsole::CmdRegister("rescan_game", ConRescanGame);
|
||||
|
||||
IConsoleCmdRegister("companies", ConCompanies);
|
||||
IConsoleAliasRegister("players", "companies");
|
||||
IConsole::CmdRegister("companies", ConCompanies);
|
||||
IConsole::AliasRegister("players", "companies");
|
||||
|
||||
/* networking functions */
|
||||
|
||||
/* Content downloading is only available with ZLIB */
|
||||
#if defined(WITH_ZLIB)
|
||||
IConsoleCmdRegister("content", ConContent);
|
||||
IConsole::CmdRegister("content", ConContent);
|
||||
#endif /* defined(WITH_ZLIB) */
|
||||
|
||||
/*** Networking commands ***/
|
||||
IConsoleCmdRegister("say", ConSay, ConHookNeedNetwork);
|
||||
IConsoleCmdRegister("say_company", ConSayCompany, ConHookNeedNetwork);
|
||||
IConsoleAliasRegister("say_player", "say_company %+");
|
||||
IConsoleCmdRegister("say_client", ConSayClient, ConHookNeedNetwork);
|
||||
IConsole::CmdRegister("say", ConSay, ConHookNeedNetwork);
|
||||
IConsole::CmdRegister("say_company", ConSayCompany, ConHookNeedNetwork);
|
||||
IConsole::AliasRegister("say_player", "say_company %+");
|
||||
IConsole::CmdRegister("say_client", ConSayClient, ConHookNeedNetwork);
|
||||
|
||||
IConsoleCmdRegister("connect", ConNetworkConnect, ConHookClientOnly);
|
||||
IConsoleCmdRegister("clients", ConNetworkClients, ConHookNeedNetwork);
|
||||
IConsoleCmdRegister("status", ConStatus, ConHookServerOnly);
|
||||
IConsoleCmdRegister("server_info", ConServerInfo, ConHookServerOnly);
|
||||
IConsoleAliasRegister("info", "server_info");
|
||||
IConsoleCmdRegister("reconnect", ConNetworkReconnect, ConHookClientOnly);
|
||||
IConsoleCmdRegister("rcon", ConRcon, ConHookNeedNetwork);
|
||||
IConsole::CmdRegister("connect", ConNetworkConnect, ConHookClientOnly);
|
||||
IConsole::CmdRegister("clients", ConNetworkClients, ConHookNeedNetwork);
|
||||
IConsole::CmdRegister("status", ConStatus, ConHookServerOnly);
|
||||
IConsole::CmdRegister("server_info", ConServerInfo, ConHookServerOnly);
|
||||
IConsole::AliasRegister("info", "server_info");
|
||||
IConsole::CmdRegister("reconnect", ConNetworkReconnect, ConHookClientOnly);
|
||||
IConsole::CmdRegister("rcon", ConRcon, ConHookNeedNetwork);
|
||||
|
||||
IConsoleCmdRegister("join", ConJoinCompany, ConHookNeedNetwork);
|
||||
IConsoleAliasRegister("spectate", "join 255");
|
||||
IConsoleCmdRegister("move", ConMoveClient, ConHookServerOnly);
|
||||
IConsoleCmdRegister("reset_company", ConResetCompany, ConHookServerOnly);
|
||||
IConsoleAliasRegister("clean_company", "reset_company %A");
|
||||
IConsoleCmdRegister("client_name", ConClientNickChange, ConHookServerOnly);
|
||||
IConsoleCmdRegister("kick", ConKick, ConHookServerOnly);
|
||||
IConsoleCmdRegister("ban", ConBan, ConHookServerOnly);
|
||||
IConsoleCmdRegister("unban", ConUnBan, ConHookServerOnly);
|
||||
IConsoleCmdRegister("banlist", ConBanList, ConHookServerOnly);
|
||||
IConsole::CmdRegister("join", ConJoinCompany, ConHookNeedNetwork);
|
||||
IConsole::AliasRegister("spectate", "join 255");
|
||||
IConsole::CmdRegister("move", ConMoveClient, ConHookServerOnly);
|
||||
IConsole::CmdRegister("reset_company", ConResetCompany, ConHookServerOnly);
|
||||
IConsole::AliasRegister("clean_company", "reset_company %A");
|
||||
IConsole::CmdRegister("client_name", ConClientNickChange, ConHookServerOnly);
|
||||
IConsole::CmdRegister("kick", ConKick, ConHookServerOnly);
|
||||
IConsole::CmdRegister("ban", ConBan, ConHookServerOnly);
|
||||
IConsole::CmdRegister("unban", ConUnBan, ConHookServerOnly);
|
||||
IConsole::CmdRegister("banlist", ConBanList, ConHookServerOnly);
|
||||
|
||||
IConsoleCmdRegister("pause", ConPauseGame, ConHookServerOnly);
|
||||
IConsoleCmdRegister("unpause", ConUnpauseGame, ConHookServerOnly);
|
||||
IConsole::CmdRegister("pause", ConPauseGame, ConHookServerOnly);
|
||||
IConsole::CmdRegister("unpause", ConUnpauseGame, ConHookServerOnly);
|
||||
|
||||
IConsoleCmdRegister("company_pw", ConCompanyPassword, ConHookNeedNetwork);
|
||||
IConsoleAliasRegister("company_password", "company_pw %+");
|
||||
IConsole::CmdRegister("company_pw", ConCompanyPassword, ConHookNeedNetwork);
|
||||
IConsole::AliasRegister("company_password", "company_pw %+");
|
||||
|
||||
IConsoleAliasRegister("net_frame_freq", "setting frame_freq %+");
|
||||
IConsoleAliasRegister("net_sync_freq", "setting sync_freq %+");
|
||||
IConsoleAliasRegister("server_pw", "setting server_password %+");
|
||||
IConsoleAliasRegister("server_password", "setting server_password %+");
|
||||
IConsoleAliasRegister("rcon_pw", "setting rcon_password %+");
|
||||
IConsoleAliasRegister("rcon_password", "setting rcon_password %+");
|
||||
IConsoleAliasRegister("name", "setting client_name %+");
|
||||
IConsoleAliasRegister("server_name", "setting server_name %+");
|
||||
IConsoleAliasRegister("server_port", "setting server_port %+");
|
||||
IConsoleAliasRegister("server_advertise", "setting server_advertise %+");
|
||||
IConsoleAliasRegister("max_clients", "setting max_clients %+");
|
||||
IConsoleAliasRegister("max_companies", "setting max_companies %+");
|
||||
IConsoleAliasRegister("max_spectators", "setting max_spectators %+");
|
||||
IConsoleAliasRegister("max_join_time", "setting max_join_time %+");
|
||||
IConsoleAliasRegister("pause_on_join", "setting pause_on_join %+");
|
||||
IConsoleAliasRegister("autoclean_companies", "setting autoclean_companies %+");
|
||||
IConsoleAliasRegister("autoclean_protected", "setting autoclean_protected %+");
|
||||
IConsoleAliasRegister("autoclean_unprotected", "setting autoclean_unprotected %+");
|
||||
IConsoleAliasRegister("restart_game_year", "setting restart_game_year %+");
|
||||
IConsoleAliasRegister("min_players", "setting min_active_clients %+");
|
||||
IConsoleAliasRegister("reload_cfg", "setting reload_cfg %+");
|
||||
IConsole::AliasRegister("net_frame_freq", "setting frame_freq %+");
|
||||
IConsole::AliasRegister("net_sync_freq", "setting sync_freq %+");
|
||||
IConsole::AliasRegister("server_pw", "setting server_password %+");
|
||||
IConsole::AliasRegister("server_password", "setting server_password %+");
|
||||
IConsole::AliasRegister("rcon_pw", "setting rcon_password %+");
|
||||
IConsole::AliasRegister("rcon_password", "setting rcon_password %+");
|
||||
IConsole::AliasRegister("name", "setting client_name %+");
|
||||
IConsole::AliasRegister("server_name", "setting server_name %+");
|
||||
IConsole::AliasRegister("server_port", "setting server_port %+");
|
||||
IConsole::AliasRegister("server_advertise", "setting server_advertise %+");
|
||||
IConsole::AliasRegister("max_clients", "setting max_clients %+");
|
||||
IConsole::AliasRegister("max_companies", "setting max_companies %+");
|
||||
IConsole::AliasRegister("max_spectators", "setting max_spectators %+");
|
||||
IConsole::AliasRegister("max_join_time", "setting max_join_time %+");
|
||||
IConsole::AliasRegister("pause_on_join", "setting pause_on_join %+");
|
||||
IConsole::AliasRegister("autoclean_companies", "setting autoclean_companies %+");
|
||||
IConsole::AliasRegister("autoclean_protected", "setting autoclean_protected %+");
|
||||
IConsole::AliasRegister("autoclean_unprotected", "setting autoclean_unprotected %+");
|
||||
IConsole::AliasRegister("restart_game_year", "setting restart_game_year %+");
|
||||
IConsole::AliasRegister("min_players", "setting min_active_clients %+");
|
||||
IConsole::AliasRegister("reload_cfg", "setting reload_cfg %+");
|
||||
|
||||
/* debugging stuff */
|
||||
#ifdef _DEBUG
|
||||
IConsoleDebugLibRegister();
|
||||
#endif
|
||||
IConsoleCmdRegister("fps", ConFramerate);
|
||||
IConsoleCmdRegister("fps_wnd", ConFramerateWindow);
|
||||
IConsole::CmdRegister("fps", ConFramerate);
|
||||
IConsole::CmdRegister("fps_wnd", ConFramerateWindow);
|
||||
|
||||
/* NewGRF development stuff */
|
||||
IConsoleCmdRegister("reload_newgrfs", ConNewGRFReload, ConHookNewGRFDeveloperTool);
|
||||
IConsoleCmdRegister("newgrf_profile", ConNewGRFProfile, ConHookNewGRFDeveloperTool);
|
||||
IConsole::CmdRegister("reload_newgrfs", ConNewGRFReload, ConHookNewGRFDeveloperTool);
|
||||
IConsole::CmdRegister("newgrf_profile", ConNewGRFProfile, ConHookNewGRFDeveloperTool);
|
||||
|
||||
IConsoleCmdRegister("dump_info", ConDumpInfo);
|
||||
IConsole::CmdRegister("dump_info", ConDumpInfo);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#define CONSOLE_INTERNAL_H
|
||||
|
||||
#include "gfx_type.h"
|
||||
#include <map>
|
||||
|
||||
static const uint ICON_CMDLN_SIZE = 1024; ///< maximum length of a typed in command
|
||||
static const uint ICON_MAX_STREAMSIZE = 2048; ///< maximum length of a totally expanded command
|
||||
@@ -33,9 +34,9 @@ enum ConsoleHookResult {
|
||||
typedef bool IConsoleCmdProc(byte argc, char *argv[]);
|
||||
typedef ConsoleHookResult IConsoleHook(bool echo);
|
||||
struct IConsoleCmd {
|
||||
char *name; ///< name of command
|
||||
IConsoleCmd *next; ///< next command in list
|
||||
IConsoleCmd(const std::string &name, IConsoleCmdProc *proc, IConsoleHook *hook) : name(name), proc(proc), hook(hook) {}
|
||||
|
||||
std::string name; ///< name of command
|
||||
IConsoleCmdProc *proc; ///< process executed when command is typed
|
||||
IConsoleHook *hook; ///< any special trigger action that needs executing
|
||||
};
|
||||
@@ -53,25 +54,31 @@ struct IConsoleCmd {
|
||||
* - ";" allows for combining commands (see example 'ng')
|
||||
*/
|
||||
struct IConsoleAlias {
|
||||
char *name; ///< name of the alias
|
||||
IConsoleAlias *next; ///< next alias in list
|
||||
IConsoleAlias(const std::string &name, const std::string &cmdline) : name(name), cmdline(cmdline) {}
|
||||
|
||||
char *cmdline; ///< command(s) that is/are being aliased
|
||||
std::string name; ///< name of the alias
|
||||
std::string cmdline; ///< command(s) that is/are being aliased
|
||||
};
|
||||
|
||||
/* console parser */
|
||||
extern IConsoleCmd *_iconsole_cmds; ///< List of registered commands.
|
||||
extern IConsoleAlias *_iconsole_aliases; ///< List of registered aliases.
|
||||
struct IConsole
|
||||
{
|
||||
typedef std::map<std::string, IConsoleCmd> CommandList;
|
||||
typedef std::map<std::string, IConsoleAlias> AliasList;
|
||||
|
||||
/* console parser */
|
||||
static CommandList &Commands();
|
||||
static AliasList &Aliases();
|
||||
|
||||
/* Commands */
|
||||
static void CmdRegister(const std::string &name, IConsoleCmdProc *proc, IConsoleHook *hook = nullptr);
|
||||
static IConsoleCmd *CmdGet(const std::string &name);
|
||||
static void AliasRegister(const std::string &name, const std::string &cmd);
|
||||
static IConsoleAlias *AliasGet(const std::string &name);
|
||||
};
|
||||
|
||||
/* console functions */
|
||||
void IConsoleClearBuffer();
|
||||
|
||||
/* Commands */
|
||||
void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc, IConsoleHook *hook = nullptr);
|
||||
void IConsoleAliasRegister(const char *name, const char *cmd);
|
||||
IConsoleCmd *IConsoleCmdGet(const char *name);
|
||||
IConsoleAlias *IConsoleAliasGet(const char *name);
|
||||
|
||||
/* console std lib (register ingame commands/aliases) */
|
||||
void IConsoleStdLibRegister();
|
||||
|
||||
@@ -81,6 +88,5 @@ bool GetArgumentInteger(uint32 *value, const char *arg);
|
||||
void IConsoleGUIInit();
|
||||
void IConsoleGUIFree();
|
||||
void IConsoleGUIPrint(TextColour colour_code, char *string);
|
||||
char *RemoveUnderscores(char *name);
|
||||
|
||||
#endif /* CONSOLE_INTERNAL_H */
|
||||
|
||||
@@ -62,10 +62,4 @@ struct PointDimension {
|
||||
int height;
|
||||
};
|
||||
|
||||
/** A pair of two integers */
|
||||
struct Pair {
|
||||
int a;
|
||||
int b;
|
||||
};
|
||||
|
||||
#endif /* GEOMETRY_TYPE_HPP */
|
||||
|
||||
@@ -139,8 +139,8 @@ static void debug_print(const char *dbg, const char *buf)
|
||||
seprintf(buffer, lastof(buffer), "%sdbg: [%s] %s\n", GetLogPrefix(), dbg, buf);
|
||||
#if defined(_WIN32)
|
||||
wchar_t system_buf[512];
|
||||
convert_to_fs(buffer, system_buf, lengthof(system_buf), true);
|
||||
_fputts(system_buf, stderr);
|
||||
convert_to_fs(buffer, system_buf, lengthof(system_buf));
|
||||
fputws(system_buf, stderr);
|
||||
#else
|
||||
fputs(buffer, stderr);
|
||||
#endif
|
||||
|
||||
@@ -456,7 +456,7 @@ static bool DisasterTick_Aircraft(DisasterVehicle *v, uint16 image_override, boo
|
||||
DestructIndustry(i);
|
||||
|
||||
SetDParam(0, i->town->index);
|
||||
AddTileNewsItem(news_message, NT_ACCIDENT, v->dest_tile);
|
||||
AddIndustryNewsItem(news_message, NT_ACCIDENT, i->index);
|
||||
if (_settings_client.sound.disaster) SndPlayTileFx(SND_12_EXPLOSION, i->location.tile);
|
||||
}
|
||||
} else if (v->current_order.GetDestination() == 0) {
|
||||
|
||||
@@ -172,7 +172,7 @@ struct BuildDocksToolbarWindow : Window {
|
||||
|
||||
case WID_DT_RIVER: // Build river button (in scenario editor)
|
||||
if (_game_mode != GM_EDITOR) return;
|
||||
HandlePlacePushButton(this, WID_DT_RIVER, SPR_CURSOR_RIVER, HT_RECT);
|
||||
HandlePlacePushButton(this, WID_DT_RIVER, SPR_CURSOR_RIVER, HT_RECT | HT_DIAGONAL);
|
||||
break;
|
||||
|
||||
case WID_DT_BUILD_AQUEDUCT: // Build aqueduct button
|
||||
@@ -248,7 +248,7 @@ struct BuildDocksToolbarWindow : Window {
|
||||
DoCommandP(end_tile, start_tile, (_game_mode == GM_EDITOR && _ctrl_pressed) ? WATER_CLASS_SEA : WATER_CLASS_CANAL, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_BUILD_CANALS), CcPlaySound_CONSTRUCTION_WATER);
|
||||
break;
|
||||
case DDSP_CREATE_RIVER:
|
||||
DoCommandP(end_tile, start_tile, WATER_CLASS_RIVER, CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_PLACE_RIVERS), CcPlaySound_CONSTRUCTION_WATER);
|
||||
DoCommandP(end_tile, start_tile, WATER_CLASS_RIVER | (_ctrl_pressed ? 1 << 2 : 0), CMD_BUILD_CANAL | CMD_MSG(STR_ERROR_CAN_T_PLACE_RIVERS), CcPlaySound_CONSTRUCTION_WATER);
|
||||
break;
|
||||
case DDSP_BUILD_STATION: {
|
||||
uint32 p2 = (uint32)INVALID_STATION << 16; // no station to join
|
||||
|
||||
@@ -798,8 +798,7 @@ void RecomputePrices()
|
||||
}
|
||||
|
||||
/* Setup cargo payment */
|
||||
CargoSpec *cs;
|
||||
FOR_ALL_CARGOSPECS(cs) {
|
||||
for (CargoSpec *cs : CargoSpec::Iterate()) {
|
||||
cs->current_payment = ((int64)cs->initial_payment * _economy.inflation_payment) >> 16;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,12 +66,6 @@ static_assert(lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_in
|
||||
|
||||
const uint EngineOverrideManager::NUM_DEFAULT_ENGINES = _engine_counts[VEH_TRAIN] + _engine_counts[VEH_ROAD] + _engine_counts[VEH_SHIP] + _engine_counts[VEH_AIRCRAFT];
|
||||
|
||||
Engine::Engine() :
|
||||
overrides_count(0),
|
||||
overrides(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
Engine::Engine(VehicleType type, EngineID base)
|
||||
{
|
||||
this->type = type;
|
||||
@@ -136,11 +130,6 @@ Engine::Engine(VehicleType type, EngineID base)
|
||||
}
|
||||
}
|
||||
|
||||
Engine::~Engine()
|
||||
{
|
||||
UnloadWagonOverrides(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the engine is a valid (non-articulated part of an) engine.
|
||||
* @return true if enabled
|
||||
@@ -722,11 +711,9 @@ static void EnableEngineForCompany(EngineID eid, CompanyID company)
|
||||
|
||||
SetBit(e->company_avail, company);
|
||||
if (e->type == VEH_TRAIN) {
|
||||
assert(e->u.rail.railtype < RAILTYPE_END);
|
||||
c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes | GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes, _date);
|
||||
c->avail_railtypes = GetCompanyRailtypes(c->index);
|
||||
} else if (e->type == VEH_ROAD) {
|
||||
assert(e->u.road.roadtype < ROADTYPE_END);
|
||||
c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, _date);
|
||||
c->avail_roadtypes = GetCompanyRoadTypes(c->index);
|
||||
}
|
||||
|
||||
if (company == _local_company) {
|
||||
|
||||
@@ -15,6 +15,12 @@
|
||||
#include "core/pool_type.hpp"
|
||||
#include "newgrf_commons.h"
|
||||
|
||||
struct WagonOverride {
|
||||
std::vector<EngineID> engines;
|
||||
CargoID cargo;
|
||||
const SpriteGroup *group;
|
||||
};
|
||||
|
||||
typedef Pool<Engine, EngineID, 64, 64000> EnginePool;
|
||||
extern EnginePool _engine_pool;
|
||||
|
||||
@@ -56,13 +62,11 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> {
|
||||
* evaluating callbacks.
|
||||
*/
|
||||
GRFFilePropsBase<NUM_CARGO + 2> grf_prop;
|
||||
uint16 overrides_count;
|
||||
struct WagonOverride *overrides;
|
||||
std::vector<WagonOverride> overrides;
|
||||
uint16 list_position;
|
||||
|
||||
Engine();
|
||||
Engine() {}
|
||||
Engine(VehicleType type, EngineID base);
|
||||
~Engine();
|
||||
bool IsEnabled() const;
|
||||
|
||||
/**
|
||||
|
||||
@@ -279,7 +279,7 @@ bool FioCheckFileExists(const std::string &filename, Subdirectory subdir)
|
||||
*/
|
||||
bool FileExists(const std::string &filename)
|
||||
{
|
||||
return access(OTTD2FS(filename.c_str()), 0) == 0;
|
||||
return access(OTTD2FS(filename).c_str(), 0) == 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -358,7 +358,7 @@ static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searc
|
||||
}
|
||||
|
||||
#if defined(_WIN32)
|
||||
if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf.c_str())) == INVALID_FILE_ATTRIBUTES) return nullptr;
|
||||
if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf).c_str()) == INVALID_FILE_ATTRIBUTES) return nullptr;
|
||||
#endif
|
||||
|
||||
f = fopen(buf.c_str(), mode);
|
||||
@@ -506,11 +506,11 @@ void FioCreateDirectory(const std::string &name)
|
||||
/* Ignore directory creation errors; they'll surface later on, and most
|
||||
* of the time they are 'directory already exists' errors anyhow. */
|
||||
#if defined(_WIN32)
|
||||
CreateDirectory(OTTD2FS(name.c_str()), nullptr);
|
||||
CreateDirectory(OTTD2FS(name).c_str(), nullptr);
|
||||
#elif defined(OS2) && !defined(__INNOTEK_LIBC__)
|
||||
mkdir(OTTD2FS(name.c_str()));
|
||||
mkdir(OTTD2FS(name).c_str());
|
||||
#else
|
||||
mkdir(OTTD2FS(name.c_str()), 0755);
|
||||
mkdir(OTTD2FS(name).c_str(), 0755);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1315,7 +1315,7 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s
|
||||
if (path == nullptr || (dir = ttd_opendir(path)) == nullptr) return 0;
|
||||
|
||||
while ((dirent = readdir(dir)) != nullptr) {
|
||||
const char *d_name = FS2OTTD(dirent->d_name);
|
||||
std::string d_name = FS2OTTD(dirent->d_name);
|
||||
|
||||
if (!FiosIsValidFile(path, dirent, &sb)) continue;
|
||||
|
||||
@@ -1325,7 +1325,7 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s
|
||||
if (S_ISDIR(sb.st_mode)) {
|
||||
/* Directory */
|
||||
if (!recursive) continue;
|
||||
if (strcmp(d_name, ".") == 0 || strcmp(d_name, "..") == 0) continue;
|
||||
if (d_name == "." || d_name == "..") continue;
|
||||
AppendPathSeparator(filename);
|
||||
num += ScanPath(fs, extension, filename.c_str(), basepath_length, recursive);
|
||||
} else if (S_ISREG(sb.st_mode)) {
|
||||
|
||||
@@ -132,7 +132,7 @@ int closedir(DIR *d);
|
||||
*/
|
||||
static inline DIR *ttd_opendir(const char *path)
|
||||
{
|
||||
return opendir(OTTD2FS(path));
|
||||
return opendir(OTTD2FS(path).c_str());
|
||||
}
|
||||
|
||||
|
||||
|
||||
39
src/fios.cpp
39
src/fios.cpp
@@ -63,11 +63,6 @@ bool FiosItem::operator< (const FiosItem &other) const
|
||||
return (_savegame_sort_order & SORT_DESCENDING) ? r > 0 : r < 0;
|
||||
}
|
||||
|
||||
FileList::~FileList()
|
||||
{
|
||||
this->Clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a file list with the given kind of files, for the stated purpose.
|
||||
* @param abstract_filetype Kind of files to collect.
|
||||
@@ -75,7 +70,7 @@ FileList::~FileList()
|
||||
*/
|
||||
void FileList::BuildFileList(AbstractFileType abstract_filetype, SaveLoadOperation fop)
|
||||
{
|
||||
this->Clear();
|
||||
this->clear();
|
||||
|
||||
assert(fop == SLO_LOAD || fop == SLO_SAVE);
|
||||
switch (abstract_filetype) {
|
||||
@@ -107,7 +102,8 @@ void FileList::BuildFileList(AbstractFileType abstract_filetype, SaveLoadOperati
|
||||
*/
|
||||
const FiosItem *FileList::FindItem(const char *file)
|
||||
{
|
||||
for (const FiosItem *item = this->Begin(); item != this->End(); item++) {
|
||||
for (const auto &it : *this) {
|
||||
const FiosItem *item = ⁢
|
||||
if (strcmp(file, item->name) == 0) return item;
|
||||
if (strcmp(file, item->title) == 0) return item;
|
||||
}
|
||||
@@ -117,13 +113,14 @@ const FiosItem *FileList::FindItem(const char *file)
|
||||
int i = strtol(file, &endptr, 10);
|
||||
if (file == endptr || *endptr != '\0') i = -1;
|
||||
|
||||
if (IsInsideMM(i, 0, this->Length())) return this->Get(i);
|
||||
if (IsInsideMM(i, 0, this->size())) return &this->at(i);
|
||||
|
||||
/* As a last effort assume it is an OpenTTD savegame and
|
||||
* that the ".sav" part was not given. */
|
||||
char long_file[MAX_PATH];
|
||||
seprintf(long_file, lastof(long_file), "%s.sav", file);
|
||||
for (const FiosItem *item = this->Begin(); item != this->End(); item++) {
|
||||
for (const auto &it : *this) {
|
||||
const FiosItem *item = ⁢
|
||||
if (strcmp(long_file, item->name) == 0) return item;
|
||||
if (strcmp(long_file, item->title) == 0) return item;
|
||||
}
|
||||
@@ -302,14 +299,14 @@ bool FiosFileScanner::AddFile(const std::string &filename, size_t basepath_lengt
|
||||
FiosType type = this->callback_proc(this->fop, filename, ext.c_str(), fios_title, lastof(fios_title));
|
||||
if (type == FIOS_TYPE_INVALID) return false;
|
||||
|
||||
for (const FiosItem *fios = file_list.Begin(); fios != file_list.End(); fios++) {
|
||||
if (filename == fios->name) return false;
|
||||
for (const auto &fios : file_list) {
|
||||
if (filename == fios.name) return false;
|
||||
}
|
||||
|
||||
FiosItem *fios = file_list.Append();
|
||||
FiosItem *fios = &file_list.emplace_back();
|
||||
#ifdef _WIN32
|
||||
// Retrieve the file modified date using GetFileTime rather than stat to work around an obscure MSVC bug that affects Windows XP
|
||||
HANDLE fh = CreateFile(OTTD2FS(filename.c_str()), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
|
||||
HANDLE fh = CreateFile(OTTD2FS(filename).c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
|
||||
|
||||
if (fh != INVALID_HANDLE_VALUE) {
|
||||
FILETIME ft;
|
||||
@@ -367,13 +364,13 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c
|
||||
size_t sort_start;
|
||||
char d_name[sizeof(fios->name)];
|
||||
|
||||
file_list.Clear();
|
||||
file_list.clear();
|
||||
|
||||
assert(_fios_path != nullptr);
|
||||
|
||||
/* A parent directory link exists if we are not in the root directory */
|
||||
if (!FiosIsRoot(_fios_path->c_str())) {
|
||||
fios = file_list.Append();
|
||||
fios = &file_list.emplace_back();
|
||||
fios->type = FIOS_TYPE_PARENT;
|
||||
fios->mtime = 0;
|
||||
strecpy(fios->name, "..", lastof(fios->name));
|
||||
@@ -384,13 +381,13 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c
|
||||
/* Show subdirectories */
|
||||
if ((dir = ttd_opendir(_fios_path->c_str())) != nullptr) {
|
||||
while ((dirent = readdir(dir)) != nullptr) {
|
||||
strecpy(d_name, FS2OTTD(dirent->d_name), lastof(d_name));
|
||||
strecpy(d_name, FS2OTTD(dirent->d_name).c_str(), lastof(d_name));
|
||||
|
||||
/* found file must be directory, but not '.' or '..' */
|
||||
if (FiosIsValidFile(_fios_path->c_str(), dirent, &sb) && S_ISDIR(sb.st_mode) &&
|
||||
(!FiosIsHiddenFile(dirent) || strncasecmp(d_name, PERSONAL_DIR, strlen(d_name)) == 0) &&
|
||||
strcmp(d_name, ".") != 0 && strcmp(d_name, "..") != 0) {
|
||||
fios = file_list.Append();
|
||||
fios = &file_list.emplace_back();
|
||||
fios->type = FIOS_TYPE_DIR;
|
||||
fios->mtime = 0;
|
||||
strecpy(fios->name, d_name, lastof(fios->name));
|
||||
@@ -407,12 +404,12 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c
|
||||
{
|
||||
SortingBits order = _savegame_sort_order;
|
||||
_savegame_sort_order = SORT_BY_NAME | SORT_ASCENDING;
|
||||
std::sort(file_list.files.begin(), file_list.files.end());
|
||||
std::sort(file_list.begin(), file_list.end());
|
||||
_savegame_sort_order = order;
|
||||
}
|
||||
|
||||
/* This is where to start sorting for the filenames */
|
||||
sort_start = file_list.Length();
|
||||
sort_start = file_list.size();
|
||||
|
||||
/* Show files */
|
||||
FiosFileScanner scanner(fop, callback_proc, file_list);
|
||||
@@ -422,12 +419,12 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c
|
||||
scanner.Scan(nullptr, subdir, true, true);
|
||||
}
|
||||
|
||||
std::sort(file_list.files.begin() + sort_start, file_list.files.end());
|
||||
std::sort(file_list.begin() + sort_start, file_list.end());
|
||||
|
||||
/* Show drives */
|
||||
FiosGetDrives(file_list);
|
||||
|
||||
file_list.Compact();
|
||||
file_list.shrink_to_fit();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
88
src/fios.h
88
src/fios.h
@@ -13,7 +13,7 @@
|
||||
#include "gfx_type.h"
|
||||
#include "company_base.h"
|
||||
#include "newgrf_config.h"
|
||||
#include "network/core/tcp_content.h"
|
||||
#include "network/core/tcp_content_type.h"
|
||||
|
||||
|
||||
/** Special values for save-load window for the data parameter of #InvalidateWindowData. */
|
||||
@@ -109,94 +109,10 @@ struct FiosItem {
|
||||
};
|
||||
|
||||
/** List of file information. */
|
||||
class FileList {
|
||||
class FileList : public std::vector<FiosItem> {
|
||||
public:
|
||||
~FileList();
|
||||
|
||||
/**
|
||||
* Construct a new entry in the file list.
|
||||
* @return Pointer to the new items to be initialized.
|
||||
*/
|
||||
inline FiosItem *Append()
|
||||
{
|
||||
return &this->files.emplace_back();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of files in the list.
|
||||
* @return The number of files stored in the list.
|
||||
*/
|
||||
inline size_t Length() const
|
||||
{
|
||||
return this->files.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a pointer to the first file information.
|
||||
* @return Address of the first file information.
|
||||
*/
|
||||
inline const FiosItem *Begin() const
|
||||
{
|
||||
return this->files.data();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a pointer behind the last file information.
|
||||
* @return Address behind the last file information.
|
||||
*/
|
||||
inline const FiosItem *End() const
|
||||
{
|
||||
return this->Begin() + this->Length();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a pointer to the indicated file information. File information must exist.
|
||||
* @return Address of the indicated existing file information.
|
||||
*/
|
||||
inline const FiosItem *Get(size_t index) const
|
||||
{
|
||||
return this->files.data() + index;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a pointer to the indicated file information. File information must exist.
|
||||
* @return Address of the indicated existing file information.
|
||||
*/
|
||||
inline FiosItem *Get(size_t index)
|
||||
{
|
||||
return this->files.data() + index;
|
||||
}
|
||||
|
||||
inline const FiosItem &operator[](size_t index) const
|
||||
{
|
||||
return this->files[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a reference to the indicated file information. File information must exist.
|
||||
* @return The requested file information.
|
||||
*/
|
||||
inline FiosItem &operator[](size_t index)
|
||||
{
|
||||
return this->files[index];
|
||||
}
|
||||
|
||||
/** Remove all items from the list. */
|
||||
inline void Clear()
|
||||
{
|
||||
this->files.clear();
|
||||
}
|
||||
|
||||
/** Compact the list down to the smallest block size boundary. */
|
||||
inline void Compact()
|
||||
{
|
||||
this->files.shrink_to_fit();
|
||||
}
|
||||
|
||||
void BuildFileList(AbstractFileType abstract_filetype, SaveLoadOperation fop);
|
||||
const FiosItem *FindItem(const char *file);
|
||||
|
||||
std::vector<FiosItem> files; ///< The list of files.
|
||||
};
|
||||
|
||||
enum SortingBits {
|
||||
|
||||
@@ -256,8 +256,8 @@ static void SortSaveGameList(FileList &file_list)
|
||||
* Drives (A:\ (windows only) are always under the files (FIOS_TYPE_DRIVE)
|
||||
* Only sort savegames/scenarios, not directories
|
||||
*/
|
||||
for (const FiosItem *item = file_list.Begin(); item != file_list.End(); item++) {
|
||||
switch (item->type) {
|
||||
for (const auto &item : file_list) {
|
||||
switch (item.type) {
|
||||
case FIOS_TYPE_DIR: sort_start++; break;
|
||||
case FIOS_TYPE_PARENT: sort_start++; break;
|
||||
case FIOS_TYPE_DRIVE: sort_end++; break;
|
||||
@@ -265,7 +265,7 @@ static void SortSaveGameList(FileList &file_list)
|
||||
}
|
||||
}
|
||||
|
||||
std::sort(file_list.files.begin() + sort_start, file_list.files.end() - sort_end);
|
||||
std::sort(file_list.begin() + sort_start, file_list.end() - sort_end);
|
||||
}
|
||||
|
||||
struct SaveLoadWindow : public Window {
|
||||
@@ -445,14 +445,14 @@ public:
|
||||
|
||||
uint y = r.top + WD_FRAMERECT_TOP;
|
||||
uint scroll_pos = this->vscroll->GetPosition();
|
||||
for (uint row = 0; row < this->fios_items.Length(); row++) {
|
||||
for (uint row = 0; row < this->fios_items.size(); row++) {
|
||||
if (!this->fios_items_shown[row]) {
|
||||
/* The current item is filtered out : we do not show it */
|
||||
scroll_pos++;
|
||||
continue;
|
||||
}
|
||||
if (row < scroll_pos) continue;
|
||||
const FiosItem *item = this->fios_items.Get(row);
|
||||
const FiosItem *item = &this->fios_items[row];
|
||||
|
||||
if (item == this->selected) {
|
||||
GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_DARK_BLUE);
|
||||
@@ -659,7 +659,7 @@ public:
|
||||
if (!this->fios_items_shown[i]) y++;
|
||||
i++;
|
||||
}
|
||||
const FiosItem *file = this->fios_items.Get(y);
|
||||
const FiosItem *file = &this->fios_items[y];
|
||||
|
||||
const char *name = FiosBrowseTo(file);
|
||||
if (name == nullptr) {
|
||||
@@ -762,7 +762,7 @@ public:
|
||||
if (!this->fios_items_shown[i]) y++;
|
||||
i++;
|
||||
}
|
||||
const FiosItem *file = this->fios_items.Get(y);
|
||||
const FiosItem *file = &this->fios_items[y];
|
||||
|
||||
if (file != this->highlighted) {
|
||||
this->highlighted = file;
|
||||
@@ -840,7 +840,7 @@ public:
|
||||
|
||||
_fios_path_changed = true;
|
||||
this->fios_items.BuildFileList(this->abstract_filetype, this->fop);
|
||||
this->vscroll->SetCount((uint)this->fios_items.Length());
|
||||
this->vscroll->SetCount((uint)this->fios_items.size());
|
||||
this->selected = nullptr;
|
||||
_load_check_data.Clear();
|
||||
|
||||
@@ -880,10 +880,10 @@ public:
|
||||
|
||||
case SLIWD_FILTER_CHANGES:
|
||||
/* Filter changes */
|
||||
this->fios_items_shown.resize(this->fios_items.Length());
|
||||
this->fios_items_shown.resize(this->fios_items.size());
|
||||
uint items_shown_count = 0; ///< The number of items shown in the list
|
||||
/* We pass through every fios item */
|
||||
for (uint i = 0; i < this->fios_items.Length(); i++) {
|
||||
for (uint i = 0; i < this->fios_items.size(); i++) {
|
||||
if (this->string_filter.IsEmpty()) {
|
||||
/* We don't filter anything out if the filter editbox is empty */
|
||||
this->fios_items_shown[i] = true;
|
||||
|
||||
@@ -87,7 +87,6 @@ public:
|
||||
virtual void ClearFontCache();
|
||||
virtual const Sprite *GetGlyph(GlyphID key);
|
||||
virtual uint GetGlyphWidth(GlyphID key);
|
||||
virtual int GetHeight() const;
|
||||
virtual bool GetDrawGlyphShadow();
|
||||
virtual GlyphID MapCharToGlyph(WChar key) { assert(IsPrintable(key)); return SPRITE_GLYPH | key; }
|
||||
virtual const void *GetFontTable(uint32 tag, size_t &length) { length = 0; return nullptr; }
|
||||
@@ -102,6 +101,7 @@ public:
|
||||
SpriteFontCache::SpriteFontCache(FontSize fs) : FontCache(fs), glyph_to_spriteid_map(nullptr)
|
||||
{
|
||||
this->InitializeUnicodeGlyphMap();
|
||||
this->height = ScaleFontTrad(this->GetDefaultFontHeight(this->fs));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -177,6 +177,7 @@ void SpriteFontCache::ClearGlyphToSpriteMap()
|
||||
void SpriteFontCache::ClearFontCache()
|
||||
{
|
||||
Layouter::ResetFontCache(this->fs);
|
||||
this->height = ScaleFontTrad(this->GetDefaultFontHeight(this->fs));
|
||||
}
|
||||
|
||||
const Sprite *SpriteFontCache::GetGlyph(GlyphID key)
|
||||
@@ -193,11 +194,6 @@ uint SpriteFontCache::GetGlyphWidth(GlyphID key)
|
||||
return SpriteExists(sprite) ? GetSprite(sprite, ST_FONT)->width + ScaleFontTrad(this->fs != FS_NORMAL ? 1 : 0) : 0;
|
||||
}
|
||||
|
||||
int SpriteFontCache::GetHeight() const
|
||||
{
|
||||
return ScaleFontTrad(this->height);
|
||||
}
|
||||
|
||||
bool SpriteFontCache::GetDrawGlyphShadow()
|
||||
{
|
||||
return false;
|
||||
@@ -428,14 +424,14 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels)
|
||||
{
|
||||
if (pixels == 0) {
|
||||
/* Try to determine a good height based on the minimal height recommended by the font. */
|
||||
int scaled_height = ScaleFontTrad(_default_font_height[this->fs]);
|
||||
int scaled_height = ScaleFontTrad(this->GetDefaultFontHeight(this->fs));
|
||||
pixels = scaled_height;
|
||||
|
||||
TT_Header *head = (TT_Header *)FT_Get_Sfnt_Table(this->face, ft_sfnt_head);
|
||||
if (head != nullptr) {
|
||||
/* Font height is minimum height plus the difference between the default
|
||||
* height for this font size and the small size. */
|
||||
int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]);
|
||||
int diff = scaled_height - ScaleFontTrad(this->GetDefaultFontHeight(FS_SMALL));
|
||||
pixels = Clamp(std::min<uint>(head->Lowest_Rec_PPEM, MAX_FONT_MIN_REC_SIZE) + diff, scaled_height, MAX_FONT_SIZE);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -45,7 +45,7 @@ public:
|
||||
* Get the height of the font.
|
||||
* @return The height of the font.
|
||||
*/
|
||||
virtual int GetHeight() const { return this->height; }
|
||||
inline int GetHeight() const { return this->height; }
|
||||
|
||||
/**
|
||||
* Get the ascender value of the font.
|
||||
|
||||
@@ -683,7 +683,7 @@ struct FramerateWindow : Window {
|
||||
case WID_FRW_TIMES_AVERAGE: {
|
||||
/* Open time graph windows when clicking detail measurement lines */
|
||||
const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
|
||||
int line = sb->GetScrolledRowFromWidget(pt.y - FONT_HEIGHT_NORMAL - VSPACING, this, widget, VSPACING, FONT_HEIGHT_NORMAL);
|
||||
int line = sb->GetScrolledRowFromWidget(pt.y, this, widget, VSPACING + FONT_HEIGHT_NORMAL);
|
||||
if (line != INT_MAX) {
|
||||
line++;
|
||||
/* Find the visible line that was clicked */
|
||||
|
||||
12
src/gfx.cpp
12
src/gfx.cpp
@@ -895,15 +895,17 @@ const char *GetCharAtPosition(const char *str, int x, FontSize start_fontsize)
|
||||
/**
|
||||
* Draw single character horizontally centered around (x,y)
|
||||
* @param c Character (glyph) to draw
|
||||
* @param x X position to draw character
|
||||
* @param y Y position to draw character
|
||||
* @param r Rectangle to draw character within
|
||||
* @param colour Colour to use, for details see _string_colourmap in
|
||||
* table/palettes.h or docs/ottd-colourtext-palette.png or the enum TextColour in gfx_type.h
|
||||
*/
|
||||
void DrawCharCentered(WChar c, int x, int y, TextColour colour)
|
||||
void DrawCharCentered(WChar c, const Rect &r, TextColour colour)
|
||||
{
|
||||
SetColourRemap(colour);
|
||||
GfxMainBlitter(GetGlyph(FS_NORMAL, c), x - GetCharacterWidth(FS_NORMAL, c) / 2, y, BM_COLOUR_REMAP);
|
||||
GfxMainBlitter(GetGlyph(FS_NORMAL, c),
|
||||
CenterBounds(r.left, r.right, GetCharacterWidth(FS_NORMAL, c)),
|
||||
CenterBounds(r.top, r.bottom, FONT_HEIGHT_NORMAL),
|
||||
BM_COLOUR_REMAP);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1331,7 +1333,7 @@ void LoadStringWidthTable(bool monospace)
|
||||
}
|
||||
}
|
||||
|
||||
ReInitAllWindows();
|
||||
ReInitAllWindows(false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -97,30 +97,12 @@ void DrawSpriteCentered(SpriteID img, PaletteID pal, int x, int y, const SubSpri
|
||||
void DrawSpriteCenteredRect(SpriteID img, PaletteID pal, int left, int top, int right, int bottom, const SubSprite *sub = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI);
|
||||
void DrawSpriteCenteredRect(SpriteID img, PaletteID pal, const Rect &r, const SubSprite *sub = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI);
|
||||
|
||||
/** How to align the to-be drawn text. */
|
||||
enum StringAlignment {
|
||||
SA_LEFT = 0 << 0, ///< Left align the text.
|
||||
SA_HOR_CENTER = 1 << 0, ///< Horizontally center the text.
|
||||
SA_RIGHT = 2 << 0, ///< Right align the text (must be a single bit).
|
||||
SA_HOR_MASK = 3 << 0, ///< Mask for horizontal alignment.
|
||||
|
||||
SA_TOP = 0 << 2, ///< Top align the text.
|
||||
SA_VERT_CENTER = 1 << 2, ///< Vertically center the text.
|
||||
SA_BOTTOM = 2 << 2, ///< Bottom align the text.
|
||||
SA_VERT_MASK = 3 << 2, ///< Mask for vertical alignment.
|
||||
|
||||
SA_CENTER = SA_HOR_CENTER | SA_VERT_CENTER, ///< Center both horizontally and vertically.
|
||||
|
||||
SA_FORCE = 1 << 4, ///< Force the alignment, i.e. don't swap for RTL languages.
|
||||
};
|
||||
DECLARE_ENUM_AS_BIT_SET(StringAlignment)
|
||||
|
||||
int DrawString(int left, int right, int top, const char *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);
|
||||
int DrawStringMultiLine(int left, int right, int top, int bottom, const char *str, TextColour colour = TC_FROMSTRING, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FS_NORMAL);
|
||||
int DrawStringMultiLine(int left, int right, int top, int bottom, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FS_NORMAL);
|
||||
|
||||
void DrawCharCentered(WChar c, int x, int y, TextColour colour);
|
||||
void DrawCharCentered(WChar c, const Rect &r, TextColour colour);
|
||||
|
||||
void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectMode mode = FILLRECT_OPAQUE);
|
||||
void GfxFillPolygon(const std::vector<Point> &shape, int colour, FillRectMode mode = FILLRECT_OPAQUE);
|
||||
|
||||
@@ -323,4 +323,22 @@ enum Support8bpp {
|
||||
S8BPP_HARDWARE, ///< Full 8bpp support by OS and hardware.
|
||||
};
|
||||
|
||||
/** How to align the to-be drawn text. */
|
||||
enum StringAlignment {
|
||||
SA_LEFT = 0 << 0, ///< Left align the text.
|
||||
SA_HOR_CENTER = 1 << 0, ///< Horizontally center the text.
|
||||
SA_RIGHT = 2 << 0, ///< Right align the text (must be a single bit).
|
||||
SA_HOR_MASK = 3 << 0, ///< Mask for horizontal alignment.
|
||||
|
||||
SA_TOP = 0 << 2, ///< Top align the text.
|
||||
SA_VERT_CENTER = 1 << 2, ///< Vertically center the text.
|
||||
SA_BOTTOM = 2 << 2, ///< Bottom align the text.
|
||||
SA_VERT_MASK = 3 << 2, ///< Mask for vertical alignment.
|
||||
|
||||
SA_CENTER = SA_HOR_CENTER | SA_VERT_CENTER, ///< Center both horizontally and vertically.
|
||||
|
||||
SA_FORCE = 1 << 4, ///< Force the alignment, i.e. don't swap for RTL languages.
|
||||
};
|
||||
DECLARE_ENUM_AS_BIT_SET(StringAlignment)
|
||||
|
||||
#endif /* GFX_TYPE_H */
|
||||
|
||||
@@ -244,6 +244,28 @@ static void LoadSpriteTables()
|
||||
}
|
||||
|
||||
|
||||
static void RealChangeBlitter(const char *repl_blitter)
|
||||
{
|
||||
const char *cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName();
|
||||
if (strcmp(cur_blitter, repl_blitter) == 0) return;
|
||||
|
||||
DEBUG(driver, 1, "Switching blitter from '%s' to '%s'... ", cur_blitter, repl_blitter);
|
||||
Blitter *new_blitter = BlitterFactory::SelectBlitter(repl_blitter);
|
||||
if (new_blitter == nullptr) NOT_REACHED();
|
||||
DEBUG(driver, 1, "Successfully switched to %s.", repl_blitter);
|
||||
|
||||
if (!VideoDriver::GetInstance()->AfterBlitterChange()) {
|
||||
/* Failed to switch blitter, let's hope we can return to the old one. */
|
||||
if (BlitterFactory::SelectBlitter(cur_blitter) == nullptr || !VideoDriver::GetInstance()->AfterBlitterChange()) usererror("Failed to reinitialize video driver. Specify a fixed blitter in the config");
|
||||
}
|
||||
|
||||
/* Clear caches that might have sprites for another blitter. */
|
||||
VideoDriver::GetInstance()->ClearSystemSprites();
|
||||
ClearFontCache();
|
||||
GfxClearSpriteCache();
|
||||
ReInitAllWindows(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check blitter needed by NewGRF config and switch if needed.
|
||||
* @return False when nothing changed, true otherwise.
|
||||
@@ -309,7 +331,7 @@ static bool SwitchNewGRFBlitter()
|
||||
if (BlitterFactory::GetBlitterFactory(repl_blitter) == nullptr) continue;
|
||||
|
||||
/* Inform the video driver we want to switch blitter as soon as possible. */
|
||||
VideoDriver::GetInstance()->ChangeBlitter(repl_blitter);
|
||||
VideoDriver::GetInstance()->QueueOnMainThread(std::bind(&RealChangeBlitter, repl_blitter));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -323,7 +345,7 @@ void CheckBlitter()
|
||||
|
||||
ClearFontCache();
|
||||
GfxClearSpriteCache();
|
||||
ReInitAllWindows();
|
||||
ReInitAllWindows(false);
|
||||
}
|
||||
|
||||
/** Initialise and load all the sprites. */
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "sortlist_type.h"
|
||||
#include "core/geometry_func.hpp"
|
||||
#include "currency.h"
|
||||
#include "zoom_func.h"
|
||||
|
||||
#include "widgets/graph_widget.h"
|
||||
|
||||
@@ -65,11 +66,11 @@ struct GraphLegendWindow : Window {
|
||||
bool rtl = _current_text_dir == TD_RTL;
|
||||
|
||||
Dimension d = GetSpriteSize(SPR_COMPANY_ICON);
|
||||
DrawCompanyIcon(cid, rtl ? r.right - d.width - 2 : r.left + 2, r.top + (r.bottom - r.top - d.height) / 2);
|
||||
DrawCompanyIcon(cid, rtl ? r.right - d.width - ScaleGUITrad(2) : r.left + ScaleGUITrad(2), CenterBounds(r.top, r.bottom, d.height));
|
||||
|
||||
SetDParam(0, cid);
|
||||
SetDParam(1, cid);
|
||||
DrawString(r.left + (rtl ? (uint)WD_FRAMERECT_LEFT : (d.width + 4)), r.right - (rtl ? (d.width + 4) : (uint)WD_FRAMERECT_RIGHT), r.top + (r.bottom - r.top + 1 - FONT_HEIGHT_NORMAL) / 2, STR_COMPANY_NAME_COMPANY_NUM, HasBit(_legend_excluded_companies, cid) ? TC_BLACK : TC_WHITE);
|
||||
DrawString(r.left + (rtl ? (uint)WD_FRAMERECT_LEFT : (d.width + ScaleGUITrad(4))), r.right - (rtl ? (d.width + ScaleGUITrad(4)) : (uint)WD_FRAMERECT_RIGHT), CenterBounds(r.top, r.bottom, FONT_HEIGHT_NORMAL), STR_COMPANY_NAME_COMPANY_NUM, HasBit(_legend_excluded_companies, cid) ? TC_BLACK : TC_WHITE);
|
||||
}
|
||||
|
||||
void OnClick(Point pt, int widget, int click_count) override
|
||||
@@ -110,12 +111,13 @@ struct GraphLegendWindow : Window {
|
||||
static NWidgetBase *MakeNWidgetCompanyLines(int *biggest_index)
|
||||
{
|
||||
NWidgetVertical *vert = new NWidgetVertical();
|
||||
uint line_height = std::max<uint>(GetSpriteSize(SPR_COMPANY_ICON).height, FONT_HEIGHT_NORMAL) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
uint sprite_height = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_OUT_4X).height;
|
||||
|
||||
for (int widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) {
|
||||
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_BROWN, widnum);
|
||||
panel->sizing_type = NWST_STEP;
|
||||
panel->SetMinimalSize(246, line_height);
|
||||
panel->sizing_type = NWST_BUTTON;
|
||||
panel->SetMinimalSize(246, sprite_height);
|
||||
panel->SetMinimalTextLines(1, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM, FS_NORMAL);
|
||||
panel->SetFill(1, 0);
|
||||
panel->SetDataTip(0x0, STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP);
|
||||
vert->Add(panel);
|
||||
@@ -138,6 +140,7 @@ static const NWidgetPart _nested_graph_legend_widgets[] = {
|
||||
NWidgetFunction(MakeNWidgetCompanyLines),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(2, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 2),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
@@ -883,6 +886,7 @@ void ShowCompanyValueGraph()
|
||||
struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
uint line_height; ///< Pixel height of each cargo type row.
|
||||
Scrollbar *vscroll; ///< Cargo list scrollbar.
|
||||
uint legend_width; ///< Width of legend 'blob'.
|
||||
|
||||
PaymentRatesGraphWindow(WindowDesc *desc, WindowNumber window_number) :
|
||||
BaseGraphWindow(desc, WID_CPR_GRAPH, STR_JUST_CURRENCY_SHORT)
|
||||
@@ -903,6 +907,12 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
this->FinishInitNested(window_number);
|
||||
}
|
||||
|
||||
void OnInit() override
|
||||
{
|
||||
/* Width of the legend blob. */
|
||||
this->legend_width = (FONT_HEIGHT_SMALL - ScaleFontTrad(1)) * 8 / 5;
|
||||
}
|
||||
|
||||
void UpdateExcludedData()
|
||||
{
|
||||
this->excluded_data = 0;
|
||||
@@ -926,7 +936,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
SetDParam(0, cs->name);
|
||||
Dimension d = GetStringBoundingBox(STR_GRAPH_CARGO_PAYMENT_CARGO);
|
||||
d.width += 14; // colour field
|
||||
d.width += this->legend_width + 4; // colour field
|
||||
d.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
|
||||
d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
*size = maxdim(d, *size);
|
||||
@@ -949,6 +959,8 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
|
||||
int x = r.left + WD_FRAMERECT_LEFT;
|
||||
int y = r.top;
|
||||
uint row_height = FONT_HEIGHT_SMALL;
|
||||
int padding = ScaleFontTrad(1);
|
||||
|
||||
int pos = this->vscroll->GetPosition();
|
||||
int max = pos + this->vscroll->GetCapacity();
|
||||
@@ -964,12 +976,12 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
if (lowered) DrawFrameRect(r.left, y, r.right, y + this->line_height - 1, COLOUR_BROWN, lowered ? FR_LOWERED : FR_NONE);
|
||||
|
||||
byte clk_dif = lowered ? 1 : 0;
|
||||
int rect_x = clk_dif + (rtl ? r.right - 12 : r.left + WD_FRAMERECT_LEFT);
|
||||
int rect_x = clk_dif + (rtl ? r.right - this->legend_width - WD_FRAMERECT_RIGHT : r.left + WD_FRAMERECT_LEFT);
|
||||
|
||||
GfxFillRect(rect_x, y + clk_dif, rect_x + 8, y + 5 + clk_dif, PC_BLACK);
|
||||
GfxFillRect(rect_x + 1, y + 1 + clk_dif, rect_x + 7, y + 4 + clk_dif, cs->legend_colour);
|
||||
GfxFillRect(rect_x, y + padding + clk_dif, rect_x + this->legend_width, y + row_height - 1 + clk_dif, PC_BLACK);
|
||||
GfxFillRect(rect_x + 1, y + padding + 1 + clk_dif, rect_x + this->legend_width - 1, y + row_height - 2 + clk_dif, cs->legend_colour);
|
||||
SetDParam(0, cs->name);
|
||||
DrawString(rtl ? r.left : x + 14 + clk_dif, (rtl ? r.right - 14 + clk_dif : r.right), y + clk_dif, STR_GRAPH_CARGO_PAYMENT_CARGO);
|
||||
DrawString(rtl ? r.left : x + this->legend_width + 4 + clk_dif, (rtl ? r.right - this->legend_width - 4 + clk_dif : r.right), y + clk_dif, STR_GRAPH_CARGO_PAYMENT_CARGO);
|
||||
|
||||
y += this->line_height;
|
||||
}
|
||||
@@ -999,7 +1011,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
}
|
||||
|
||||
case WID_CPR_MATRIX: {
|
||||
uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_CPR_MATRIX, 0, this->line_height);
|
||||
uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_CPR_MATRIX);
|
||||
if (row >= this->vscroll->GetCount()) return;
|
||||
|
||||
const CargoSpec *cs;
|
||||
|
||||
@@ -62,13 +62,19 @@ struct GroupStatistics {
|
||||
static void UpdateAutoreplace(CompanyID company);
|
||||
};
|
||||
|
||||
enum GroupFlags : uint8 {
|
||||
GF_REPLACE_PROTECTION, ///< If set to true, the global autoreplace has no effect on the group
|
||||
GF_REPLACE_WAGON_REMOVAL, ///< If set, autoreplace will perform wagon removal on vehicles in this group.
|
||||
GF_END,
|
||||
};
|
||||
|
||||
/** Group data. */
|
||||
struct Group : GroupPool::PoolItem<&_group_pool> {
|
||||
std::string name; ///< Group Name
|
||||
Owner owner; ///< Group Owner
|
||||
VehicleType vehicle_type; ///< Vehicle type of the group
|
||||
|
||||
bool replace_protection; ///< If set to true, the global autoreplace have no effect on the group
|
||||
uint8 flags; ///< Group flags
|
||||
Livery livery; ///< Custom colour scheme for vehicles in this group
|
||||
GroupStatistics statistics; ///< NOSAVE: Statistics and caches on the vehicles in the group.
|
||||
|
||||
|
||||
@@ -315,7 +315,6 @@ CommandCost CmdCreateGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
|
||||
if (flags & DC_EXEC) {
|
||||
Group *g = new Group(_current_company);
|
||||
g->replace_protection = false;
|
||||
g->vehicle_type = vt;
|
||||
g->parent = INVALID_GROUP;
|
||||
|
||||
@@ -323,10 +322,12 @@ CommandCost CmdCreateGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
const Company *c = Company::Get(_current_company);
|
||||
g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
|
||||
g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
|
||||
if (c->settings.renew_keep_length) SetBit(g->flags, GroupFlags::GF_REPLACE_WAGON_REMOVAL);
|
||||
} else {
|
||||
g->parent = pg->index;
|
||||
g->livery.colour1 = pg->livery.colour1;
|
||||
g->livery.colour2 = pg->livery.colour2;
|
||||
g->flags = pg->flags;
|
||||
}
|
||||
|
||||
_new_group_id = g->index;
|
||||
@@ -664,42 +665,50 @@ CommandCost CmdSetGroupLivery(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
|
||||
}
|
||||
|
||||
/**
|
||||
* Set replace protection for a group and its sub-groups.
|
||||
* Set group flag for a group and its sub-groups.
|
||||
* @param g initial group.
|
||||
* @param protect 1 to set or 0 to clear protection.
|
||||
* @param set 1 to set or 0 to clear protection.
|
||||
*/
|
||||
static void SetGroupReplaceProtection(Group *g, bool protect)
|
||||
static void SetGroupFlag(Group *g, GroupFlags flag, bool set, bool children)
|
||||
{
|
||||
g->replace_protection = protect;
|
||||
if (set) {
|
||||
SetBit(g->flags, flag);
|
||||
} else {
|
||||
ClrBit(g->flags, flag);
|
||||
}
|
||||
|
||||
if (!children) return;
|
||||
|
||||
for (Group *pg : Group::Iterate()) {
|
||||
if (pg->parent == g->index) SetGroupReplaceProtection(pg, protect);
|
||||
if (pg->parent == g->index) SetGroupFlag(pg, flag, set, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (Un)set global replace protection from a group
|
||||
* (Un)set group flag from a group
|
||||
* @param tile unused
|
||||
* @param flags type of operation
|
||||
* @param p1 index of group array
|
||||
* - p1 bit 0-15 : GroupID
|
||||
* - p1 bit 0-15 : GroupID
|
||||
* - p1 bit 16-18 : Flag to set, by value not bit.
|
||||
* @param p2
|
||||
* - p2 bit 0 : 1 to set or 0 to clear protection.
|
||||
* - p2 bit 1 : 1 to apply to sub-groups.
|
||||
* @param text unused
|
||||
* @return the cost of this operation or an error
|
||||
*/
|
||||
CommandCost CmdSetGroupReplaceProtection(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
CommandCost CmdSetGroupFlag(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
Group *g = Group::GetIfValid(p1);
|
||||
Group *g = Group::GetIfValid(GB(p1, 0, 16));
|
||||
if (g == nullptr || g->owner != _current_company) return CMD_ERROR;
|
||||
|
||||
/* GroupFlags are stored in as an 8 bit bitfield but passed here by value,
|
||||
* so 3 bits is sufficient to cover each possible value. */
|
||||
GroupFlags flag = (GroupFlags)GB(p1, 16, 3);
|
||||
if (flag >= GroupFlags::GF_END) return CMD_ERROR;
|
||||
|
||||
if (flags & DC_EXEC) {
|
||||
if (HasBit(p2, 1)) {
|
||||
SetGroupReplaceProtection(g, HasBit(p2, 0));
|
||||
} else {
|
||||
g->replace_protection = HasBit(p2, 0);
|
||||
}
|
||||
SetGroupFlag(g, flag, HasBit(p2, 0), HasBit(p2, 1));
|
||||
|
||||
SetWindowDirty(GetWindowClassForVehicleType(g->vehicle_type), VehicleListIdentifier(VL_GROUP_LIST, g->vehicle_type, _current_company).Pack());
|
||||
InvalidateWindowData(WC_REPLACE_VEHICLE, g->vehicle_type);
|
||||
|
||||
@@ -46,25 +46,25 @@ static const NWidgetPart _nested_group_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
/* left part */
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_ALL_VEHICLES), SetFill(1, 0), SetMinimalTextLines(1, WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM), EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_ALL_VEHICLES), SetFill(1, 0), EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_DEFAULT_VEHICLES), SetFill(1, 0), EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_GL_LIST_GROUP), SetMatrixDataTip(1, 0, STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP),
|
||||
SetFill(1, 0), SetResize(0, 1), SetScrollbar(WID_GL_LIST_GROUP_SCROLLBAR),
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_GL_LIST_GROUP_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_INFO), SetFill(1, 0), EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_INFO), SetFill(1, 1), SetMinimalTextLines(3, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM), EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_CREATE_GROUP), SetFill(0, 1),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_CREATE_GROUP),
|
||||
SetDataTip(SPR_GROUP_CREATE_TRAIN, STR_GROUP_CREATE_TOOLTIP),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_DELETE_GROUP), SetFill(0, 1),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_DELETE_GROUP),
|
||||
SetDataTip(SPR_GROUP_DELETE_TRAIN, STR_GROUP_DELETE_TOOLTIP),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_RENAME_GROUP), SetFill(0, 1),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_RENAME_GROUP),
|
||||
SetDataTip(SPR_GROUP_RENAME_TRAIN, STR_GROUP_RENAME_TOOLTIP),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_LIVERY_GROUP), SetFill(0, 1),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_LIVERY_GROUP),
|
||||
SetDataTip(SPR_GROUP_LIVERY_TRAIN, STR_GROUP_LIVERY_TOOLTIP),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), EndContainer(),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_REPLACE_PROTECTION), SetFill(0, 1),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 0), EndContainer(),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_REPLACE_PROTECTION),
|
||||
SetDataTip(SPR_GROUP_REPLACE_OFF_TRAIN, STR_GROUP_REPLACE_PROTECTION_TOOLTIP),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -86,14 +86,14 @@ static const NWidgetPart _nested_group_widgets[] = {
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), SetResize(1, 0), EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_AVAILABLE_VEHICLES), SetMinimalSize(106, 12), SetFill(0, 1),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_AVAILABLE_VEHICLES), SetMinimalSize(106, 12),
|
||||
SetDataTip(STR_BLACK_STRING, STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 1), SetResize(1, 0), EndContainer(),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_MANAGE_VEHICLES_DROPDOWN), SetMinimalSize(118, 12), SetFill(0, 1),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetResize(1, 0), EndContainer(),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_MANAGE_VEHICLES_DROPDOWN), SetMinimalSize(118, 12),
|
||||
SetDataTip(STR_VEHICLE_LIST_MANAGE_LIST, STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_STOP_ALL), SetMinimalSize(12, 12), SetFill(0, 1),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_STOP_ALL), SetMinimalSize(12, 12),
|
||||
SetDataTip(SPR_FLAG_VEH_STOPPED, STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_START_ALL), SetMinimalSize(12, 12), SetFill(0, 1),
|
||||
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_START_ALL), SetMinimalSize(12, 12),
|
||||
SetDataTip(SPR_FLAG_VEH_RUNNING, STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP),
|
||||
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
|
||||
EndContainer(),
|
||||
@@ -229,7 +229,7 @@ private:
|
||||
this->column_size[VGC_NUMBER] = GetStringBoundingBox(STR_GROUP_COUNT_WITH_SUBGROUP);
|
||||
this->tiny_step_height = std::max(this->tiny_step_height, this->column_size[VGC_NUMBER].height);
|
||||
|
||||
this->tiny_step_height += WD_MATRIX_TOP;
|
||||
this->tiny_step_height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
this->tiny_step_height = GetMinSizing(NWST_STEP, this->tiny_step_height);
|
||||
|
||||
return WD_FRAMERECT_LEFT + 8 +
|
||||
@@ -256,7 +256,7 @@ private:
|
||||
{
|
||||
/* Highlight the group if a vehicle is dragged over it */
|
||||
if (g_id == this->group_over) {
|
||||
GfxFillRect(left + WD_FRAMERECT_LEFT, y + WD_FRAMERECT_TOP + WD_MATRIX_TOP, right - WD_FRAMERECT_RIGHT, y + this->tiny_step_height - WD_FRAMERECT_BOTTOM - WD_MATRIX_TOP, _colour_gradient[COLOUR_GREY][7]);
|
||||
GfxFillRect(left + WD_FRAMERECT_LEFT, y + WD_FRAMERECT_TOP + 1, right - WD_FRAMERECT_RIGHT, y + this->tiny_step_height - WD_FRAMERECT_BOTTOM - 1, _colour_gradient[COLOUR_GREY][7]);
|
||||
}
|
||||
|
||||
if (g_id == NEW_GROUP) return;
|
||||
@@ -387,7 +387,7 @@ public:
|
||||
resize->height = this->tiny_step_height;
|
||||
|
||||
/* Minimum height is the height of the list widget minus all and default vehicles... */
|
||||
size->height = (this->vli.vtype >= VEH_SHIP ? 3.5 : 7) * GetVehicleListHeight(this->vli.vtype, this->tiny_step_height) - 2 * this->tiny_step_height;
|
||||
size->height = 4 * GetVehicleListHeight(this->vli.vtype, this->tiny_step_height);
|
||||
|
||||
/* ... minus the buttons at the bottom ... */
|
||||
uint max_icon_height = GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_CREATE_GROUP)->widget_data).height;
|
||||
@@ -430,11 +430,6 @@ public:
|
||||
*size = maxdim(*size, d);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_GL_INFO: {
|
||||
size->height = (FONT_HEIGHT_NORMAL * 3) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -540,7 +535,7 @@ public:
|
||||
|
||||
/* If not a default group and the group has replace protection, show an enabled replace sprite. */
|
||||
uint16 protect_sprite = SPR_GROUP_REPLACE_OFF_TRAIN;
|
||||
if (!IsDefaultGroupID(this->vli.index) && !IsAllGroupID(this->vli.index) && Group::Get(this->vli.index)->replace_protection) protect_sprite = SPR_GROUP_REPLACE_ON_TRAIN;
|
||||
if (!IsDefaultGroupID(this->vli.index) && !IsAllGroupID(this->vli.index) && HasBit(Group::Get(this->vli.index)->flags, GroupFlags::GF_REPLACE_PROTECTION)) protect_sprite = SPR_GROUP_REPLACE_ON_TRAIN;
|
||||
this->GetWidget<NWidgetCore>(WID_GL_REPLACE_PROTECTION)->widget_data = protect_sprite + this->vli.vtype;
|
||||
|
||||
/* Set text of "group by" dropdown widget. */
|
||||
@@ -556,11 +551,11 @@ public:
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_GL_ALL_VEHICLES:
|
||||
DrawGroupInfo(r.top + WD_FRAMERECT_TOP, r.left, r.right, ALL_GROUP);
|
||||
DrawGroupInfo(r.top, r.left, r.right, ALL_GROUP);
|
||||
break;
|
||||
|
||||
case WID_GL_DEFAULT_VEHICLES:
|
||||
DrawGroupInfo(r.top + WD_FRAMERECT_TOP, r.left, r.right, DEFAULT_GROUP);
|
||||
DrawGroupInfo(r.top, r.left, r.right, DEFAULT_GROUP);
|
||||
break;
|
||||
|
||||
case WID_GL_INFO: {
|
||||
@@ -601,14 +596,14 @@ public:
|
||||
}
|
||||
|
||||
case WID_GL_LIST_GROUP: {
|
||||
int y1 = r.top + WD_FRAMERECT_TOP;
|
||||
int y1 = r.top;
|
||||
int max = std::min<size_t>(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.size());
|
||||
for (int i = this->group_sb->GetPosition(); i < max; ++i) {
|
||||
const Group *g = this->groups[i];
|
||||
|
||||
assert(g->owner == this->owner);
|
||||
|
||||
DrawGroupInfo(y1, r.left, r.right, g->index, this->indents[i] * LEVEL_WIDTH, g->replace_protection, g->folded || (i + 1 < (int)this->groups.size() && indents[i + 1] > this->indents[i]));
|
||||
DrawGroupInfo(y1, r.left, r.right, g->index, this->indents[i] * LEVEL_WIDTH, HasBit(g->flags, GroupFlags::GF_REPLACE_PROTECTION), g->folded || (i + 1 < (int)this->groups.size() && indents[i + 1] > this->indents[i]));
|
||||
|
||||
y1 += this->tiny_step_height;
|
||||
}
|
||||
@@ -683,7 +678,7 @@ public:
|
||||
break;
|
||||
|
||||
case WID_GL_LIST_GROUP: { // Matrix Group
|
||||
uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height);
|
||||
uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP);
|
||||
if (id_g >= this->groups.size()) return;
|
||||
|
||||
if (groups[id_g]->folded || (id_g + 1 < this->groups.size() && this->indents[id_g + 1] > this->indents[id_g])) {
|
||||
@@ -805,7 +800,7 @@ public:
|
||||
case WID_GL_REPLACE_PROTECTION: {
|
||||
const Group *g = Group::GetIfValid(this->vli.index);
|
||||
if (g != nullptr) {
|
||||
DoCommandP(0, this->vli.index, (g->replace_protection ? 0 : 1) | (_ctrl_pressed << 1), CMD_SET_GROUP_REPLACE_PROTECTION);
|
||||
DoCommandP(0, this->vli.index | (GroupFlags::GF_REPLACE_PROTECTION << 16), (HasBit(g->flags, GroupFlags::GF_REPLACE_PROTECTION) ? 0 : 1) | (_ctrl_pressed << 1), CMD_SET_GROUP_FLAG);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -829,7 +824,7 @@ public:
|
||||
break;
|
||||
|
||||
case WID_GL_LIST_GROUP: { // Matrix group
|
||||
uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height);
|
||||
uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP);
|
||||
GroupID new_g = id_g >= this->groups.size() ? INVALID_GROUP : this->groups[id_g]->index;
|
||||
|
||||
if (this->group_sel != new_g && g->parent != new_g) {
|
||||
@@ -862,7 +857,7 @@ public:
|
||||
this->group_over = INVALID_GROUP;
|
||||
this->SetDirty();
|
||||
|
||||
uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height);
|
||||
uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP);
|
||||
GroupID new_g = id_g >= this->groups.size() ? NEW_GROUP : this->groups[id_g]->index;
|
||||
|
||||
DoCommandP(0, new_g, vindex | (_ctrl_pressed || this->grouping == GB_SHARED_ORDERS ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE), new_g == NEW_GROUP ? CcAddVehicleNewGroup : nullptr);
|
||||
@@ -893,7 +888,11 @@ public:
|
||||
/* We do not support VehicleClicked() here since the contextual action may only make sense for individual vehicles */
|
||||
|
||||
if (vindex == v->index) {
|
||||
ShowVehicleListWindow(v);
|
||||
if (vehgroup.NumVehicles() == 1) {
|
||||
ShowVehicleViewWindow(v);
|
||||
} else {
|
||||
ShowVehicleListWindow(v);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -999,7 +998,7 @@ public:
|
||||
break;
|
||||
|
||||
case WID_GL_LIST_GROUP: { // ... the list of custom groups.
|
||||
uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height);
|
||||
uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP);
|
||||
new_group_over = id_g >= this->groups.size() ? NEW_GROUP : this->groups[id_g]->index;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "widgets/dropdown_type.h"
|
||||
#include "widgets/industry_widget.h"
|
||||
#include "clear_map.h"
|
||||
#include "zoom_func.h"
|
||||
|
||||
#include "table/strings.h"
|
||||
|
||||
@@ -283,6 +284,7 @@ class BuildIndustryWindow : public Window {
|
||||
IndustryType index[NUM_INDUSTRYTYPES + 1]; ///< Type of industry, in the order it was loaded
|
||||
bool enabled[NUM_INDUSTRYTYPES + 1]; ///< availability state, coming from CBID_INDUSTRY_PROBABILITY (if ever)
|
||||
Scrollbar *vscroll;
|
||||
Dimension legend; ///< Dimension of the legend 'blob'.
|
||||
|
||||
/** The largest allowed minimum-width of the window, given in line heights */
|
||||
static const int MAX_MINWIDTH_LINEHEIGHTS = 20;
|
||||
@@ -409,6 +411,10 @@ public:
|
||||
|
||||
void OnInit() override
|
||||
{
|
||||
/* Width of the legend blob -- slightly larger than the smallmap legend blob. */
|
||||
this->legend.height = FONT_HEIGHT_SMALL;
|
||||
this->legend.width = this->legend.height * 8 / 5;
|
||||
|
||||
this->SetupArrays();
|
||||
}
|
||||
|
||||
@@ -421,8 +427,9 @@ public:
|
||||
if (this->index[i] == INVALID_INDUSTRYTYPE) continue;
|
||||
d = maxdim(d, GetStringBoundingBox(GetIndustrySpec(this->index[i])->name));
|
||||
}
|
||||
resize->height = GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM);
|
||||
d.width += FONT_HEIGHT_NORMAL * 5 / 4 + padding.width;
|
||||
resize->height = std::max<uint>(this->legend.height, FONT_HEIGHT_NORMAL) + WD_MATRIX_TOP + WD_MATRIX_BOTTOM;
|
||||
resize->height = GetMinSizing(NWST_BUTTON, resize->height);
|
||||
d.width += this->legend.width + ScaleFontTrad(7) + padding.width;
|
||||
d.height = 5 * resize->height;
|
||||
*size = maxdim(*size, d);
|
||||
break;
|
||||
@@ -513,30 +520,37 @@ public:
|
||||
uint text_offset = FONT_HEIGHT_NORMAL * 5 / 4;
|
||||
if (_current_text_dir == TD_RTL) {
|
||||
icon_right = r.right - WD_MATRIX_RIGHT;
|
||||
icon_left = icon_right - square_size;
|
||||
text_right = icon_right - text_offset;
|
||||
icon_left = icon_right - this->legend.width;
|
||||
text_right = icon_left - ScaleFontTrad(7);
|
||||
text_left = r.left + WD_MATRIX_LEFT;
|
||||
} else {
|
||||
icon_left = r.left + WD_MATRIX_LEFT;
|
||||
icon_right = icon_left + square_size;
|
||||
text_left = icon_left + text_offset;
|
||||
icon_right = icon_left + this->legend.width;
|
||||
text_left = icon_right + ScaleFontTrad(7);
|
||||
text_right = r.right - WD_MATRIX_RIGHT;
|
||||
}
|
||||
|
||||
int y = Center(r.top, this->resize.step_height);
|
||||
for (byte i = 0; i < this->vscroll->GetCapacity() && i + this->vscroll->GetPosition() < this->count; i++, y += this->resize.step_height) {
|
||||
/* Vertical offset for legend icon. */
|
||||
int icon_top = (this->resize.step_height - this->legend.height + 1) / 2;
|
||||
int icon_bottom = icon_top + this->legend.height;
|
||||
|
||||
int y = r.top;
|
||||
for (byte i = 0; i < this->vscroll->GetCapacity() && i + this->vscroll->GetPosition() < this->count; i++) {
|
||||
bool selected = this->selected_index == i + this->vscroll->GetPosition();
|
||||
|
||||
if (this->index[i + this->vscroll->GetPosition()] == INVALID_INDUSTRYTYPE) {
|
||||
DrawString(text_left, text_right, y, STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES, selected ? TC_WHITE : TC_ORANGE);
|
||||
DrawString(text_left, text_right, y + WD_MATRIX_TOP, STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES, selected ? TC_WHITE : TC_ORANGE);
|
||||
y += this->resize.step_height;
|
||||
continue;
|
||||
}
|
||||
const IndustrySpec *indsp = GetIndustrySpec(this->index[i + this->vscroll->GetPosition()]);
|
||||
|
||||
/* Draw the name of the industry in white is selected, otherwise, in orange */
|
||||
DrawString(text_left, text_right, y, indsp->name, selected ? TC_WHITE : TC_ORANGE);
|
||||
GfxFillRect(icon_left, y + 1, icon_right, y + square_size, selected ? PC_WHITE : PC_BLACK);
|
||||
GfxFillRect(icon_left + 1, y + 2, icon_right - 1, y + square_size - 1, indsp->map_colour);
|
||||
DrawString(text_left, text_right, y + WD_MATRIX_TOP, indsp->name, selected ? TC_WHITE : TC_ORANGE);
|
||||
GfxFillRect(icon_left, y + icon_top, icon_right, y + icon_bottom, selected ? PC_WHITE : PC_BLACK);
|
||||
GfxFillRect(icon_left + 1, y + icon_top + 1, icon_right - 1, y + icon_bottom - 1, indsp->map_colour);
|
||||
|
||||
y += this->resize.step_height;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1865,11 +1879,13 @@ static const uint MAX_CARGOES = 16; ///< Maximum number of cargoes carried in a
|
||||
/** Data about a single field in the #IndustryCargoesWindow panel. */
|
||||
struct CargoesField {
|
||||
static const int VERT_INTER_INDUSTRY_SPACE;
|
||||
static const int HOR_CARGO_BORDER_SPACE;
|
||||
static const int CARGO_STUB_WIDTH;
|
||||
static const int HOR_CARGO_WIDTH, HOR_CARGO_SPACE;
|
||||
static const int VERT_CARGO_SPACE, VERT_CARGO_EDGE;
|
||||
static const int BLOB_DISTANCE, BLOB_WIDTH, BLOB_HEIGHT;
|
||||
static const int BLOB_DISTANCE;
|
||||
|
||||
static Dimension legend;
|
||||
static Dimension cargo_border;
|
||||
static Dimension cargo_line;
|
||||
static Dimension cargo_space;
|
||||
static Dimension cargo_stub;
|
||||
|
||||
static const int INDUSTRY_LINE_COLOUR;
|
||||
static const int CARGO_LINE_COLOUR;
|
||||
@@ -2033,9 +2049,9 @@ struct CargoesField {
|
||||
int n = this->u.cargo.num_cargoes;
|
||||
|
||||
if (n % 2 == 0) {
|
||||
return xpos + cargo_field_width / 2 - (HOR_CARGO_WIDTH + HOR_CARGO_SPACE / 2) * (n / 2);
|
||||
return xpos + cargo_field_width / 2 - (CargoesField::cargo_line.width + CargoesField::cargo_space.width / 2) * (n / 2);
|
||||
} else {
|
||||
return xpos + cargo_field_width / 2 - HOR_CARGO_WIDTH / 2 - (HOR_CARGO_WIDTH + HOR_CARGO_SPACE) * (n / 2);
|
||||
return xpos + cargo_field_width / 2 - CargoesField::cargo_line.width / 2 - (CargoesField::cargo_line.width + CargoesField::cargo_space.width) * (n / 2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2073,13 +2089,13 @@ struct CargoesField {
|
||||
int blob_left, blob_right;
|
||||
if (_current_text_dir == TD_RTL) {
|
||||
blob_right = xpos2 - BLOB_DISTANCE;
|
||||
blob_left = blob_right - BLOB_WIDTH;
|
||||
blob_left = blob_right - CargoesField::legend.width;
|
||||
} else {
|
||||
blob_left = xpos + BLOB_DISTANCE;
|
||||
blob_right = blob_left + BLOB_WIDTH;
|
||||
blob_right = blob_left + CargoesField::legend.width;
|
||||
}
|
||||
GfxFillRect(blob_left, ypos2 - BLOB_DISTANCE - BLOB_HEIGHT, blob_right, ypos2 - BLOB_DISTANCE, PC_BLACK); // Border
|
||||
GfxFillRect(blob_left + 1, ypos2 - BLOB_DISTANCE - BLOB_HEIGHT + 1, blob_right - 1, ypos2 - BLOB_DISTANCE - 1, indsp->map_colour);
|
||||
GfxFillRect(blob_left, ypos2 - BLOB_DISTANCE - CargoesField::legend.height, blob_right, ypos2 - BLOB_DISTANCE, PC_BLACK); // Border
|
||||
GfxFillRect(blob_left + 1, ypos2 - BLOB_DISTANCE - CargoesField::legend.height + 1, blob_right - 1, ypos2 - BLOB_DISTANCE - 1, indsp->map_colour);
|
||||
} else {
|
||||
DrawString(xpos, xpos2, ypos, STR_INDUSTRY_CARGOES_HOUSES, TC_FROMSTRING, SA_HOR_CENTER);
|
||||
}
|
||||
@@ -2093,21 +2109,21 @@ struct CargoesField {
|
||||
other_right = this->u.industry.other_produced;
|
||||
other_left = this->u.industry.other_accepted;
|
||||
}
|
||||
ypos1 += VERT_CARGO_EDGE;
|
||||
ypos1 += CargoesField::cargo_border.height + (FONT_HEIGHT_NORMAL - CargoesField::cargo_line.height) / 2;
|
||||
for (uint i = 0; i < CargoesField::max_cargoes; i++) {
|
||||
if (other_right[i] != INVALID_CARGO) {
|
||||
const CargoSpec *csp = CargoSpec::Get(other_right[i]);
|
||||
int xp = xpos + industry_width + CARGO_STUB_WIDTH;
|
||||
int xp = xpos + industry_width + CargoesField::cargo_stub.width;
|
||||
DrawHorConnection(xpos + industry_width, xp - 1, ypos1, csp);
|
||||
GfxDrawLine(xp, ypos1, xp, ypos1 + FONT_HEIGHT_NORMAL - 1, CARGO_LINE_COLOUR);
|
||||
GfxDrawLine(xp, ypos1, xp, ypos1 + CargoesField::cargo_line.height - 1, CARGO_LINE_COLOUR);
|
||||
}
|
||||
if (other_left[i] != INVALID_CARGO) {
|
||||
const CargoSpec *csp = CargoSpec::Get(other_left[i]);
|
||||
int xp = xpos - CARGO_STUB_WIDTH;
|
||||
int xp = xpos - CargoesField::cargo_stub.width;
|
||||
DrawHorConnection(xp + 1, xpos - 1, ypos1, csp);
|
||||
GfxDrawLine(xp, ypos1, xp, ypos1 + FONT_HEIGHT_NORMAL - 1, CARGO_LINE_COLOUR);
|
||||
GfxDrawLine(xp, ypos1, xp, ypos1 + CargoesField::cargo_line.height - 1, CARGO_LINE_COLOUR);
|
||||
}
|
||||
ypos1 += FONT_HEIGHT_NORMAL + VERT_CARGO_SPACE;
|
||||
ypos1 += FONT_HEIGHT_NORMAL + CargoesField::cargo_space.height;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -2118,15 +2134,15 @@ struct CargoesField {
|
||||
int bot = ypos - (this->u.cargo.bottom_end ? VERT_INTER_INDUSTRY_SPACE / 2 + 1 : 0) + normal_height - 1;
|
||||
int colpos = cargo_base;
|
||||
for (int i = 0; i < this->u.cargo.num_cargoes; i++) {
|
||||
if (this->u.cargo.top_end) GfxDrawLine(colpos, top - 1, colpos + HOR_CARGO_WIDTH - 1, top - 1, CARGO_LINE_COLOUR);
|
||||
if (this->u.cargo.bottom_end) GfxDrawLine(colpos, bot + 1, colpos + HOR_CARGO_WIDTH - 1, bot + 1, CARGO_LINE_COLOUR);
|
||||
if (this->u.cargo.top_end) GfxDrawLine(colpos, top - 1, colpos + CargoesField::cargo_line.width - 1, top - 1, CARGO_LINE_COLOUR);
|
||||
if (this->u.cargo.bottom_end) GfxDrawLine(colpos, bot + 1, colpos + CargoesField::cargo_line.width - 1, bot + 1, CARGO_LINE_COLOUR);
|
||||
GfxDrawLine(colpos, top, colpos, bot, CARGO_LINE_COLOUR);
|
||||
colpos++;
|
||||
const CargoSpec *csp = CargoSpec::Get(this->u.cargo.vertical_cargoes[i]);
|
||||
GfxFillRect(colpos, top, colpos + HOR_CARGO_WIDTH - 2, bot, csp->legend_colour, FILLRECT_OPAQUE);
|
||||
colpos += HOR_CARGO_WIDTH - 2;
|
||||
GfxFillRect(colpos, top, colpos + CargoesField::cargo_line.width - 2, bot, csp->legend_colour, FILLRECT_OPAQUE);
|
||||
colpos += CargoesField::cargo_line.width - 2;
|
||||
GfxDrawLine(colpos, top, colpos, bot, CARGO_LINE_COLOUR);
|
||||
colpos += 1 + HOR_CARGO_SPACE;
|
||||
colpos += 1 + CargoesField::cargo_space.width;
|
||||
}
|
||||
|
||||
const CargoID *hor_left, *hor_right;
|
||||
@@ -2137,15 +2153,15 @@ struct CargoesField {
|
||||
hor_left = this->u.cargo.supp_cargoes;
|
||||
hor_right = this->u.cargo.cust_cargoes;
|
||||
}
|
||||
ypos += VERT_CARGO_EDGE + VERT_INTER_INDUSTRY_SPACE / 2;
|
||||
ypos += CargoesField::cargo_border.height + VERT_INTER_INDUSTRY_SPACE / 2 + (FONT_HEIGHT_NORMAL - CargoesField::cargo_line.height) / 2;
|
||||
for (uint i = 0; i < MAX_CARGOES; i++) {
|
||||
if (hor_left[i] != INVALID_CARGO) {
|
||||
int col = hor_left[i];
|
||||
int dx = 0;
|
||||
const CargoSpec *csp = CargoSpec::Get(this->u.cargo.vertical_cargoes[col]);
|
||||
for (; col > 0; col--) {
|
||||
int lf = cargo_base + col * HOR_CARGO_WIDTH + (col - 1) * HOR_CARGO_SPACE;
|
||||
DrawHorConnection(lf, lf + HOR_CARGO_SPACE - dx, ypos, csp);
|
||||
int lf = cargo_base + col * CargoesField::cargo_line.width + (col - 1) * CargoesField::cargo_space.width;
|
||||
DrawHorConnection(lf, lf + CargoesField::cargo_space.width - dx, ypos, csp);
|
||||
dx = 1;
|
||||
}
|
||||
DrawHorConnection(xpos, cargo_base - dx, ypos, csp);
|
||||
@@ -2155,26 +2171,26 @@ struct CargoesField {
|
||||
int dx = 0;
|
||||
const CargoSpec *csp = CargoSpec::Get(this->u.cargo.vertical_cargoes[col]);
|
||||
for (; col < this->u.cargo.num_cargoes - 1; col++) {
|
||||
int lf = cargo_base + (col + 1) * HOR_CARGO_WIDTH + col * HOR_CARGO_SPACE;
|
||||
DrawHorConnection(lf + dx - 1, lf + HOR_CARGO_SPACE - 1, ypos, csp);
|
||||
int lf = cargo_base + (col + 1) * CargoesField::cargo_line.width + col * CargoesField::cargo_space.width;
|
||||
DrawHorConnection(lf + dx - 1, lf + CargoesField::cargo_space.width - 1, ypos, csp);
|
||||
dx = 1;
|
||||
}
|
||||
DrawHorConnection(cargo_base + col * HOR_CARGO_SPACE + (col + 1) * HOR_CARGO_WIDTH - 1 + dx, xpos + CargoesField::cargo_field_width - 1, ypos, csp);
|
||||
DrawHorConnection(cargo_base + col * CargoesField::cargo_space.width + (col + 1) * CargoesField::cargo_line.width - 1 + dx, xpos + CargoesField::cargo_field_width - 1, ypos, csp);
|
||||
}
|
||||
ypos += FONT_HEIGHT_NORMAL + VERT_CARGO_SPACE;
|
||||
ypos += FONT_HEIGHT_NORMAL + CargoesField::cargo_space.height;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case CFT_CARGO_LABEL:
|
||||
ypos += VERT_CARGO_EDGE + VERT_INTER_INDUSTRY_SPACE / 2;
|
||||
ypos += CargoesField::cargo_border.height + VERT_INTER_INDUSTRY_SPACE / 2;
|
||||
for (uint i = 0; i < MAX_CARGOES; i++) {
|
||||
if (this->u.cargo_label.cargoes[i] != INVALID_CARGO) {
|
||||
const CargoSpec *csp = CargoSpec::Get(this->u.cargo_label.cargoes[i]);
|
||||
DrawString(xpos + WD_FRAMERECT_LEFT, xpos + industry_width - 1 - WD_FRAMERECT_RIGHT, ypos, csp->name, TC_WHITE,
|
||||
(this->u.cargo_label.left_align) ? SA_LEFT : SA_RIGHT);
|
||||
}
|
||||
ypos += FONT_HEIGHT_NORMAL + VERT_CARGO_SPACE;
|
||||
ypos += FONT_HEIGHT_NORMAL + CargoesField::cargo_space.height;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2199,17 +2215,17 @@ struct CargoesField {
|
||||
uint col;
|
||||
for (col = 0; col < this->u.cargo.num_cargoes; col++) {
|
||||
if (pt.x < cpos) break;
|
||||
if (pt.x < cpos + CargoesField::HOR_CARGO_WIDTH) return this->u.cargo.vertical_cargoes[col];
|
||||
cpos += CargoesField::HOR_CARGO_WIDTH + CargoesField::HOR_CARGO_SPACE;
|
||||
if (pt.x < cpos + (int)CargoesField::cargo_line.width) return this->u.cargo.vertical_cargoes[col];
|
||||
cpos += CargoesField::cargo_line.width + CargoesField::cargo_space.width;
|
||||
}
|
||||
/* col = 0 -> left of first col, 1 -> left of 2nd col, ... this->u.cargo.num_cargoes right of last-col. */
|
||||
|
||||
int vpos = VERT_INTER_INDUSTRY_SPACE / 2 + VERT_CARGO_EDGE;
|
||||
int vpos = VERT_INTER_INDUSTRY_SPACE / 2 + CargoesField::cargo_border.width;
|
||||
uint row;
|
||||
for (row = 0; row < MAX_CARGOES; row++) {
|
||||
if (pt.y < vpos) return INVALID_CARGO;
|
||||
if (pt.y < vpos + FONT_HEIGHT_NORMAL) break;
|
||||
vpos += FONT_HEIGHT_NORMAL + VERT_CARGO_SPACE;
|
||||
vpos += FONT_HEIGHT_NORMAL + CargoesField::cargo_space.width;
|
||||
}
|
||||
if (row == MAX_CARGOES) return INVALID_CARGO;
|
||||
|
||||
@@ -2251,12 +2267,12 @@ struct CargoesField {
|
||||
{
|
||||
assert(this->type == CFT_CARGO_LABEL);
|
||||
|
||||
int vpos = VERT_INTER_INDUSTRY_SPACE / 2 + VERT_CARGO_EDGE;
|
||||
int vpos = VERT_INTER_INDUSTRY_SPACE / 2 + CargoesField::cargo_border.height;
|
||||
uint row;
|
||||
for (row = 0; row < MAX_CARGOES; row++) {
|
||||
if (pt.y < vpos) return INVALID_CARGO;
|
||||
if (pt.y < vpos + FONT_HEIGHT_NORMAL) break;
|
||||
vpos += FONT_HEIGHT_NORMAL + VERT_CARGO_SPACE;
|
||||
vpos += FONT_HEIGHT_NORMAL + CargoesField::cargo_space.height;
|
||||
}
|
||||
if (row == MAX_CARGOES) return INVALID_CARGO;
|
||||
return this->u.cargo_label.cargoes[row];
|
||||
@@ -2273,14 +2289,20 @@ private:
|
||||
static void DrawHorConnection(int left, int right, int top, const CargoSpec *csp)
|
||||
{
|
||||
GfxDrawLine(left, top, right, top, CARGO_LINE_COLOUR);
|
||||
GfxFillRect(left, top + 1, right, top + FONT_HEIGHT_NORMAL - 2, csp->legend_colour, FILLRECT_OPAQUE);
|
||||
GfxDrawLine(left, top + FONT_HEIGHT_NORMAL - 1, right, top + FONT_HEIGHT_NORMAL - 1, CARGO_LINE_COLOUR);
|
||||
GfxFillRect(left, top + 1, right, top + CargoesField::cargo_line.height - 2, csp->legend_colour, FILLRECT_OPAQUE);
|
||||
GfxDrawLine(left, top + CargoesField::cargo_line.height - 1, right, top + CargoesField::cargo_line.height - 1, CARGO_LINE_COLOUR);
|
||||
}
|
||||
};
|
||||
|
||||
static_assert(MAX_CARGOES >= cpp_lengthof(IndustrySpec, produced_cargo));
|
||||
static_assert(MAX_CARGOES >= cpp_lengthof(IndustrySpec, accepts_cargo));
|
||||
|
||||
Dimension CargoesField::legend; ///< Dimension of the legend blob.
|
||||
Dimension CargoesField::cargo_border; ///< Dimensions of border between cargo lines and industry boxes.
|
||||
Dimension CargoesField::cargo_line; ///< Dimensions of cargo lines.
|
||||
Dimension CargoesField::cargo_space; ///< Dimensions of space between cargo lines.
|
||||
Dimension CargoesField::cargo_stub; ///< Dimensions of cargo stub (unconnected cargo line.)
|
||||
|
||||
int CargoesField::small_height; ///< Height of the header row.
|
||||
int CargoesField::normal_height; ///< Height of the non-header rows.
|
||||
int CargoesField::industry_width; ///< Width of an industry field.
|
||||
@@ -2288,16 +2310,7 @@ int CargoesField::cargo_field_width; ///< Width of a cargo field.
|
||||
uint CargoesField::max_cargoes; ///< Largest number of cargoes actually on any industry.
|
||||
const int CargoesField::VERT_INTER_INDUSTRY_SPACE = 6; ///< Amount of space between two industries in a column.
|
||||
|
||||
const int CargoesField::HOR_CARGO_BORDER_SPACE = 15; ///< Amount of space between the left/right edge of a #CFT_CARGO field, and the left/right most vertical cargo.
|
||||
const int CargoesField::CARGO_STUB_WIDTH = 10; ///< Width of a cargo not carried in the column (should be less than #HOR_CARGO_BORDER_SPACE).
|
||||
const int CargoesField::HOR_CARGO_WIDTH = 15; ///< Width of a vertical cargo column (inclusive the border line).
|
||||
const int CargoesField::HOR_CARGO_SPACE = 5; ///< Amount of horizontal space between two vertical cargoes.
|
||||
const int CargoesField::VERT_CARGO_EDGE = 4; ///< Amount of vertical space between top/bottom and the top/bottom connected cargo at an industry.
|
||||
const int CargoesField::VERT_CARGO_SPACE = 4; ///< Amount of vertical space between two connected cargoes at an industry.
|
||||
|
||||
const int CargoesField::BLOB_DISTANCE = 5; ///< Distance of the industry legend colour from the edge of the industry box.
|
||||
const int CargoesField::BLOB_WIDTH = 12; ///< Width of the industry legend colour, including border.
|
||||
const int CargoesField::BLOB_HEIGHT = 9; ///< Height of the industry legend colour, including border
|
||||
|
||||
const int CargoesField::INDUSTRY_LINE_COLOUR = PC_YELLOW; ///< Line colour of the industry type box.
|
||||
const int CargoesField::CARGO_LINE_COLOUR = PC_YELLOW; ///< Line colour around the cargo.
|
||||
@@ -2468,6 +2481,26 @@ struct IndustryCargoesWindow : public Window {
|
||||
d.height += WD_FRAMETEXT_TOP + WD_FRAMETEXT_BOTTOM;
|
||||
CargoesField::small_height = d.height;
|
||||
|
||||
/* Size of the legend blob -- slightly larger than the smallmap legend blob. */
|
||||
CargoesField::legend.height = FONT_HEIGHT_SMALL;
|
||||
CargoesField::legend.width = CargoesField::legend.height * 8 / 5;
|
||||
|
||||
/* Size of cargo lines. */
|
||||
CargoesField::cargo_line.width = FONT_HEIGHT_NORMAL;
|
||||
CargoesField::cargo_line.height = CargoesField::cargo_line.width;
|
||||
|
||||
/* Size of border between cargo lines and industry boxes. */
|
||||
CargoesField::cargo_border.width = CargoesField::cargo_line.width * 3 / 2;
|
||||
CargoesField::cargo_border.height = CargoesField::cargo_line.width / 2;
|
||||
|
||||
/* Size of space between cargo lines. */
|
||||
CargoesField::cargo_space.width = CargoesField::cargo_line.width / 2;
|
||||
CargoesField::cargo_space.height = CargoesField::cargo_line.height / 2;
|
||||
|
||||
/* Size of cargo stub (unconnected cargo line.) */
|
||||
CargoesField::cargo_stub.width = CargoesField::cargo_line.width / 2;
|
||||
CargoesField::cargo_stub.height = CargoesField::cargo_line.height; /* Unused */
|
||||
|
||||
/* Decide about the size of the box holding the text of an industry type. */
|
||||
this->ind_textsize.width = 0;
|
||||
this->ind_textsize.height = 0;
|
||||
@@ -2496,21 +2529,23 @@ struct IndustryCargoesWindow : public Window {
|
||||
|
||||
d.width += 2 * HOR_TEXT_PADDING;
|
||||
/* Ensure the height is enough for the industry type text, for the horizontal connections, and for the cargo labels. */
|
||||
uint min_ind_height = CargoesField::VERT_CARGO_EDGE * 2 + CargoesField::max_cargoes * FONT_HEIGHT_NORMAL + (CargoesField::max_cargoes - 1) * CargoesField::VERT_CARGO_SPACE;
|
||||
uint min_ind_height = CargoesField::cargo_border.height * 2 + CargoesField::max_cargoes * FONT_HEIGHT_NORMAL + (CargoesField::max_cargoes - 1) * CargoesField::cargo_space.height;
|
||||
d.height = std::max(d.height + 2 * VERT_TEXT_PADDING, min_ind_height);
|
||||
|
||||
CargoesField::industry_width = d.width;
|
||||
CargoesField::normal_height = d.height + CargoesField::VERT_INTER_INDUSTRY_SPACE;
|
||||
|
||||
/* Width of a #CFT_CARGO field. */
|
||||
CargoesField::cargo_field_width = CargoesField::HOR_CARGO_BORDER_SPACE * 2 + CargoesField::HOR_CARGO_WIDTH * CargoesField::max_cargoes + CargoesField::HOR_CARGO_SPACE * (CargoesField::max_cargoes - 1);
|
||||
CargoesField::cargo_field_width = CargoesField::cargo_border.width * 2 + CargoesField::cargo_line.width * CargoesField::max_cargoes + CargoesField::cargo_space.width * (CargoesField::max_cargoes - 1);
|
||||
}
|
||||
|
||||
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_IC_PANEL:
|
||||
resize->height = CargoesField::normal_height;
|
||||
size->width = WD_FRAMETEXT_LEFT + CargoesField::industry_width * 3 + CargoesField::cargo_field_width * 2 + WD_FRAMETEXT_RIGHT;
|
||||
size->height = WD_FRAMETEXT_TOP + CargoesField::small_height + 2 * resize->height + WD_FRAMETEXT_BOTTOM;
|
||||
break;
|
||||
|
||||
case WID_IC_IND_DROPDOWN:
|
||||
@@ -2763,8 +2798,7 @@ struct IndustryCargoesWindow : public Window {
|
||||
|
||||
this->ShortenCargoColumn(1, 1, num_indrows);
|
||||
this->ShortenCargoColumn(3, 1, num_indrows);
|
||||
const NWidgetBase *nwp = this->GetWidget<NWidgetBase>(WID_IC_PANEL);
|
||||
this->vscroll->SetCount(CeilDiv(WD_FRAMETEXT_TOP + WD_FRAMETEXT_BOTTOM + CargoesField::small_height + num_indrows * CargoesField::normal_height, nwp->resize_y));
|
||||
this->vscroll->SetCount(num_indrows);
|
||||
this->SetDirty();
|
||||
this->NotifySmallmap();
|
||||
}
|
||||
@@ -2831,8 +2865,7 @@ struct IndustryCargoesWindow : public Window {
|
||||
}
|
||||
|
||||
this->ShortenCargoColumn(1, 1, num_indrows);
|
||||
const NWidgetBase *nwp = this->GetWidget<NWidgetBase>(WID_IC_PANEL);
|
||||
this->vscroll->SetCount(CeilDiv(WD_FRAMETEXT_TOP + WD_FRAMETEXT_BOTTOM + CargoesField::small_height + num_indrows * CargoesField::normal_height, nwp->resize_y));
|
||||
this->vscroll->SetCount(num_indrows);
|
||||
this->SetDirty();
|
||||
this->NotifySmallmap();
|
||||
}
|
||||
@@ -3079,7 +3112,7 @@ struct IndustryCargoesWindow : public Window {
|
||||
|
||||
void OnResize() override
|
||||
{
|
||||
this->vscroll->SetCapacityFromWidget(this, WID_IC_PANEL);
|
||||
this->vscroll->SetCapacityFromWidget(this, WID_IC_PANEL, WD_FRAMERECT_TOP + CargoesField::small_height);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ bool IniFile::SaveToDisk(const std::string &filename)
|
||||
std::string file_new{ filename };
|
||||
file_new.append(".new");
|
||||
|
||||
std::ofstream os(OTTD2FS(file_new.c_str()));
|
||||
std::ofstream os(OTTD2FS(file_new).c_str());
|
||||
if (os.fail()) return false;
|
||||
|
||||
for (const IniGroup *group = this->group; group != nullptr; group = group->next) {
|
||||
@@ -94,8 +94,8 @@ bool IniFile::SaveToDisk(const std::string &filename)
|
||||
#if defined(_WIN32)
|
||||
/* Allocate space for one more \0 character. */
|
||||
wchar_t tfilename[MAX_PATH + 1], tfile_new[MAX_PATH + 1];
|
||||
wcsncpy(tfilename, OTTD2FS(filename.c_str()), MAX_PATH);
|
||||
wcsncpy(tfile_new, OTTD2FS(file_new.c_str()), MAX_PATH);
|
||||
wcsncpy(tfilename, OTTD2FS(filename).c_str(), MAX_PATH);
|
||||
wcsncpy(tfile_new, OTTD2FS(file_new).c_str(), MAX_PATH);
|
||||
/* SHFileOperation wants a double '\0' terminated string. */
|
||||
tfilename[MAX_PATH - 1] = '\0';
|
||||
tfile_new[MAX_PATH - 1] = '\0';
|
||||
|
||||
@@ -1400,7 +1400,7 @@ static void CalculateSnowLine()
|
||||
static uint8 CalculateDesertLine()
|
||||
{
|
||||
/* CalculateCoverageLine() runs from top to bottom, so we need to invert the coverage. */
|
||||
return _settings_game.game_creation.snow_line_height = CalculateCoverageLine(100 - _settings_game.game_creation.desert_coverage, 4);
|
||||
return CalculateCoverageLine(100 - _settings_game.game_creation.desert_coverage, 4);
|
||||
}
|
||||
|
||||
void GenerateLandscape(byte mode)
|
||||
|
||||
@@ -11,6 +11,7 @@ set(LANG_SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/brazilian_portuguese.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/bulgarian.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/catalan.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/chuvash.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/croatian.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/czech.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/danish.txt
|
||||
@@ -22,13 +23,16 @@ set(LANG_SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/faroese.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/finnish.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/french.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/frisian.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/gaelic.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/galician.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/german.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/greek.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/hebrew.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/hindi.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/hungarian.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/icelandic.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/ido.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/indonesian.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/irish.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/italian.txt
|
||||
@@ -38,9 +42,13 @@ set(LANG_SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/latvian.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/lithuanian.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/luxembourgish.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/macedonian.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/malay.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/maltese.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/marathi.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/norwegian_bokmal.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/norwegian_nynorsk.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/persian.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/polish.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/portuguese.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/romanian.txt
|
||||
@@ -56,6 +64,7 @@ set(LANG_SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/thai.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/traditional_chinese.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/turkish.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/urdu.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/ukrainian.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/vietnamese.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/welsh.txt
|
||||
|
||||
@@ -990,6 +990,7 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Kies die
|
||||
STR_GAME_OPTIONS_RESOLUTION_OTHER :ander
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK} Koppelvlak groote
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK} Kies die koppelvlak element groote om te gebruik
|
||||
|
||||
@@ -1914,6 +1915,7 @@ STR_FACE_TIE :Das:
|
||||
STR_FACE_EARRING :Oorbel:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander das of oorbel
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multispeler
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Speler naam:
|
||||
@@ -1972,10 +1974,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Die spel
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Stel wagwoord
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskerm jou spel met 'n wagwoord as jy wil dit nie publieke toepassing laat wees nie
|
||||
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Openbaar
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen 'n openbare (internet) of 'n plaaslike (LAN) spel
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Nee
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Ja
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} Klient{P "" e}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimum aantal kliënte:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Kies die maksimum aantal kliënte. Alle posisies hoef nie vol te wees nie
|
||||
@@ -1990,46 +1988,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Ander sp
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Tik 'n naam in vir die netwerk speeletjie
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Enige
|
||||
STR_NETWORK_LANG_ENGLISH :Engels
|
||||
STR_NETWORK_LANG_GERMAN :Duits
|
||||
STR_NETWORK_LANG_FRENCH :Frans
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brazilian
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgarian
|
||||
STR_NETWORK_LANG_CHINESE :Chinese
|
||||
STR_NETWORK_LANG_CZECH :Czech
|
||||
STR_NETWORK_LANG_DANISH :Danish
|
||||
STR_NETWORK_LANG_DUTCH :Dutch
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Finnish
|
||||
STR_NETWORK_LANG_HUNGARIAN :Hungarian
|
||||
STR_NETWORK_LANG_ICELANDIC :Icelandic
|
||||
STR_NETWORK_LANG_ITALIAN :Italian
|
||||
STR_NETWORK_LANG_JAPANESE :Japanese
|
||||
STR_NETWORK_LANG_KOREAN :Korean
|
||||
STR_NETWORK_LANG_LITHUANIAN :Lithuanian
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norwegian
|
||||
STR_NETWORK_LANG_POLISH :Polish
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portuguese
|
||||
STR_NETWORK_LANG_ROMANIAN :Romanian
|
||||
STR_NETWORK_LANG_RUSSIAN :Russian
|
||||
STR_NETWORK_LANG_SLOVAK :Slovak
|
||||
STR_NETWORK_LANG_SLOVENIAN :Slovenian
|
||||
STR_NETWORK_LANG_SPANISH :Spanish
|
||||
STR_NETWORK_LANG_SWEDISH :Swedish
|
||||
STR_NETWORK_LANG_TURKISH :Turkish
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ukrainian
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaans
|
||||
STR_NETWORK_LANG_CROATIAN :Croatian
|
||||
STR_NETWORK_LANG_CATALAN :Catalan
|
||||
STR_NETWORK_LANG_ESTONIAN :Estonian
|
||||
STR_NETWORK_LANG_GALICIAN :Galician
|
||||
STR_NETWORK_LANG_GREEK :Grieks
|
||||
STR_NETWORK_LANG_LATVIAN :Latvian
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multispeler spel tuiste
|
||||
|
||||
@@ -2077,19 +2035,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Loskoppe
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Verskaffer is beskerm. Voer wagwoord in
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Maatskappy is beskerm. Voer wagwoord in
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Kliëntelys
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient Lys
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Toeskou
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nuwe maatskapy
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Skop
|
||||
STR_NETWORK_CLIENTLIST_BAN :Verbod
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Praat met almal
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Praat met maatskappy
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privaate boodskap
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Verskaffer
|
||||
STR_NETWORK_CLIENT :Klient
|
||||
|
||||
@@ -965,6 +965,7 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}تسري
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}حدد هذا المربع للسماح لـ OpenTTD بمحاولة استخدام تسريع الأجهزة. سيتم تطبيق الإعداد الذي تم تغييره فقط عند إعادة تشغيل اللعبة
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}لن يعمل الإعداد إلا بعد إعادة تشغيل اللعبة
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}حجم اللوحة
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}حدد العنصر المطلوب
|
||||
|
||||
@@ -1610,6 +1611,7 @@ STR_FACE_TIE :الربطة:
|
||||
STR_FACE_EARRING :أقراط الأذان:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}غير الربطة أو أقراط الأذن
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}تعدد اللاعبين
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}أسم اللاعب
|
||||
@@ -1682,46 +1684,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}اللا
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}أدخل أسم اللعبة للشبكة
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :أي
|
||||
STR_NETWORK_LANG_ENGLISH :إنجليزي
|
||||
STR_NETWORK_LANG_GERMAN :ألماني
|
||||
STR_NETWORK_LANG_FRENCH :فرنسي
|
||||
STR_NETWORK_LANG_BRAZILIAN :برازيلي
|
||||
STR_NETWORK_LANG_BULGARIAN :بلغاري
|
||||
STR_NETWORK_LANG_CHINESE :صيني
|
||||
STR_NETWORK_LANG_CZECH :شيكي
|
||||
STR_NETWORK_LANG_DANISH :دانماركي
|
||||
STR_NETWORK_LANG_DUTCH :هولندي
|
||||
STR_NETWORK_LANG_ESPERANTO :اسبرانتو
|
||||
STR_NETWORK_LANG_FINNISH :الفنلندية
|
||||
STR_NETWORK_LANG_HUNGARIAN :هنغاري
|
||||
STR_NETWORK_LANG_ICELANDIC :الأيسلاندية
|
||||
STR_NETWORK_LANG_ITALIAN :إيطالي
|
||||
STR_NETWORK_LANG_JAPANESE :يابانية
|
||||
STR_NETWORK_LANG_KOREAN :كورية
|
||||
STR_NETWORK_LANG_LITHUANIAN :اللتوانية
|
||||
STR_NETWORK_LANG_NORWEGIAN :نرويجية
|
||||
STR_NETWORK_LANG_POLISH :البولندية
|
||||
STR_NETWORK_LANG_PORTUGUESE :برتغالية
|
||||
STR_NETWORK_LANG_ROMANIAN :رومانية
|
||||
STR_NETWORK_LANG_RUSSIAN :روسية
|
||||
STR_NETWORK_LANG_SLOVAK :السلوفاكية
|
||||
STR_NETWORK_LANG_SLOVENIAN :السلوفانية
|
||||
STR_NETWORK_LANG_SPANISH :أسبانية
|
||||
STR_NETWORK_LANG_SWEDISH :سويدية
|
||||
STR_NETWORK_LANG_TURKISH :تركية
|
||||
STR_NETWORK_LANG_UKRAINIAN :الأوكرانية
|
||||
STR_NETWORK_LANG_AFRIKAANS :الأفريقية
|
||||
STR_NETWORK_LANG_CROATIAN :كرواتية
|
||||
STR_NETWORK_LANG_CATALAN :الكاتالوينية
|
||||
STR_NETWORK_LANG_ESTONIAN :الأستونية
|
||||
STR_NETWORK_LANG_GALICIAN :الجاليكية
|
||||
STR_NETWORK_LANG_GREEK :اليونانية
|
||||
STR_NETWORK_LANG_LATVIAN :اللاتفية
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}ردهة تعدد اللاعبين
|
||||
|
||||
@@ -1772,15 +1734,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}الشر
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :قائمة العملاء
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :شاهد
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :شركة جديدة
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :اطرد
|
||||
STR_NETWORK_CLIENTLIST_BAN :بان
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :تحدث مع الكل
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :تحدث لشركة
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :رسالة خاصة
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :خادم
|
||||
STR_NETWORK_CLIENT :عميل
|
||||
|
||||
@@ -961,6 +961,7 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Pantaila
|
||||
STR_GAME_OPTIONS_RESOLUTION_OTHER :besteak
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Interfaze tamaina
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normala
|
||||
@@ -1789,6 +1790,7 @@ STR_FACE_TIE :Korbata:
|
||||
STR_FACE_EARRING :Belarritakoak:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Aldatu korbata eta belarritakoak
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijokalaria
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Jokalariaren izena:
|
||||
@@ -1847,8 +1849,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Jokoaren
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Pasahitza ezarri
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Babestu zure jokoa pasahitz batekin ez baduzu nahi publikoa izatea
|
||||
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Ez
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Bai
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} Bezero
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Gehienezko bezeroak:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Gehienezko bezero kopurua aukeratu. Ez da beharrezkoa guztia betetzea
|
||||
@@ -1863,46 +1863,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Beste jo
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Sare joko batentzako izena sartu
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Edozein
|
||||
STR_NETWORK_LANG_ENGLISH :Ingelera
|
||||
STR_NETWORK_LANG_GERMAN :Alemaniera
|
||||
STR_NETWORK_LANG_FRENCH :Frantsesa
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brasilera
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgariera
|
||||
STR_NETWORK_LANG_CHINESE :Txinera
|
||||
STR_NETWORK_LANG_CZECH :Txekiera
|
||||
STR_NETWORK_LANG_DANISH :Danimarkiera
|
||||
STR_NETWORK_LANG_DUTCH :Holandera
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperantoa
|
||||
STR_NETWORK_LANG_FINNISH :Finlandera
|
||||
STR_NETWORK_LANG_HUNGARIAN :Hungariera
|
||||
STR_NETWORK_LANG_ICELANDIC :Islandiera
|
||||
STR_NETWORK_LANG_ITALIAN :Italiera
|
||||
STR_NETWORK_LANG_JAPANESE :Japoniera
|
||||
STR_NETWORK_LANG_KOREAN :Koreera
|
||||
STR_NETWORK_LANG_LITHUANIAN :Lituaniera
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norbegiera
|
||||
STR_NETWORK_LANG_POLISH :Poloniera
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portugesa
|
||||
STR_NETWORK_LANG_ROMANIAN :Errumaniera
|
||||
STR_NETWORK_LANG_RUSSIAN :Errusiera
|
||||
STR_NETWORK_LANG_SLOVAK :Eslabiera
|
||||
STR_NETWORK_LANG_SLOVENIAN :Eslobeniera
|
||||
STR_NETWORK_LANG_SPANISH :Gaztelera
|
||||
STR_NETWORK_LANG_SWEDISH :Suediera
|
||||
STR_NETWORK_LANG_TURKISH :Turkiera
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ukrainera
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaanera
|
||||
STR_NETWORK_LANG_CROATIAN :Kroatiera
|
||||
STR_NETWORK_LANG_CATALAN :Katalana
|
||||
STR_NETWORK_LANG_ESTONIAN :Estoniera
|
||||
STR_NETWORK_LANG_GALICIAN :Galiziera
|
||||
STR_NETWORK_LANG_GREEK :Greziera
|
||||
STR_NETWORK_LANG_LATVIAN :Letoniera
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multijokalari joko itxia
|
||||
|
||||
@@ -1953,15 +1913,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Konpaini
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Bezero zerrenda
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Ikusle
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Konpainia berria
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Kanporatu
|
||||
STR_NETWORK_CLIENTLIST_BAN :Debekatu
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Guztiei hitz egin
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Konpainiari hitz egin
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mezu pribatua
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Zerbitzaria
|
||||
STR_NETWORK_CLIENT :Bezeroa
|
||||
|
||||
@@ -1299,6 +1299,7 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Выба
|
||||
STR_GAME_OPTIONS_RESOLUTION_OTHER :Iншае
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Памер элементаў інтэрфейсу
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Выберыце памер элементаў інтэрфейсу
|
||||
|
||||
@@ -2224,6 +2225,7 @@ STR_FACE_TIE :Гальшту
|
||||
STR_FACE_EARRING :Завушніца:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Зьмяніць гальштук або завушніцу
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Сеткавая гульня
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Імя гульца:
|
||||
@@ -2282,10 +2284,6 @@ 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_ADVERTISED_LABEL :{BLACK}Інтэрнэт
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Выберыце паміж гульнёй праз Інтэрнэт або ў лакальнай сетцы
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Не
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Так
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клiент{P "" ы аў}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. колькасьць клiентаў:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Выбар максымальнай колькасьці кліентаў. Ня ўсе месцы павінны быць занятыя
|
||||
@@ -2300,46 +2298,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Іншы
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Увядзіце назву сеткавай гульні
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Любая
|
||||
STR_NETWORK_LANG_ENGLISH :Анґельская
|
||||
STR_NETWORK_LANG_GERMAN :Нямецкая
|
||||
STR_NETWORK_LANG_FRENCH :Француская
|
||||
STR_NETWORK_LANG_BRAZILIAN :Бразыльская
|
||||
STR_NETWORK_LANG_BULGARIAN :Балґарская
|
||||
STR_NETWORK_LANG_CHINESE :Кітайская
|
||||
STR_NETWORK_LANG_CZECH :Чэская
|
||||
STR_NETWORK_LANG_DANISH :Дацкая
|
||||
STR_NETWORK_LANG_DUTCH :Нідэрляндзкая
|
||||
STR_NETWORK_LANG_ESPERANTO :Эспэранта
|
||||
STR_NETWORK_LANG_FINNISH :Фінская
|
||||
STR_NETWORK_LANG_HUNGARIAN :Вугорская
|
||||
STR_NETWORK_LANG_ICELANDIC :Ісьляндзкая
|
||||
STR_NETWORK_LANG_ITALIAN :Італьянская
|
||||
STR_NETWORK_LANG_JAPANESE :Японская
|
||||
STR_NETWORK_LANG_KOREAN :Карэйская
|
||||
STR_NETWORK_LANG_LITHUANIAN :Летувіская
|
||||
STR_NETWORK_LANG_NORWEGIAN :Нарвэская
|
||||
STR_NETWORK_LANG_POLISH :Польская
|
||||
STR_NETWORK_LANG_PORTUGUESE :Партуґальская
|
||||
STR_NETWORK_LANG_ROMANIAN :Румынская
|
||||
STR_NETWORK_LANG_RUSSIAN :Расейская
|
||||
STR_NETWORK_LANG_SLOVAK :Славацкая
|
||||
STR_NETWORK_LANG_SLOVENIAN :Славенская
|
||||
STR_NETWORK_LANG_SPANISH :Гішпанская
|
||||
STR_NETWORK_LANG_SWEDISH :Швэдзкая
|
||||
STR_NETWORK_LANG_TURKISH :Турэцкая
|
||||
STR_NETWORK_LANG_UKRAINIAN :Украінская
|
||||
STR_NETWORK_LANG_AFRIKAANS :Афрыкаанс
|
||||
STR_NETWORK_LANG_CROATIAN :Харвацкая
|
||||
STR_NETWORK_LANG_CATALAN :Каталёнская
|
||||
STR_NETWORK_LANG_ESTONIAN :Эстонская
|
||||
STR_NETWORK_LANG_GALICIAN :Ґалісійская
|
||||
STR_NETWORK_LANG_GREEK :Грэцкая
|
||||
STR_NETWORK_LANG_LATVIAN :Латыская
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Вітальня сеткавай гульні
|
||||
|
||||
@@ -2387,19 +2345,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Адлу
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сэрвэр абаронены. Увядзіце пароль
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Кампанія абароненая. Увядзіце пароль
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Сьпіс кліентаў
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Сьпіс кліентаў
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Назіраць
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Новая кампанія
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Выкінуць гульца
|
||||
STR_NETWORK_CLIENTLIST_BAN :Бан
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Пагутарыць з усімі
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Пагутарыць з кампаніяй
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Прыватнае паведамленьне
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Сэрвэр
|
||||
STR_NETWORK_CLIENT :Кліент
|
||||
|
||||
@@ -954,7 +954,7 @@ STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaio
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Dirigem na esquerda
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Dirigem na direita
|
||||
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Nomes das cidades
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Nome das cidades:
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Selecionar o estilo dos nomes das cidades
|
||||
|
||||
############ start of townname region
|
||||
@@ -994,6 +994,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :A cada 12 meses
|
||||
|
||||
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Idioma
|
||||
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Selecionar o idioma da interface do jogo
|
||||
STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% concluído)
|
||||
|
||||
STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Tela cheia
|
||||
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Marcar esta caixa para jogar OpenTTD modo de tela cheia
|
||||
@@ -1007,6 +1008,9 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Acelera
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Marque esta caixa para permitir que o OpenTTD tente usar a aceleração de hardware. Qualquer mudança nesta configuração só será aplicada após reiniciar o jogo.
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A configuração só terá efeito após reiniciar o jogo
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para habilitar o v-sync na tela. Qualquer mudança nesta configuração só será aplicada após reiniciar o jogo. Só funciona com a aceleração de hardware habilitada
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Tamanho da interface
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Selecione o tamanho de elemento de interface a ser usado
|
||||
|
||||
@@ -1139,6 +1143,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Configur
|
||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtro:
|
||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Maximizar tudo
|
||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Minimizar tudo
|
||||
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Redefinir todos os parâmetros
|
||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(não há explicação disponível)
|
||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor padrão: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de config.: {ORANGE}{STRING}
|
||||
@@ -1147,6 +1152,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Config. do jogo
|
||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Config. do jogo (guardado no savegame; afeta apenas jogo atual)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Config. da companhia (guardado no savegame; afeta apenas novos jogos)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Config. da companhia (guardado no savegame; afeta apenas a comp. atual)
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Cuidado!
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Essa ação irá restaurar todas as configurações para os valores padrão.{}Tem certeza que deseja continuar?
|
||||
|
||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria:
|
||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo:
|
||||
@@ -1985,6 +1992,9 @@ STR_FACE_TIE :Gravata:
|
||||
STR_FACE_EARRING :Brinco:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Alterar gravata ou brinco
|
||||
|
||||
STR_NETWORK_SERVER_VISIBILITY_PRIVATE :Privado
|
||||
STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Público
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multi-jogador
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome:
|
||||
@@ -2047,10 +2057,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome d
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Definir senha
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se não desejar que seja publicamente acessível
|
||||
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_LABEL :[BLACK}Publicado
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Selecione entre um jogo publicado (internet) ou não publicado (Rede de Área Local, LAN)
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Não
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Sim
|
||||
STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilidade
|
||||
STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Se outras pessoas podem ver seu servidor na lista pública
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Num máx de clientes:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Escolha o número máximo de clientes. Não é necessário estarem todos preenchidos
|
||||
@@ -2065,46 +2073,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Outros j
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Coloque o nome para o jogo em rede
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Qualquer
|
||||
STR_NETWORK_LANG_ENGLISH :Inglês
|
||||
STR_NETWORK_LANG_GERMAN :Alemão
|
||||
STR_NETWORK_LANG_FRENCH :Francês
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brasileiro
|
||||
STR_NETWORK_LANG_BULGARIAN :Búlgaro
|
||||
STR_NETWORK_LANG_CHINESE :Chinês
|
||||
STR_NETWORK_LANG_CZECH :Checo
|
||||
STR_NETWORK_LANG_DANISH :Dinamarquês
|
||||
STR_NETWORK_LANG_DUTCH :Holandês
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Finlandês
|
||||
STR_NETWORK_LANG_HUNGARIAN :Húngaro
|
||||
STR_NETWORK_LANG_ICELANDIC :Islandês
|
||||
STR_NETWORK_LANG_ITALIAN :Italiano
|
||||
STR_NETWORK_LANG_JAPANESE :Japonês
|
||||
STR_NETWORK_LANG_KOREAN :Coreano
|
||||
STR_NETWORK_LANG_LITHUANIAN :Lituano
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norueguês
|
||||
STR_NETWORK_LANG_POLISH :Polandês
|
||||
STR_NETWORK_LANG_PORTUGUESE :Português
|
||||
STR_NETWORK_LANG_ROMANIAN :Romeno
|
||||
STR_NETWORK_LANG_RUSSIAN :Russo
|
||||
STR_NETWORK_LANG_SLOVAK :Eslovaco
|
||||
STR_NETWORK_LANG_SLOVENIAN :Esloveno
|
||||
STR_NETWORK_LANG_SPANISH :Espanhol
|
||||
STR_NETWORK_LANG_SWEDISH :Sueco
|
||||
STR_NETWORK_LANG_TURKISH :Turco
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ucraniano
|
||||
STR_NETWORK_LANG_AFRIKAANS :Africano
|
||||
STR_NETWORK_LANG_CROATIAN :Croata
|
||||
STR_NETWORK_LANG_CATALAN :Catalão
|
||||
STR_NETWORK_LANG_ESTONIAN :Estoniano
|
||||
STR_NETWORK_LANG_GALICIAN :Galego
|
||||
STR_NETWORK_LANG_GREEK :Grego
|
||||
STR_NETWORK_LANG_LATVIAN :Letão
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Sala de espera do jogo
|
||||
|
||||
@@ -2152,19 +2120,46 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconec
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor está protegido. Digite a senha
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa está protegida. Digite a senha
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Lista de clientes
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Assistir
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova Companhia
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Jogadores online
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Banir
|
||||
STR_NETWORK_CLIENTLIST_BAN :Banir
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Falar com todos
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Falar com a empresa
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mensagem privada
|
||||
STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Multijogador
|
||||
STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Servidor
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Nome
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Nome do servidor que você está jogando
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Edita o nome do seu servidor
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Nome do servidor
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Visibilidade
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Se outras pessoas podem ver seu servidor na lista pública
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Jogador
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nome
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Seu nome de jogador
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Edita seu nome de jogador
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Seu nome de jogador
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Ações administrativas a serem executadas para esse cliente
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Ações administrativas a serem executadas para essa empresa
|
||||
STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Junta-se a essa empresa
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Envia uma mensagem a esse jogador
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Envia uma mensagem a todos os jogadores dessa empresa
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Envia uma mensagem a todos os espectadores
|
||||
STR_NETWORK_CLIENT_LIST_SPECTATORS :Espectadores
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nova empresa)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Cria uma nova empresa e se une a ela
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Esse é você
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Esse é o hospedeiro do jogo
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Banir
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Excluir
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Desbloqueio com senha
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Ação de administrador
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Você tem certeza que quer expulsar o jogador '{STRING}'?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Você tem certeza que quer banir o jogador '{STRING}'?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Você tem certeza que quer excluir a empresa '{COMPANY}'?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Você tem certeza que quer restaurar a senha da empresa '{COMPANY}'?
|
||||
|
||||
STR_NETWORK_SERVER :Servidor
|
||||
STR_NETWORK_CLIENT :Cliente
|
||||
@@ -2209,6 +2204,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}Não foi
|
||||
STR_NETWORK_ERROR_CLIENT_START :{WHITE}Não foi possível estabelecer conexão
|
||||
STR_NETWORK_ERROR_TIMEOUT :{WHITE}Tempo de espera esgotado na conexão #{NUM}
|
||||
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Ocorreu um erro de protocolo e a conexão foi encerrada
|
||||
STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Seu nome de jogador não foi definido. O nome pode ser definido no topo da janela de Multijogador
|
||||
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}A versão deste cliente não condiz com a versão do servidor
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Senha incorreta
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}O servidor está cheio
|
||||
@@ -2221,6 +2217,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Você de
|
||||
STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Seu computador é lento demais para acompanhar o servidor
|
||||
STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Seu computador demorou demais para baixar o mapa
|
||||
STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Seu computador demorou demais para entrar no servidor
|
||||
STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Seu nome de jogador não é válido
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_ERROR_CLIENT_GENERAL :erro geral
|
||||
@@ -2243,6 +2240,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :não recebeu se
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :tempo esgotado
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :a baixa do mapa demorou demais
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :o processamento do mapa demorou demais
|
||||
STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :nome de cliente inválido
|
||||
############ End of leave-in-this-order
|
||||
|
||||
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possível perda de conexão
|
||||
@@ -2532,7 +2530,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construi
|
||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Posicione a bóia, que pode ser usada como ponto de rota. Shift altera construção/preço estimado
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Shift altera construção/preço estimado
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Define área com água.{}Faz um canal, a menos se CTRL for pressionado ao nível do mar, neste caso inundará ao redor
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Criar rios
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Criar rios. Ctrl seleciona a área na diagonal
|
||||
|
||||
# Ship depot construction window
|
||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientação do Depósito Naval
|
||||
@@ -3082,6 +3080,7 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Atenção:
|
||||
STR_NEWGRF_ERROR_MSG_ERROR :{RED}Erro: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_MSG_FATAL :{RED}Erro Fatal: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Um erro de NewGRF fatal ocorreu:{}{STRING}
|
||||
STR_NEWGRF_ERROR_POPUP :{WHITE}Um erro NewGRF ocorreu:{}{STRING}
|
||||
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} não irá funcionar com a versão do TTDPatch encontrada pelo OpenTTD
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} funciona na versão {STRING} de TTD
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} é projetado para ser usado com {STRING}
|
||||
|
||||
@@ -969,6 +969,7 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Избо
|
||||
STR_GAME_OPTIONS_RESOLUTION_OTHER :друго
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Интерфейс размер
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Изберете размера на интерфейс елемент за използване
|
||||
|
||||
@@ -1835,6 +1836,7 @@ STR_FACE_TIE :Вратовр
|
||||
STR_FACE_EARRING :Oбица:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cмени вратовръзкатa или oбицатa
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Онлайн играчи
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Име на играч:
|
||||
@@ -1893,10 +1895,6 @@ 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_ADVERTISED_LABEL :{BLACK}Рекламирана
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Избери игра измежду рекламирана през интернет или нерекламирана през Локален интернет хост или ЛАН
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Не
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Да
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" s}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. брой играчи:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Избор на максималния брой клиенти. Не всички слотове трябва да се попълнят
|
||||
@@ -1911,46 +1909,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Друг
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Въведете име за мрежовата игра
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Всеки
|
||||
STR_NETWORK_LANG_ENGLISH :Английски
|
||||
STR_NETWORK_LANG_GERMAN :Немски
|
||||
STR_NETWORK_LANG_FRENCH :Френски
|
||||
STR_NETWORK_LANG_BRAZILIAN :Бразилски
|
||||
STR_NETWORK_LANG_BULGARIAN :Български
|
||||
STR_NETWORK_LANG_CHINESE :Китайски
|
||||
STR_NETWORK_LANG_CZECH :Чешки
|
||||
STR_NETWORK_LANG_DANISH :Датски
|
||||
STR_NETWORK_LANG_DUTCH :Холандски
|
||||
STR_NETWORK_LANG_ESPERANTO :Eсперанто
|
||||
STR_NETWORK_LANG_FINNISH :Финландски
|
||||
STR_NETWORK_LANG_HUNGARIAN :Унгарски
|
||||
STR_NETWORK_LANG_ICELANDIC :Исландски
|
||||
STR_NETWORK_LANG_ITALIAN :Италиански
|
||||
STR_NETWORK_LANG_JAPANESE :Японски
|
||||
STR_NETWORK_LANG_KOREAN :Корейски
|
||||
STR_NETWORK_LANG_LITHUANIAN :Литовски
|
||||
STR_NETWORK_LANG_NORWEGIAN :Норвежки
|
||||
STR_NETWORK_LANG_POLISH :Полски
|
||||
STR_NETWORK_LANG_PORTUGUESE :Португалски
|
||||
STR_NETWORK_LANG_ROMANIAN :Румънски
|
||||
STR_NETWORK_LANG_RUSSIAN :Руски
|
||||
STR_NETWORK_LANG_SLOVAK :Словашки
|
||||
STR_NETWORK_LANG_SLOVENIAN :Словенски
|
||||
STR_NETWORK_LANG_SPANISH :Испански
|
||||
STR_NETWORK_LANG_SWEDISH :Шведски
|
||||
STR_NETWORK_LANG_TURKISH :Турски
|
||||
STR_NETWORK_LANG_UKRAINIAN :Украински
|
||||
STR_NETWORK_LANG_AFRIKAANS :Африкаанс
|
||||
STR_NETWORK_LANG_CROATIAN :Хърватски
|
||||
STR_NETWORK_LANG_CATALAN :Каталонски
|
||||
STR_NETWORK_LANG_ESTONIAN :Естонски
|
||||
STR_NETWORK_LANG_GALICIAN :Галиматия
|
||||
STR_NETWORK_LANG_GREEK :Гръцки
|
||||
STR_NETWORK_LANG_LATVIAN :Латвийски
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Преддверие на мрежовите игри
|
||||
|
||||
@@ -2001,15 +1959,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Комп
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Списък с играчите
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Наблюдавай
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Нова фирма
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Изгони
|
||||
STR_NETWORK_CLIENTLIST_BAN :Бан
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Кажи на всички
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Кажи на компания
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Лично съобщение
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Сървър
|
||||
STR_NETWORK_CLIENT :Клиент
|
||||
|
||||
@@ -954,7 +954,7 @@ STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit (MYR)
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Conducció per l'esquerra
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Conducció per la dreta
|
||||
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Estil dels noms de poblacions
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Estil dels noms de les poblacions:
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Selecciona l'estil dels noms de poblacions
|
||||
|
||||
############ start of townname region
|
||||
@@ -994,6 +994,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Cada 12 mesos
|
||||
|
||||
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Idioma
|
||||
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Selecciona l'idioma de la interfície
|
||||
STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}{NBSP}% completed)
|
||||
|
||||
STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Pantalla completa
|
||||
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Marqueu la casella per mostrar l'OpenTTD a pantalla completa.
|
||||
@@ -1007,6 +1008,9 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Accelera
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Seleccioneu aquesta opció per permetre que l'OpenTTD provi d'usar acceleració per maquinari. Si es canvia l'opció, s'aplicarà quan es reiniciï el programa.
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}La configuració tindrà efecte quan es reiniciï el programa.
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Selecciona aquesta casella per activar la sincronització vertical de la pantalla. Els canvis s'aplicaran quan es reiniciï el programa. Només funciona si s'activa l'acceleració per maquinari.
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Mida de la interfície
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Escull la mida dels elements de la interfície
|
||||
|
||||
@@ -1139,6 +1143,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Configur
|
||||
STR_CONFIG_SETTING_FILTER_TITLE :{G=Femenin}{BLACK}Cadena de filtrat:
|
||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Desplega-ho tot
|
||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Plega-ho tot
|
||||
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Restableix tots els valors
|
||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(cap explicació disponible)
|
||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor per defecte: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipus de paràmetre: {ORANGE}{STRING}
|
||||
@@ -1147,6 +1152,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Paràmetre de l
|
||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Paràmetre de la partida (emmagatzemat a la partida actual; només afecta la partida actual)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Paràmetre de la companyia (emmagatzemat a les partides; només afectarà les partides noves)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Paràmetre de la companyia (emmagatzemat a la partida actual; només afecta la companyia actual)
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Avís!
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Aquesta acció restablirà la configuració de la partida als seus valors per defecte.{}Esteu segur que voleu fer-ho?
|
||||
|
||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria:
|
||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipus:
|
||||
@@ -1985,6 +1992,9 @@ STR_FACE_TIE :Corbata:
|
||||
STR_FACE_EARRING :Arracades:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Canvia la corbata o les arracades
|
||||
|
||||
STR_NETWORK_SERVER_VISIBILITY_PRIVATE :Privada
|
||||
STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Pública
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijugador
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nom del jugador:
|
||||
@@ -2047,10 +2057,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}El nom d
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Posa una contrasenya
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protegeix la teva partida amb una contrasenya si no vols que sigui accessible a desconeguts
|
||||
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciat
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escull entre una partida anunciada (internet) i una partida no anunciada (xarxa d'àrea local, LAN)
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :No
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Sí
|
||||
STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilitat
|
||||
STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Permet establir si altres persones poden veure el vostre servidor a la llista pública.
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Màxim nombre de clients:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Tria el nombre màxim de clients. No és necessari omplir tots els llocs.
|
||||
@@ -2065,46 +2073,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Els altr
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Posa el nom de la partida en xarxa
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Qualsevol
|
||||
STR_NETWORK_LANG_ENGLISH :Anglès
|
||||
STR_NETWORK_LANG_GERMAN :Alemany
|
||||
STR_NETWORK_LANG_FRENCH :Francès
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brasiler
|
||||
STR_NETWORK_LANG_BULGARIAN :Búlgar
|
||||
STR_NETWORK_LANG_CHINESE :Xinès
|
||||
STR_NETWORK_LANG_CZECH :Txec
|
||||
STR_NETWORK_LANG_DANISH :Danès
|
||||
STR_NETWORK_LANG_DUTCH :Holandès
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Finès
|
||||
STR_NETWORK_LANG_HUNGARIAN :Hongarès
|
||||
STR_NETWORK_LANG_ICELANDIC :Islandès
|
||||
STR_NETWORK_LANG_ITALIAN :Italià
|
||||
STR_NETWORK_LANG_JAPANESE :Japonès
|
||||
STR_NETWORK_LANG_KOREAN :Coreà
|
||||
STR_NETWORK_LANG_LITHUANIAN :Lituà
|
||||
STR_NETWORK_LANG_NORWEGIAN :Noruec
|
||||
STR_NETWORK_LANG_POLISH :Polonès
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portuguès
|
||||
STR_NETWORK_LANG_ROMANIAN :Romanès
|
||||
STR_NETWORK_LANG_RUSSIAN :Rus
|
||||
STR_NETWORK_LANG_SLOVAK :Eslovac
|
||||
STR_NETWORK_LANG_SLOVENIAN :Eslovè
|
||||
STR_NETWORK_LANG_SPANISH :Espanyol
|
||||
STR_NETWORK_LANG_SWEDISH :Suec
|
||||
STR_NETWORK_LANG_TURKISH :Turc
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ucraïnès
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaans
|
||||
STR_NETWORK_LANG_CROATIAN :Croat
|
||||
STR_NETWORK_LANG_CATALAN :Català
|
||||
STR_NETWORK_LANG_ESTONIAN :Estonià
|
||||
STR_NETWORK_LANG_GALICIAN :Gallec
|
||||
STR_NETWORK_LANG_GREEK :Grec
|
||||
STR_NETWORK_LANG_LATVIAN :Letó
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Lobby de partida multijugador
|
||||
|
||||
@@ -2152,19 +2120,46 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconne
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegit: escriviu-ne la contrasenya
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companyia protegida: escriviu-ne la contrasenya
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Llista de clients
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Llista de clients
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Espectador
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova companyia
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Jugadors en línia
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Breu
|
||||
STR_NETWORK_CLIENTLIST_BAN :Prohibit
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parla a tothom
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parla amb la companyia
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Missatge Privat
|
||||
STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Multijugador
|
||||
STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Servidor
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Nom
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Nom del servidor on esteu jugant
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Editeu el nom del vostre servidor.
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Nom del servidor
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Visibilitat
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Permet establir si altres persones poden veure el vostre servidor a la llista pública.
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Jugador
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nom
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}El vostre nom de jugador
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Editeu el vostre nom de jugador.
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :El vostre nom de jugador
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Accions d'administració que s'han de realitzar per a aquest client.
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Accions d'administració que s'han de realitzar per a aquesta companyia.
|
||||
STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Uniu-vos a aquesta companyia.
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Envia un missatge a aquest jugador.
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Envia un missatge a tots els jugadors de la companyia.
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Envieu un missatge a tots els espectadors.
|
||||
STR_NETWORK_CLIENT_LIST_SPECTATORS :Espectadors
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Companyia nova)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Crea una companyia nova i uniu-vos.
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Aquest ets tu.
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Aquest és l'hoste de la partida.
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Treu
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Expulsa
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Esborra
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Desbloca la contrasenya
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Acció de l'administrador
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Esteu segur que voleu treure el jugador «{STRING}»?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Esteu segur que voleu expulsar el jugador «{STRING}»?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Esteu segur que voleu esborrar la companyia «{COMPANY}»?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Esteu segur que voleu restablir la contrasenya de la companyia «{COMPANY}»?
|
||||
|
||||
STR_NETWORK_SERVER :Servidor
|
||||
STR_NETWORK_CLIENT :Client
|
||||
@@ -2209,6 +2204,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}No s'ha
|
||||
STR_NETWORK_ERROR_CLIENT_START :{WHITE}No s'ha pogut connectar
|
||||
STR_NETWORK_ERROR_TIMEOUT :{WHITE}La connexió #{NUM} ha esgotat el temps d'espera
|
||||
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}S'ha obtingut un error de protocol i s'ha tancat la connexió
|
||||
STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}No s'ha escollit un nom per al vostre jugador. El nom es pot establir a la part superior de la finestra de mode multijugador.
|
||||
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}La revisió d'aquest client no concorda amb la revisió del servidor
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Contrasenya incorrecta
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}El servidor està ple
|
||||
@@ -2221,6 +2217,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Has tard
|
||||
STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}El teu ordinador és massa lent per mantenir-se connectat al servidor
|
||||
STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}El teu ordinador ha tardat massa a descarregar el mapa
|
||||
STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}El teu ordinador ha tardat massa a unir-se al servidor
|
||||
STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}El vostre nom de jugador no és vàlid.
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_ERROR_CLIENT_GENERAL :error general
|
||||
@@ -2243,6 +2240,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :no s'ha rebut l
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :temps d'espera general esgotat
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :la descàrrega del mapa ha tardat massa
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :el processat del mapa ha tardat massa
|
||||
STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :nom de client no vàlid
|
||||
############ End of leave-in-this-order
|
||||
|
||||
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possible pèrdua de connexió
|
||||
@@ -2532,7 +2530,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construe
|
||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Situa una boia que pot ser útil per fer punts de control addicionals. Shift commuta construeix/mostra el cost estimat
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK} Construeix aqüeducte. Shift commuta construeix/mostra el cost estimat
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Defineix caselles com a canals d'aigua.{}Amb Ctrl+Clic a nivell de mar, es defineix una casella de mar i s'inundaran els seus voltants.
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Crea rius i caselles d'aigua.
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Crea rius i caselles d'aigua. Ctrl selecciona l'àrea diagonalment.
|
||||
|
||||
# Ship depot construction window
|
||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Drassanes
|
||||
@@ -3082,6 +3080,7 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Alerta: {S
|
||||
STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}S'ha produït un error fatal de NewGRF:{}{STRING}
|
||||
STR_NEWGRF_ERROR_POPUP :{WHITE}S'ha produït un error relacionat amb els NewGRF:{}{STRING}
|
||||
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} no funcionarà amb la versió TTDPatch informada per l'OpenTTD
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} és per la versió {STRING} de TTD
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} està dissenyat per ser utilitzat amb {STRING}
|
||||
|
||||
@@ -520,6 +520,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :расна
|
||||
|
||||
|
||||
|
||||
|
||||
# Custom currency window
|
||||
|
||||
|
||||
@@ -725,6 +726,7 @@ STR_FACE_COLLAR :Ҫуха:
|
||||
STR_FACE_TIE :Галстук:
|
||||
STR_FACE_EARRING :Алка:
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Вӑйӑҫӑ ят:
|
||||
|
||||
@@ -768,10 +770,6 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн
|
||||
|
||||
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
|
||||
|
||||
@@ -791,6 +789,8 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн
|
||||
# Network client list
|
||||
|
||||
|
||||
|
||||
|
||||
# Network set password
|
||||
|
||||
# Network company info join/password
|
||||
@@ -1086,6 +1086,7 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Odaberi
|
||||
STR_GAME_OPTIONS_RESOLUTION_OTHER :ostalo
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Veličina sučelja
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Odaberite koju ćete veličinu elementa sučelja koristiti
|
||||
|
||||
@@ -2019,6 +2020,7 @@ STR_FACE_TIE :Kravata:
|
||||
STR_FACE_EARRING :Naušnica:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Promijeni kravatu ili naušnicu
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Više igrača
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ime igrača:
|
||||
@@ -2077,10 +2079,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Ime igre
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Postavi zaporku
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zaštiti svoju igru pomoću zaporke ukoliko ne želiš da bude javno dostupna
|
||||
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sa oglasima
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Odaberi između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN)
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Ne
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Da
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klijen{P t ta ata}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Najveći broj klijenata:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Odaberi najveći broj klijenata. Ne moraju sva mjesta biti popunjena.
|
||||
@@ -2095,46 +2093,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Drugi ig
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Upišite ime mrežne igre
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Bilo koji
|
||||
STR_NETWORK_LANG_ENGLISH :Engleski
|
||||
STR_NETWORK_LANG_GERMAN :Njemački
|
||||
STR_NETWORK_LANG_FRENCH :Francuski
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brazilski
|
||||
STR_NETWORK_LANG_BULGARIAN :Bugarski
|
||||
STR_NETWORK_LANG_CHINESE :Kineski
|
||||
STR_NETWORK_LANG_CZECH :Češki
|
||||
STR_NETWORK_LANG_DANISH :Danski
|
||||
STR_NETWORK_LANG_DUTCH :Nizozemski
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Finski
|
||||
STR_NETWORK_LANG_HUNGARIAN :Mađarski
|
||||
STR_NETWORK_LANG_ICELANDIC :Islandski
|
||||
STR_NETWORK_LANG_ITALIAN :Talijanski
|
||||
STR_NETWORK_LANG_JAPANESE :Japanski
|
||||
STR_NETWORK_LANG_KOREAN :Korejski
|
||||
STR_NETWORK_LANG_LITHUANIAN :Litavski
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norveški
|
||||
STR_NETWORK_LANG_POLISH :Poljski
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portugalski
|
||||
STR_NETWORK_LANG_ROMANIAN :Rumunjski
|
||||
STR_NETWORK_LANG_RUSSIAN :Ruski
|
||||
STR_NETWORK_LANG_SLOVAK :Slovački
|
||||
STR_NETWORK_LANG_SLOVENIAN :Slovenski
|
||||
STR_NETWORK_LANG_SPANISH :Španjolski
|
||||
STR_NETWORK_LANG_SWEDISH :Švedski
|
||||
STR_NETWORK_LANG_TURKISH :Turski
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ukrajinski
|
||||
STR_NETWORK_LANG_AFRIKAANS :afrikaanski
|
||||
STR_NETWORK_LANG_CROATIAN :hrvatski
|
||||
STR_NETWORK_LANG_CATALAN :katalonski
|
||||
STR_NETWORK_LANG_ESTONIAN :estonski
|
||||
STR_NETWORK_LANG_GALICIAN :galicijski
|
||||
STR_NETWORK_LANG_GREEK :Grčki
|
||||
STR_NETWORK_LANG_LATVIAN :Latvijski
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Predvorje igre za više igrača
|
||||
|
||||
@@ -2182,19 +2140,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Odspoji
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Poslužitelj je zaštićen. Unesite zaporku
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tvrtka je zaštićena. Unesite zaporku
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Popis klijenata
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Popis klijenata
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Promatraj
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova tvrtka
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Izbaci
|
||||
STR_NETWORK_CLIENTLIST_BAN :Zabrana
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Razgovaraj sa svima
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Razgovaraj s tvrtkom
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privatna poruka
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Poslužitelj
|
||||
STR_NETWORK_CLIENT :Klijent
|
||||
|
||||
@@ -1093,6 +1093,7 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Hardwaro
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Zaškrtni, pokud chceš OpenTTD povolit použití hardwarové akcelerace. Změněné nastavení bude aplikováno po restartu hry
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Nastavení vstoupí v platnost pouze po restartu hry
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Velikost rozhraní
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Zvolit velikost prvků uživatelského rozhraní
|
||||
|
||||
@@ -2071,6 +2072,7 @@ STR_FACE_TIE :Kravata:
|
||||
STR_FACE_EARRING :Náušnice:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Změnit kravatu nebo náušnice
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Jméno hráče:
|
||||
@@ -2133,10 +2135,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Jméno h
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Nastavit heslo
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Svoji hru si můžeš ochránit heslem, když nechceš, aby se ti do ni hlásili jiní lidé
|
||||
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Vypsané
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vyber mezi propagovanou (internet) a nepropagovanou (Místní síť, LAN) hrou
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Ne
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Ano
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i ů}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Nejvyšší počet hráčů:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Zvol nejvyšší počet hráčů. Může se jich připojit i méně
|
||||
@@ -2151,46 +2149,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aby osta
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Zadej jméno této síťové hry
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :jakýkoli
|
||||
STR_NETWORK_LANG_ENGLISH :angličtina
|
||||
STR_NETWORK_LANG_GERMAN :němčina
|
||||
STR_NETWORK_LANG_FRENCH :francouzština
|
||||
STR_NETWORK_LANG_BRAZILIAN :brazilská portugalština
|
||||
STR_NETWORK_LANG_BULGARIAN :bulharština
|
||||
STR_NETWORK_LANG_CHINESE :čínština
|
||||
STR_NETWORK_LANG_CZECH :čeština
|
||||
STR_NETWORK_LANG_DANISH :dánština
|
||||
STR_NETWORK_LANG_DUTCH :nizozemština
|
||||
STR_NETWORK_LANG_ESPERANTO :esperanto
|
||||
STR_NETWORK_LANG_FINNISH :finština
|
||||
STR_NETWORK_LANG_HUNGARIAN :maďarština
|
||||
STR_NETWORK_LANG_ICELANDIC :islandština
|
||||
STR_NETWORK_LANG_ITALIAN :italština
|
||||
STR_NETWORK_LANG_JAPANESE :japonština
|
||||
STR_NETWORK_LANG_KOREAN :korejština
|
||||
STR_NETWORK_LANG_LITHUANIAN :litevština
|
||||
STR_NETWORK_LANG_NORWEGIAN :norština
|
||||
STR_NETWORK_LANG_POLISH :polština
|
||||
STR_NETWORK_LANG_PORTUGUESE :portugalština
|
||||
STR_NETWORK_LANG_ROMANIAN :rumunština
|
||||
STR_NETWORK_LANG_RUSSIAN :ruština
|
||||
STR_NETWORK_LANG_SLOVAK :slovenština
|
||||
STR_NETWORK_LANG_SLOVENIAN :slovinština
|
||||
STR_NETWORK_LANG_SPANISH :španělština
|
||||
STR_NETWORK_LANG_SWEDISH :švédština
|
||||
STR_NETWORK_LANG_TURKISH :turečtina
|
||||
STR_NETWORK_LANG_UKRAINIAN :ukrajinština
|
||||
STR_NETWORK_LANG_AFRIKAANS :afrikánština
|
||||
STR_NETWORK_LANG_CROATIAN :chorvatština
|
||||
STR_NETWORK_LANG_CATALAN :katalánština
|
||||
STR_NETWORK_LANG_ESTONIAN :estonština
|
||||
STR_NETWORK_LANG_GALICIAN :galicijština
|
||||
STR_NETWORK_LANG_GREEK :řečtina
|
||||
STR_NETWORK_LANG_LATVIAN :lotyština
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Vstupní místnost do hry více hráčů
|
||||
|
||||
@@ -2238,19 +2196,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Odpojit
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server je chráněný. Napiš heslo
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Společnost je chráněná. Napiš heslo
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :Seznam klientů
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Seznam hráčů
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Pozorovat
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nová společnost
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Vyhodit
|
||||
STR_NETWORK_CLIENTLIST_BAN :Ban
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Napsat všem
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Napsat společnosti
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Soukromá zpráva
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Server
|
||||
STR_NETWORK_CLIENT :Klient
|
||||
|
||||
@@ -991,6 +991,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :andet
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Hardware-acceleration
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}grænseflade størrelse
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Vælg den grænseflade størrelse du ønsker at benytte
|
||||
|
||||
@@ -1928,6 +1929,7 @@ STR_FACE_TIE :Slips:
|
||||
STR_FACE_EARRING :Ørering:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ændre slips eller ørering
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Netværksspil
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spiller navn:
|
||||
@@ -1986,10 +1988,6 @@ 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_ADVERTISED_LABEL :{BLACK}Offentlig
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vælg mellem et offentligt (internet) og et ikke offentligt (lokalnetværk, LAN) spil
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Nej
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Ja
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tilladte klienter:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Vælg det maksimale antal klienter. Det er ikke nødvendigt at fylde dem alle
|
||||
@@ -2004,46 +2002,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andre sp
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Skriv et navn for netværksspillet
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Hvilket som helst
|
||||
STR_NETWORK_LANG_ENGLISH :Engelsk
|
||||
STR_NETWORK_LANG_GERMAN :Tysk
|
||||
STR_NETWORK_LANG_FRENCH :Fransk
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brasiliansk
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgarsk
|
||||
STR_NETWORK_LANG_CHINESE :Kinesisk
|
||||
STR_NETWORK_LANG_CZECH :Tjekkisk
|
||||
STR_NETWORK_LANG_DANISH :Dansk
|
||||
STR_NETWORK_LANG_DUTCH :Hollandsk
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Finsk
|
||||
STR_NETWORK_LANG_HUNGARIAN :Ungarsk
|
||||
STR_NETWORK_LANG_ICELANDIC :Islandsk
|
||||
STR_NETWORK_LANG_ITALIAN :Italiensk
|
||||
STR_NETWORK_LANG_JAPANESE :Japansk
|
||||
STR_NETWORK_LANG_KOREAN :Koreansk
|
||||
STR_NETWORK_LANG_LITHUANIAN :Litauisk
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norsk
|
||||
STR_NETWORK_LANG_POLISH :Polsk
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portugisisk
|
||||
STR_NETWORK_LANG_ROMANIAN :Rumænsk
|
||||
STR_NETWORK_LANG_RUSSIAN :Russisk
|
||||
STR_NETWORK_LANG_SLOVAK :Slovakisk
|
||||
STR_NETWORK_LANG_SLOVENIAN :Slovensk
|
||||
STR_NETWORK_LANG_SPANISH :Spansk
|
||||
STR_NETWORK_LANG_SWEDISH :Svensk
|
||||
STR_NETWORK_LANG_TURKISH :Tyrkisk
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ukrainsk
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaans
|
||||
STR_NETWORK_LANG_CROATIAN :Kroatisk
|
||||
STR_NETWORK_LANG_CATALAN :Catalansk
|
||||
STR_NETWORK_LANG_ESTONIAN :Estisk
|
||||
STR_NETWORK_LANG_GALICIAN :Galicisk
|
||||
STR_NETWORK_LANG_GREEK :Græsk
|
||||
STR_NETWORK_LANG_LATVIAN :Lettisk
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Netværksspils lobby
|
||||
|
||||
@@ -2091,19 +2049,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Afbryd f
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveren er beskyttet. Indtast kodeord
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Selskabet er beskyttet. Indtast kodeord
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientliste
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient liste
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Tilslut som tilskuer
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nyt firma
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Smid ud
|
||||
STR_NETWORK_CLIENTLIST_BAN :Ban (Forvis spiller)
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Tal til alle
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Tal til selskab
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privat besked
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Server
|
||||
STR_NETWORK_CLIENT :Klient
|
||||
|
||||
@@ -953,7 +953,7 @@ STR_GAME_OPTIONS_CURRENCY_MYR :Maleisische Rin
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Links rijden
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Rechts rijden
|
||||
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Plaatsnamen
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Plaatsnamen:
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Stijl voor plaatsnamen kiezen
|
||||
|
||||
############ start of townname region
|
||||
@@ -993,6 +993,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Iedere 12 maand
|
||||
|
||||
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Taal
|
||||
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Taal selecteren voor gebruikersscherm
|
||||
STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% voltooid)
|
||||
|
||||
STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Volledig scherm
|
||||
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Vink dit vakje aan om OpenTTD in het volledige scherm te spelen
|
||||
@@ -1006,6 +1007,9 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Hardware
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Selecteer dit vakje om OpenTTD hardwareversnelling te laten gebruiken. De gewijzigde instelling wordt pas van kracht nadat het spel opnieuw is gestart.
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}De instelling wordt pas van kracht als het spel opnieuw is gestart
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Selecteer dit vakje om het scherm verticaal te synchroniseren. De wijziging gaat pas in nadat je het spel opnieuw hebt opgestart. Werkt alleen als hardwareversnelling is ingeschakeld
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Menupuntgrootte
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Kiest de grootte van bedieningselementen
|
||||
|
||||
@@ -1138,6 +1142,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Instelli
|
||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtertekst:
|
||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Alles uitvouwen
|
||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Alles inklappen
|
||||
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Alle waarden terugstellen
|
||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(geen uitleg beschikbaar)
|
||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standaardwaarde: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Instellingstype: {ORANGE}{STRING}
|
||||
@@ -1146,6 +1151,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Spelinstellinge
|
||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Spelinstellingen (opgeslagen in bestand; alleen van invloed op huidig spel)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Bedrijfsinstellingen (opgeslagen in bestand; alleen van invloed op nieuwe spellen)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Bedrijfsinstellingen (opgeslagen in bestand; alleen van invloed op huidig bedrijf)
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Voorzichtig!
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Met deze actie herstel je alle spelinstellingen naar hun standaardwaarden.{}Weet je zeker dat je wilt doorgaan?
|
||||
|
||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categorie:
|
||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type:
|
||||
@@ -1984,6 +1991,9 @@ STR_FACE_TIE :Stropdas:
|
||||
STR_FACE_EARRING :Oorbel:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander das of oorbel
|
||||
|
||||
STR_NETWORK_SERVER_VISIBILITY_PRIVATE :Privé
|
||||
STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Openbaar
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Netwerkspel
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelersnaam:
|
||||
@@ -2039,17 +2049,15 @@ STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Vul je n
|
||||
STR_NETWORK_SERVER_LIST_ENTER_IP :{BLACK}Voer het IP-adres van de server in
|
||||
|
||||
# Start new multiplayer server
|
||||
STR_NETWORK_START_SERVER_CAPTION :{WHITE}Start nieuw multiplayerspel
|
||||
STR_NETWORK_START_SERVER_CAPTION :{WHITE}Nieuw spel met meerdere spelers starten
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Spelnaam:
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}De spelnaam wordt weergegeven aan andere spelers in het multiplayerspelselectiemenu
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}De spelnaam wordt weergegeven aan andere spelers in het spelselectiemenu voor meerdere spelers
|
||||
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_ADVERTISED_LABEL :{BLACK}Openbaar
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen een openbaar (internet) en een niet-openbaar (Local Area Network, LAN) spel
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Nee
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Ja
|
||||
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:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Kies het maximaal aantal toegestane spelers. Niet alle posities hoeven gebruikt te worden.
|
||||
@@ -2064,46 +2072,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andere s
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Geef de naam van het netwerkspel
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Elke
|
||||
STR_NETWORK_LANG_ENGLISH :Engels
|
||||
STR_NETWORK_LANG_GERMAN :Duits
|
||||
STR_NETWORK_LANG_FRENCH :Frans
|
||||
STR_NETWORK_LANG_BRAZILIAN :Braziliaans
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgaars
|
||||
STR_NETWORK_LANG_CHINESE :Chinees
|
||||
STR_NETWORK_LANG_CZECH :Tsjechisch
|
||||
STR_NETWORK_LANG_DANISH :Deens
|
||||
STR_NETWORK_LANG_DUTCH :Nederlands
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Fins
|
||||
STR_NETWORK_LANG_HUNGARIAN :Hongaars
|
||||
STR_NETWORK_LANG_ICELANDIC :IJslands
|
||||
STR_NETWORK_LANG_ITALIAN :Italiaans
|
||||
STR_NETWORK_LANG_JAPANESE :Japans
|
||||
STR_NETWORK_LANG_KOREAN :Koreaans
|
||||
STR_NETWORK_LANG_LITHUANIAN :Litouws
|
||||
STR_NETWORK_LANG_NORWEGIAN :Noors
|
||||
STR_NETWORK_LANG_POLISH :Pools
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portugees
|
||||
STR_NETWORK_LANG_ROMANIAN :Roemeens
|
||||
STR_NETWORK_LANG_RUSSIAN :Russisch
|
||||
STR_NETWORK_LANG_SLOVAK :Slowaaks
|
||||
STR_NETWORK_LANG_SLOVENIAN :Sloveens
|
||||
STR_NETWORK_LANG_SPANISH :Spaans
|
||||
STR_NETWORK_LANG_SWEDISH :Zweeds
|
||||
STR_NETWORK_LANG_TURKISH :Turks
|
||||
STR_NETWORK_LANG_UKRAINIAN :Oekraïens
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaans
|
||||
STR_NETWORK_LANG_CROATIAN :Kroatisch
|
||||
STR_NETWORK_LANG_CATALAN :Catalaans
|
||||
STR_NETWORK_LANG_ESTONIAN :Estisch
|
||||
STR_NETWORK_LANG_GALICIAN :Galiciaans
|
||||
STR_NETWORK_LANG_GREEK :Grieks
|
||||
STR_NETWORK_LANG_LATVIAN :Lets
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Verzamelkamer voor netwerkspellen
|
||||
|
||||
@@ -2151,19 +2119,46 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Verbindi
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is beveiligd. Voer wachtwoord in
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Bedrijf is beveiligd. Voer wachtwoord in
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Spelerslijst
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spelerslijst
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Toekijken
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nieuw bedrijf
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spelers online
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Uit het spel schoppen
|
||||
STR_NETWORK_CLIENTLIST_BAN :Verbannen
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Met iedereen praten
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Met bedrijf praten
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privébericht
|
||||
STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Meerdere spelers
|
||||
STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Server
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Naam
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}De naam van de server waar je speelt
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}De naam van je server bewerken
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Servernaam
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Zichtbaarheid
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Bepaalt of andere mensen je server kunnen zien in de openbare lijst
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Speler
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Naam
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Je spelernaam
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Je spelernaam bewerken
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Je spelernaam
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Beheeracties die nodig zijn voor deze client
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Beheeracties die nodig zijn voor dit bedrijf
|
||||
STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Meedoen met dit bedrijf
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Een bericht sturen naar deze speler
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Een bericht versturen naar alle spelers van dit bedrijf
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Een bericht sturen naar alle toeschouwers
|
||||
STR_NETWORK_CLIENT_LIST_SPECTATORS :Toeschouwers
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nieuw bedrijf)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Een nieuw bedrijf maken en meedoen
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Dit ben jij
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Dit is de host van het spel
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Eruit schoppen
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Bannen
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Verwijderen
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Wachtwoord ontgrendelen
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Beheeractie
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Weet je zeker dat je de speler '{STRING}' eruit wilt schoppen?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Weet je zeker dat je de speler '{STRING}' wilt bannen?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Weet je zeker dat je het bedrijf '{COMPANY}' wilt verwijderen?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Weet je zeker dat je het wachtwoord voor bedrijf '{COMPANY}' wilt terugstellen?
|
||||
|
||||
STR_NETWORK_SERVER :Server
|
||||
STR_NETWORK_CLIENT :Speler
|
||||
@@ -2208,6 +2203,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}Kan serv
|
||||
STR_NETWORK_ERROR_CLIENT_START :{WHITE}Kan geen verbinding maken
|
||||
STR_NETWORK_ERROR_TIMEOUT :{WHITE}Verbinding nr. {NUM} kostte te veel tijd
|
||||
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Er is een protocolfout gedetecteerd en de verbinding werd gesloten
|
||||
STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Je spelernaam is nog niet ingesteld. Je stelt de naam in bovenin het venster Meerdere spelers
|
||||
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}De revisie van deze client komt niet overeen met de revisie van de server
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Ongeldig wachtwoord
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}De server is vol
|
||||
@@ -2220,6 +2216,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Het invo
|
||||
STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Uw computer is te traag om de server bij te houden
|
||||
STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Uw computer deed er te lang over om de kaart te downloaden
|
||||
STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Uw computer deed er te lang over om met de server te verbinden
|
||||
STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Je spelernaam is niet geldig
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_ERROR_CLIENT_GENERAL :algemene fout
|
||||
@@ -2242,6 +2239,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :wachtwoord niet
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :algemene time-out
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :downloaden van de kaart duurde te lang
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :verwerken van de kaart duurde te lang
|
||||
STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :ongeldige clientnaam
|
||||
############ End of leave-in-this-order
|
||||
|
||||
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mogelijk verbinding verbroken
|
||||
@@ -2531,7 +2529,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Haven bo
|
||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Boei plaatsen, deze kan gebruikt worden voor extra tussenstops. Shift schakelt tussen bouwen/inschatting van de kosten
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Aquaduct bouwen. Shift schakelt tussen bouwen/inschatting van de kosten.
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Hiermee plaats je watermassa's.{}Maakt een kanaal, tenzij je Ctrl vasthoudt op zeeniveau, dan overstroomt de omgeving.
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Hiermee maak je rivieren
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Hiermee maak je rivieren. Ctrl selecteert het gebied diagonaal
|
||||
|
||||
# Ship depot construction window
|
||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Richting van dok
|
||||
@@ -3081,6 +3079,7 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Waarschuwi
|
||||
STR_NEWGRF_ERROR_MSG_ERROR :{RED}Fout: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatale fout: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Een fatale NewGRF-fout is ontstaan:{}{STRING}
|
||||
STR_NEWGRF_ERROR_POPUP :{WHITE}Er is een NewGRF-fout opgetreden:{}{STRING}
|
||||
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} werkt niet met de TTDPatch-versie die is opgegeven door OpenTTD
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is voor versie {STRING} van TTD
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} is ontwikkeld voor {STRING}
|
||||
|
||||
@@ -949,7 +949,7 @@ STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringg
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Drive on left
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Drive on right
|
||||
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Town names
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Town names:
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Select style of town names
|
||||
|
||||
############ start of townname region
|
||||
@@ -989,6 +989,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Every 12 months
|
||||
|
||||
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Language
|
||||
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Select the interface language to use
|
||||
STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{RAW_STRING} ({NUM}% completed)
|
||||
|
||||
STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Fullscreen
|
||||
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Check this box to play OpenTTD fullscreen mode
|
||||
@@ -1002,6 +1003,9 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Hardware
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Check this box to allow OpenTTD to try to use hardware acceleration. A changed setting will only be applied upon game restart
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}The setting will only take effect after a game restart
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Check this box to v-sync the screen. A changed setting will only be applied upon game restart. Only works with hardware acceleration enabled
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Interface size
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Select the interface element size to use
|
||||
|
||||
@@ -1134,6 +1138,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Settings
|
||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filter string:
|
||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expand all
|
||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Collapse all
|
||||
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Reset all values
|
||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(no explanation available)
|
||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Default value: {ORANGE}{STRING1}
|
||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Setting type: {ORANGE}{STRING}
|
||||
@@ -1142,6 +1147,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Game setting (s
|
||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Game setting (stored in save; affects only current game)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Company setting (stored in saves; affects only new games)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Company setting (stored in save; affects only current company)
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Caution!
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}This action will reset all game settings to their default values.{}Are you sure you want to proceed?
|
||||
|
||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Category:
|
||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type:
|
||||
@@ -2000,6 +2007,9 @@ STR_FACE_TIE :Tie:
|
||||
STR_FACE_EARRING :Earring:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change tie or earring
|
||||
|
||||
STR_NETWORK_SERVER_VISIBILITY_PRIVATE :Private
|
||||
STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Public
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name:
|
||||
@@ -2062,10 +2072,8 @@ 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_ADVERTISED_LABEL :{BLACK}Advertised
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :No
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Yes
|
||||
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:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choose the maximum number of clients. Not all slots need to be filled
|
||||
@@ -2080,46 +2088,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Other pl
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Enter a name for the network game
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Any
|
||||
STR_NETWORK_LANG_ENGLISH :English
|
||||
STR_NETWORK_LANG_GERMAN :German
|
||||
STR_NETWORK_LANG_FRENCH :French
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brazilian
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgarian
|
||||
STR_NETWORK_LANG_CHINESE :Chinese
|
||||
STR_NETWORK_LANG_CZECH :Czech
|
||||
STR_NETWORK_LANG_DANISH :Danish
|
||||
STR_NETWORK_LANG_DUTCH :Dutch
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Finnish
|
||||
STR_NETWORK_LANG_HUNGARIAN :Hungarian
|
||||
STR_NETWORK_LANG_ICELANDIC :Icelandic
|
||||
STR_NETWORK_LANG_ITALIAN :Italian
|
||||
STR_NETWORK_LANG_JAPANESE :Japanese
|
||||
STR_NETWORK_LANG_KOREAN :Korean
|
||||
STR_NETWORK_LANG_LITHUANIAN :Lithuanian
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norwegian
|
||||
STR_NETWORK_LANG_POLISH :Polish
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portuguese
|
||||
STR_NETWORK_LANG_ROMANIAN :Romanian
|
||||
STR_NETWORK_LANG_RUSSIAN :Russian
|
||||
STR_NETWORK_LANG_SLOVAK :Slovak
|
||||
STR_NETWORK_LANG_SLOVENIAN :Slovenian
|
||||
STR_NETWORK_LANG_SPANISH :Spanish
|
||||
STR_NETWORK_LANG_SWEDISH :Swedish
|
||||
STR_NETWORK_LANG_TURKISH :Turkish
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ukrainian
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaans
|
||||
STR_NETWORK_LANG_CROATIAN :Croatian
|
||||
STR_NETWORK_LANG_CATALAN :Catalan
|
||||
STR_NETWORK_LANG_ESTONIAN :Estonian
|
||||
STR_NETWORK_LANG_GALICIAN :Galician
|
||||
STR_NETWORK_LANG_GREEK :Greek
|
||||
STR_NETWORK_LANG_LATVIAN :Latvian
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multiplayer game lobby
|
||||
|
||||
@@ -2167,19 +2135,46 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disconne
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Client list
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Client list
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Spectate
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Online players
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Kick
|
||||
STR_NETWORK_CLIENTLIST_BAN :Ban
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Speak to all
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Speak to company
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private message
|
||||
STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Multiplayer
|
||||
STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Server
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Name
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Name of the server you are playing on
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Edit the name of your server
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Name of the server
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Visibility
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Whether other people can see your server in the public listing
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Player
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Name
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Your player name
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Edit your player name
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Your player name
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Administrative actions to perform for this client
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administrative actions to perform for this company
|
||||
STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Join this company
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Send a message to this player
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Send a message to all players of this company
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Send a message to all spectators
|
||||
STR_NETWORK_CLIENT_LIST_SPECTATORS :Spectators
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(New company)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Create a new company and join it
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}This is you
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}This is the host of the game
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Ban
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Delete
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Password unlock
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Admin action
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Are you sure you want to kick player '{RAW_STRING}'?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Are you sure you want to ban player '{RAW_STRING}'?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Are you sure you want to delete company '{COMPANY}'?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Are you sure you want to reset the password of company '{COMPANY}'?
|
||||
|
||||
STR_NETWORK_SERVER :Server
|
||||
STR_NETWORK_CLIENT :Client
|
||||
@@ -2224,6 +2219,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}Could no
|
||||
STR_NETWORK_ERROR_CLIENT_START :{WHITE}Could not connect
|
||||
STR_NETWORK_ERROR_TIMEOUT :{WHITE}Connection #{NUM} timed out
|
||||
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}A protocol error was detected and the connection was closed
|
||||
STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Your player name has not been set. The name can be set at the top of the Multiplayer window
|
||||
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}The revision of this client does not match the server's revision
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Wrong password
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}The server is full
|
||||
@@ -2236,6 +2232,8 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}You took
|
||||
STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Your computer is too slow to keep up with the server
|
||||
STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Your computer took too long to download the map
|
||||
STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Your computer took too long to join the server
|
||||
STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Your player name is not valid
|
||||
STR_NETWORK_ERROR_SERVER_TOO_OLD :{WHITE}The queried server is too old for this client
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_ERROR_CLIENT_GENERAL :general error
|
||||
@@ -2258,6 +2256,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :received no pas
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :general timeout
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :downloading map took too long
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :processing map took too long
|
||||
STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :invalid client name
|
||||
############ End of leave-in-this-order
|
||||
|
||||
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possible connection loss
|
||||
@@ -2547,7 +2546,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Build sh
|
||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Place a buoy which can be used as a waypoint. Shift toggles building/showing cost estimate
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Build aqueduct. Shift toggles building/showing cost estimate
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Define water area.{}Make a canal, unless Ctrl is held down at sea level, when it will flood the surroundings instead
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Place rivers
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Place rivers. Ctrl selects the area diagonally
|
||||
|
||||
# Ship depot construction window
|
||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Ship Depot Orientation
|
||||
@@ -3116,6 +3115,7 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Warning: {
|
||||
STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{RAW_STRING}
|
||||
STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{RAW_STRING}
|
||||
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}A fatal NewGRF error has occurred: {}{STRING5}
|
||||
STR_NEWGRF_ERROR_POPUP :{WHITE}A NewGRF error has occurred: {}{STRING5}
|
||||
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:RAW_STRING} will not work with the TTDPatch version reported by OpenTTD
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:RAW_STRING} is for the {RAW_STRING} version of TTD
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:RAW_STRING} is designed to be used with {RAW_STRING}
|
||||
|
||||
@@ -966,6 +966,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :other
|
||||
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base graphics set
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select the base graphics set to use
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} missing/corrupted file{P "" s}
|
||||
@@ -1845,6 +1846,7 @@ STR_FACE_TIE :Tie:
|
||||
STR_FACE_EARRING :Earring:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change tie or earring
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name:
|
||||
@@ -1903,10 +1905,6 @@ 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_ADVERTISED_LABEL :{BLACK}Advertised
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :No
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Yes
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximum number of clients:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choose the maximum number of clients. Not all slots need to be filled
|
||||
@@ -1921,46 +1919,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Other pl
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Enter a name for the network game
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Any
|
||||
STR_NETWORK_LANG_ENGLISH :English
|
||||
STR_NETWORK_LANG_GERMAN :German
|
||||
STR_NETWORK_LANG_FRENCH :French
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brazilian
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgarian
|
||||
STR_NETWORK_LANG_CHINESE :Chinese
|
||||
STR_NETWORK_LANG_CZECH :Czech
|
||||
STR_NETWORK_LANG_DANISH :Danish
|
||||
STR_NETWORK_LANG_DUTCH :Dutch
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Finnish
|
||||
STR_NETWORK_LANG_HUNGARIAN :Hungarian
|
||||
STR_NETWORK_LANG_ICELANDIC :Icelandic
|
||||
STR_NETWORK_LANG_ITALIAN :Italian
|
||||
STR_NETWORK_LANG_JAPANESE :Japanese
|
||||
STR_NETWORK_LANG_KOREAN :Korean
|
||||
STR_NETWORK_LANG_LITHUANIAN :Lithuanian
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norwegian
|
||||
STR_NETWORK_LANG_POLISH :Polish
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portuguese
|
||||
STR_NETWORK_LANG_ROMANIAN :Romanian
|
||||
STR_NETWORK_LANG_RUSSIAN :Russian
|
||||
STR_NETWORK_LANG_SLOVAK :Slovak
|
||||
STR_NETWORK_LANG_SLOVENIAN :Slovenian
|
||||
STR_NETWORK_LANG_SPANISH :Spanish
|
||||
STR_NETWORK_LANG_SWEDISH :Swedish
|
||||
STR_NETWORK_LANG_TURKISH :Turkish
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ukrainian
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaans
|
||||
STR_NETWORK_LANG_CROATIAN :Croatian
|
||||
STR_NETWORK_LANG_CATALAN :Catalan
|
||||
STR_NETWORK_LANG_ESTONIAN :Estonian
|
||||
STR_NETWORK_LANG_GALICIAN :Galician
|
||||
STR_NETWORK_LANG_GREEK :Greek
|
||||
STR_NETWORK_LANG_LATVIAN :Latvian
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multiplayer game lobby
|
||||
|
||||
@@ -2011,15 +1969,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Client list
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Spectate
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Kick
|
||||
STR_NETWORK_CLIENTLIST_BAN :Ban
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Speak to all
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Speak to company
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private message
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Server
|
||||
STR_NETWORK_CLIENT :Client
|
||||
|
||||
@@ -953,7 +953,7 @@ STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringg
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Drive on left
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Drive on right
|
||||
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Town names
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Town names:
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Select style of town names
|
||||
|
||||
############ start of townname region
|
||||
@@ -993,6 +993,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Every 12 months
|
||||
|
||||
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Language
|
||||
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Select the interface language to use
|
||||
STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% completed)
|
||||
|
||||
STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Fullscreen
|
||||
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Check this box to play OpenTTD fullscreen mode
|
||||
@@ -1006,6 +1007,9 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Hardware
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Check this box to allow OpenTTD to try to use hardware acceleration. A changed setting will only be applied upon game restart
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}The setting will only take effect after a game restart
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Check this box to v-sync the screen. A changed setting will only be applied upon game restart. Only works with hardware acceleration enabled
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Interface size
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Select the interface element size to use
|
||||
|
||||
@@ -1138,6 +1142,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Settings
|
||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filter string:
|
||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expand all
|
||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Collapse all
|
||||
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Reset all values
|
||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(no explanation available)
|
||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Default value: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Setting type: {ORANGE}{STRING}
|
||||
@@ -1146,6 +1151,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Game setting (s
|
||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Game setting (stored in save; affects only current game)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Company setting (stored in saves; affects only new games)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Company setting (stored in save; affects only current company)
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Caution!
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}This action will reset all game settings to their default values.{}Are you sure you want to proceed?
|
||||
|
||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Category:
|
||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type:
|
||||
@@ -1984,6 +1991,9 @@ STR_FACE_TIE :Tie:
|
||||
STR_FACE_EARRING :Earring:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change tie or earring
|
||||
|
||||
STR_NETWORK_SERVER_VISIBILITY_PRIVATE :Private
|
||||
STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Public
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name:
|
||||
@@ -2046,10 +2056,8 @@ 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_ADVERTISED_LABEL :{BLACK}Advertised
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :No
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Yes
|
||||
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:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choose the maximum number of clients. Not all slots need to be filled
|
||||
@@ -2064,46 +2072,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Other pl
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Enter a name for the network game
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Any
|
||||
STR_NETWORK_LANG_ENGLISH :English
|
||||
STR_NETWORK_LANG_GERMAN :German
|
||||
STR_NETWORK_LANG_FRENCH :French
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brazilian
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgarian
|
||||
STR_NETWORK_LANG_CHINESE :Chinese
|
||||
STR_NETWORK_LANG_CZECH :Czech
|
||||
STR_NETWORK_LANG_DANISH :Danish
|
||||
STR_NETWORK_LANG_DUTCH :Dutch
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Finnish
|
||||
STR_NETWORK_LANG_HUNGARIAN :Hungarian
|
||||
STR_NETWORK_LANG_ICELANDIC :Icelandic
|
||||
STR_NETWORK_LANG_ITALIAN :Italian
|
||||
STR_NETWORK_LANG_JAPANESE :Japanese
|
||||
STR_NETWORK_LANG_KOREAN :Korean
|
||||
STR_NETWORK_LANG_LITHUANIAN :Lithuanian
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norwegian
|
||||
STR_NETWORK_LANG_POLISH :Polish
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portuguese
|
||||
STR_NETWORK_LANG_ROMANIAN :Romanian
|
||||
STR_NETWORK_LANG_RUSSIAN :Russian
|
||||
STR_NETWORK_LANG_SLOVAK :Slovak
|
||||
STR_NETWORK_LANG_SLOVENIAN :Slovenian
|
||||
STR_NETWORK_LANG_SPANISH :Spanish
|
||||
STR_NETWORK_LANG_SWEDISH :Swedish
|
||||
STR_NETWORK_LANG_TURKISH :Turkish
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ukrainian
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaans
|
||||
STR_NETWORK_LANG_CROATIAN :Croatian
|
||||
STR_NETWORK_LANG_CATALAN :Catalan
|
||||
STR_NETWORK_LANG_ESTONIAN :Estonian
|
||||
STR_NETWORK_LANG_GALICIAN :Galician
|
||||
STR_NETWORK_LANG_GREEK :Greek
|
||||
STR_NETWORK_LANG_LATVIAN :Latvian
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multiplayer game lobby
|
||||
|
||||
@@ -2151,19 +2119,46 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disconne
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Client list
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Client list
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Spectate
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Online players
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Kick
|
||||
STR_NETWORK_CLIENTLIST_BAN :Ban
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Speak to all
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Speak to company
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private message
|
||||
STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Multiplayer
|
||||
STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Server
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Name
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Name of the server you are playing on
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Edit the name of your server
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Name of the server
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Visibility
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Whether other people can see your server in the public listing
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Player
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Name
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Your player name
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Edit your player name
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Your player name
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Administrative actions to perform for this client
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administrative actions to perform for this company
|
||||
STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Join this company
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Send a message to this player
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Send a message to all players of this company
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Send a message to all spectators
|
||||
STR_NETWORK_CLIENT_LIST_SPECTATORS :Spectators
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(New company)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Create a new company and join it
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}This is you
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}This is the host of the game
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Ban
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Delete
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Password unlock
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Admin action
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Are you sure you want to kick player '{STRING}'?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Are you sure you want to ban player '{STRING}'?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Are you sure you want to delete company '{COMPANY}'?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Are you sure you want to reset the password of company '{COMPANY}'?
|
||||
|
||||
STR_NETWORK_SERVER :Server
|
||||
STR_NETWORK_CLIENT :Client
|
||||
@@ -2208,6 +2203,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}Could no
|
||||
STR_NETWORK_ERROR_CLIENT_START :{WHITE}Could not connect
|
||||
STR_NETWORK_ERROR_TIMEOUT :{WHITE}Connection #{NUM} timed out
|
||||
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}A protocol error was detected and the connection was closed
|
||||
STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Your player name has not been set. The name can be set at the top of the Multiplayer window
|
||||
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}The revision of this client does not match the server's revision
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Wrong password
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}The server is full
|
||||
@@ -2220,6 +2216,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}You took
|
||||
STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Your computer is too slow to keep up with the server
|
||||
STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Your computer took too long to download the map
|
||||
STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Your computer took too long to join the server
|
||||
STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Your player name is not valid
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_ERROR_CLIENT_GENERAL :general error
|
||||
@@ -2242,6 +2239,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :received no pas
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :general timeout
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :downloading map took too long
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :processing map took too long
|
||||
STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :invalid client name
|
||||
############ End of leave-in-this-order
|
||||
|
||||
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possible connection loss
|
||||
@@ -2531,7 +2529,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Build sh
|
||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Place a buoy which can be used as a waypoint. Shift toggles building/showing cost estimate
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Build aqueduct. Shift toggles building/showing cost estimate
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Define water area.{}Make a canal. If Ctrl is held down at sea level, it will flood the surroundings instead
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Place rivers
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Place rivers. Ctrl selects the area diagonally
|
||||
|
||||
# Ship depot construction window
|
||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Ship Depot Orientation
|
||||
@@ -3081,6 +3079,7 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Warning: {
|
||||
STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}A fatal NewGRF error has occurred:{}{STRING}
|
||||
STR_NEWGRF_ERROR_POPUP :{WHITE}A NewGRF error has occurred:{}{STRING}
|
||||
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} will not work with the TTDPatch version reported by OpenTTD
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is for the {STRING} version of TTD
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} is designed to be used with {STRING}
|
||||
|
||||
@@ -953,6 +953,7 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Elektu u
|
||||
STR_GAME_OPTIONS_RESOLUTION_OTHER :alia
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Interfacgrandeco
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normala
|
||||
@@ -1529,6 +1530,7 @@ STR_FACE_TIE :Kravato:
|
||||
STR_FACE_EARRING :Orelringo:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ŝanĝi kravaton aŭ orelringon.
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Pluraj ludantoj
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ludantnomo:
|
||||
@@ -1601,46 +1603,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aliaj lu
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Tajpu nomon por la retludo
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Ajna
|
||||
STR_NETWORK_LANG_ENGLISH :Angla
|
||||
STR_NETWORK_LANG_GERMAN :Germana
|
||||
STR_NETWORK_LANG_FRENCH :Franca
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brazila
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgara
|
||||
STR_NETWORK_LANG_CHINESE :Ĉina
|
||||
STR_NETWORK_LANG_CZECH :Ĉeĥa
|
||||
STR_NETWORK_LANG_DANISH :Dana
|
||||
STR_NETWORK_LANG_DUTCH :Nederlanda
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Finna
|
||||
STR_NETWORK_LANG_HUNGARIAN :Hungara
|
||||
STR_NETWORK_LANG_ICELANDIC :Islanda
|
||||
STR_NETWORK_LANG_ITALIAN :Itala
|
||||
STR_NETWORK_LANG_JAPANESE :Japana
|
||||
STR_NETWORK_LANG_KOREAN :Korea
|
||||
STR_NETWORK_LANG_LITHUANIAN :Litova
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norveĝa
|
||||
STR_NETWORK_LANG_POLISH :Pola
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portugala
|
||||
STR_NETWORK_LANG_ROMANIAN :Romana
|
||||
STR_NETWORK_LANG_RUSSIAN :Rusa
|
||||
STR_NETWORK_LANG_SLOVAK :Slovaka
|
||||
STR_NETWORK_LANG_SLOVENIAN :Slovena
|
||||
STR_NETWORK_LANG_SPANISH :Hispana
|
||||
STR_NETWORK_LANG_SWEDISH :Sveda
|
||||
STR_NETWORK_LANG_TURKISH :Turka
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ukraina
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikansa
|
||||
STR_NETWORK_LANG_CROATIAN :Kroata
|
||||
STR_NETWORK_LANG_CATALAN :Kataluna
|
||||
STR_NETWORK_LANG_ESTONIAN :Estona
|
||||
STR_NETWORK_LANG_GALICIAN :Galica
|
||||
STR_NETWORK_LANG_GREEK :Greka
|
||||
STR_NETWORK_LANG_LATVIAN :Latva
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Atendejo por plurludantaj ludoj
|
||||
|
||||
@@ -1691,15 +1653,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Kompanio
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klientlisto
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Spekti
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova kompanio
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Forbatu
|
||||
STR_NETWORK_CLIENTLIST_BAN :Bari
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parolu al ĉiuj
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parolu al kompanio
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privata mesaĝo
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Servilo
|
||||
STR_NETWORK_CLIENT :Kliento
|
||||
|
||||
@@ -1063,6 +1063,7 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Riistvar
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Märkides selle ruudu, lubad OpenTTD-l üritada kasutada riistvarakiirendust. Muudetud seade omab mõju pärast mängu taaskäivitust
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Seade omab mõju alles pärast mängu taaskäivitust
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Liidese suurus
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Vali kasutatav liideseelementide suurus
|
||||
|
||||
@@ -2041,6 +2042,7 @@ STR_FACE_TIE :Lips:
|
||||
STR_FACE_EARRING :Kõrvarõngas:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Vaheta kraed või kõrvarõngast
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mitmikmäng
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Mängija nimi:
|
||||
@@ -2103,10 +2105,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Serveril
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Määra salasõna
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Et server ei oleks avalik, kaitse oma mäng salasõnaga
|
||||
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Reklaami
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valib reklaamitava (internet) või mittereklaamitava (kohtvõrk, LAN) mängu
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Ei
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Jah
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Kliente kuni:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS.in :sees
|
||||
@@ -2122,46 +2120,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Teavitab
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Sisesta mitmikmängu nimi
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Suvaline
|
||||
STR_NETWORK_LANG_ENGLISH :Inglise keel
|
||||
STR_NETWORK_LANG_GERMAN :Saksa keel
|
||||
STR_NETWORK_LANG_FRENCH :Prantsuse keel
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brasiilia
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgaaria
|
||||
STR_NETWORK_LANG_CHINESE :Hiina
|
||||
STR_NETWORK_LANG_CZECH :Tšehhi
|
||||
STR_NETWORK_LANG_DANISH :Taani
|
||||
STR_NETWORK_LANG_DUTCH :Hollandi
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Soome
|
||||
STR_NETWORK_LANG_HUNGARIAN :Ungari
|
||||
STR_NETWORK_LANG_ICELANDIC :Islandi
|
||||
STR_NETWORK_LANG_ITALIAN :Itaalia
|
||||
STR_NETWORK_LANG_JAPANESE :Jaapani
|
||||
STR_NETWORK_LANG_KOREAN :Korea
|
||||
STR_NETWORK_LANG_LITHUANIAN :Leedu
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norra
|
||||
STR_NETWORK_LANG_POLISH :Poola
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portugali
|
||||
STR_NETWORK_LANG_ROMANIAN :Rumeenia
|
||||
STR_NETWORK_LANG_RUSSIAN :Vene
|
||||
STR_NETWORK_LANG_SLOVAK :Slovakkia
|
||||
STR_NETWORK_LANG_SLOVENIAN :Sloveenia
|
||||
STR_NETWORK_LANG_SPANISH :Hispaania
|
||||
STR_NETWORK_LANG_SWEDISH :Rootsi
|
||||
STR_NETWORK_LANG_TURKISH :Türgi
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ukraina
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaani
|
||||
STR_NETWORK_LANG_CROATIAN :Horvaadi
|
||||
STR_NETWORK_LANG_CATALAN :Katalaani
|
||||
STR_NETWORK_LANG_ESTONIAN :Eesti
|
||||
STR_NETWORK_LANG_GALICIAN :Galeegi
|
||||
STR_NETWORK_LANG_GREEK :Kreeka
|
||||
STR_NETWORK_LANG_LATVIAN :Läti
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Mitmikmängu jututuba
|
||||
|
||||
@@ -2209,19 +2167,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Katkesta
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server on kaitstud. Sisesta salasõna
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Ettevõte on kaitstud. Sisesta salasõna
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientide nimekiri
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klientide nimekiri
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Jälgi
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Uus ettevõte
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Viska välja
|
||||
STR_NETWORK_CLIENTLIST_BAN :Bänn
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Räägi kõigiga
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Räägi ettevõttega
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privaatne sõnum
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Server
|
||||
STR_NETWORK_CLIENT :Klient
|
||||
@@ -2589,7 +2541,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Ehita la
|
||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Paigalda poi, mis on kasutatav teemärgisena. Shift valib ehitamise/hinna kuvamise režiimi
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Ehita veesild. Shift valib ehitamise/hinna kuvamise režiimi
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Määratle veealad.{}Ehita kanal. Veekõrgusel Ctrl-klahvi all hoidmine ujutab ümbruskonna üle
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Jõgede paigutamine
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Jõgede paigutamine. Ctrl valib ala põiki
|
||||
|
||||
# Ship depot construction window
|
||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Laevaremonditehase suund
|
||||
|
||||
@@ -947,6 +947,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :annað
|
||||
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base grafikk sett
|
||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vel ta base grafikk setti tú vil brúka
|
||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} vantandi/oyðiløgd fíl{P a ir}
|
||||
@@ -1695,6 +1696,7 @@ STR_FACE_TIE :Slips:
|
||||
STR_FACE_EARRING :Oyraringur:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Broyt slips ella oyraring
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Hópspæl
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spælara navn:
|
||||
@@ -1753,8 +1755,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Aðrir s
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Áset loyniorð
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Verj títt spæl við einum loyniorðið um tú ikki vil at ta skal verða opi fyri almenninginum
|
||||
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Nei
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Ja
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" ar}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Mest loyvdir klientar:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Vel mest loyvda tali av klientum. Ta er ikki neyðugt at fylla øll plássini
|
||||
@@ -1769,46 +1769,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aðrir s
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Gev netverks spælinum eitt navn
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Hvat sum helst
|
||||
STR_NETWORK_LANG_ENGLISH :Enskt
|
||||
STR_NETWORK_LANG_GERMAN :Týskt
|
||||
STR_NETWORK_LANG_FRENCH :Franskt
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brasilienskt
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgariskt
|
||||
STR_NETWORK_LANG_CHINESE :Kinverskt
|
||||
STR_NETWORK_LANG_CZECH :Tjekkiskt
|
||||
STR_NETWORK_LANG_DANISH :Danskt
|
||||
STR_NETWORK_LANG_DUTCH :Niðurlendskt
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Finskt
|
||||
STR_NETWORK_LANG_HUNGARIAN :Ungarskt
|
||||
STR_NETWORK_LANG_ICELANDIC :Íslenskt
|
||||
STR_NETWORK_LANG_ITALIAN :Italienskt
|
||||
STR_NETWORK_LANG_JAPANESE :Japanskt
|
||||
STR_NETWORK_LANG_KOREAN :Koreanskt
|
||||
STR_NETWORK_LANG_LITHUANIAN :Litauiskt
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norskt
|
||||
STR_NETWORK_LANG_POLISH :Polskt
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portugisiskt
|
||||
STR_NETWORK_LANG_ROMANIAN :Rumenskt
|
||||
STR_NETWORK_LANG_RUSSIAN :Russiskt
|
||||
STR_NETWORK_LANG_SLOVAK :Slovakiskt
|
||||
STR_NETWORK_LANG_SLOVENIAN :Slovenskt
|
||||
STR_NETWORK_LANG_SPANISH :Spanskt
|
||||
STR_NETWORK_LANG_SWEDISH :Svenskt
|
||||
STR_NETWORK_LANG_TURKISH :Turkiskt
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ukrainskt
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaans
|
||||
STR_NETWORK_LANG_CROATIAN :Kroatiskt
|
||||
STR_NETWORK_LANG_CATALAN :Catalan
|
||||
STR_NETWORK_LANG_ESTONIAN :Estoniskt
|
||||
STR_NETWORK_LANG_GALICIAN :Galisiskt
|
||||
STR_NETWORK_LANG_GREEK :Grikskt
|
||||
STR_NETWORK_LANG_LATVIAN :Latviskt
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Hópspæls forhøll
|
||||
|
||||
@@ -1859,15 +1819,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Fyritøk
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Listi yvir klientar
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Eygleið
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nýggja fyritøku
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Sparka
|
||||
STR_NETWORK_CLIENTLIST_BAN :Bannað
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Tosa við øll
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Tosa við fyritøku
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Persónligt boð
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Servari
|
||||
STR_NETWORK_CLIENT :Klient
|
||||
|
||||
@@ -953,7 +953,7 @@ STR_GAME_OPTIONS_CURRENCY_MYR :Malesian ringgi
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Vasemmanpuolinen liikenne
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Oikeanpuolinen liikenne
|
||||
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Kuntien nimet
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Kuntien nimet:
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Valitse kuntien nimien tyyli
|
||||
|
||||
############ start of townname region
|
||||
@@ -993,6 +993,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Kerran vuodessa
|
||||
|
||||
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Kieli
|
||||
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Valitse käyttöliittymän kieli
|
||||
STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}{NBSP}% valmiina)
|
||||
|
||||
STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Koko näyttö
|
||||
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Valitse tämä pelataksesi kokoruututilassa
|
||||
@@ -1006,6 +1007,9 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Laitteis
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Valitse tämä, jos haluat, että OpenTTD yrittää käyttää laitteistokiihdytystä. Muutettu asetus tulee voimaan vasta pelin uudelleenkäynnistyksen jälkeen.
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Asetus tulee voimaan vasta pelin uudelleenkäynnistyksen jälkeen
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}Pystytahdistus
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Valitse tämä ottaaksesi käyttöön näytön pystytahdistuksen. Muutettu asetus tulee voimaan vasta pelin uudelleenkäynnistyksen jälkeen. Edellyttää, että laitteistokiihdytys on käytössä.
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Käyttöliittymän koko
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Valitse käyttöliittymäelementtien koko
|
||||
|
||||
@@ -1138,6 +1142,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Asetukse
|
||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Suodatinteksti:
|
||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Avaa kaikki
|
||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Sulje kaikki
|
||||
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Palauta oletukset
|
||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(selitystä ei saatavilla)
|
||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Oletusarvo: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Asetuksen tyyppi: {ORANGE}{STRING}
|
||||
@@ -1146,6 +1151,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Pelin asetus (t
|
||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Pelin asetus (tallennetaan tallenteeseen; vaikuttaa vain nykyiseen peliin)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Yhtiön asetus (tallennetaan tallenteisiin; vaikuttaa vain uusiin peleihin)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Yhtiön asetus (tallennetaan tallennukseen; vaikuttaa vain nykyiseen yhtiöön)
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Varoitus!
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Tämä toiminto palauttaa pelin kaikki asetukset oletusarvoihinsa.{}Haluatko varmasti jatkaa?
|
||||
|
||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategoria:
|
||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tyyppi:
|
||||
@@ -1984,6 +1991,9 @@ STR_FACE_TIE :Solmio:
|
||||
STR_FACE_EARRING :Korvakoru:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Vaihda solmio tai korvakoru
|
||||
|
||||
STR_NETWORK_SERVER_VISIBILITY_PRIVATE :Yksityinen
|
||||
STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Julkinen
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Moninpeli
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Pelaajan nimi
|
||||
@@ -2046,10 +2056,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nimi nä
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Aseta salasana
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Jos peliin ei halua ulkopuolisia, voi sen suojata salasanalla
|
||||
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Mainostettu
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valitse mainostettu (internet) tai ei-mainostettu (paikallisverkko, LAN) peli
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Ei
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Kyllä
|
||||
STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Näkyvyys
|
||||
STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Näkyykö palvelimesi muille julkisessa listauksessa
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} asiakas{P "" ta}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Pelaajien enimmäismäärä:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Pelaajien enimmäismäärä. Pelissä voi olla myös vähemmän pelaajia
|
||||
@@ -2064,46 +2072,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Toiset p
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Syötä nimi verkkopelille
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :mikä tahansa
|
||||
STR_NETWORK_LANG_ENGLISH :englanti
|
||||
STR_NETWORK_LANG_GERMAN :saksa
|
||||
STR_NETWORK_LANG_FRENCH :ranska
|
||||
STR_NETWORK_LANG_BRAZILIAN :brasilianportugali
|
||||
STR_NETWORK_LANG_BULGARIAN :bulgaria
|
||||
STR_NETWORK_LANG_CHINESE :kiina
|
||||
STR_NETWORK_LANG_CZECH :tšekki
|
||||
STR_NETWORK_LANG_DANISH :tanska
|
||||
STR_NETWORK_LANG_DUTCH :hollanti
|
||||
STR_NETWORK_LANG_ESPERANTO :esperanto
|
||||
STR_NETWORK_LANG_FINNISH :suomi
|
||||
STR_NETWORK_LANG_HUNGARIAN :unkari
|
||||
STR_NETWORK_LANG_ICELANDIC :islanti
|
||||
STR_NETWORK_LANG_ITALIAN :italia
|
||||
STR_NETWORK_LANG_JAPANESE :japani
|
||||
STR_NETWORK_LANG_KOREAN :korea
|
||||
STR_NETWORK_LANG_LITHUANIAN :liettua
|
||||
STR_NETWORK_LANG_NORWEGIAN :norja
|
||||
STR_NETWORK_LANG_POLISH :puola
|
||||
STR_NETWORK_LANG_PORTUGUESE :portugali
|
||||
STR_NETWORK_LANG_ROMANIAN :romania
|
||||
STR_NETWORK_LANG_RUSSIAN :venäjä
|
||||
STR_NETWORK_LANG_SLOVAK :slovakia
|
||||
STR_NETWORK_LANG_SLOVENIAN :sloveeni
|
||||
STR_NETWORK_LANG_SPANISH :espanja
|
||||
STR_NETWORK_LANG_SWEDISH :ruotsi
|
||||
STR_NETWORK_LANG_TURKISH :turkki
|
||||
STR_NETWORK_LANG_UKRAINIAN :ukraina
|
||||
STR_NETWORK_LANG_AFRIKAANS :afrikaans
|
||||
STR_NETWORK_LANG_CROATIAN :kroatia
|
||||
STR_NETWORK_LANG_CATALAN :katalaani
|
||||
STR_NETWORK_LANG_ESTONIAN :viro
|
||||
STR_NETWORK_LANG_GALICIAN :galego
|
||||
STR_NETWORK_LANG_GREEK :kreikka
|
||||
STR_NETWORK_LANG_LATVIAN :latvia
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Moninpeliaula
|
||||
|
||||
@@ -2151,19 +2119,46 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Pura yht
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Palvelin on suojattu. Anna salasana
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Yhtiö on suojattu. Anna salasana
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Asiakaslista
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Asiakaslista
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Katsele
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Uusi yhtiö
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Kytkeytyneet pelaajat
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Potkaise
|
||||
STR_NETWORK_CLIENTLIST_BAN :Kiellä
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Puhu kaikille
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Puhu yhtiölle
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Yksityinen viesti
|
||||
STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Moninpeli
|
||||
STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Palvelin
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Nimi
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Sen palvelimen nimi, jolla pelaat
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Muokkaa palvelimesi nimeä
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Palvelimen nimi
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Näkyvyys
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Näkyykö palvelimesi muille julkisessa listauksessa
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Pelaaja
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nimi
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Pelaajanimesi
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Muokkaa pelaajanimeäsi
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Pelaajanimesi
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Tähän asiakkaaseen kohdistettavat ylläpitotoiminnot
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Tähän yhtiöön kohdistettavat ylläpitotoiminnot
|
||||
STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Liity tähän yhtiöön
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Lähetä tälle pelaajalle viesti
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Lähetä viesti kaikille tämän yhtiön pelaajille
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Lähetä viesti kaikille katsojille
|
||||
STR_NETWORK_CLIENT_LIST_SPECTATORS :Katsojat
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Uusi yhtiö)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Perusta uusi yhtiö ja liity siihen
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Tämä olet sinä
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Tämä on pelin ylläpitäjä
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Potki
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Estä
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Poista
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Poista salasanalukitus
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Ylläpitäjän toiminta
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Haluatko varmasti potkia pelaajan ”{STRING}” pelistä?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Haluatko varmasti estää pelaajan ”{STRING}”?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Haluatko varmasti poistaa yhtiön ”{COMPANY}”?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Haluatko varmasti nollata yhtiön ”{COMPANY}” salasanan?
|
||||
|
||||
STR_NETWORK_SERVER :Palvelin
|
||||
STR_NETWORK_CLIENT :Pelaaja
|
||||
@@ -2208,6 +2203,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}Palvelin
|
||||
STR_NETWORK_ERROR_CLIENT_START :{WHITE}Yhdistäminen ei onnistunut
|
||||
STR_NETWORK_ERROR_TIMEOUT :{WHITE}Yhteys nro {NUM} aikakatkaistiin
|
||||
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Protokollavirhe tapahtui ja yhteys suljettiin
|
||||
STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Et ole asettanut pelaajanimeäsi. Nimen voi asettaa moninpeli-ikkunan ylälaidassa.
|
||||
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Tämän asiakkaan versio ei vastaa palvelimen versiota
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Väärä salasana
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Palvelin on täynnä
|
||||
@@ -2220,6 +2216,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Käytit
|
||||
STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Tietokoneesi on liian hidas pysyäkseen palvelimen tahdissa
|
||||
STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Kartan lataus kesti liian kauan
|
||||
STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Palvelimelle liittyminen kesti liian kauan
|
||||
STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Pelaajanimesi ei kelpaa
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_ERROR_CLIENT_GENERAL :yleinen virhe
|
||||
@@ -2242,6 +2239,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :salasanaa ei va
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :yleinen aikakatkaisu
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :kartan lataaminen kesti liian kauan
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :kartan käsittely kesti liian kauan
|
||||
STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :Epäkelpo asiakasnimi
|
||||
############ End of leave-in-this-order
|
||||
|
||||
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mahdollinen yhteyden menetys
|
||||
@@ -2531,7 +2529,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Rakenna
|
||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Sijoita poiju, jota voi käyttää reittipisteenä. Shift vaihtaa rakennustilan ja kustannusarvion välillä
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Rakenna akvedukti. Shift vaihtaa rakennustilan ja kustannusarvion välillä
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Määrittele vesialue.{}Tee kanava, paitsi jos Ctrl on painettuna merenpinnalla. Tällöin meri laajenee ympäristöön
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Sijoita jokia
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Sijoita jokia. Ctrl valitsee alueen vinottain.
|
||||
|
||||
# Ship depot construction window
|
||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Telakan suunta
|
||||
@@ -3081,6 +3079,7 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Varoitus:
|
||||
STR_NEWGRF_ERROR_MSG_ERROR :{RED}Virhe: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_MSG_FATAL :{RED}Virhe: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Vakava NewGRF-virhe on tapahtunut:{}{STRING}
|
||||
STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF-virhe on tapahtunut:{}{STRING}
|
||||
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ei toimi OpenTTD:n ilmoittaman TTDPatch-version kanssa
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} on TTD:n {STRING}-versiota varten
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} ja {STRING} on suunniteltu toimimaan yhdessä
|
||||
@@ -4464,7 +4463,7 @@ STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Ei voi r
|
||||
STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Satamaa ei voi rakentaa tähän...
|
||||
STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Lentokenttää ei voi rakentaa...
|
||||
|
||||
STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Liitä yhteen useampi asema/lastausalue.
|
||||
STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Vieressä on useampi kuin yksi olemassaoleva asema tai kuormausalue.
|
||||
STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... asema liian levittäytynyt
|
||||
STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Liian monta asemaa ja lastausaluetta.
|
||||
STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Rautatieasema on jakautunut liian moneen osaan
|
||||
@@ -4497,7 +4496,7 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Satama p
|
||||
STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Lentokenttä pitää tuhota ensin.
|
||||
|
||||
# Waypoint related errors
|
||||
STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Liittää useamman kuin yhden reittipisteen
|
||||
STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Vieressä on useampi kuin yksi olemassaoleva reittipiste.
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Liian lähellä toista reittipistettä
|
||||
|
||||
STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Junien reittipistettä ei voi rakentaa tähän...
|
||||
|
||||
@@ -954,7 +954,7 @@ STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringg
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Conduite à gauche
|
||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Conduite à droite
|
||||
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Noms des villes
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Nom des villes{NBSP}:
|
||||
STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Sélectionner la nationalité des noms des villes
|
||||
|
||||
############ start of townname region
|
||||
@@ -994,6 +994,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Tous les 12 moi
|
||||
|
||||
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Langue
|
||||
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Sélectionner la langue à utiliser pour l'interface
|
||||
STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}{NBSP}% terminé{P "" s})
|
||||
|
||||
STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Plein écran
|
||||
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Cocher cette case pour jouer à OpenTTD en plein écran
|
||||
@@ -1007,6 +1008,9 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK} Accél
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Cochez cette case permet à OpenTTD d'utiliser l'accélération matérielle, si possible. Un paramètre modifié ne sera pris en compte qu'au redémarrage du jeu
|
||||
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Les paramètres ne prendront effet qu'après le redémarrage du jeu
|
||||
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync
|
||||
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Cochez cette case pour activer la synchronisation verticale de l'écran. La modification de ce paramètres ne sera effective qu'après le redémarrage du jeu. Fonctionne uniquement si l’accélération matérielle est active
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Taille d'interface
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Choisir la taille d'élément d'interface à utiliser
|
||||
|
||||
@@ -1023,7 +1027,7 @@ STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Taille double
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Taille quadruple
|
||||
|
||||
STR_GAME_OPTIONS_GRAPHICS :Graphiques {BLACK}
|
||||
STR_GAME_OPTIONS_GRAPHICS :{BLACK} Graphiques
|
||||
|
||||
STR_GAME_OPTIONS_REFRESH_RATE :{BLACK} Taux de rafraîchissement de l'affichage
|
||||
STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK} Sélectionnez la fréquence de rafraîchissement à utiliser
|
||||
@@ -1139,6 +1143,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Paramèt
|
||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtre{NBSP}:
|
||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Tout développer
|
||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Tout réduire
|
||||
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Réinitialiser tous les réglages
|
||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(pas d'explication disponible)
|
||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valeur par défaut{NBSP}: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Type de paramètre{NBSP}: {ORANGE}{STRING}
|
||||
@@ -1147,6 +1152,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Paramètre de j
|
||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Paramètre de jeu (enregistré dans la sauvegarde{NBSP}; affecte uniquement la partie actuelle)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Paramètre de compagnie (enregistré dans les sauvegardes{NBSP}; affecte uniquement les nouvelles parties)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Paramètre de compagnie (enregistré dans la sauvegarde{NBSP}; affecte uniquement la compagnie actuelle)
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Attention{NBSP}!
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Par cette action, toues les réglages seront réinitialisés aux valeurs par défaut.{}Êtes-vous sûr de vouloir continuer{NBSP}?
|
||||
|
||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Catégorie{NBSP}:
|
||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type{NBSP}:
|
||||
@@ -1985,6 +1992,9 @@ STR_FACE_TIE :Cravate{NBSP}:
|
||||
STR_FACE_EARRING :Boucle d'oreille{NBSP}:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Modifier la cravate ou la boucle d'oreille
|
||||
|
||||
STR_NETWORK_SERVER_VISIBILITY_PRIVATE :Privé
|
||||
STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Public
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijoueurs
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nom du joueur{NBSP}:
|
||||
@@ -2047,10 +2057,8 @@ 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_ADVERTISED_LABEL :{BLACK}Publiée
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choisir entre une partie publiée (internet) et une partie non publiée (Réseau local, LAN)
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Non
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Oui
|
||||
STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilité
|
||||
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}:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choisir un nombre maximum de clients. Tous les emplacements n'auront pas besoin d'être remplis
|
||||
@@ -2065,46 +2073,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Les autr
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Entrer un nom pour la partie en réseau
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Aucune
|
||||
STR_NETWORK_LANG_ENGLISH :Anglais
|
||||
STR_NETWORK_LANG_GERMAN :Allemand
|
||||
STR_NETWORK_LANG_FRENCH :Français
|
||||
STR_NETWORK_LANG_BRAZILIAN :Brésilien
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgare
|
||||
STR_NETWORK_LANG_CHINESE :Chinois
|
||||
STR_NETWORK_LANG_CZECH :Tchèque
|
||||
STR_NETWORK_LANG_DANISH :Danois
|
||||
STR_NETWORK_LANG_DUTCH :Néerlandais
|
||||
STR_NETWORK_LANG_ESPERANTO :Espéranto
|
||||
STR_NETWORK_LANG_FINNISH :Finlandais
|
||||
STR_NETWORK_LANG_HUNGARIAN :Hongrois
|
||||
STR_NETWORK_LANG_ICELANDIC :Islandais
|
||||
STR_NETWORK_LANG_ITALIAN :Italien
|
||||
STR_NETWORK_LANG_JAPANESE :Japonais
|
||||
STR_NETWORK_LANG_KOREAN :Coréen
|
||||
STR_NETWORK_LANG_LITHUANIAN :Lituanien
|
||||
STR_NETWORK_LANG_NORWEGIAN :Norvégien
|
||||
STR_NETWORK_LANG_POLISH :Polonais
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portugais
|
||||
STR_NETWORK_LANG_ROMANIAN :Roumain
|
||||
STR_NETWORK_LANG_RUSSIAN :Russe
|
||||
STR_NETWORK_LANG_SLOVAK :Slovaque
|
||||
STR_NETWORK_LANG_SLOVENIAN :Slovène
|
||||
STR_NETWORK_LANG_SPANISH :Espagnol
|
||||
STR_NETWORK_LANG_SWEDISH :Suédois
|
||||
STR_NETWORK_LANG_TURKISH :Turc
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ukrainien
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaans
|
||||
STR_NETWORK_LANG_CROATIAN :Croate
|
||||
STR_NETWORK_LANG_CATALAN :Catalan
|
||||
STR_NETWORK_LANG_ESTONIAN :Estonien
|
||||
STR_NETWORK_LANG_GALICIAN :Galicien
|
||||
STR_NETWORK_LANG_GREEK :Grec
|
||||
STR_NETWORK_LANG_LATVIAN :Letton
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Préparation de la partie
|
||||
|
||||
@@ -2152,19 +2120,46 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Déconne
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Le serveur est protégé. Entrez le mot de passe
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}La compagnie est protégée. Entrez le mot de passe
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Liste des clients
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liste des clients
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Spectateur
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nouvelle compagnie
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Joueurs en ligne
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Exclure
|
||||
STR_NETWORK_CLIENTLIST_BAN :Bannir
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parler à tous
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parler à la compagnie
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Message privé
|
||||
STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Multijoueur
|
||||
STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Serveur
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Nom
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Nom du serveur sur lequel vous jouez
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Éditer le nom de votre serveur
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Nom du serveur
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Visibilité
|
||||
STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Possibilité pour les autres personnes de voir votre serveur dans la liste publique
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Joueur
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nom
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Votre nom de jeu
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Éditer votre nom
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Votre nom de jeu
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Actions administratives à accomplir pour ce client
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Actions administratives à accomplir pour cette compagnie
|
||||
STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Rejoindre cette compagnie
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Envoyer un message à cette personne
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Envoyer un message à tous les joueurs de cette compagnie
|
||||
STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Envoyer un message à tous les spectateurs
|
||||
STR_NETWORK_CLIENT_LIST_SPECTATORS :Spectateurs
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nouvelle compagnie)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Créer une nouvelle compagnie et la rejoindre
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}C'est vous
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}C'est l'hôte du jeu
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Exclure
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Bannir
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Supprimer
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Débloquer le mot de passe
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Action administrative
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Êtes-vous sûr de vouloir exclure '{STRING}'{NBSP}?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Êtes-vous sûr de vouloir bannir '{STRING}'{NBSP}?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Êtes-vous sûr de vouloir supprimer la compagnie '{COMPANY}'{NBSP}?
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Êtes-vous sûr de vouloir réinitialiser le mot de passe de la compagnie '{COMPANY}'?
|
||||
|
||||
STR_NETWORK_SERVER :Serveur
|
||||
STR_NETWORK_CLIENT :Client
|
||||
@@ -2209,6 +2204,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}Le serve
|
||||
STR_NETWORK_ERROR_CLIENT_START :{WHITE}Échec de la connexion
|
||||
STR_NETWORK_ERROR_TIMEOUT :{WHITE}La connexion n°{NBSP}{NUM} a dépassé le temps d'attente
|
||||
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Une erreur de protocole a été détectée et la connexion a été fermée
|
||||
STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Vous n'avez pas de nom. Il doit être entré en haut de la fenêtre Multijoueur
|
||||
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Le numéro de version/révision de ce client ne correspond pas à celui du serveur
|
||||
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Mot de passe incorrect
|
||||
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Le serveur est complet
|
||||
@@ -2221,6 +2217,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Vous ave
|
||||
STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Votre ordinateur est trop lent pour suivre le serveur
|
||||
STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Votre ordinateur a mis trop de temps pour télécharger la carte
|
||||
STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Votre ordinateur a mis trop de temps pour rejoindre le serveur
|
||||
STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Votre nom n'est pas valide
|
||||
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_ERROR_CLIENT_GENERAL :erreur générale
|
||||
@@ -2243,6 +2240,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :aucun mot de pa
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :délai dépassé
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :télécharger la carte a pris trop de temps
|
||||
STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :le traitement de la carte a pris trop de temps
|
||||
STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :nom client invalide
|
||||
############ End of leave-in-this-order
|
||||
|
||||
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possible perte de connexion
|
||||
@@ -2532,7 +2530,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construi
|
||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Placer une bouée pouvant servir de guide aux navires.{}Shift pour afficher seulement le coût estimé.
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construire un aqueduc.{}Shift pour afficher seulement le coût estimé.
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Définir une zone d'eau.{}Construire un canal, sauf si Ctrl est enfoncé au niveau de la mer{NBSP}: dans ce cas, le voisinage sera inondé.
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Placer des rivières
|
||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Placer des rivières. Presser Ctrl pour sélectionner en diagonale
|
||||
|
||||
# Ship depot construction window
|
||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientation du dépôt
|
||||
@@ -3082,6 +3080,7 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Attention{
|
||||
STR_NEWGRF_ERROR_MSG_ERROR :{RED}Erreur{NBSP}: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_MSG_FATAL :{RED}Erreur fatale{NBSP}: {SILVER}{STRING}
|
||||
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Une erreur NewGRF fatale est survenue{NBSP}:{}{STRING}
|
||||
STR_NEWGRF_ERROR_POPUP :{WHITE}Une erreur NewGRF est survenue{NBSP}:{}{STRING}
|
||||
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ne fonctionnera pas avec la version de TTDPatch rapportée par OpenTTD
|
||||
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} est conçu pour la version {STRING} de TTD
|
||||
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} est conçu pour être utilisé avec {STRING}
|
||||
@@ -3437,7 +3436,7 @@ STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Déména
|
||||
STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruire ailleurs le siège de la compagnie pour le prix de 1{NBSP}% de sa valeur.{}Shift-clic pour afficher seulement le coût estimé.
|
||||
STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Détails
|
||||
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Afficher le détail des calculs d'infrastructure
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :Donner de l’argent
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Donner de l’argent
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Donner de l’argent à cette compagnie
|
||||
|
||||
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nouveau visage
|
||||
|
||||
@@ -969,6 +969,7 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Selektea
|
||||
STR_GAME_OPTIONS_RESOLUTION_OTHER :oars
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Interfacegrutte
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normaal
|
||||
@@ -1794,6 +1795,7 @@ STR_FACE_TIE :Strik:
|
||||
STR_FACE_EARRING :Earbel:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Feroarje strik of earbel
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Namme fan spieler:
|
||||
@@ -1840,10 +1842,6 @@ STR_NETWORK_START_SERVER_CAPTION :{WHITE}Start in
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Spulnamme:
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Wachtwurd ynstelle
|
||||
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertearre
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tusken in advertearre (ynternet) of in net-advertearre (LAN) spul
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Nee
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Ja
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} kliïnt{P "" en}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimaal oantal kliïnten:
|
||||
STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} bedriuw{P "" en}
|
||||
@@ -1854,46 +1852,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Sprutsen
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Fier in namme yn foar it networkspul
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Alle
|
||||
STR_NETWORK_LANG_ENGLISH :Ingelsk
|
||||
STR_NETWORK_LANG_GERMAN :Dútsk
|
||||
STR_NETWORK_LANG_FRENCH :Frânsk
|
||||
STR_NETWORK_LANG_BRAZILIAN :Braziliaansk
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgaarsk
|
||||
STR_NETWORK_LANG_CHINESE :Sinees
|
||||
STR_NETWORK_LANG_CZECH :Tsjechysk
|
||||
STR_NETWORK_LANG_DANISH :Deensk
|
||||
STR_NETWORK_LANG_DUTCH :Nederlânsk
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Finsk
|
||||
STR_NETWORK_LANG_HUNGARIAN :Hongaarsk
|
||||
STR_NETWORK_LANG_ICELANDIC :Yslânsk
|
||||
STR_NETWORK_LANG_ITALIAN :Italjaansk
|
||||
STR_NETWORK_LANG_JAPANESE :Japansk
|
||||
STR_NETWORK_LANG_KOREAN :Koreaansk
|
||||
STR_NETWORK_LANG_LITHUANIAN :Litousk
|
||||
STR_NETWORK_LANG_NORWEGIAN :Noarsk
|
||||
STR_NETWORK_LANG_POLISH :Poalsk
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portegeesk
|
||||
STR_NETWORK_LANG_ROMANIAN :Roemeensk
|
||||
STR_NETWORK_LANG_RUSSIAN :Russysk
|
||||
STR_NETWORK_LANG_SLOVAK :Slowaaksk
|
||||
STR_NETWORK_LANG_SLOVENIAN :Sloveensk
|
||||
STR_NETWORK_LANG_SPANISH :Spaansk
|
||||
STR_NETWORK_LANG_SWEDISH :Sweedsk
|
||||
STR_NETWORK_LANG_TURKISH :Turksk
|
||||
STR_NETWORK_LANG_UKRAINIAN :Oekraynsk
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afrikaansk
|
||||
STR_NETWORK_LANG_CROATIAN :Kroätysk
|
||||
STR_NETWORK_LANG_CATALAN :Katalaansk
|
||||
STR_NETWORK_LANG_ESTONIAN :Estlânsk
|
||||
STR_NETWORK_LANG_GALICIAN :Galisysk
|
||||
STR_NETWORK_LANG_GREEK :Gryksk
|
||||
STR_NETWORK_LANG_LATVIAN :Letsk
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
|
||||
|
||||
@@ -1937,14 +1895,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Bedriuw
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Client lyst
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Taskôgje
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nei Bedriuw
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Skoppe
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Tsjin elkenien prate
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Praat mei bedriuw
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Priveeberjocht
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Tsjinner
|
||||
STR_NETWORK_CLIENT :Kliïnt
|
||||
@@ -1174,6 +1174,7 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Tagh dù
|
||||
STR_GAME_OPTIONS_RESOLUTION_OTHER :Gnàthaichte
|
||||
|
||||
|
||||
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Meud na h-eadar-aghaidh
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Tagh am meud airson rud san eadar-aghaidh
|
||||
|
||||
@@ -2080,6 +2081,7 @@ STR_FACE_TIE :Tàidh:
|
||||
STR_FACE_EARRING :Fàinne-chluaise:
|
||||
STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Atharraich an tàidh no an fhàinne-chluaise
|
||||
|
||||
|
||||
# Network server list
|
||||
STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ioma-chluicheadair
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ainm cluicheadair:
|
||||
@@ -2138,10 +2140,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Thèid a
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Suidhich facal-faire
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Dìon an geama agad le facal-faire ach nach eil e ri fhaighinn gu poblach
|
||||
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sanasaichte
|
||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Dèan taghadh eadar geama sanasaichte (eadar-lìon) no gun sanasachadh (lìonra ionadail, LAN)
|
||||
STR_NETWORK_START_SERVER_UNADVERTISED :Chan eil
|
||||
STR_NETWORK_START_SERVER_ADVERTISED :Tha
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} {P chliant chliant cliantan cliant}
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Cliantan air a char as motha:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Tagh an àireamh as motha dhe chliantan. Cha leig thu leas a h-uile slot a lìonadh
|
||||
@@ -2156,46 +2154,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Bidh fio
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Cuir a-steach ainm airson a' gheama lìonraidh
|
||||
|
||||
# Network game languages
|
||||
############ Leave those lines in this order!!
|
||||
STR_NETWORK_LANG_ANY :Cànan sam bith
|
||||
STR_NETWORK_LANG_ENGLISH :Beurla
|
||||
STR_NETWORK_LANG_GERMAN :Gearmailtis
|
||||
STR_NETWORK_LANG_FRENCH :Fraingis
|
||||
STR_NETWORK_LANG_BRAZILIAN :Portagailis Bhraisileach
|
||||
STR_NETWORK_LANG_BULGARIAN :Bulgarais
|
||||
STR_NETWORK_LANG_CHINESE :Sìnis
|
||||
STR_NETWORK_LANG_CZECH :Seacais
|
||||
STR_NETWORK_LANG_DANISH :Danmhairgis
|
||||
STR_NETWORK_LANG_DUTCH :Duitsis
|
||||
STR_NETWORK_LANG_ESPERANTO :Esperanto
|
||||
STR_NETWORK_LANG_FINNISH :Fionnlannais
|
||||
STR_NETWORK_LANG_HUNGARIAN :Ungairis
|
||||
STR_NETWORK_LANG_ICELANDIC :Tìlis
|
||||
STR_NETWORK_LANG_ITALIAN :Eadailtis
|
||||
STR_NETWORK_LANG_JAPANESE :Seapanais
|
||||
STR_NETWORK_LANG_KOREAN :Coirèanais
|
||||
STR_NETWORK_LANG_LITHUANIAN :Liotuainis
|
||||
STR_NETWORK_LANG_NORWEGIAN :Nirribhis
|
||||
STR_NETWORK_LANG_POLISH :Pòlainnis
|
||||
STR_NETWORK_LANG_PORTUGUESE :Portagailis
|
||||
STR_NETWORK_LANG_ROMANIAN :Romàinis
|
||||
STR_NETWORK_LANG_RUSSIAN :Ruisis
|
||||
STR_NETWORK_LANG_SLOVAK :Slòbhacais
|
||||
STR_NETWORK_LANG_SLOVENIAN :Slòbhainis
|
||||
STR_NETWORK_LANG_SPANISH :Spàinntis
|
||||
STR_NETWORK_LANG_SWEDISH :Suainis
|
||||
STR_NETWORK_LANG_TURKISH :Turcais
|
||||
STR_NETWORK_LANG_UKRAINIAN :Ucràinis
|
||||
STR_NETWORK_LANG_AFRIKAANS :Afraganais
|
||||
STR_NETWORK_LANG_CROATIAN :Cròthaisis
|
||||
STR_NETWORK_LANG_CATALAN :Catalanais
|
||||
STR_NETWORK_LANG_ESTONIAN :Eastoinis
|
||||
STR_NETWORK_LANG_GALICIAN :Gailìsis
|
||||
STR_NETWORK_LANG_GREEK :Greugais
|
||||
STR_NETWORK_LANG_LATVIAN :Laitbheis
|
||||
############ End of leave-in-this-order
|
||||
|
||||
# Network game lobby
|
||||
STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Lobaidh nan geamannan ioma-chluicheadair
|
||||
|
||||
@@ -2246,15 +2204,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tha a' c
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liosta nan cliant
|
||||
STR_NETWORK_COMPANY_LIST_SPECTATE :Coimhead air
|
||||
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Companaidh ùr
|
||||
|
||||
# Network client list
|
||||
STR_NETWORK_CLIENTLIST_KICK :Thoir a bhròg dha
|
||||
STR_NETWORK_CLIENTLIST_BAN :Toirmisg
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Bruidhinn ris a h-uile duine
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Bruidhinn ris a' chompanaidh
|
||||
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Teachdaireachd phrìobhaideach
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER :Frithealaiche
|
||||
STR_NETWORK_CLIENT :Cliant
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user