mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2026-09-15 04:49:36 +00:00
Compare commits
93
Commits
16.0-beta1
...
16.0-beta2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e4620d5832 | ||
|
|
cf48f866eb | ||
|
|
3c30f962d4 | ||
|
|
3fb3006dff | ||
|
|
0ab5b6df1b | ||
|
|
a961e64928 | ||
|
|
9f8ac2aaa1 | ||
|
|
0c6de46b4c | ||
|
|
83f20c3375 | ||
|
|
85e6f020f9 | ||
|
|
83ce49f6cb | ||
|
|
44b51a94c5 | ||
|
|
f5e4bd1ed7 | ||
|
|
5303aa6516 | ||
|
|
5403257dca | ||
|
|
05e596661e | ||
|
|
e95f43a720 | ||
|
|
51af63cc9f | ||
|
|
8e89414d9e | ||
|
|
24333d76a9 | ||
|
|
ac51eab537 | ||
|
|
0f09b4b371 | ||
|
|
bf7bb3efaf | ||
|
|
9ba2e386ac | ||
|
|
21d9af637a | ||
|
|
788e112be1 | ||
|
|
bf70c61fb8 | ||
|
|
c18b3a8a04 | ||
|
|
8e08f1a3c5 | ||
|
|
8303b2d694 | ||
|
|
4d7e1385f9 | ||
|
|
d2a3f52257 | ||
|
|
01919af55b | ||
|
|
9c3f5bc375 | ||
|
|
0a9aa3d20b | ||
|
|
8db7db5569 | ||
|
|
d9d7f441db | ||
|
|
76265b8451 | ||
|
|
1310531139 | ||
|
|
0bd12558d4 | ||
|
|
bdbe305771 | ||
|
|
71ca79c6d5 | ||
|
|
afbe2d3070 | ||
|
|
f72a239b97 | ||
|
|
df20fed464 | ||
|
|
af1e9864a0 | ||
|
|
3f557fb673 | ||
|
|
36551ba6b5 | ||
|
|
11f46bc5f4 | ||
|
|
099df1054e | ||
|
|
d3d1de822d | ||
|
|
ef0d26f9f7 | ||
|
|
8a8ece49ec | ||
|
|
a01a2f8401 | ||
|
|
d0dcd1b134 | ||
|
|
a5430717b1 | ||
|
|
c367b10bde | ||
|
|
2934eca24a | ||
|
|
02becd50c5 | ||
|
|
3ba0706a5c | ||
|
|
1acbb1c654 | ||
|
|
6f6551c08d | ||
|
|
b4d16d319f | ||
|
|
8e637cefed | ||
|
|
5923d105ec | ||
|
|
a76ba0d3d4 | ||
|
|
b7d07252e7 | ||
|
|
f8af6bbc2f | ||
|
|
8b83bac31f | ||
|
|
b02242d5fc | ||
|
|
4344ffb7a0 | ||
|
|
4e9645e9d0 | ||
|
|
947767a2ff | ||
|
|
4b93bd74ef | ||
|
|
061e5c9cd3 | ||
|
|
5b3b7995bb | ||
|
|
3666eb23a1 | ||
|
|
f9e6b8b7dd | ||
|
|
2a6a65662d | ||
|
|
b7e693ced6 | ||
|
|
b9986cdadf | ||
|
|
dc87cd3d7a | ||
|
|
8ca99f96ee | ||
|
|
790a6903af | ||
|
|
98dfc7376c | ||
|
|
cc92e3d421 | ||
|
|
42fe1133ad | ||
|
|
fc0ad4bb0a | ||
|
|
5bb87d39b7 | ||
|
|
f8ad1a4999 | ||
|
|
f0a1b507fe | ||
|
|
2f4ae80226 | ||
|
|
11e713ce9a |
@@ -14,7 +14,7 @@ jobs:
|
||||
container:
|
||||
# If you change this version, change the numbers in the cache step,
|
||||
# .github/workflows/preview-build.yml (2x) and os/emscripten/Dockerfile too.
|
||||
image: emscripten/emsdk:3.1.57
|
||||
image: emscripten/emsdk:6.0.1
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -24,20 +24,13 @@ jobs:
|
||||
run: |
|
||||
git config --global --add safe.directory ${GITHUB_WORKSPACE}
|
||||
|
||||
- name: Update to modern GCC
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y gcc-12 g++-12
|
||||
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100
|
||||
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100
|
||||
|
||||
- name: Setup cache
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
# If you change this version, change the numbers in the image configuration step,
|
||||
# .github/workflows/preview-build.yml (2x) and os/emscripten/Dockerfile too.
|
||||
path: /emsdk/upstream/emscripten/cache
|
||||
key: 3.1.57-${{ runner.os }}
|
||||
key: 6.0.1-${{ runner.os }}
|
||||
|
||||
- name: Add liblzma support
|
||||
run: |
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
container:
|
||||
# If you change this version, change the numbers in the cache step,
|
||||
# .github/workflows/ci-emscripten.yml (2x) and os/emscripten/Dockerfile too.
|
||||
image: emscripten/emsdk:3.1.57
|
||||
image: emscripten/emsdk:6.0.1
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -24,20 +24,13 @@ jobs:
|
||||
git config --global --add safe.directory ${GITHUB_WORKSPACE}
|
||||
git checkout -b pr${{ github.event.pull_request.number }}
|
||||
|
||||
- name: Update to modern GCC
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y gcc-12 g++-12
|
||||
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100
|
||||
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100
|
||||
|
||||
- name: Setup cache
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: /emsdk/upstream/emscripten/cache
|
||||
# If you change this version, change the numbers in the image configuration step,
|
||||
# .github/workflows/ci-emscripten.yml (2x) and os/emscripten/Dockerfile too.
|
||||
key: 3.1.57-${{ runner.os }}
|
||||
key: 6.0.1-${{ runner.os }}
|
||||
|
||||
- name: Add liblzma support
|
||||
run: |
|
||||
|
||||
+1
-1
@@ -370,7 +370,7 @@ if(EMSCRIPTEN)
|
||||
add_definitions(-s DISABLE_EXCEPTION_CATCHING=0)
|
||||
|
||||
# Export functions to Javascript.
|
||||
target_link_libraries(WASM::WASM INTERFACE "-s EXPORTED_FUNCTIONS='[\"_main\", \"_em_openttd_add_server\"]' -s EXPORTED_RUNTIME_METHODS='[\"cwrap\"]'")
|
||||
target_link_libraries(WASM::WASM INTERFACE "-s EXPORTED_FUNCTIONS='[\"_main\", \"_em_openttd_add_server\"]' -s EXPORTED_RUNTIME_METHODS='[\"cwrap\", \"HEAPU8\"]'")
|
||||
|
||||
# Preload all the files we generate during build.
|
||||
# As we do not compile with FreeType / FontConfig, we also have no way to
|
||||
|
||||
+111
-97
@@ -1,104 +1,118 @@
|
||||
## 16.x
|
||||
|
||||
### 16.0-beta2 (2026-07-12)
|
||||
|
||||
- Feature: Allow bridges over depots (#15836)
|
||||
- Feature: Increase maximum number of vehicles per type to 10,000 (#15810)
|
||||
- Feature: Add and remove whole classes to picker collections (#15808)
|
||||
- Feature: Station list can be filtered by name (#15772)
|
||||
- Change: Use "bridge ... too low" message for bridgeable objects (#15838)
|
||||
- Fix: Use meaningful tooltips for graph range toggle buttons (#15842)
|
||||
- Fix #15826: Exclude allow any/all options for AI companies (#15834)
|
||||
- Fix #7992: Fix for catenary road and tram catenary sprites not being drawn on bridges (#15811)
|
||||
- Fix #15784: Crash due to incorrect road build toolbar when switching road tram types (#15789)
|
||||
- Fix: [NewGRF] Make 'signals on traffic side' consistent with explicit settings (#15661)
|
||||
- Fix: [Win32] Explicitly initialize COM in Win32 video driver (#15553)
|
||||
|
||||
### 16.0-beta1 (2026-06-25)
|
||||
|
||||
Feature: Add default road and tram selection (#15585)
|
||||
Feature: Trains with an engine on the rear can drive backwards when reversing (#15379)
|
||||
Feature: Add worldgen setting for average height of terrain (#14989)
|
||||
Feature: Add text filter to dropdown lists (#14842)
|
||||
Feature: User-defined collections of saved items in the picker window (#14813)
|
||||
Feature: Configurable sign text colors in scenario editor (#14743)
|
||||
Feature: Allow placing an area of 1x1 houses in scenario editor (#14708)
|
||||
Feature: Scale cargo payment aging rate (#14635)
|
||||
Feature: Support automatic detection of data from Atari's Transport Tycoon Deluxe re-release (#15483)
|
||||
Add: [NewGRF] Implement custom waypoint layouts by callback 24 (#15616)
|
||||
Add: List 'Place object' in landscaping dropdown (#15609)
|
||||
Add: Setting to disable aircraft range limit (#15433)
|
||||
Add: Show maximum reliability in vehicle info (#15401)
|
||||
Add: Lower the Send To Depot button when a vehicle is on its way to one (#15397)
|
||||
Add: Setting to disallow train magic flip, and reverse at reduced speed (#15391)
|
||||
Add: [NewGRF] Variable for when a train is driving backwards (#15379)
|
||||
Add: [NewGRF] Flag to allow unpowered wagon to lead train when backing up (#15379)
|
||||
Add: [NewGRF] Station flag to divide cargo by area instead of perimeter (#15253)
|
||||
Add: Company allow-list can be set to allow anyone (#15204)
|
||||
Add: Record history of cargo delivered to towns (#15184)
|
||||
Add: Show additional vehicle details based on sort criteria (#15158)
|
||||
Add: Setting to control minimum distance between towns (#14893)
|
||||
Change: Selecting Rail/Roadtype updates build toolbar instead of closing and reopening (#15589)
|
||||
Change: Default setting to review orders excludes stopped vehicles (#15565)
|
||||
Change: Most used rail type takes ownership into account (#15489)
|
||||
Change: Test font for eligibility before adding as fallback (#15412)
|
||||
Change: Clarify max age shown in vehicle info window (#15403)
|
||||
Change: Show "Delete All" in order window delete button when applicable (#15370)
|
||||
Change: Make continuation error messages consistent (#15328)
|
||||
Change: Distinguish between 'Flat land required' and 'Land sloped in wrong direction' for building depots (#15327)
|
||||
Change: Allow subsidies with CargoDist (#15189)
|
||||
Change: Removing river tiles reduces local authority rating (#15180)
|
||||
Change: Protect rivers from removal when terraforming (#15176)
|
||||
Change: [Script] Reformat callstack output (#15171)
|
||||
Change: Apply slightly more padding to image-text buttons (#15077)
|
||||
Change: [NewGRF] Display rail and road type speed limit text in yellow (#15076)
|
||||
Change: Make smallmap show infinite water, if enabled (#15041)
|
||||
Change: Add support for next/previous/first/last rail/road/tram type hotkeys (#15028)
|
||||
Change: Allow rocks on desert tiles (#14979)
|
||||
Change: [Script] Include Array/PriorityQueye/ScriptList contents in script memory allocation total (#14954)
|
||||
Change: [Script] Various ScriptList methods are now suspendable (#14943, #14762)
|
||||
Change: Improve generation of coasts at map edges (#14868)
|
||||
Change: Show only selected badge in badge filter dropdown buttons (#14855)
|
||||
Change: River springs must be surrounded by hills (#14845)
|
||||
Change: Vehicles loading at stations don't lose reliability (#14841)
|
||||
Change: Generate lighthouses along coasts and near towns (#14828)
|
||||
Change: Transmitter object only spawns after original base year (#14786)
|
||||
Change: Share one window for engine preview pop ups (#14703)
|
||||
Fix: [NewGRF] Town name language incorrectly decoded (#15691)
|
||||
Fix #15606: Undefined behaviour may cause buttons to be invisible (#15686)
|
||||
Fix #14975: Show correct tile for tunnel error message (#15660)
|
||||
Fix: [NewGRF] Incorrect language IDs passed to TranslateTTDPatchCodes (#15655)
|
||||
Fix: Scenario editor random industry generation (#15626)
|
||||
Fix: [NewGRF] Ignore blocked waypoint tiles (#15620)
|
||||
Fix: [NewGRF] Pylons and no-wires flags were ignored for waypoint tiles (#15619)
|
||||
Fix: Dedicated server signal handling for SIGTERM/SIGINT/SIGQUIT (#15607)
|
||||
Fix: [NewGRF] Potential out-of-bounds read when performing GRM (#15600)
|
||||
Fix: Badge offsets not ignored when determining width (#15588)
|
||||
Fix: Account for NewGRF's global train width when drawing dual-head engines (#15587)
|
||||
Fix: Station list facility buttons do not produce click sound (#15569)
|
||||
Fix #15495: Fix incorrectly built default waypoints (#15562)
|
||||
Fix #15495: Unable to build bridge over default waypoints (#15562)
|
||||
Fix #15235: Make GameScripts obey town road construction setting (#15559)
|
||||
Fix: Crash when loading crash save with no viewport coordinates (#15550)
|
||||
Fix #15520: Fix viewport snap back on stop following vehicle (#15520) (#15531)
|
||||
Fix: Buttons for choosing engine in preview window show for single engine (#15514)
|
||||
Fix #15511: Vehicle passed to commands must be a company buildable type (#15512)
|
||||
Fix #15497: [Script] ScriptController::Break not pausing in TestMode (#15498)
|
||||
Fix: Coordinate transformation for JSON town placement when anticlockwise (#15490)
|
||||
Fix: NewGRF debug handler for towns in wrong place since badges (#15467)
|
||||
Fix: Object id overrides were not reset between games (#15465)
|
||||
Fix: Debug saveload errors were clobbered (#15452)
|
||||
Fix: Refresh client list when client renames (#15439)
|
||||
Fix #15428: [Fluidsynth] Treat configured synth.gain as maximum instead of hardcoded value (#15429)
|
||||
Fix: Refresh string width cache for all loaded fonts (#15427)
|
||||
Fix: Typo in Hungarian town name suffix ("kak" -> "lak") (#15421)
|
||||
Fix: [NewGRF] Variable 0x69 has not been added for waypoints (#15396)
|
||||
Fix: Dropdown text filter could interfere with hotkeys after closing (#15395)
|
||||
Fix: Rejecting or accepting engine preview incorrectly closed preview window (#15378)
|
||||
Fix #15318: Nonsensical error message when trying to send aircraft to hangar with no usable airports (#15334)
|
||||
Fix #15234: Null pointer dereference opening sign edit window when sign 0 does not exist (#15236)
|
||||
Fix: [GS] Docs are missing or do not match the code (#15230)
|
||||
Fix: Off by one and redundant logic in snowy road checks (#15214)
|
||||
Fix #15137: Roads built on steep slopes at the minimum snow level height have inconsistent snowiness (#15190)
|
||||
Fix: Station view window fold/unfold not refreshing scrollbar (#15187)
|
||||
Fix: Use consistent description for invalid orders (#15177)
|
||||
Fix: [Script] Give GetPrimary/SecondaryLiveryColour preconditions (#15169)
|
||||
Fix: Cocoa video driver did not register (#15145)
|
||||
Fix: MacOS version detection was broken (#15145)
|
||||
Fix #13600: Make terraform click+draggable in scenario editor (#15135)
|
||||
Fix: [Script] Map some error strings to existing errors (#15113)
|
||||
Fix: Allow to build buoys at (0x0) (#14983)
|
||||
Fix #14610: Do not treat aircraft with only depot orders as having valid orders (#14961)
|
||||
Fix #12937: Allow the computer to go to sleep while the game is paused (#14948)
|
||||
Fix: Company query popups do not update in multiplayer (#14947)
|
||||
Fix #14892: Potential crash when logging fonts for survey (#14896)
|
||||
Fix #14827: Store random trigger information per-tile (#14830)
|
||||
- Feature: Add default road and tram selection (#15585)
|
||||
- Feature: Trains with an engine on the rear can drive backwards when reversing (#15379)
|
||||
- Feature: Add worldgen setting for average height of terrain (#14989)
|
||||
- Feature: Add text filter to dropdown lists (#14842)
|
||||
- Feature: User-defined collections of saved items in the picker window (#14813)
|
||||
- Feature: Configurable sign text colors in scenario editor (#14743)
|
||||
- Feature: Allow placing an area of 1x1 houses in scenario editor (#14708)
|
||||
- Feature: Scale cargo payment aging rate (#14635)
|
||||
- Feature: Support automatic detection of data from Atari's Transport Tycoon Deluxe re-release (#15483)
|
||||
- Add: [NewGRF] Implement custom waypoint layouts by callback 24 (#15616)
|
||||
- Add: List 'Place object' in landscaping dropdown (#15609)
|
||||
- Add: Setting to disable aircraft range limit (#15433)
|
||||
- Add: Show maximum reliability in vehicle info (#15401)
|
||||
- Add: Lower the Send To Depot button when a vehicle is on its way to one (#15397)
|
||||
- Add: Setting to disallow train magic flip, and reverse at reduced speed (#15391)
|
||||
- Add: [NewGRF] Variable for when a train is driving backwards (#15379)
|
||||
- Add: [NewGRF] Flag to allow unpowered wagon to lead train when backing up (#15379)
|
||||
- Add: [NewGRF] Station flag to divide cargo by area instead of perimeter (#15253)
|
||||
- Add: Company allow-list can be set to allow anyone (#15204)
|
||||
- Add: Record history of cargo delivered to towns (#15184)
|
||||
- Add: Show additional vehicle details based on sort criteria (#15158)
|
||||
- Add: Setting to control minimum distance between towns (#14893)
|
||||
- Change: Selecting Rail/Roadtype updates build toolbar instead of closing and reopening (#15589)
|
||||
- Change: Default setting to review orders excludes stopped vehicles (#15565)
|
||||
- Change: Most used rail type takes ownership into account (#15489)
|
||||
- Change: Test font for eligibility before adding as fallback (#15412)
|
||||
- Change: Clarify max age shown in vehicle info window (#15403)
|
||||
- Change: Show "Delete All" in order window delete button when applicable (#15370)
|
||||
- Change: Make continuation error messages consistent (#15328)
|
||||
- Change: Distinguish between 'Flat land required' and 'Land sloped in wrong direction' for building depots (#15327)
|
||||
- Change: Allow subsidies with CargoDist (#15189)
|
||||
- Change: Removing river tiles reduces local authority rating (#15180)
|
||||
- Change: Protect rivers from removal when terraforming (#15176)
|
||||
- Change: [Script] Reformat callstack output (#15171)
|
||||
- Change: Apply slightly more padding to image-text buttons (#15077)
|
||||
- Change: [NewGRF] Display rail and road type speed limit text in yellow (#15076)
|
||||
- Change: Make smallmap show infinite water, if enabled (#15041)
|
||||
- Change: Add support for next/previous/first/last rail/road/tram type hotkeys (#15028)
|
||||
- Change: Allow rocks on desert tiles (#14979)
|
||||
- Change: [Script] Include Array/PriorityQueye/ScriptList contents in script memory allocation total (#14954)
|
||||
- Change: [Script] Various ScriptList methods are now suspendable (#14943, #14762)
|
||||
- Change: Improve generation of coasts at map edges (#14868)
|
||||
- Change: Show only selected badge in badge filter dropdown buttons (#14855)
|
||||
- Change: River springs must be surrounded by hills (#14845)
|
||||
- Change: Vehicles loading at stations don't lose reliability (#14841)
|
||||
- Change: Generate lighthouses along coasts and near towns (#14828)
|
||||
- Change: Transmitter object only spawns after original base year (#14786)
|
||||
- Change: Share one window for engine preview pop ups (#14703)
|
||||
- Fix: [NewGRF] Town name language incorrectly decoded (#15691)
|
||||
- Fix #15606: Undefined behaviour may cause buttons to be invisible (#15686)
|
||||
- Fix #14975: Show correct tile for tunnel error message (#15660)
|
||||
- Fix: [NewGRF] Incorrect language IDs passed to TranslateTTDPatchCodes (#15655)
|
||||
- Fix: Scenario editor random industry generation (#15626)
|
||||
- Fix: [NewGRF] Ignore blocked waypoint tiles (#15620)
|
||||
- Fix: [NewGRF] Pylons and no-wires flags were ignored for waypoint tiles (#15619)
|
||||
- Fix: Dedicated server signal handling for SIGTERM/SIGINT/SIGQUIT (#15607)
|
||||
- Fix: [NewGRF] Potential out-of-bounds read when performing GRM (#15600)
|
||||
- Fix: Badge offsets not ignored when determining width (#15588)
|
||||
- Fix: Account for NewGRF's global train width when drawing dual-head engines (#15587)
|
||||
- Fix: Station list facility buttons do not produce click sound (#15569)
|
||||
- Fix #15495: Fix incorrectly built default waypoints (#15562)
|
||||
- Fix #15495: Unable to build bridge over default waypoints (#15562)
|
||||
- Fix #15235: Make GameScripts obey town road construction setting (#15559)
|
||||
- Fix: Crash when loading crash save with no viewport coordinates (#15550)
|
||||
- Fix #15520: Fix viewport snap back on stop following vehicle (#15520) (#15531)
|
||||
- Fix: Buttons for choosing engine in preview window show for single engine (#15514)
|
||||
- Fix #15511: Vehicle passed to commands must be a company buildable type (#15512)
|
||||
- Fix #15497: [Script] ScriptController::Break not pausing in TestMode (#15498)
|
||||
- Fix: Coordinate transformation for JSON town placement when anticlockwise (#15490)
|
||||
- Fix: NewGRF debug handler for towns in wrong place since badges (#15467)
|
||||
- Fix: Object id overrides were not reset between games (#15465)
|
||||
- Fix: Debug saveload errors were clobbered (#15452)
|
||||
- Fix: Refresh client list when client renames (#15439)
|
||||
- Fix #15428: [Fluidsynth] Treat configured synth.gain as maximum instead of hardcoded value (#15429)
|
||||
- Fix: Refresh string width cache for all loaded fonts (#15427)
|
||||
- Fix: Typo in Hungarian town name suffix ("kak" -> "lak") (#15421)
|
||||
- Fix: [NewGRF] Variable 0x69 has not been added for waypoints (#15396)
|
||||
- Fix: Dropdown text filter could interfere with hotkeys after closing (#15395)
|
||||
- Fix: Rejecting or accepting engine preview incorrectly closed preview window (#15378)
|
||||
- Fix #15318: Nonsensical error message when trying to send aircraft to hangar with no usable airports (#15334)
|
||||
- Fix #15234: Null pointer dereference opening sign edit window when sign 0 does not exist (#15236)
|
||||
- Fix: [GS] Docs are missing or do not match the code (#15230)
|
||||
- Fix: Off by one and redundant logic in snowy road checks (#15214)
|
||||
- Fix #15137: Roads built on steep slopes at the minimum snow level height have inconsistent snowiness (#15190)
|
||||
- Fix: Station view window fold/unfold not refreshing scrollbar (#15187)
|
||||
- Fix: Use consistent description for invalid orders (#15177)
|
||||
- Fix: [Script] Give GetPrimary/SecondaryLiveryColour preconditions (#15169)
|
||||
- Fix: Cocoa video driver did not register (#15145)
|
||||
- Fix: MacOS version detection was broken (#15145)
|
||||
- Fix #13600: Make terraform click+draggable in scenario editor (#15135)
|
||||
- Fix: [Script] Map some error strings to existing errors (#15113)
|
||||
- Fix: Allow to build buoys at (0x0) (#14983)
|
||||
- Fix #14610: Do not treat aircraft with only depot orders as having valid orders (#14961)
|
||||
- Fix #12937: Allow the computer to go to sleep while the game is paused (#14948)
|
||||
- Fix: Company query popups do not update in multiplayer (#14947)
|
||||
- Fix #14892: Potential crash when logging fonts for survey (#14896)
|
||||
- Fix #14827: Store random trigger information per-tile (#14830)
|
||||
|
||||
## 15.x
|
||||
|
||||
|
||||
+16
-16
@@ -69,19 +69,19 @@ An example of a valid tag is `PLYR` when looking at it via ASCII, which contains
|
||||
`[4..4]` - Next follows a byte where the lower 4 bits contain the type.
|
||||
The possible valid types are:
|
||||
|
||||
- `0` - `CH_RIFF` - This chunk is a binary blob.
|
||||
- `1` - `CH_ARRAY` - This chunk is a list of items.
|
||||
- `2` - `CH_SPARSE_ARRAY` - This chunk is a list of items.
|
||||
- `3` - `CH_TABLE` - This chunk is self-describing list of items.
|
||||
- `4` - `CH_SPARSE_TABLE` - This chunk is self-describing list of items.
|
||||
- `0` - `ChunkType::Riff` - This chunk is a binary blob.
|
||||
- `1` - `ChunkType::Array` - This chunk is a list of items.
|
||||
- `2` - `ChunkType::SparseArray` - This chunk is a list of items.
|
||||
- `3` - `ChunkType::Table` - This chunk is self-describing list of items.
|
||||
- `4` - `ChunkType::SparseTable` - This chunk is self-describing list of items.
|
||||
|
||||
Now per type the format is (slightly) different.
|
||||
|
||||
### CH_RIFF
|
||||
### ChunkType::Riff
|
||||
|
||||
(since savegame version 295, this chunk type is only used for MAP-chunks, containing bit-information about each tile on the map)
|
||||
|
||||
A `CH_RIFF` starts with an `uint24` which together with the upper-bits of the type defines the length of the chunk.
|
||||
A `ChunkType::Riff` starts with an `uint24` which together with the upper-bits of the type defines the length of the chunk.
|
||||
In pseudo-code:
|
||||
|
||||
```
|
||||
@@ -94,11 +94,11 @@ if type == 0
|
||||
The next `length` bytes are part of the chunk.
|
||||
What those bytes mean depends on the tag of the chunk; further details per chunk can be found in the source-code.
|
||||
|
||||
### CH_ARRAY / CH_SPARSE_ARRAY
|
||||
### ChunkType::Array / ChunkType::SparseArray
|
||||
|
||||
(this chunk type is deprecated since savegame version 295 and is no longer in use)
|
||||
|
||||
`[0..G1]` - A `CH_ARRAY` / `CH_SPARSE_ARRAY` starts with a `gamma`, indicating the size of the next item plus one.
|
||||
`[0..G1]` - A `ChunkType::Array` / `ChunkType::SparseArray` starts with a `gamma`, indicating the size of the next item plus one.
|
||||
If this size value is zero, it indicates the end of the list.
|
||||
This indicates the full length of the next item minus one.
|
||||
In psuedo-code:
|
||||
@@ -111,21 +111,21 @@ loop
|
||||
read <size> bytes
|
||||
```
|
||||
|
||||
`[]` - For `CH_ARRAY` there is an implicit index.
|
||||
`[]` - For `ChunkType::Array` there is an implicit index.
|
||||
The loop starts at zero, and every iteration adds one to the index.
|
||||
For entries in the game that were not allocated, the `size` will be zero.
|
||||
|
||||
`[G1+1..G2]` - For `CH_SPARSE_ARRAY` there is an explicit index.
|
||||
`[G1+1..G2]` - For `ChunkType::SparseArray` there is an explicit index.
|
||||
The `gamma` following the size indicates the index.
|
||||
|
||||
The content of the item is a binary blob, and similar to `CH_RIFF`, it depends on the tag of the chunk what it means.
|
||||
The content of the item is a binary blob, and similar to `ChunkType::Riff`, it depends on the tag of the chunk what it means.
|
||||
Please check the source-code for further details.
|
||||
|
||||
### CH_TABLE / CH_SPARSE_TABLE
|
||||
### ChunkType::Table / ChunkType::SparseTable
|
||||
|
||||
(this chunk type only exists since savegame version 295)
|
||||
|
||||
Both `CH_TABLE` and `CH_SPARSE_TABLE` are very similar to `CH_ARRAY` / `CH_SPARSE_ARRAY` respectively.
|
||||
Both `ChunkType::Table` and `ChunkType::SparseTable` are very similar to `ChunkType::Array` / `ChunkType::SparseArray` respectively.
|
||||
The only change is that the chunk starts with a header.
|
||||
This header describes the chunk in details; with the header you know the meaning of each byte in the binary blob that follows.
|
||||
|
||||
@@ -168,7 +168,7 @@ struct | substruct3
|
||||
The headers will be, in order: `table`, `substruct1`, `substruct3`, `substruct2`, each ending with a `type` is zero field.
|
||||
|
||||
After reading all the fields of all the headers, there is a list of records.
|
||||
To read this, see `CH_ARRAY` / `CH_SPARSE_ARRAY` for details.
|
||||
To read this, see `ChunkType::Array` / `ChunkType::SparseArray` for details.
|
||||
|
||||
As each `type` has a well defined length, you can read the records even without knowing anything about the chunk-tag yourself.
|
||||
|
||||
@@ -187,7 +187,7 @@ The prefix is strongly advised to avoid conflicts with future-settings in an unp
|
||||
|
||||
## Scripts custom data format
|
||||
|
||||
Script chunks (`AIPL` and `GSDT`) use `CH_TABLE` chunk type.
|
||||
Script chunks (`AIPL` and `GSDT`) use `ChunkType::Table` chunk type.
|
||||
|
||||
At the end of each record there's an `uint8` to indicate if there's custom data (1) or not (0).
|
||||
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
# If you change this version, change the numbers in .github/workflows/ci-emscripten.yml (2x)
|
||||
# and .github/workflows/preview-build.yml (2x) too.
|
||||
FROM emscripten/emsdk:3.1.57
|
||||
FROM emscripten/emsdk:6.0.1
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y gcc-12 g++-12 \
|
||||
&& update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100 \
|
||||
&& update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100 \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
||||
@@ -2300,6 +2300,67 @@ function Regression::PriorityQueue()
|
||||
print(" Count(): " + queue.Count());
|
||||
}
|
||||
|
||||
function Regression::Terraforming()
|
||||
{
|
||||
print("");
|
||||
print("--Terraforming--");
|
||||
print(" DemolishTile(): " + AITile.DemolishTile(4033));
|
||||
print(" DemolishTile(): " + AITile.DemolishTile(60766));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" LowerTile(): " + AITile.LowerTile(8205, AITile.SLOPE_ENW));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(8205, AITile.SLOPE_ENW));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" LowerTile(): " + AITile.LowerTile(8205, AITile.SLOPE_ENW));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" LowerTile(): " + AITile.LowerTile(4113, AITile.SLOPE_SW));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(5902, AITile.SLOPE_NE));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(7958, AITile.SLOPE_SE));
|
||||
print(" LowerTile(): " + AITile.LowerTile(7958, AITile.SLOPE_NE));
|
||||
print(" LowerTile(): " + AITile.LowerTile(7958, AITile.SLOPE_SE));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(7958, AITile.SLOPE_SE));
|
||||
print(" LowerTile(): " + AITile.LowerTile(7958, AITile.SLOPE_EW));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" LowerTile(): " + AITile.LowerTile(33924, AITile.SLOPE_ELEVATED));
|
||||
print(" LowerTile(): " + AITile.LowerTile(33923, AITile.SLOPE_ELEVATED));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(34193, AITile.SLOPE_ELEVATED));
|
||||
print(" LowerTile(): " + AITile.LowerTile(34193, AITile.SLOPE_ELEVATED));
|
||||
print(" LowerTile(): " + AITile.LowerTile(34192, AITile.SLOPE_NE));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(34193, AITile.SLOPE_ELEVATED));
|
||||
print(" LowerTile(): " + AITile.LowerTile(34192, AITile.SLOPE_NE));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(5687, AITile.SLOPE_N));
|
||||
print(" LowerTile(): " + AITile.LowerTile(5687, AITile.SLOPE_SE));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(23596, AITile.SLOPE_NE));
|
||||
print(" LowerTile(): " + AITile.LowerTile(23596, AITile.SLOPE_NE));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(28536, AITile.SLOPE_E));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(28536, AITile.SLOPE_E));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" LevelTiles(): " + AITile.LevelTiles(28536, 29053));
|
||||
print(" LevelTiles(): " + AITile.LevelTiles(28536, 29053));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" LevelTiles(): " + AITile.LevelTiles(22348, 24405));
|
||||
print(" LevelTiles(): " + AITile.LevelTiles(27717, 29772));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" LowerTile(): " + AITile.LowerTile(61534, AITile.SLOPE_W));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(61534, AITile.SLOPE_NE));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(61534, AITile.SLOPE_N));
|
||||
print(" LowerTile(): " + AITile.LowerTile(61534, AITile.SLOPE_W));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(61534, AITile.SLOPE_N));
|
||||
print(" LowerTile(): " + AITile.LowerTile(61533, AITile.SLOPE_E));
|
||||
print(" LowerTile(): " + AITile.LowerTile(61534, AITile.SLOPE_E));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(4033, AITile.SLOPE_S));
|
||||
print(" LowerTile(): " + AITile.LowerTile(4033, AITile.SLOPE_S));
|
||||
print(" LowerTile(): " + AITile.LowerTile(4033, AITile.SLOPE_E));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(4033, AITile.SLOPE_E));
|
||||
print(" RaiseTile(): " + AITile.RaiseTile(4033, AITile.SLOPE_NWS));
|
||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||
}
|
||||
|
||||
function Regression::Start()
|
||||
{
|
||||
this.TestInit();
|
||||
@@ -2398,6 +2459,7 @@ function Regression::Start()
|
||||
|
||||
this.Math();
|
||||
this.PriorityQueue();
|
||||
this.Terraforming();
|
||||
|
||||
/* Check Valuate() is actually limited, MUST BE THE LAST TEST. */
|
||||
print("--Valuate() with excessive CPU usage--")
|
||||
|
||||
@@ -10872,6 +10872,63 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
Clear(): (null : 0x00000000)
|
||||
IsEmpty(): true
|
||||
Count(): 0
|
||||
|
||||
--Terraforming--
|
||||
DemolishTile(): true
|
||||
DemolishTile(): true
|
||||
GetBankBalance(): 1999216685
|
||||
LowerTile(): false
|
||||
RaiseTile(): true
|
||||
GetBankBalance(): 1999156124
|
||||
LowerTile(): true
|
||||
GetBankBalance(): 1999155563
|
||||
LowerTile(): true
|
||||
RaiseTile(): true
|
||||
GetBankBalance(): 1999124603
|
||||
RaiseTile(): false
|
||||
LowerTile(): false
|
||||
LowerTile(): true
|
||||
RaiseTile(): true
|
||||
LowerTile(): true
|
||||
GetBankBalance(): 1999122125
|
||||
LowerTile(): false
|
||||
LowerTile(): true
|
||||
RaiseTile(): false
|
||||
LowerTile(): true
|
||||
LowerTile(): false
|
||||
RaiseTile(): true
|
||||
LowerTile(): true
|
||||
GetBankBalance(): 1999116574
|
||||
RaiseTile(): true
|
||||
LowerTile(): true
|
||||
GetBankBalance(): 1999100519
|
||||
RaiseTile(): false
|
||||
LowerTile(): true
|
||||
GetBankBalance(): 1999098443
|
||||
RaiseTile(): true
|
||||
RaiseTile(): true
|
||||
GetBankBalance(): 1999088221
|
||||
LevelTiles(): true
|
||||
LevelTiles(): false
|
||||
GetBankBalance(): 1999078593
|
||||
LevelTiles(): true
|
||||
LevelTiles(): true
|
||||
GetBankBalance(): 1998792514
|
||||
LowerTile(): false
|
||||
RaiseTile(): true
|
||||
RaiseTile(): false
|
||||
LowerTile(): true
|
||||
GetBankBalance(): 1998786415
|
||||
RaiseTile(): true
|
||||
LowerTile(): true
|
||||
LowerTile(): false
|
||||
GetBankBalance(): 1998785248
|
||||
RaiseTile(): false
|
||||
LowerTile(): true
|
||||
LowerTile(): false
|
||||
RaiseTile(): false
|
||||
RaiseTile(): true
|
||||
GetBankBalance(): 1998738752
|
||||
--Valuate() with excessive CPU usage--
|
||||
constructor failed with: excessive CPU usage in list filter function
|
||||
Your script made an error: excessive CPU usage in valuator function
|
||||
@@ -10880,7 +10937,7 @@ CALLSTACK WITH LOCALS
|
||||
*FUNCTION [Valuate()] Valuate line [5]
|
||||
[args] ARRAY
|
||||
[this] INSTANCE
|
||||
*FUNCTION [Start()] regression/main.nut line [2412]
|
||||
*FUNCTION [Start()] regression/main.nut line [2474]
|
||||
[Infinite] CLOSURE
|
||||
[list] INSTANCE
|
||||
[this] INSTANCE
|
||||
|
||||
@@ -336,6 +336,7 @@ add_files(
|
||||
newgrf_town.h
|
||||
newgrf_townname.cpp
|
||||
newgrf_townname.h
|
||||
newgrf_type.h
|
||||
news_cmd.h
|
||||
news_func.h
|
||||
news_gui.cpp
|
||||
|
||||
+13
-3
@@ -69,6 +69,16 @@
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the \c PerformanceElement for the AI of the given company.
|
||||
* @param company The company to get the PerformanceElement for.
|
||||
* @return The \c PerformanceElement.
|
||||
*/
|
||||
static constexpr PerformanceElement GetAIPerformanceElement(CompanyID company)
|
||||
{
|
||||
return static_cast<PerformanceElement>(PerformanceElement::AI0 + company);
|
||||
}
|
||||
|
||||
/* static */ void AI::GameLoop()
|
||||
{
|
||||
/* If we are in networking, only servers run this function, and that only if it is allowed */
|
||||
@@ -81,7 +91,7 @@
|
||||
|
||||
for (const Company *c : Company::Iterate()) {
|
||||
if (c->is_ai) {
|
||||
PerformanceMeasurer framerate((PerformanceElement)(PFE_AI0 + c->index));
|
||||
PerformanceMeasurer framerate(GetAIPerformanceElement(c->index));
|
||||
AutoRestoreBackup cur_company(_current_company, c->index);
|
||||
c->ai_instance->GameLoop();
|
||||
/* Occasionally collect garbage; every 255 ticks do one company.
|
||||
@@ -90,7 +100,7 @@
|
||||
c->ai_instance->CollectGarbage();
|
||||
}
|
||||
} else {
|
||||
PerformanceMeasurer::SetInactive((PerformanceElement)(PFE_AI0 + c->index));
|
||||
PerformanceMeasurer::SetInactive(GetAIPerformanceElement(c->index));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -103,7 +113,7 @@
|
||||
/* static */ void AI::Stop(CompanyID company)
|
||||
{
|
||||
if (_networking && !_network_server) return;
|
||||
PerformanceMeasurer::SetInactive((PerformanceElement)(PFE_AI0 + company));
|
||||
PerformanceMeasurer::SetInactive(GetAIPerformanceElement(company));
|
||||
|
||||
AutoRestoreBackup cur_company(_current_company, company);
|
||||
Company *c = Company::Get(company);
|
||||
|
||||
@@ -2141,7 +2141,7 @@ bool Aircraft::Tick()
|
||||
{
|
||||
if (!this->IsNormalAircraft()) return true;
|
||||
|
||||
PerformanceAccumulator framerate(PFE_GL_AIRCRAFT);
|
||||
PerformanceAccumulator framerate(PerformanceElement::GameLoopAircraft);
|
||||
|
||||
this->tick_counter++;
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ void AddAnimatedTile(TileIndex tile, bool mark_dirty)
|
||||
*/
|
||||
void AnimateAnimatedTiles()
|
||||
{
|
||||
PerformanceAccumulator landscape_framerate(PFE_GL_LANDSCAPE);
|
||||
PerformanceAccumulator landscape_framerate(PerformanceElement::GameLoopLandscape);
|
||||
|
||||
for (auto it = std::begin(_animated_tiles); it != std::end(_animated_tiles); /* nothing */) {
|
||||
TileIndex &tile = *it;
|
||||
|
||||
@@ -357,7 +357,7 @@ static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehic
|
||||
|
||||
/* Build the new vehicle */
|
||||
VehicleID new_veh_id;
|
||||
std::tie(cost, new_veh_id, std::ignore, std::ignore, std::ignore) = Command<Commands::BuildVehicle>::Do({DoCommandFlag::Execute, DoCommandFlag::AutoReplace}, old_veh->tile, e, true, INVALID_CARGO, INVALID_CLIENT_ID);
|
||||
std::tie(cost, new_veh_id, std::ignore, std::ignore, std::ignore) = Command<Commands::BuildVehicle>::Do({DoCommandFlag::Execute, DoCommandFlag::AutoReplace}, old_veh->tile, e, true, INVALID_CARGO, ClientID::Invalid);
|
||||
if (cost.Failed()) return cost;
|
||||
|
||||
Vehicle *new_veh = Vehicle::Get(new_veh_id);
|
||||
@@ -489,11 +489,11 @@ static CommandCost ReplaceFreeUnit(Vehicle **single_unit, DoCommandFlags flags,
|
||||
}
|
||||
|
||||
/* Sell the old vehicle */
|
||||
cost.AddCost(Command<Commands::SellVehicle>::Do(flags, old_v->index, false, false, INVALID_CLIENT_ID));
|
||||
cost.AddCost(Command<Commands::SellVehicle>::Do(flags, old_v->index, false, false, ClientID::Invalid));
|
||||
|
||||
/* If we are not in DoCommandFlag::Execute undo everything */
|
||||
if (!flags.Test(DoCommandFlag::Execute)) {
|
||||
Command<Commands::SellVehicle>::Do(DoCommandFlag::Execute, new_v->index, false, false, INVALID_CLIENT_ID);
|
||||
Command<Commands::SellVehicle>::Do(DoCommandFlag::Execute, new_v->index, false, false, ClientID::Invalid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -633,7 +633,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlags flags, bool wago
|
||||
assert(RailVehInfo(wagon->engine_type)->railveh_type == RailVehicleType::Wagon);
|
||||
|
||||
/* Sell wagon */
|
||||
[[maybe_unused]] CommandCost ret = Command<Commands::SellVehicle>::Do(DoCommandFlag::Execute, wagon->index, false, false, INVALID_CLIENT_ID);
|
||||
[[maybe_unused]] CommandCost ret = Command<Commands::SellVehicle>::Do(DoCommandFlag::Execute, wagon->index, false, false, ClientID::Invalid);
|
||||
assert(ret.Succeeded());
|
||||
it->new_veh = nullptr;
|
||||
|
||||
@@ -665,7 +665,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlags flags, bool wago
|
||||
/* Sell the vehicle.
|
||||
* Note: This might temporarily construct new trains, so use DoCommandFlag::AutoReplace to prevent
|
||||
* it from failing due to engine limits. */
|
||||
cost.AddCost(Command<Commands::SellVehicle>::Do(DoCommandFlags{flags}.Set(DoCommandFlag::AutoReplace), w->index, false, false, INVALID_CLIENT_ID));
|
||||
cost.AddCost(Command<Commands::SellVehicle>::Do(DoCommandFlags{flags}.Set(DoCommandFlag::AutoReplace), w->index, false, false, ClientID::Invalid));
|
||||
if (flags.Test(DoCommandFlag::Execute)) {
|
||||
it->old_veh = nullptr;
|
||||
if (it == std::begin(replacements)) old_head = nullptr;
|
||||
@@ -696,7 +696,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlags flags, bool wago
|
||||
if (!flags.Test(DoCommandFlag::Execute)) {
|
||||
for (auto it = std::rbegin(replacements); it != std::rend(replacements); ++it) {
|
||||
if (it->new_veh != nullptr) {
|
||||
Command<Commands::SellVehicle>::Do(DoCommandFlag::Execute, it->new_veh->index, false, false, INVALID_CLIENT_ID);
|
||||
Command<Commands::SellVehicle>::Do(DoCommandFlag::Execute, it->new_veh->index, false, false, ClientID::Invalid);
|
||||
it->new_veh = nullptr;
|
||||
}
|
||||
}
|
||||
@@ -723,12 +723,12 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlags flags, bool wago
|
||||
}
|
||||
|
||||
/* Sell the old vehicle */
|
||||
cost.AddCost(Command<Commands::SellVehicle>::Do(flags, old_head->index, false, false, INVALID_CLIENT_ID));
|
||||
cost.AddCost(Command<Commands::SellVehicle>::Do(flags, old_head->index, false, false, ClientID::Invalid));
|
||||
}
|
||||
|
||||
/* If we are not in DoCommandFlag::Execute undo everything */
|
||||
if (!flags.Test(DoCommandFlag::Execute)) {
|
||||
Command<Commands::SellVehicle>::Do(DoCommandFlag::Execute, new_head->index, false, false, INVALID_CLIENT_ID);
|
||||
Command<Commands::SellVehicle>::Do(DoCommandFlag::Execute, new_head->index, false, false, ClientID::Invalid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -450,7 +450,7 @@ public:
|
||||
str = GetString(STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED);
|
||||
}
|
||||
|
||||
DrawString(r.Shrink(WidgetDimensions::scaled.frametext, WidgetDimensions::scaled.framerect), std::move(str), TextColour::Black, SA_HOR_CENTER);
|
||||
DrawString(r.Shrink(WidgetDimensions::scaled.frametext, WidgetDimensions::scaled.framerect), std::move(str), TextColour::Black, AlignmentH::Centre);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ extern StationPool _station_pool;
|
||||
template <typename T>
|
||||
struct SpecMapping {
|
||||
const T *spec = nullptr; ///< Custom spec.
|
||||
uint32_t grfid = 0; ///< GRF ID of this custom spec.
|
||||
GrfID grfid{}; ///< GRF ID of this custom spec.
|
||||
uint16_t localidx = 0; ///< Local ID within GRF of this custom spec.
|
||||
};
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ inline void Blitter_32bppSSE4_Anim::Draw(const BlitterParams *bp, ZoomLevel zoom
|
||||
const MapValue *src_mv_line = (const MapValue *) &sd->data[si->mv_offset] + bp->skip_top * si->sprite_width;
|
||||
const Colour *src_rgba_line = (const Colour *) ((const uint8_t *) &sd->data[si->sprite_offset] + bp->skip_top * si->sprite_line_size);
|
||||
|
||||
if (read_mode != RM_WITH_MARGIN) {
|
||||
if (read_mode != ReadMode::WithMargin) {
|
||||
src_rgba_line += bp->skip_left;
|
||||
src_mv_line += bp->skip_left;
|
||||
}
|
||||
@@ -61,8 +61,8 @@ inline void Blitter_32bppSSE4_Anim::Draw(const BlitterParams *bp, ZoomLevel zoom
|
||||
if (mode != BlitterMode::Transparent) src_mv = src_mv_line;
|
||||
uint16_t *anim = anim_line;
|
||||
|
||||
if (read_mode == RM_WITH_MARGIN) {
|
||||
assert(bt_last == BT_NONE); // or you must ensure block type is preserved
|
||||
if (read_mode == ReadMode::WithMargin) {
|
||||
assert(bt_last == BlockType::None); // or you must ensure block type is preserved
|
||||
anim += src_rgba_line[0].data;
|
||||
src += src_rgba_line[0].data;
|
||||
dst += src_rgba_line[0].data;
|
||||
@@ -155,7 +155,7 @@ bmno_full_transparency:
|
||||
dst += 2;
|
||||
}
|
||||
|
||||
if ((bt_last == BT_NONE && effective_width & 1) || bt_last == BT_ODD) {
|
||||
if ((bt_last == BlockType::None && effective_width & 1) || bt_last == BlockType::Odd) {
|
||||
if (src->a == 0) {
|
||||
/* Complete transparency. */
|
||||
} else if (src->a == 255) {
|
||||
@@ -266,7 +266,7 @@ bmcr_full_transparency:
|
||||
anim += 2;
|
||||
}
|
||||
|
||||
if ((bt_last == BT_NONE && effective_width & 1) || bt_last == BT_ODD) {
|
||||
if ((bt_last == BlockType::None && effective_width & 1) || bt_last == BlockType::Odd) {
|
||||
/* In case the m-channel is zero, do not remap this pixel in any way. */
|
||||
__m128i srcABCD;
|
||||
if (src->a == 0) break;
|
||||
@@ -309,7 +309,7 @@ bmcr_alpha_blend_single:
|
||||
if (src[-1].a) anim[-1] = 0;
|
||||
}
|
||||
|
||||
if ((bt_last == BT_NONE && bp->width & 1) || bt_last == BT_ODD) {
|
||||
if ((bt_last == BlockType::None && bp->width & 1) || bt_last == BlockType::Odd) {
|
||||
__m128i srcABCD = _mm_cvtsi32_si128(src->data);
|
||||
__m128i dstABCD = _mm_cvtsi32_si128(dst->data);
|
||||
dst->data = _mm_cvtsi128_si32(DarkenTwoPixels(srcABCD, dstABCD, a_cm, tr_nom_base));
|
||||
@@ -373,6 +373,25 @@ next_line:
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a sprite to a (screen) buffer. It is templated to allow faster operation.
|
||||
*
|
||||
* @tparam mode blitter mode
|
||||
* @param bp further blitting parameters
|
||||
* @param zoom zoom level at which we are drawing
|
||||
* @param animated Whether the sprite is animated.
|
||||
*/
|
||||
template <BlitterMode mode, Blitter_32bppSSE_Base::ReadMode read_mode, Blitter_32bppSSE_Base::BlockType bt_last, bool translucent>
|
||||
inline void Blitter_32bppSSE4_Anim::Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom, bool animated)
|
||||
{
|
||||
if (animated) {
|
||||
this->Draw<mode, read_mode, bt_last, translucent, true>(bp, zoom);
|
||||
} else {
|
||||
this->Draw<mode, read_mode, bt_last, translucent, false>(bp, zoom);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Draws a sprite to a (screen) buffer. Calls adequate templated function.
|
||||
*
|
||||
@@ -394,25 +413,20 @@ void Blitter_32bppSSE4_Anim::Draw(Blitter::BlitterParams *bp, BlitterMode mode,
|
||||
bm_normal:
|
||||
if (bp->skip_left != 0 || bp->width <= MARGIN_NORMAL_THRESHOLD) {
|
||||
const BlockType bt_last = (BlockType) (bp->width & 1);
|
||||
if (bt_last == BT_EVEN) {
|
||||
if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw<BlitterMode::Normal, RM_WITH_SKIP, BT_EVEN, true, false>(bp, zoom);
|
||||
else Draw<BlitterMode::Normal, RM_WITH_SKIP, BT_EVEN, true, true>(bp, zoom);
|
||||
if (bt_last == BlockType::Even) {
|
||||
Draw<BlitterMode::Normal, ReadMode::WithSkip, BlockType::Even, true>(bp, zoom, !sprite_flags.Test(SpriteFlag::NoAnim));
|
||||
} else {
|
||||
if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw<BlitterMode::Normal, RM_WITH_SKIP, BT_ODD, true, false>(bp, zoom);
|
||||
else Draw<BlitterMode::Normal, RM_WITH_SKIP, BT_ODD, true, true>(bp, zoom);
|
||||
Draw<BlitterMode::Normal, ReadMode::WithSkip, BlockType::Odd, true>(bp, zoom, !sprite_flags.Test(SpriteFlag::NoAnim));
|
||||
}
|
||||
} else {
|
||||
#ifdef POINTER_IS_64BIT
|
||||
if (sprite_flags.Test(SpriteFlag::Translucent)) {
|
||||
if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw<BlitterMode::Normal, RM_WITH_MARGIN, BT_NONE, true, false>(bp, zoom);
|
||||
else Draw<BlitterMode::Normal, RM_WITH_MARGIN, BT_NONE, true, true>(bp, zoom);
|
||||
Draw<BlitterMode::Normal, ReadMode::WithMargin, BlockType::None, true>(bp, zoom, !sprite_flags.Test(SpriteFlag::NoAnim));
|
||||
} else {
|
||||
if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw<BlitterMode::Normal, RM_WITH_MARGIN, BT_NONE, false, false>(bp, zoom);
|
||||
else Draw<BlitterMode::Normal, RM_WITH_MARGIN, BT_NONE, false, true>(bp, zoom);
|
||||
Draw<BlitterMode::Normal, ReadMode::WithMargin, BlockType::None, false>(bp, zoom, !sprite_flags.Test(SpriteFlag::NoAnim));
|
||||
}
|
||||
#else
|
||||
if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw<BlitterMode::Normal, RM_WITH_MARGIN, BT_NONE, true, false>(bp, zoom);
|
||||
else Draw<BlitterMode::Normal, RM_WITH_MARGIN, BT_NONE, true, true>(bp, zoom);
|
||||
Draw<BlitterMode::Normal, ReadMode::WithMargin, BlockType::None, true>(bp, zoom, !sprite_flags.Test(SpriteFlag::NoAnim));
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
@@ -420,17 +434,15 @@ bm_normal:
|
||||
case BlitterMode::ColourRemap:
|
||||
if (sprite_flags.Test(SpriteFlag::NoRemap)) goto bm_normal;
|
||||
if (bp->skip_left != 0 || bp->width <= MARGIN_REMAP_THRESHOLD) {
|
||||
if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw<BlitterMode::ColourRemap, RM_WITH_SKIP, BT_NONE, true, false>(bp, zoom);
|
||||
else Draw<BlitterMode::ColourRemap, RM_WITH_SKIP, BT_NONE, true, true>(bp, zoom);
|
||||
Draw<BlitterMode::ColourRemap, ReadMode::WithSkip, BlockType::None, true>(bp, zoom, !sprite_flags.Test(SpriteFlag::NoAnim));
|
||||
} else {
|
||||
if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw<BlitterMode::ColourRemap, RM_WITH_MARGIN, BT_NONE, true, false>(bp, zoom);
|
||||
else Draw<BlitterMode::ColourRemap, RM_WITH_MARGIN, BT_NONE, true, true>(bp, zoom);
|
||||
Draw<BlitterMode::ColourRemap, ReadMode::WithMargin, BlockType::None, true>(bp, zoom, !sprite_flags.Test(SpriteFlag::NoAnim));
|
||||
}
|
||||
break;
|
||||
case BlitterMode::Transparent: Draw<BlitterMode::Transparent, RM_NONE, BT_NONE, true, true>(bp, zoom); return;
|
||||
case BlitterMode::TransparentRemap: Draw<BlitterMode::TransparentRemap, RM_NONE, BT_NONE, true, true>(bp, zoom); return;
|
||||
case BlitterMode::CrashRemap: Draw<BlitterMode::CrashRemap, RM_NONE, BT_NONE, true, true>(bp, zoom); return;
|
||||
case BlitterMode::BlackRemap: Draw<BlitterMode::BlackRemap, RM_NONE, BT_NONE, true, true>(bp, zoom); return;
|
||||
case BlitterMode::Transparent: Draw<BlitterMode::Transparent, ReadMode::None, BlockType::None, true, true>(bp, zoom); return;
|
||||
case BlitterMode::TransparentRemap: Draw<BlitterMode::TransparentRemap, ReadMode::None, BlockType::None, true, true>(bp, zoom); return;
|
||||
case BlitterMode::CrashRemap: Draw<BlitterMode::CrashRemap, ReadMode::None, BlockType::None, true, true>(bp, zoom); return;
|
||||
case BlitterMode::BlackRemap: Draw<BlitterMode::BlackRemap, ReadMode::None, BlockType::None, true, true>(bp, zoom); return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,8 @@ private:
|
||||
public:
|
||||
template <BlitterMode mode, Blitter_32bppSSE_Base::ReadMode read_mode, Blitter_32bppSSE_Base::BlockType bt_last, bool translucent, bool animated>
|
||||
void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom);
|
||||
template <BlitterMode mode, Blitter_32bppSSE_Base::ReadMode read_mode, Blitter_32bppSSE_Base::BlockType bt_last, bool translucent>
|
||||
void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom, bool animated);
|
||||
void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override;
|
||||
|
||||
Sprite *Encode(SpriteType sprite_type, const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override
|
||||
|
||||
@@ -39,17 +39,17 @@ public:
|
||||
static_assert(sizeof(MapValue) == 2);
|
||||
|
||||
/** Helper for creating specialised functions for specific optimisations. */
|
||||
enum ReadMode : uint8_t {
|
||||
RM_WITH_SKIP, ///< Use normal code for skipping empty pixels.
|
||||
RM_WITH_MARGIN, ///< Use cached number of empty pixels at begin and end of line to reduce work.
|
||||
RM_NONE, ///< No specialisation.
|
||||
enum class ReadMode : uint8_t {
|
||||
WithSkip, ///< Use normal code for skipping empty pixels.
|
||||
WithMargin, ///< Use cached number of empty pixels at begin and end of line to reduce work.
|
||||
None, ///< No specialisation.
|
||||
};
|
||||
|
||||
/** Helper for creating specialised functions for the case where the sprite width is odd or even. */
|
||||
enum BlockType : uint8_t {
|
||||
BT_EVEN, ///< An even number of pixels in the width; no need for a special case for the last pixel.
|
||||
BT_ODD, ///< An odd number of pixels in the width; special case for the last pixel.
|
||||
BT_NONE, ///< No specialisation for either case.
|
||||
enum class BlockType : uint8_t {
|
||||
Even, ///< An even number of pixels in the width; no need for a special case for the last pixel.
|
||||
Odd, ///< An odd number of pixels in the width; special case for the last pixel.
|
||||
None, ///< No specialisation for either case.
|
||||
};
|
||||
|
||||
/** Helper for using specialised functions designed to prevent whenever it's possible things like:
|
||||
|
||||
@@ -231,7 +231,7 @@ inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
||||
const MapValue *src_mv_line = (const MapValue *) &sd->data[si->mv_offset] + bp->skip_top * si->sprite_width;
|
||||
const Colour *src_rgba_line = (const Colour *) ((const uint8_t *) &sd->data[si->sprite_offset] + bp->skip_top * si->sprite_line_size);
|
||||
|
||||
if (read_mode != RM_WITH_MARGIN) {
|
||||
if (read_mode != ReadMode::WithMargin) {
|
||||
src_rgba_line += bp->skip_left;
|
||||
src_mv_line += bp->skip_left;
|
||||
}
|
||||
@@ -261,8 +261,8 @@ inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
||||
const Colour *src = src_rgba_line + META_LENGTH;
|
||||
if (mode == BlitterMode::ColourRemap || mode == BlitterMode::CrashRemap) src_mv = src_mv_line;
|
||||
|
||||
if (read_mode == RM_WITH_MARGIN) {
|
||||
assert(bt_last == BT_NONE); // or you must ensure block type is preserved
|
||||
if (read_mode == ReadMode::WithMargin) {
|
||||
assert(bt_last == BlockType::None); // or you must ensure block type is preserved
|
||||
src += src_rgba_line[0].data;
|
||||
dst += src_rgba_line[0].data;
|
||||
if (mode == BlitterMode::ColourRemap || mode == BlitterMode::CrashRemap) src_mv += src_rgba_line[0].data;
|
||||
@@ -293,7 +293,7 @@ inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
||||
dst += 2;
|
||||
}
|
||||
|
||||
if ((bt_last == BT_NONE && effective_width & 1) || bt_last == BT_ODD) {
|
||||
if ((bt_last == BlockType::None && effective_width & 1) || bt_last == BlockType::Odd) {
|
||||
__m128i srcABCD = _mm_cvtsi32_si128(src->data);
|
||||
__m128i dstABCD = _mm_cvtsi32_si128(dst->data);
|
||||
dst->data = _mm_cvtsi128_si32(AlphaBlendTwoPixels(srcABCD, dstABCD, ALPHA_BLEND_PARAM_1, ALPHA_BLEND_PARAM_2, ALPHA_BLEND_PARAM_3));
|
||||
@@ -347,7 +347,7 @@ inline void Blitter_32bppSSE4::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
||||
src_mv += 2;
|
||||
}
|
||||
|
||||
if ((bt_last == BT_NONE && effective_width & 1) || bt_last == BT_ODD) {
|
||||
if ((bt_last == BlockType::None && effective_width & 1) || bt_last == BlockType::Odd) {
|
||||
#else
|
||||
for (uint x = (uint) effective_width; x > 0; x--) {
|
||||
#endif
|
||||
@@ -392,7 +392,7 @@ bmcr_alpha_blend_single:
|
||||
dst += 2;
|
||||
}
|
||||
|
||||
if ((bt_last == BT_NONE && bp->width & 1) || bt_last == BT_ODD) {
|
||||
if ((bt_last == BlockType::None && bp->width & 1) || bt_last == BlockType::Odd) {
|
||||
__m128i srcABCD = _mm_cvtsi32_si128(src->data);
|
||||
__m128i dstABCD = _mm_cvtsi32_si128(dst->data);
|
||||
dst->data = _mm_cvtsi128_si32(DarkenTwoPixels(srcABCD, dstABCD, DARKEN_PARAM_1, DARKEN_PARAM_2));
|
||||
@@ -468,14 +468,14 @@ void Blitter_32bppSSE4::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomL
|
||||
bm_normal:
|
||||
const BlockType bt_last = (BlockType) (bp->width & 1);
|
||||
switch (bt_last) {
|
||||
default: Draw<BlitterMode::Normal, RM_WITH_SKIP, BT_EVEN, true>(bp, zoom); return;
|
||||
case BT_ODD: Draw<BlitterMode::Normal, RM_WITH_SKIP, BT_ODD, true>(bp, zoom); return;
|
||||
default: Draw<BlitterMode::Normal, ReadMode::WithSkip, BlockType::Even, true>(bp, zoom); return;
|
||||
case BlockType::Odd: Draw<BlitterMode::Normal, ReadMode::WithSkip, BlockType::Odd, true>(bp, zoom); return;
|
||||
}
|
||||
} else {
|
||||
if (((const Blitter_32bppSSE_Base::SpriteData *) bp->sprite)->flags.Test(SpriteFlag::Translucent)) {
|
||||
Draw<BlitterMode::Normal, RM_WITH_MARGIN, BT_NONE, true>(bp, zoom);
|
||||
Draw<BlitterMode::Normal, ReadMode::WithMargin, BlockType::None, true>(bp, zoom);
|
||||
} else {
|
||||
Draw<BlitterMode::Normal, RM_WITH_MARGIN, BT_NONE, false>(bp, zoom);
|
||||
Draw<BlitterMode::Normal, ReadMode::WithMargin, BlockType::None, false>(bp, zoom);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -484,14 +484,14 @@ bm_normal:
|
||||
case BlitterMode::ColourRemap:
|
||||
if (((const Blitter_32bppSSE_Base::SpriteData *) bp->sprite)->flags.Test(SpriteFlag::NoRemap)) goto bm_normal;
|
||||
if (bp->skip_left != 0 || bp->width <= MARGIN_REMAP_THRESHOLD) {
|
||||
Draw<BlitterMode::ColourRemap, RM_WITH_SKIP, BT_NONE, true>(bp, zoom); return;
|
||||
Draw<BlitterMode::ColourRemap, ReadMode::WithSkip, BlockType::None, true>(bp, zoom); return;
|
||||
} else {
|
||||
Draw<BlitterMode::ColourRemap, RM_WITH_MARGIN, BT_NONE, true>(bp, zoom); return;
|
||||
Draw<BlitterMode::ColourRemap, ReadMode::WithMargin, BlockType::None, true>(bp, zoom); return;
|
||||
}
|
||||
case BlitterMode::Transparent: Draw<BlitterMode::Transparent, RM_NONE, BT_NONE, true>(bp, zoom); return;
|
||||
case BlitterMode::TransparentRemap: Draw<BlitterMode::TransparentRemap, RM_NONE, BT_NONE, true>(bp, zoom); return;
|
||||
case BlitterMode::CrashRemap: Draw<BlitterMode::CrashRemap, RM_NONE, BT_NONE, true>(bp, zoom); return;
|
||||
case BlitterMode::BlackRemap: Draw<BlitterMode::BlackRemap, RM_NONE, BT_NONE, true>(bp, zoom); return;
|
||||
case BlitterMode::Transparent: Draw<BlitterMode::Transparent, ReadMode::None, BlockType::None, true>(bp, zoom); return;
|
||||
case BlitterMode::TransparentRemap: Draw<BlitterMode::TransparentRemap, ReadMode::None, BlockType::None, true>(bp, zoom); return;
|
||||
case BlitterMode::CrashRemap: Draw<BlitterMode::CrashRemap, ReadMode::None, BlockType::None, true>(bp, zoom); return;
|
||||
case BlitterMode::BlackRemap: Draw<BlitterMode::BlackRemap, ReadMode::None, BlockType::None, true>(bp, zoom); return;
|
||||
}
|
||||
}
|
||||
#endif /* FULL_ANIMATION */
|
||||
|
||||
@@ -110,7 +110,7 @@ public:
|
||||
void DrawWidget(const Rect &r, WidgetID widget) const override
|
||||
{
|
||||
if (widget == WID_BEM_MESSAGE) {
|
||||
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.frametext), STR_MISSING_GRAPHICS_ERROR, TextColour::FromString, SA_CENTER);
|
||||
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.frametext), STR_MISSING_GRAPHICS_ERROR, TextColour::FromString, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -239,7 +239,7 @@ public:
|
||||
{
|
||||
if (widget != WID_BAFD_QUESTION) return;
|
||||
|
||||
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.frametext), STR_MISSING_GRAPHICS_SET_MESSAGE, TextColour::FromString, SA_CENTER);
|
||||
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.frametext), STR_MISSING_GRAPHICS_SET_MESSAGE, TextColour::FromString, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
}
|
||||
|
||||
void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
|
||||
|
||||
+1
-1
@@ -250,7 +250,7 @@ public:
|
||||
auto [first, last] = this->vscroll->GetVisibleRangeIterators(this->bridges);
|
||||
for (auto it = first; it != last; ++it) {
|
||||
const BridgeSpec *b = it->spec;
|
||||
DrawSpriteIgnorePadding(b->sprite, b->pal, tr.WithWidth(this->icon_width, rtl), SA_HOR_CENTER | SA_BOTTOM);
|
||||
DrawSpriteIgnorePadding(b->sprite, b->pal, tr.WithWidth(this->icon_width, rtl), {AlignmentH::Centre, AlignmentV::Bottom});
|
||||
DrawStringMultiLineWithClipping(tr.Indent(this->icon_width + WidgetDimensions::scaled.hsep_normal, rtl), GetBridgeSelectString(*it));
|
||||
tr = tr.Translate(0, this->resize.step_height);
|
||||
}
|
||||
|
||||
@@ -989,7 +989,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li
|
||||
|
||||
if (has_variants) {
|
||||
Rect fr = tr.WithWidth(circle_width, rtl);
|
||||
DrawSpriteIgnorePadding(is_folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, fr.WithY(textr), SA_CENTER);
|
||||
DrawSpriteIgnorePadding(is_folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, fr.WithY(textr), {AlignmentH::Centre, AlignmentV::Middle});
|
||||
}
|
||||
|
||||
tr = tr.Indent(circle_width + WidgetDimensions::scaled.hsep_normal, rtl);
|
||||
@@ -1023,10 +1023,10 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li
|
||||
Rect cr = tr.WithWidth(count_width, !rtl);
|
||||
tr = tr.Indent(count_width + WidgetDimensions::scaled.hsep_normal, !rtl);
|
||||
|
||||
DrawString(cr.left, cr.right, textr.top + small_text_y_offset, GetString(STR_JUST_COMMA, num_engines), TextColour::Black, SA_RIGHT | SA_FORCE, false, FontSize::Small);
|
||||
DrawString(cr.left, cr.right, textr.top + small_text_y_offset, GetString(STR_JUST_COMMA, num_engines), TextColour::Black, AlignmentH::ForceRight, false, FontSize::Small);
|
||||
|
||||
if (EngineHasReplacementForCompany(Company::Get(_local_company), item.engine_id, selected_group)) {
|
||||
DrawSpriteIgnorePadding(SPR_GROUP_REPLACE_ACTIVE, num_engines == 0 ? PALETTE_CRASH : PAL_NONE, rr, SA_CENTER);
|
||||
DrawSpriteIgnorePadding(SPR_GROUP_REPLACE_ACTIVE, num_engines == 0 ? PALETTE_CRASH : PAL_NONE, rr, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1133,7 +1133,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li
|
||||
|
||||
int sort_detail_width = 0;
|
||||
if (!sort_prop_detail.empty()) {
|
||||
DrawString(tr.left, tr.right, textr.top + normal_text_y_offset, sort_prop_detail, tc, SA_RIGHT, false, FontSize::Small);
|
||||
DrawString(tr.left, tr.right, textr.top + normal_text_y_offset, sort_prop_detail, tc, AlignmentH::End, false, FontSize::Small);
|
||||
|
||||
/* If we have sort detail to show, also measure its width so that we can adjust the
|
||||
* main name drawing rectangle to not overlap. */
|
||||
@@ -1375,7 +1375,7 @@ struct BuildVehicleWindow : Window {
|
||||
|
||||
if (!this->listview_mode) {
|
||||
/* Query for cost and refitted capacity */
|
||||
auto [ret, veh_id, refit_capacity, refit_mail, cargo_capacities] = Command<Commands::BuildVehicle>::Do(DoCommandFlag::QueryCost, TileIndex(this->window_number), this->sel_engine, true, cargo, INVALID_CLIENT_ID);
|
||||
auto [ret, veh_id, refit_capacity, refit_mail, cargo_capacities] = Command<Commands::BuildVehicle>::Do(DoCommandFlag::QueryCost, TileIndex(this->window_number), this->sel_engine, true, cargo, ClientID::Invalid);
|
||||
if (ret.Succeeded()) {
|
||||
this->te.cost = ret.GetCost() - e->GetCost();
|
||||
this->te.capacity = refit_capacity;
|
||||
@@ -1697,9 +1697,9 @@ struct BuildVehicleWindow : Window {
|
||||
CargoType cargo = this->cargo_filter_criteria;
|
||||
if (cargo == CargoFilterCriteria::CF_ANY || cargo == CargoFilterCriteria::CF_ENGINES || cargo == CargoFilterCriteria::CF_NONE) cargo = INVALID_CARGO;
|
||||
if (this->vehicle_type == VehicleType::Train && RailVehInfo(sel_eng)->railveh_type == RailVehicleType::Wagon) {
|
||||
Command<Commands::BuildVehicle>::Post(GetCmdBuildVehMsg(this->vehicle_type), CcBuildWagon, TileIndex(this->window_number), sel_eng, true, cargo, INVALID_CLIENT_ID);
|
||||
Command<Commands::BuildVehicle>::Post(GetCmdBuildVehMsg(this->vehicle_type), CcBuildWagon, TileIndex(this->window_number), sel_eng, true, cargo, ClientID::Invalid);
|
||||
} else {
|
||||
Command<Commands::BuildVehicle>::Post(GetCmdBuildVehMsg(this->vehicle_type), CcBuildPrimaryVehicle, TileIndex(this->window_number), sel_eng, true, cargo, INVALID_CLIENT_ID);
|
||||
Command<Commands::BuildVehicle>::Post(GetCmdBuildVehMsg(this->vehicle_type), CcBuildPrimaryVehicle, TileIndex(this->window_number), sel_eng, true, cargo, ClientID::Invalid);
|
||||
}
|
||||
|
||||
/* Update last used variant in hierarchy and refresh if necessary. */
|
||||
|
||||
+13
-13
@@ -192,7 +192,7 @@ typedef int32_t CheckButtonClick(int32_t new_value, int32_t change_direction);
|
||||
|
||||
/** Information of a cheat. */
|
||||
struct CheatEntry {
|
||||
VarType type; ///< type of selector
|
||||
VarMemType type; ///< type of selector
|
||||
StringID str; ///< string with descriptive text
|
||||
void *variable; ///< pointer to the variable
|
||||
bool *been_used; ///< has this cheat been used before?
|
||||
@@ -204,15 +204,15 @@ struct CheatEntry {
|
||||
* Order matches with the values of #CheatNumbers
|
||||
*/
|
||||
static const CheatEntry _cheats_ui[] = {
|
||||
{SLE_INT32, STR_CHEAT_MONEY, &_money_cheat_amount, &_cheats.money.been_used, &ClickMoneyCheat },
|
||||
{SLE_UINT8, STR_CHEAT_CHANGE_COMPANY, &_local_company, &_cheats.switch_company.been_used, &ClickChangeCompanyCheat },
|
||||
{SLE_BOOL, STR_CHEAT_EXTRA_DYNAMITE, &_cheats.magic_bulldozer.value, &_cheats.magic_bulldozer.been_used, nullptr },
|
||||
{SLE_BOOL, STR_CHEAT_CROSSINGTUNNELS, &_cheats.crossing_tunnels.value, &_cheats.crossing_tunnels.been_used, nullptr },
|
||||
{SLE_BOOL, STR_CHEAT_NO_JETCRASH, &_cheats.no_jetcrash.value, &_cheats.no_jetcrash.been_used, nullptr },
|
||||
{SLE_BOOL, STR_CHEAT_SETUP_PROD, &_cheats.setup_prod.value, &_cheats.setup_prod.been_used, &ClickSetProdCheat },
|
||||
{SLE_BOOL, STR_CHEAT_STATION_RATING, &_cheats.station_rating.value, &_cheats.station_rating.been_used, nullptr },
|
||||
{SLE_UINT8, STR_CHEAT_EDIT_MAX_HL, &_settings_game.construction.map_height_limit, &_cheats.edit_max_hl.been_used, &ClickChangeMaxHlCheat },
|
||||
{SLE_INT32, STR_CHEAT_CHANGE_DATE, &TimerGameCalendar::year, &_cheats.change_date.been_used, &ClickChangeDateCheat },
|
||||
{ VarMemType::I32, STR_CHEAT_MONEY, &_money_cheat_amount, &_cheats.money.been_used, &ClickMoneyCheat },
|
||||
{ VarMemType::U8, STR_CHEAT_CHANGE_COMPANY, &_local_company, &_cheats.switch_company.been_used, &ClickChangeCompanyCheat },
|
||||
{ VarMemType::Bool, STR_CHEAT_EXTRA_DYNAMITE, &_cheats.magic_bulldozer.value, &_cheats.magic_bulldozer.been_used, nullptr },
|
||||
{ VarMemType::Bool, STR_CHEAT_CROSSINGTUNNELS, &_cheats.crossing_tunnels.value, &_cheats.crossing_tunnels.been_used, nullptr },
|
||||
{ VarMemType::Bool, STR_CHEAT_NO_JETCRASH, &_cheats.no_jetcrash.value, &_cheats.no_jetcrash.been_used, nullptr },
|
||||
{ VarMemType::Bool, STR_CHEAT_SETUP_PROD, &_cheats.setup_prod.value, &_cheats.setup_prod.been_used, &ClickSetProdCheat },
|
||||
{ VarMemType::Bool, STR_CHEAT_STATION_RATING, &_cheats.station_rating.value, &_cheats.station_rating.been_used, nullptr },
|
||||
{ VarMemType::U8, STR_CHEAT_EDIT_MAX_HL, &_settings_game.construction.map_height_limit, &_cheats.edit_max_hl.been_used, &ClickChangeMaxHlCheat },
|
||||
{ VarMemType::I32, STR_CHEAT_CHANGE_DATE, &TimerGameCalendar::year, &_cheats.change_date.been_used, &ClickChangeDateCheat },
|
||||
};
|
||||
|
||||
static_assert(CHT_NUM_CHEATS == lengthof(_cheats_ui));
|
||||
@@ -283,7 +283,7 @@ struct CheatWindow : Window {
|
||||
|
||||
std::string str;
|
||||
switch (ce->type) {
|
||||
case SLE_BOOL: {
|
||||
case VarMemType::Bool: {
|
||||
bool on = (*(bool*)ce->variable);
|
||||
|
||||
DrawBoolButton(button_left, y + button_y_offset, Colours::Yellow, Colours::Grey, on, true);
|
||||
@@ -380,7 +380,7 @@ struct CheatWindow : Window {
|
||||
uint width = 0;
|
||||
for (const auto &ce : _cheats_ui) {
|
||||
switch (ce.type) {
|
||||
case SLE_BOOL:
|
||||
case VarMemType::Bool:
|
||||
width = std::max(width, GetStringBoundingBox(GetString(ce.str, STR_CONFIG_SETTING_ON)).width);
|
||||
width = std::max(width, GetStringBoundingBox(GetString(ce.str, STR_CONFIG_SETTING_OFF)).width);
|
||||
break;
|
||||
@@ -466,7 +466,7 @@ struct CheatWindow : Window {
|
||||
*ce->been_used = true;
|
||||
|
||||
switch (ce->type) {
|
||||
case SLE_BOOL:
|
||||
case VarMemType::Bool:
|
||||
value ^= 1;
|
||||
if (ce->proc != nullptr) ce->proc(value, 0);
|
||||
break;
|
||||
|
||||
+17
-4
@@ -53,12 +53,21 @@ static CommandCost ClearTile_Clear(TileIndex tile, DoCommandFlags flags)
|
||||
return price;
|
||||
}
|
||||
|
||||
void DrawClearLandTile(const TileInfo *ti, uint8_t set)
|
||||
/**
|
||||
* Draw a ClearGround::Grass tile.
|
||||
* @param ti The tile to draw.
|
||||
* @param density The density of the dirt -> grass transition to draw.
|
||||
*/
|
||||
void DrawClearLandTile(const TileInfo *ti, uint8_t density)
|
||||
{
|
||||
DrawGroundSprite(SPR_FLAT_BARE_LAND + SlopeToSpriteOffset(ti->tileh) + set * 19, PAL_NONE);
|
||||
DrawGroundSprite(_clear_land_sprites_grass[density] + SlopeToSpriteOffset(ti->tileh), PAL_NONE);
|
||||
}
|
||||
|
||||
void DrawHillyLandTile(const TileInfo *ti)
|
||||
/**
|
||||
* Draw a ClearGround::Rough tile.
|
||||
* @param ti The tile to draw.
|
||||
*/
|
||||
void DrawRoughLandTile(const TileInfo *ti)
|
||||
{
|
||||
if (ti->tileh != SLOPE_FLAT) {
|
||||
DrawGroundSprite(SPR_FLAT_ROUGH_LAND + SlopeToSpriteOffset(ti->tileh), PAL_NONE);
|
||||
@@ -67,6 +76,10 @@ void DrawHillyLandTile(const TileInfo *ti)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the fences atop a ClearGround::Fields tile.
|
||||
* @param ti The tile to draw.
|
||||
*/
|
||||
static void DrawClearLandFence(const TileInfo *ti)
|
||||
{
|
||||
/* combine fences into one sprite object */
|
||||
@@ -138,7 +151,7 @@ static void DrawTile_Clear(TileInfo *ti)
|
||||
break;
|
||||
|
||||
case ClearGround::Rough:
|
||||
DrawHillyLandTile(ti);
|
||||
DrawRoughLandTile(ti);
|
||||
break;
|
||||
|
||||
case ClearGround::Rocks:
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
|
||||
#include "tile_cmd.h"
|
||||
|
||||
void DrawHillyLandTile(const TileInfo *ti);
|
||||
void DrawRoughLandTile(const TileInfo *ti);
|
||||
void DrawClearLandTile(const TileInfo *ti, uint8_t set);
|
||||
|
||||
#endif /* CLEAR_FUNC_H */
|
||||
|
||||
+2
-2
@@ -285,7 +285,7 @@ protected:
|
||||
static inline void SetClientIdHelper([[maybe_unused]] T &data)
|
||||
{
|
||||
if constexpr (std::is_same_v<ClientID, T>) {
|
||||
if (data == INVALID_CLIENT_ID) data = CLIENT_ID_SERVER;
|
||||
if (data == ClientID::Invalid) data = ClientID::Server;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -372,7 +372,7 @@ protected:
|
||||
static inline bool ClientIdIsSet([[maybe_unused]] T &data)
|
||||
{
|
||||
if constexpr (std::is_same_v<ClientID, T>) {
|
||||
return data != INVALID_CLIENT_ID;
|
||||
return data != ClientID::Invalid;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
|
||||
+2
-2
@@ -671,7 +671,7 @@ TimeoutTimer<TimerGameTick> _new_competitor_timeout({ TimerGameTick::Priority::C
|
||||
|
||||
/* Send a command to all clients to start up a new AI.
|
||||
* Works fine for Multiplayer and Singleplayer */
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::NewAI, CompanyID::Invalid(), CompanyRemoveReason::None, INVALID_CLIENT_ID);
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::NewAI, CompanyID::Invalid(), CompanyRemoveReason::None, ClientID::Invalid);
|
||||
});
|
||||
|
||||
/** Start of a new game. */
|
||||
@@ -792,7 +792,7 @@ void OnTick_Companies()
|
||||
for (auto i = 0; i < _settings_game.difficulty.max_no_competitors; i++) {
|
||||
if (_networking && num_companies++ >= _settings_client.network.max_companies) break;
|
||||
if (num_ais++ >= _settings_game.difficulty.max_no_competitors) break;
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::NewAI, CompanyID::Invalid(), {}, INVALID_CLIENT_ID);
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::NewAI, CompanyID::Invalid(), {}, ClientID::Invalid);
|
||||
}
|
||||
timeout = 10 * 60 * Ticks::TICKS_PER_SECOND;
|
||||
}
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
#include "company_type.h"
|
||||
#include "livery.h"
|
||||
|
||||
enum ClientID : uint32_t;
|
||||
enum class ClientID : uint32_t;
|
||||
enum class Colours : uint8_t;
|
||||
|
||||
CommandCost CmdCompanyCtrl(DoCommandFlags flags, CompanyCtrlAction cca, CompanyID company_id, CompanyRemoveReason reason, ClientID client_id);
|
||||
|
||||
+18
-18
@@ -188,12 +188,12 @@ static void DrawCategories(const Rect &r)
|
||||
{
|
||||
int y = r.top;
|
||||
/* Draw description of 12-minute economic period. */
|
||||
DrawString(r.left, r.right, y, (TimerGameEconomy::UsingWallclockUnits() ? STR_FINANCES_PERIOD_CAPTION : STR_FINANCES_YEAR_CAPTION), TextColour::FromString, SA_LEFT, true);
|
||||
DrawString(r.left, r.right, y, (TimerGameEconomy::UsingWallclockUnits() ? STR_FINANCES_PERIOD_CAPTION : STR_FINANCES_YEAR_CAPTION), TextColour::FromString, AlignmentH::Start, true);
|
||||
y += GetCharacterHeight(FontSize::Normal) + WidgetDimensions::scaled.vsep_wide;
|
||||
|
||||
for (const ExpensesList &list : _expenses_list_types) {
|
||||
/* Draw category title and advance y */
|
||||
DrawString(r.left, r.right, y, list.title, TextColour::FromString, SA_LEFT);
|
||||
DrawString(r.left, r.right, y, list.title, TextColour::FromString, AlignmentH::Start);
|
||||
y += GetCharacterHeight(FontSize::Normal);
|
||||
|
||||
/* Draw category items and advance y */
|
||||
@@ -204,7 +204,7 @@ static void DrawCategories(const Rect &r)
|
||||
y += WidgetDimensions::scaled.vsep_normal;
|
||||
|
||||
/* Draw category total and advance y */
|
||||
DrawString(r.left, r.right, y, STR_FINANCES_TOTAL_CAPTION, TextColour::FromString, SA_RIGHT);
|
||||
DrawString(r.left, r.right, y, STR_FINANCES_TOTAL_CAPTION, TextColour::FromString, AlignmentH::End);
|
||||
y += GetCharacterHeight(FontSize::Normal);
|
||||
|
||||
/* Advance y by a blockspace after this category block */
|
||||
@@ -213,7 +213,7 @@ static void DrawCategories(const Rect &r)
|
||||
|
||||
/* Draw total profit/loss */
|
||||
y += WidgetDimensions::scaled.vsep_normal;
|
||||
DrawString(r.left, r.right, y, STR_FINANCES_PROFIT, TextColour::FromString, SA_LEFT);
|
||||
DrawString(r.left, r.right, y, STR_FINANCES_PROFIT, TextColour::FromString, AlignmentH::Start);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -233,7 +233,7 @@ static void DrawPrice(Money amount, int left, int right, int top, TextColour col
|
||||
amount = -amount;
|
||||
str = STR_FINANCES_POSITIVE_INCOME;
|
||||
}
|
||||
DrawString(left, right, top, GetString(str, amount), colour, SA_RIGHT | SA_FORCE);
|
||||
DrawString(left, right, top, GetString(str, amount), colour, AlignmentH::ForceRight);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -279,7 +279,7 @@ static void DrawYearColumn(const Rect &r, TimerGameEconomy::Year year, const Exp
|
||||
Money sum;
|
||||
|
||||
/* Year header */
|
||||
DrawString(r.left, r.right, y, GetString(STR_FINANCES_YEAR, year), TextColour::FromString, SA_RIGHT | SA_FORCE, true);
|
||||
DrawString(r.left, r.right, y, GetString(STR_FINANCES_YEAR, year), TextColour::FromString, AlignmentH::ForceRight, true);
|
||||
y += GetCharacterHeight(FontSize::Normal) + WidgetDimensions::scaled.vsep_wide;
|
||||
|
||||
/* Categories */
|
||||
@@ -322,10 +322,10 @@ static constexpr std::initializer_list<NWidgetPart> _nested_company_finances_wid
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_FINANCES_BANK_BALANCE_TITLE), SetPadding(WidgetDimensions::unscaled.vsep_normal, 0, 0, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL), // Vertical column with bank balance amount, loan amount, and total.
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_CF_OWN_VALUE), SetAlignment(SA_VERT_CENTER | SA_RIGHT | SA_FORCE),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_CF_LOAN_VALUE), SetAlignment(SA_VERT_CENTER | SA_RIGHT | SA_FORCE),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_CF_OWN_VALUE), SetAlignment({AlignmentH::ForceRight, AlignmentV::Middle}),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_CF_LOAN_VALUE), SetAlignment({AlignmentH::ForceRight, AlignmentV::Middle}),
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_CF_BALANCE_LINE), SetMinimalSize(0, WidgetDimensions::unscaled.vsep_normal),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_CF_BALANCE_VALUE), SetAlignment(SA_VERT_CENTER | SA_RIGHT | SA_FORCE),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_CF_BALANCE_VALUE), SetAlignment({AlignmentH::ForceRight, AlignmentV::Middle}),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SELECTION, Colours::Invalid, WID_CF_SEL_MAXLOAN),
|
||||
NWidget(NWID_VERTICAL), SetPIPRatio(0, 0, 1), // Max loan information
|
||||
@@ -1794,14 +1794,14 @@ struct CompanyInfrastructureWindow : Window
|
||||
case InfrastructureItemType::Total:
|
||||
/* Draw line in the spacer above the total. */
|
||||
GfxFillRect(costr.Translate(0, -WidgetDimensions::scaled.vsep_normal).WithHeight(WidgetDimensions::scaled.fullbevel.top), PC_WHITE);
|
||||
DrawString(costr, GetString(TimerGameEconomy::UsingWallclockUnits() ? STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD : STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR, it->cost * 12), TextColour::Black, SA_RIGHT | SA_FORCE);
|
||||
DrawString(costr, GetString(TimerGameEconomy::UsingWallclockUnits() ? STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD : STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR, it->cost * 12), TextColour::Black, AlignmentH::ForceRight);
|
||||
break;
|
||||
|
||||
case InfrastructureItemType::Value:
|
||||
DrawString(labelr.Indent(WidgetDimensions::scaled.hsep_indent, rtl), GetString(it->label), TextColour::White);
|
||||
DrawString(countr, GetString(STR_JUST_COMMA, it->count), TextColour::White, SA_RIGHT | SA_FORCE);
|
||||
DrawString(countr, GetString(STR_JUST_COMMA, it->count), TextColour::White, AlignmentH::ForceRight);
|
||||
if (_settings_game.economy.infrastructure_maintenance) {
|
||||
DrawString(costr, GetString(TimerGameEconomy::UsingWallclockUnits() ? STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD : STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR, it->cost * 12), TextColour::Black, SA_RIGHT | SA_FORCE);
|
||||
DrawString(costr, GetString(TimerGameEconomy::UsingWallclockUnits() ? STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD : STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR, it->cost * 12), TextColour::Black, AlignmentH::ForceRight);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1875,7 +1875,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_company_widgets = {
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_C_DESC_COLOUR_SCHEME_EXAMPLE), SetMinimalSize(30, 0), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_C_DESC_VEHICLE), SetStringTip(STR_COMPANY_VIEW_VEHICLES_TITLE), SetAlignment(SA_LEFT | SA_TOP),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_C_DESC_VEHICLE), SetStringTip(STR_COMPANY_VIEW_VEHICLES_TITLE), SetAlignment({AlignmentH::Start, AlignmentV::Top}),
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_C_DESC_VEHICLE_COUNTS), SetMinimalTextLines(4, 0), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -1894,7 +1894,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_company_widgets = {
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_C_DESC_COMPANY_VALUE), SetFill(1, 0),
|
||||
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_C_DESC_INFRASTRUCTURE), SetStringTip(STR_COMPANY_VIEW_INFRASTRUCTURE), SetAlignment(SA_LEFT | SA_TOP),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_C_DESC_INFRASTRUCTURE), SetStringTip(STR_COMPANY_VIEW_INFRASTRUCTURE), SetAlignment({AlignmentH::Start, AlignmentV::Top}),
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_C_DESC_INFRASTRUCTURE_COUNTS), SetMinimalTextLines(5, 0), SetFill(1, 0),
|
||||
NWidget(NWID_VERTICAL), SetPIPRatio(0, 0, 1),
|
||||
NWidget(WWT_PUSHTXTBTN, Colours::Grey, WID_C_VIEW_INFRASTRUCTURE), SetStringTip(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON, STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP),
|
||||
@@ -2021,7 +2021,7 @@ struct CompanyWindow : Window
|
||||
break;
|
||||
|
||||
case WID_C_DESC_VEHICLE_COUNTS: {
|
||||
uint64_t max_value = GetParamMaxValue(5000); // Maximum number of vehicles
|
||||
uint64_t max_value = GetParamMaxValue(10000); // Maximum number of vehicles
|
||||
for (const auto &count_string : _company_view_vehicle_count_strings) {
|
||||
size.width = std::max(size.width, GetStringBoundingBox(GetString(count_string, max_value)).width + padding.width);
|
||||
}
|
||||
@@ -2123,7 +2123,7 @@ struct CompanyWindow : Window
|
||||
break;
|
||||
|
||||
case WID_C_FACE_TITLE:
|
||||
DrawStringMultiLine(r, GetString(STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE, c->index), TextColour::FromString, SA_HOR_CENTER);
|
||||
DrawStringMultiLine(r, GetString(STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE, c->index), TextColour::FromString, AlignmentH::Centre);
|
||||
break;
|
||||
|
||||
case WID_C_DESC_COLOUR_SCHEME_EXAMPLE: {
|
||||
@@ -2244,7 +2244,7 @@ struct CompanyWindow : Window
|
||||
this->query_widget = WID_C_COMPANY_JOIN;
|
||||
CompanyID company = this->window_number;
|
||||
if (_network_server) {
|
||||
NetworkServerDoMove(CLIENT_ID_SERVER, company);
|
||||
NetworkServerDoMove(ClientID::Server, company);
|
||||
MarkWholeScreenDirty();
|
||||
} else {
|
||||
/* just send the join command */
|
||||
@@ -2389,7 +2389,7 @@ struct BuyCompanyWindow : Window {
|
||||
|
||||
case WID_BC_QUESTION: {
|
||||
const Company *c = Company::Get(this->window_number);
|
||||
DrawStringMultiLine(r, GetString(this->hostile_takeover ? STR_BUY_COMPANY_HOSTILE_TAKEOVER : STR_BUY_COMPANY_MESSAGE, c->index, this->company_value), TextColour::FromString, SA_CENTER);
|
||||
DrawStringMultiLine(r, GetString(this->hostile_takeover ? STR_BUY_COMPANY_HOSTILE_TAKEOVER : STR_BUY_COMPANY_MESSAGE, c->index, this->company_value), TextColour::FromString, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -40,7 +40,7 @@ std::optional<FileHandle> _iconsole_output_file;
|
||||
void IConsoleInit()
|
||||
{
|
||||
_iconsole_output_file = std::nullopt;
|
||||
_redirect_console_to_client = INVALID_CLIENT_ID;
|
||||
_redirect_console_to_client = ClientID::Invalid;
|
||||
_redirect_console_to_admin = AdminID::Invalid();
|
||||
|
||||
IConsoleGUIInit();
|
||||
@@ -91,7 +91,7 @@ void IConsolePrint(ExtendedTextColour colour_code, const std::string &string)
|
||||
{
|
||||
assert(IsValidConsoleColour(colour_code));
|
||||
|
||||
if (_redirect_console_to_client != INVALID_CLIENT_ID) {
|
||||
if (_redirect_console_to_client != ClientID::Invalid) {
|
||||
/* Redirect the string to the client */
|
||||
NetworkServerSendRcon(_redirect_console_to_client, colour_code, string);
|
||||
return;
|
||||
|
||||
+17
-17
@@ -698,7 +698,7 @@ static bool ConKickOrBan(std::string_view arg, bool ban, std::string_view reason
|
||||
* kicking frees closes and subsequently free the connection related instances, which we
|
||||
* would be reading from and writing to after returning. So we would read or write data
|
||||
* from freed memory up till the segfault triggers. */
|
||||
if (*client_id == CLIENT_ID_SERVER || *client_id == _redirect_console_to_client) {
|
||||
if (*client_id == ClientID::Server || *client_id == _redirect_console_to_client) {
|
||||
IConsolePrint(CC_ERROR, "You can not {} yourself!", ban ? "ban" : "kick");
|
||||
return true;
|
||||
}
|
||||
@@ -945,7 +945,7 @@ static bool ConClientNickChange(std::span<std::string_view> argv)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (*client_id == CLIENT_ID_SERVER) {
|
||||
if (*client_id == ClientID::Server) {
|
||||
IConsolePrint(CC_ERROR, "Please use the command 'name' to change your own name!");
|
||||
return true;
|
||||
}
|
||||
@@ -1024,7 +1024,7 @@ static bool ConJoinCompany(std::span<std::string_view> argv)
|
||||
|
||||
/* non-dedicated server may just do the move! */
|
||||
if (_network_server) {
|
||||
NetworkServerDoMove(CLIENT_ID_SERVER, *company_id);
|
||||
NetworkServerDoMove(ClientID::Server, *company_id);
|
||||
} else {
|
||||
NetworkClientRequestMove(*company_id);
|
||||
}
|
||||
@@ -1070,7 +1070,7 @@ static bool ConMoveClient(std::span<std::string_view> argv)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ci->client_id == CLIENT_ID_SERVER && _network_dedicated) {
|
||||
if (ci->client_id == ClientID::Server && _network_dedicated) {
|
||||
IConsolePrint(CC_ERROR, "You cannot move the server!");
|
||||
return true;
|
||||
}
|
||||
@@ -1118,7 +1118,7 @@ static bool ConResetCompany(std::span<std::string_view> argv)
|
||||
IConsolePrint(CC_ERROR, "Cannot remove company: a client is connected to that company.");
|
||||
return false;
|
||||
}
|
||||
const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER);
|
||||
const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(ClientID::Server);
|
||||
assert(ci != nullptr);
|
||||
if (ci->client_playas == *index) {
|
||||
IConsolePrint(CC_ERROR, "Cannot remove company: the server is connected to that company.");
|
||||
@@ -1126,7 +1126,7 @@ static bool ConResetCompany(std::span<std::string_view> argv)
|
||||
}
|
||||
|
||||
/* It is safe to remove this company */
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::Delete, *index, CompanyRemoveReason::Manual, INVALID_CLIENT_ID);
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::Delete, *index, CompanyRemoveReason::Manual, ClientID::Invalid);
|
||||
IConsolePrint(CC_DEFAULT, "Company deleted.");
|
||||
|
||||
return true;
|
||||
@@ -1563,7 +1563,7 @@ static bool ConStartAI(std::span<std::string_view> argv)
|
||||
}
|
||||
|
||||
/* Start a new AI company */
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::NewAI, CompanyID::Invalid(), CompanyRemoveReason::None, INVALID_CLIENT_ID);
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::NewAI, CompanyID::Invalid(), CompanyRemoveReason::None, ClientID::Invalid);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1605,8 +1605,8 @@ static bool ConReloadAI(std::span<std::string_view> argv)
|
||||
}
|
||||
|
||||
/* First kill the company of the AI, then start a new one. This should start the current AI again */
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::Delete, *company_id, CompanyRemoveReason::Manual, INVALID_CLIENT_ID);
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::NewAI, *company_id, CompanyRemoveReason::None, INVALID_CLIENT_ID);
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::Delete, *company_id, CompanyRemoveReason::Manual, ClientID::Invalid);
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::NewAI, *company_id, CompanyRemoveReason::None, ClientID::Invalid);
|
||||
IConsolePrint(CC_DEFAULT, "AI reloaded.");
|
||||
|
||||
return true;
|
||||
@@ -1649,7 +1649,7 @@ static bool ConStopAI(std::span<std::string_view> argv)
|
||||
}
|
||||
|
||||
/* Now kill the company of the AI. */
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::Delete, *company_id, CompanyRemoveReason::Manual, INVALID_CLIENT_ID);
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::Delete, *company_id, CompanyRemoveReason::Manual, ClientID::Invalid);
|
||||
IConsolePrint(CC_DEFAULT, "AI stopped, company deleted.");
|
||||
|
||||
return true;
|
||||
@@ -2050,7 +2050,7 @@ static bool ConSay(std::span<std::string_view> argv)
|
||||
NetworkClientSendChat(NetworkAction::ChatBroadcast, NetworkChatDestinationType::Broadcast, 0 /* param does not matter */, argv[1]);
|
||||
} else {
|
||||
bool from_admin = (_redirect_console_to_admin < AdminID::Invalid());
|
||||
NetworkServerSendChat(NetworkAction::ChatBroadcast, NetworkChatDestinationType::Broadcast, 0, argv[1], CLIENT_ID_SERVER, from_admin);
|
||||
NetworkServerSendChat(NetworkAction::ChatBroadcast, NetworkChatDestinationType::Broadcast, 0, argv[1], ClientID::Server, from_admin);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -2082,7 +2082,7 @@ static bool ConSayCompany(std::span<std::string_view> argv)
|
||||
NetworkClientSendChat(NetworkAction::ChatTeam, NetworkChatDestinationType::Team, company_id->base(), argv[2]);
|
||||
} else {
|
||||
bool from_admin = (_redirect_console_to_admin < AdminID::Invalid());
|
||||
NetworkServerSendChat(NetworkAction::ChatTeam, NetworkChatDestinationType::Team, company_id->base(), argv[2], CLIENT_ID_SERVER, from_admin);
|
||||
NetworkServerSendChat(NetworkAction::ChatTeam, NetworkChatDestinationType::Team, company_id->base(), argv[2], ClientID::Server, from_admin);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -2106,10 +2106,10 @@ static bool ConSayClient(std::span<std::string_view> argv)
|
||||
}
|
||||
|
||||
if (!_network_server) {
|
||||
NetworkClientSendChat(NetworkAction::ChatClient, NetworkChatDestinationType::Client, *client_id, argv[2]);
|
||||
NetworkClientSendChat(NetworkAction::ChatClient, NetworkChatDestinationType::Client, to_underlying(*client_id), argv[2]);
|
||||
} else {
|
||||
bool from_admin = (_redirect_console_to_admin < AdminID::Invalid());
|
||||
NetworkServerSendChat(NetworkAction::ChatClient, NetworkChatDestinationType::Client, *client_id, argv[2], CLIENT_ID_SERVER, from_admin);
|
||||
NetworkServerSendChat(NetworkAction::ChatClient, NetworkChatDestinationType::Client, to_underlying(*client_id), argv[2], ClientID::Server, from_admin);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -2822,7 +2822,7 @@ static void ConDumpRoadTypes()
|
||||
for (RoadType rt : EnumRange(ROADTYPE_END)) {
|
||||
const RoadTypeInfo *rti = GetRoadTypeInfo(rt);
|
||||
if (rti->label == 0) continue;
|
||||
uint32_t grfid = 0;
|
||||
GrfID grfid{};
|
||||
const GRFFile *grf = rti->grffile[RoadSpriteType::Ground];
|
||||
if (grf != nullptr) {
|
||||
grfid = grf->grfid;
|
||||
@@ -2861,7 +2861,7 @@ static void ConDumpRailTypes()
|
||||
for (RailType rt : EnumRange(RAILTYPE_END)) {
|
||||
const RailTypeInfo *rti = GetRailTypeInfo(rt);
|
||||
if (rti->label == 0) continue;
|
||||
uint32_t grfid = 0;
|
||||
GrfID grfid{};
|
||||
const GRFFile *grf = rti->grffile[RailSpriteType::Ground];
|
||||
if (grf != nullptr) {
|
||||
grfid = grf->grfid;
|
||||
@@ -2908,7 +2908,7 @@ static void ConDumpCargoTypes()
|
||||
|
||||
std::map<uint32_t, const GRFFile *> grfs;
|
||||
for (const CargoSpec *spec : CargoSpec::Iterate()) {
|
||||
uint32_t grfid = 0;
|
||||
GrfID grfid{};
|
||||
const GRFFile *grf = spec->grffile;
|
||||
if (grf != nullptr) {
|
||||
grfid = grf->grfid;
|
||||
|
||||
+4
-4
@@ -200,23 +200,23 @@ struct IConsoleWindow : Window
|
||||
int ypos = this->height - this->line_height - WidgetDimensions::scaled.hsep_normal;
|
||||
for (size_t line_index = IConsoleWindow::scroll; line_index < _iconsole_buffer.size(); line_index++) {
|
||||
const IConsoleLine &print = _iconsole_buffer[line_index];
|
||||
ypos = DrawStringMultiLine(WidgetDimensions::scaled.frametext.left, right, -this->line_height, ypos, GetString(STR_JUST_RAW_STRING, print.buffer), print.colour, SA_LEFT | SA_BOTTOM | SA_FORCE) - WidgetDimensions::scaled.hsep_normal;
|
||||
ypos = DrawStringMultiLine(WidgetDimensions::scaled.frametext.left, right, -this->line_height, ypos, GetString(STR_JUST_RAW_STRING, print.buffer), print.colour, {AlignmentH::ForceLeft, AlignmentV::Bottom}) - WidgetDimensions::scaled.hsep_normal;
|
||||
if (ypos < 0) break;
|
||||
}
|
||||
/* If the text is longer than the window, don't show the starting ']' */
|
||||
int delta = this->width - WidgetDimensions::scaled.frametext.right - cursor_width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH;
|
||||
if (delta > 0) {
|
||||
DrawString(WidgetDimensions::scaled.frametext.left, right, this->height - this->line_height, "]", CC_COMMAND, SA_LEFT | SA_FORCE);
|
||||
DrawString(WidgetDimensions::scaled.frametext.left, right, this->height - this->line_height, "]", CC_COMMAND, AlignmentH::ForceLeft);
|
||||
delta = 0;
|
||||
}
|
||||
|
||||
/* If we have a marked area, draw a background highlight. */
|
||||
if (_iconsole_cmdline.marklength != 0) GfxFillRect(this->line_offset + delta + _iconsole_cmdline.markxoffs, this->height - this->line_height, this->line_offset + delta + _iconsole_cmdline.markxoffs + _iconsole_cmdline.marklength, this->height - 1, PC_DARK_RED);
|
||||
|
||||
DrawString(this->line_offset + delta, right, this->height - this->line_height, _iconsole_cmdline.GetText(), CC_COMMAND, SA_LEFT | SA_FORCE);
|
||||
DrawString(this->line_offset + delta, right, this->height - this->line_height, _iconsole_cmdline.GetText(), CC_COMMAND, AlignmentH::ForceLeft);
|
||||
|
||||
if (_focused_window == this && _iconsole_cmdline.caret) {
|
||||
DrawString(this->line_offset + delta + _iconsole_cmdline.caretxoffs, right, this->height - this->line_height, "_", TextColour::White, SA_LEFT | SA_FORCE);
|
||||
DrawString(this->line_offset + delta + _iconsole_cmdline.caretxoffs, right, this->height - this->line_height, "_", TextColour::White, AlignmentH::ForceLeft);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,9 +10,24 @@
|
||||
#include "../stdafx.h"
|
||||
#include "geometry_func.hpp"
|
||||
#include "math_func.hpp"
|
||||
#include "../strings_func.h"
|
||||
#include "../strings_type.h"
|
||||
|
||||
#include "../safeguards.h"
|
||||
|
||||
/**
|
||||
* Resolve horizontal alignment for the current text direction.
|
||||
* @return The resolved horizontal alignment.
|
||||
*/
|
||||
AlignmentH Alignment::ResolveRTL() const
|
||||
{
|
||||
switch (this->h) {
|
||||
case AlignmentH::Start: return _current_text_dir == TD_RTL ? AlignmentH::ForceRight : AlignmentH::ForceLeft;
|
||||
case AlignmentH::End: return _current_text_dir == TD_RTL ? AlignmentH::ForceLeft : AlignmentH::ForceRight;
|
||||
default: return this->h;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute bounding box of both dimensions.
|
||||
* @param d1 First dimension.
|
||||
|
||||
@@ -16,6 +16,43 @@
|
||||
# define Point OTTD_Point
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
/** Horizontal alignments. */
|
||||
enum class AlignmentH : uint8_t {
|
||||
Start, ///< Align to the start, LTR/RTL aware.
|
||||
Centre, ///< Align to the centre.
|
||||
End, ///< Align to the end, LTR/RTL aware.
|
||||
ForceLeft, ///< Force align to the left.
|
||||
ForceRight, ///< Force align to the right.
|
||||
};
|
||||
|
||||
/** Vertical alignments. */
|
||||
enum class AlignmentV : uint8_t {
|
||||
Top, ///< Align to the top.
|
||||
Middle, ///< Align to the middle.
|
||||
Bottom, ///< Align to the bottom.
|
||||
};
|
||||
|
||||
/** Horizontal and vertical alignment. */
|
||||
struct Alignment {
|
||||
AlignmentH h; ///< Horizontal alignment.
|
||||
AlignmentV v; ///< Vertical alignment.
|
||||
|
||||
/**
|
||||
* Construct an alignment with the specified horizontal and vertical alignment.
|
||||
* @param h The horizontal alignment.
|
||||
* @param v The vertical alignment.
|
||||
*/
|
||||
constexpr Alignment(AlignmentH h, AlignmentV v) : h(h), v(v) {}
|
||||
|
||||
/**
|
||||
* Construct an alignment with the specific horizontal alignment.
|
||||
* @param h The horizontal alignment.
|
||||
*/
|
||||
constexpr Alignment(AlignmentH h) : Alignment(h, AlignmentV::Top) {}
|
||||
|
||||
AlignmentH ResolveRTL() const;
|
||||
};
|
||||
|
||||
/**
|
||||
* Determine where to position a centred object.
|
||||
* @param min The top or left coordinate.
|
||||
|
||||
+3
-3
@@ -365,7 +365,7 @@ struct DepotWindow : Window {
|
||||
Rect count = text.WithWidth(this->count_width - WidgetDimensions::scaled.hsep_normal, !rtl);
|
||||
DrawString(count.left, count.right, count.bottom - GetCharacterHeight(FontSize::Small) + 1,
|
||||
GetString(STR_JUST_DECIMAL, CeilDiv(length * 10, TILE_SIZE), 1),
|
||||
TextColour::Black, SA_RIGHT | SA_FORCE, false, FontSize::Small); // Draw the counter
|
||||
TextColour::Black, AlignmentH::ForceRight, false, FontSize::Small); // Draw the counter
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -391,7 +391,7 @@ struct DepotWindow : Window {
|
||||
DrawString(text, STR_DEPOT_NO_ENGINE);
|
||||
} else {
|
||||
Rect flag = r.WithWidth(this->flag_size.width, rtl).WithHeight(this->flag_size.height).Translate(0, diff_y);
|
||||
DrawSpriteIgnorePadding((v->vehstatus.Test(VehState::Stopped)) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, flag, SA_CENTER);
|
||||
DrawSpriteIgnorePadding((v->vehstatus.Test(VehState::Stopped)) ? SPR_FLAG_VEH_STOPPED : SPR_FLAG_VEH_RUNNING, PAL_NONE, flag, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
|
||||
DrawString(text, GetString(STR_JUST_COMMA, v->unitnumber), (v->max_age - CalendarTime::DAYS_IN_LEAP_YEAR) >= v->age ? TextColour::Black : TextColour::Red);
|
||||
}
|
||||
@@ -1107,7 +1107,7 @@ struct DepotWindow : Window {
|
||||
this->SetDirty();
|
||||
|
||||
bool sell_cmd = (v->type == VehicleType::Train && (widget == WID_D_SELL_CHAIN || _ctrl_pressed));
|
||||
Command<Commands::SellVehicle>::Post(GetCmdSellVehMsg(v->type), v->tile, v->index, sell_cmd, true, INVALID_CLIENT_ID);
|
||||
Command<Commands::SellVehicle>::Post(GetCmdSellVehMsg(v->type), v->tile, v->index, sell_cmd, true, ClientID::Invalid);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,4 +17,7 @@ struct Depot;
|
||||
|
||||
static const uint MAX_LENGTH_DEPOT_NAME_CHARS = 32; ///< The maximum length of a depot name in characters including '\0'
|
||||
|
||||
/** Minimal height for a bridge above any depot tile. */
|
||||
static constexpr uint8_t MINIMAL_DEPOT_BRIDGE_HEIGHT = 3;
|
||||
|
||||
#endif /* DEPOT_TYPE_H */
|
||||
|
||||
@@ -93,7 +93,7 @@ public:
|
||||
void Draw(const Rect &full, const Rect &r, bool sel, int click_result, Colours bg_colour) const override
|
||||
{
|
||||
bool rtl = TEnd ^ (_current_text_dir == TD_RTL);
|
||||
DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), this->string, this->GetColour(sel), SA_CENTER, false, TFs);
|
||||
DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), this->string, this->GetColour(sel), {AlignmentH::Centre, AlignmentV::Middle}, false, TFs);
|
||||
this->TBase::Draw(full, r.Indent(this->dim.width, rtl), sel, click_result, bg_colour);
|
||||
}
|
||||
|
||||
@@ -185,7 +185,7 @@ public:
|
||||
{
|
||||
bool rtl = TEnd ^ (_current_text_dir == TD_RTL);
|
||||
if (this->checked) {
|
||||
DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), STR_JUST_CHECKMARK, this->GetColour(sel), SA_CENTER, false, TFs);
|
||||
DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), STR_JUST_CHECKMARK, this->GetColour(sel), {AlignmentH::Centre, AlignmentV::Middle}, false, TFs);
|
||||
}
|
||||
this->TBase::Draw(full, r.Indent(this->dim.width + WidgetDimensions::scaled.hsep_wide, rtl), sel, click_result, bg_colour);
|
||||
}
|
||||
|
||||
+1
-1
@@ -620,7 +620,7 @@ static void CompanyCheckBankrupt(Company *c)
|
||||
* player we are sure (the above check) that we are not the local
|
||||
* company and thus we won't be moved. */
|
||||
if (!_networking || _network_server) {
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::Delete, c->index, CompanyRemoveReason::Bankrupt, INVALID_CLIENT_ID);
|
||||
Command<Commands::CompanyControl>::Post(CompanyCtrlAction::Delete, c->index, CompanyRemoveReason::Bankrupt, ClientID::Invalid);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
+6
-6
@@ -181,7 +181,7 @@ static TrackBits MaskWireBits(TileIndex t, TrackBits tracks)
|
||||
* @param context The context to get the sprite for.
|
||||
* @return The wire sprite.
|
||||
*/
|
||||
static inline SpriteID GetWireBase(TileIndex tile, TileContext context = TCX_NORMAL)
|
||||
static inline SpriteID GetWireBase(TileIndex tile, TileContext context = TileContext::Normal)
|
||||
{
|
||||
const RailTypeInfo *rti = GetRailTypeInfo(GetRailType(tile));
|
||||
SpriteID wires = GetCustomRailSprite(rti, tile, RailSpriteType::Wires, context);
|
||||
@@ -194,7 +194,7 @@ static inline SpriteID GetWireBase(TileIndex tile, TileContext context = TCX_NOR
|
||||
* @param context The context to get the sprite for.
|
||||
* @return The pylon sprite.
|
||||
*/
|
||||
static inline SpriteID GetPylonBase(TileIndex tile, TileContext context = TCX_NORMAL)
|
||||
static inline SpriteID GetPylonBase(TileIndex tile, TileContext context = TileContext::Normal)
|
||||
{
|
||||
const RailTypeInfo *rti = GetRailTypeInfo(GetRailType(tile));
|
||||
SpriteID pylons = GetCustomRailSprite(rti, tile, RailSpriteType::Pylons, context);
|
||||
@@ -308,7 +308,7 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
|
||||
AdjustTileh(ti->tile, &tileh[TileSource::Home]);
|
||||
|
||||
SpriteID pylon_normal = GetPylonBase(ti->tile);
|
||||
SpriteID pylon_halftile = IsValidCorner(halftile_corner) ? GetPylonBase(ti->tile, TCX_UPPER_HALFTILE) : pylon_normal;
|
||||
SpriteID pylon_halftile = IsValidCorner(halftile_corner) ? GetPylonBase(ti->tile, TileContext::UpperHalftile) : pylon_normal;
|
||||
|
||||
for (DiagDirection i : EnumRange(DiagDirection::End)) {
|
||||
SpriteID pylon_base = (IsValidCorner(halftile_corner) && HasBit(InclinedSlope(i), halftile_corner)) ? pylon_halftile : pylon_normal;
|
||||
@@ -451,7 +451,7 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
|
||||
if (HasStationTileRail(ti->tile) && !CanStationTileHaveWires(ti->tile)) return;
|
||||
|
||||
SpriteID wire_normal = GetWireBase(ti->tile);
|
||||
SpriteID wire_halftile = IsValidCorner(halftile_corner) ? GetWireBase(ti->tile, TCX_UPPER_HALFTILE) : wire_normal;
|
||||
SpriteID wire_halftile = IsValidCorner(halftile_corner) ? GetWireBase(ti->tile, TileContext::UpperHalftile) : wire_normal;
|
||||
Track halftile_track;
|
||||
switch (halftile_corner) {
|
||||
case CORNER_W: halftile_track = Track::Left; break;
|
||||
@@ -515,11 +515,11 @@ void DrawRailCatenaryOnBridge(const TileInfo *ti)
|
||||
|
||||
uint height = GetBridgePixelHeight(end);
|
||||
|
||||
SpriteID wire_base = GetWireBase(end, TCX_ON_BRIDGE);
|
||||
SpriteID wire_base = GetWireBase(end, TileContext::OnBridge);
|
||||
|
||||
AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x, ti->y, height, *sss, IsTransparencySet(TransparencyOption::Catenary));
|
||||
|
||||
SpriteID pylon_base = GetPylonBase(end, TCX_ON_BRIDGE);
|
||||
SpriteID pylon_base = GetPylonBase(end, TileContext::OnBridge);
|
||||
|
||||
static constexpr SpriteBounds pylon_bounds{{-1, -1, 0}, {1, 1, BB_HEIGHT_UNDER_BRIDGE}, {1, 1, 0}};
|
||||
|
||||
|
||||
+13
-5
@@ -179,10 +179,10 @@ bool Engine::IsEnabled() const
|
||||
* This is the GRF providing the Action 3.
|
||||
* @return GRF ID of the associated NewGRF.
|
||||
*/
|
||||
uint32_t Engine::GetGRFID() const
|
||||
GrfID Engine::GetGRFID() const
|
||||
{
|
||||
const GRFFile *file = this->GetGRF();
|
||||
return file == nullptr ? 0 : file->grfid;
|
||||
return file == nullptr ? GrfID{} : file->grfid;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -553,7 +553,7 @@ void EngineOverrideManager::ResetToDefaultMapping()
|
||||
* If dynamic_engines is disabled, all newgrf share the same ID scope identified by INVALID_GRFID.
|
||||
* @return The engine ID if present, or EngineID::Invalid() if not.
|
||||
*/
|
||||
EngineID EngineOverrideManager::GetID(VehicleType type, uint16_t grf_local_id, uint32_t grfid)
|
||||
EngineID EngineOverrideManager::GetID(VehicleType type, uint16_t grf_local_id, GrfID grfid)
|
||||
{
|
||||
const auto &map = this->mappings[type];
|
||||
const auto key = EngineIDMapping::Key(grfid, grf_local_id);
|
||||
@@ -572,7 +572,7 @@ EngineID EngineOverrideManager::GetID(VehicleType type, uint16_t grf_local_id, u
|
||||
* @param static_access Whether to actually reserve the EngineID.
|
||||
* @return The engine ID if present and now reserved, or EngineID::Invalid() if not.
|
||||
*/
|
||||
EngineID EngineOverrideManager::UseUnreservedID(VehicleType type, uint16_t grf_local_id, uint32_t grfid, bool static_access)
|
||||
EngineID EngineOverrideManager::UseUnreservedID(VehicleType type, uint16_t grf_local_id, GrfID grfid, bool static_access)
|
||||
{
|
||||
auto &map = _engine_mngr.mappings[type];
|
||||
const auto key = EngineIDMapping::Key(INVALID_GRFID, grf_local_id);
|
||||
@@ -591,7 +591,15 @@ EngineID EngineOverrideManager::UseUnreservedID(VehicleType type, uint16_t grf_l
|
||||
return it->engine;
|
||||
}
|
||||
|
||||
void EngineOverrideManager::SetID(VehicleType type, uint16_t grf_local_id, uint32_t grfid, uint8_t substitute_id, EngineID engine)
|
||||
/**
|
||||
* Create an override to the given engine. If the override already exists, it will be overwritten.
|
||||
* @param type The vehicle type.
|
||||
* @param grf_local_id The NewGRF internal identifier.
|
||||
* @param grfid The unique identifier of the NewGRF.
|
||||
* @param substitute_id The fallback original engine.
|
||||
* @param engine The engine this override is for.
|
||||
*/
|
||||
void EngineOverrideManager::SetID(VehicleType type, uint16_t grf_local_id, GrfID grfid, uint8_t substitute_id, EngineID engine)
|
||||
{
|
||||
auto &map = this->mappings[type];
|
||||
const auto key = EngineIDMapping::Key(grfid, grf_local_id);
|
||||
|
||||
+27
-7
@@ -168,7 +168,7 @@ public:
|
||||
return this->grf_prop.grffile;
|
||||
}
|
||||
|
||||
uint32_t GetGRFID() const;
|
||||
GrfID GetGRFID() const;
|
||||
|
||||
struct EngineTypeFilter {
|
||||
VehicleType vt;
|
||||
@@ -201,18 +201,38 @@ public:
|
||||
};
|
||||
|
||||
struct EngineIDMapping {
|
||||
uint32_t grfid = 0; ///< The GRF ID of the file the entity belongs to
|
||||
GrfID grfid{}; ///< The GRF ID of the file the entity belongs to
|
||||
uint16_t internal_id = 0; ///< The internal ID within the GRF file
|
||||
VehicleType type{}; ///< The engine type
|
||||
uint8_t substitute_id = 0; ///< The (original) entity ID to use if this GRF is not available (currently not used)
|
||||
EngineID engine{};
|
||||
|
||||
static inline uint64_t Key(uint32_t grfid, uint16_t internal_id) { return static_cast<uint64_t>(grfid) << 32 | internal_id; }
|
||||
/**
|
||||
* Create a 64 bit key from the GRFID and internal ID for mappings.
|
||||
* @param grfid The NewGRF id.
|
||||
* @param internal_id The internal ID within the GRF file.
|
||||
* @return The key.
|
||||
*/
|
||||
static inline uint64_t Key(GrfID grfid, uint16_t internal_id) { return static_cast<uint64_t>(grfid) << 32 | internal_id; }
|
||||
|
||||
/**
|
||||
* Create a 64 bit key from this mapping.
|
||||
* @return The key.
|
||||
*/
|
||||
inline uint64_t Key() const { return Key(this->grfid, this->internal_id); }
|
||||
|
||||
/** Create a new mapping. */
|
||||
EngineIDMapping() {}
|
||||
EngineIDMapping(uint32_t grfid, uint16_t internal_id, VehicleType type, uint8_t substitute_id, EngineID engine)
|
||||
|
||||
/**
|
||||
* Create the mapping.
|
||||
* @param grfid The unique identifer of the NewGRF.
|
||||
* @param internal_id The internal identifier of the engine within the NewGRF.
|
||||
* @param type The vehicle type.
|
||||
* @param substitute_id The original vehicle to fall back to.
|
||||
* @param engine The engine the mapping is for.
|
||||
*/
|
||||
EngineIDMapping(GrfID grfid, uint16_t internal_id, VehicleType type, uint8_t substitute_id, EngineID engine)
|
||||
: grfid(grfid), internal_id(internal_id), type(type), substitute_id(substitute_id), engine(engine) {}
|
||||
};
|
||||
|
||||
@@ -229,9 +249,9 @@ struct EngineOverrideManager {
|
||||
VehicleTypeIndexArray<std::vector<EngineIDMapping>> mappings;
|
||||
|
||||
void ResetToDefaultMapping();
|
||||
EngineID GetID(VehicleType type, uint16_t grf_local_id, uint32_t grfid);
|
||||
EngineID UseUnreservedID(VehicleType type, uint16_t grf_local_id, uint32_t grfid, bool static_access);
|
||||
void SetID(VehicleType type, uint16_t grf_local_id, uint32_t grfid, uint8_t substitute_id, EngineID engine);
|
||||
EngineID GetID(VehicleType type, uint16_t grf_local_id, GrfID grfid);
|
||||
EngineID UseUnreservedID(VehicleType type, uint16_t grf_local_id, GrfID grfid, bool static_access);
|
||||
void SetID(VehicleType type, uint16_t grf_local_id, GrfID grfid, uint8_t substitute_id, EngineID engine);
|
||||
|
||||
static bool ResetToCurrentNewGRFConfig();
|
||||
};
|
||||
|
||||
+3
-3
@@ -169,15 +169,15 @@ struct EnginePreviewWindow : Window {
|
||||
if (this->selected_index >= this->engines.size()) return;
|
||||
|
||||
EngineID engine = this->engines[selected_index];
|
||||
int y = DrawStringMultiLine(r, GetString(STR_ENGINE_PREVIEW_MESSAGE, GetEngineCategoryName(engine)), TextColour::FromString, SA_HOR_CENTER | SA_TOP) + WidgetDimensions::scaled.vsep_wide;
|
||||
int y = DrawStringMultiLine(r, GetString(STR_ENGINE_PREVIEW_MESSAGE, GetEngineCategoryName(engine)), TextColour::FromString, {AlignmentH::Centre, AlignmentV::Top}) + WidgetDimensions::scaled.vsep_wide;
|
||||
|
||||
DrawString(r.left, r.right, y, GetString(STR_ENGINE_NAME, PackEngineNameDParam(engine, EngineNameContext::PreviewNews)), TextColour::Black, SA_HOR_CENTER);
|
||||
DrawString(r.left, r.right, y, GetString(STR_ENGINE_NAME, PackEngineNameDParam(engine, EngineNameContext::PreviewNews)), TextColour::Black, AlignmentH::Centre);
|
||||
y += GetCharacterHeight(FontSize::Normal);
|
||||
|
||||
DrawVehicleEngine(r.left, r.right, this->width >> 1, y + this->vehicle_space / 2, engine, GetEnginePalette(engine, _local_company), EngineImageType::Preview);
|
||||
|
||||
y += this->vehicle_space;
|
||||
DrawStringMultiLine(r.left, r.right, y, r.bottom, GetEngineInfoString(engine), TextColour::Black, SA_CENTER);
|
||||
DrawStringMultiLine(r.left, r.right, y, r.bottom, GetEngineInfoString(engine), TextColour::Black, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
}
|
||||
|
||||
void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
|
||||
|
||||
+6
-6
@@ -192,14 +192,14 @@ public:
|
||||
|
||||
case WID_EM_MESSAGE:
|
||||
if (this->detailed_msg.empty()) {
|
||||
DrawStringMultiLineWithClipping(r, this->summary_msg.GetDecodedString(), TextColour::White, SA_CENTER);
|
||||
DrawStringMultiLineWithClipping(r, this->summary_msg.GetDecodedString(), TextColour::White, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
} else if (this->extra_msg.empty()) {
|
||||
/* Extra space when message is shorter than company face window */
|
||||
int extra = (r.Height() - this->height_summary - this->height_detailed - WidgetDimensions::scaled.vsep_wide) / 2;
|
||||
|
||||
/* Note: NewGRF supplied error message often do not start with a colour code, so default to white. */
|
||||
DrawStringMultiLineWithClipping(r.WithHeight(this->height_summary + extra, false), this->summary_msg.GetDecodedString(), TextColour::White, SA_CENTER);
|
||||
DrawStringMultiLineWithClipping(r.WithHeight(this->height_detailed + extra, true), this->detailed_msg.GetDecodedString(), TextColour::White, SA_CENTER);
|
||||
DrawStringMultiLineWithClipping(r.WithHeight(this->height_summary + extra, false), this->summary_msg.GetDecodedString(), TextColour::White, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
DrawStringMultiLineWithClipping(r.WithHeight(this->height_detailed + extra, true), this->detailed_msg.GetDecodedString(), TextColour::White, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
} else {
|
||||
/* Extra space when message is shorter than company face window */
|
||||
int extra = (r.Height() - this->height_summary - this->height_detailed - this->height_extra - (WidgetDimensions::scaled.vsep_wide * 2)) / 3;
|
||||
@@ -208,9 +208,9 @@ public:
|
||||
Rect top_section = r.WithHeight(this->height_summary + extra, false);
|
||||
Rect bottom_section = r.WithHeight(this->height_extra + extra, true);
|
||||
Rect middle_section = top_section.WithY(top_section.bottom, bottom_section.top);
|
||||
DrawStringMultiLineWithClipping(top_section, this->summary_msg.GetDecodedString(), TextColour::White, SA_CENTER);
|
||||
DrawStringMultiLineWithClipping(middle_section, this->detailed_msg.GetDecodedString(), TextColour::White, SA_CENTER);
|
||||
DrawStringMultiLineWithClipping(bottom_section, this->extra_msg.GetDecodedString(), TextColour::White, SA_CENTER);
|
||||
DrawStringMultiLineWithClipping(top_section, this->summary_msg.GetDecodedString(), TextColour::White, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
DrawStringMultiLineWithClipping(middle_section, this->detailed_msg.GetDecodedString(), TextColour::White, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
DrawStringMultiLineWithClipping(bottom_section, this->extra_msg.GetDecodedString(), TextColour::White, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
+1
-1
@@ -574,7 +574,7 @@ public:
|
||||
|
||||
/* Create the nice lighter rectangle at the details top */
|
||||
GfxFillRect(r.WithHeight(HEADER_HEIGHT).Shrink(WidgetDimensions::scaled.bevel.left, WidgetDimensions::scaled.bevel.top, WidgetDimensions::scaled.bevel.right, 0), GetColourGradient(Colours::Grey, Shade::Lightest));
|
||||
DrawString(hr.left, hr.right, hr.top, STR_SAVELOAD_DETAIL_CAPTION, TextColour::FromString, SA_HOR_CENTER);
|
||||
DrawString(hr.left, hr.right, hr.top, STR_SAVELOAD_DETAIL_CAPTION, TextColour::FromString, AlignmentH::Centre);
|
||||
|
||||
if (this->selected == nullptr) return;
|
||||
|
||||
|
||||
+116
-98
@@ -214,22 +214,22 @@ namespace {
|
||||
* Elements are initialized with the expected rate in recorded values per second.
|
||||
* @hideinitializer
|
||||
*/
|
||||
PerformanceData _pf_data[PFE_MAX] = {
|
||||
PerformanceData(GL_RATE), // PFE_GAMELOOP
|
||||
PerformanceData(1), // PFE_ACC_GL_ECONOMY
|
||||
PerformanceData(1), // PFE_ACC_GL_TRAINS
|
||||
PerformanceData(1), // PFE_ACC_GL_ROADVEHS
|
||||
PerformanceData(1), // PFE_ACC_GL_SHIPS
|
||||
PerformanceData(1), // PFE_ACC_GL_AIRCRAFT
|
||||
PerformanceData(1), // PFE_GL_LANDSCAPE
|
||||
PerformanceData(1), // PFE_GL_LINKGRAPH
|
||||
PerformanceData(1000.0 / 30), // PFE_DRAWING
|
||||
PerformanceData(1), // PFE_ACC_DRAWWORLD
|
||||
PerformanceData(60.0), // PFE_VIDEO
|
||||
PerformanceData(1000.0 * 8192 / 44100), // PFE_SOUND
|
||||
PerformanceData(1), // PFE_ALLSCRIPTS
|
||||
PerformanceData(1), // PFE_GAMESCRIPT
|
||||
PerformanceData(1), // PFE_AI0 ...
|
||||
static EnumIndexArray<PerformanceData, PerformanceElement, PerformanceElement::End> _pf_data = {
|
||||
PerformanceData(GL_RATE), // PerformanceElement::GameLoop
|
||||
PerformanceData(1), // PerformanceElement::GameLoopEconomy
|
||||
PerformanceData(1), // PerformanceElement::GameLoopTrains
|
||||
PerformanceData(1), // PerformanceElement::GameLoopRoadVehicles
|
||||
PerformanceData(1), // PerformanceElement::GameLoopShips
|
||||
PerformanceData(1), // PerformanceElement::GameLoopAircraft
|
||||
PerformanceData(1), // PerformanceElement::GameLoopLandscape
|
||||
PerformanceData(1), // PerformanceElement::GameLoopLinkGraph
|
||||
PerformanceData(1000.0 / 30), // PerformanceElement::Drawing
|
||||
PerformanceData(1), // PerformanceElement::ViewportDrawing
|
||||
PerformanceData(60.0), // PerformanceElement::Video
|
||||
PerformanceData(1000.0 * 8192 / 44100), // PerformanceElement::Sound
|
||||
PerformanceData(1), // PerformanceElement::AllScripts
|
||||
PerformanceData(1), // PerformanceElement::GameScript
|
||||
PerformanceData(1), // PerformanceElement::AI0 ...
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
@@ -243,7 +243,7 @@ namespace {
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1),
|
||||
PerformanceData(1), // PFE_AI14
|
||||
PerformanceData(1), // PerformanceElement::AI14
|
||||
};
|
||||
|
||||
}
|
||||
@@ -268,7 +268,7 @@ static TimingMeasurement GetPerformanceTimer()
|
||||
*/
|
||||
PerformanceMeasurer::PerformanceMeasurer(PerformanceElement elem)
|
||||
{
|
||||
assert(elem < PFE_MAX);
|
||||
assert(elem < PerformanceElement::End);
|
||||
|
||||
this->elem = elem;
|
||||
this->start_time = GetPerformanceTimer();
|
||||
@@ -277,17 +277,17 @@ PerformanceMeasurer::PerformanceMeasurer(PerformanceElement elem)
|
||||
/** Finish a cycle of a measured element and store the measurement taken. */
|
||||
PerformanceMeasurer::~PerformanceMeasurer()
|
||||
{
|
||||
if (this->elem == PFE_ALLSCRIPTS) {
|
||||
if (this->elem == PerformanceElement::AllScripts) {
|
||||
/* Hack to not record scripts total when no scripts are active */
|
||||
bool any_active = _pf_data[PFE_GAMESCRIPT].num_valid > 0;
|
||||
for (PerformanceElement e : EnumRange(PFE_AI0, PFE_MAX)) any_active |= _pf_data[e].num_valid > 0;
|
||||
bool any_active = _pf_data[PerformanceElement::GameScript].num_valid > 0;
|
||||
for (PerformanceElement e : EnumRange(PerformanceElement::AI0, PerformanceElement::End)) any_active |= _pf_data[e].num_valid > 0;
|
||||
if (!any_active) {
|
||||
PerformanceMeasurer::SetInactive(PFE_ALLSCRIPTS);
|
||||
PerformanceMeasurer::SetInactive(PerformanceElement::AllScripts);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (this->elem == PFE_SOUND) {
|
||||
/* PFE_SOUND measurements are made from the mixer thread.
|
||||
if (this->elem == PerformanceElement::Sound) {
|
||||
/* PerformanceElement::Sound measurements are made from the mixer thread.
|
||||
* _pf_data cannot be concurrently accessed from the mixer thread
|
||||
* and the main thread, so store the measurement results in a
|
||||
* mutex-protected queue which is drained by the main thread.
|
||||
@@ -340,7 +340,7 @@ void PerformanceMeasurer::SetExpectedRate(double rate)
|
||||
*/
|
||||
PerformanceAccumulator::PerformanceAccumulator(PerformanceElement elem)
|
||||
{
|
||||
assert(elem < PFE_MAX);
|
||||
assert(elem < PerformanceElement::End);
|
||||
|
||||
this->elem = elem;
|
||||
this->start_time = GetPerformanceTimer();
|
||||
@@ -366,42 +366,59 @@ void PerformanceAccumulator::Reset(PerformanceElement elem)
|
||||
void ShowFrametimeGraphWindow(PerformanceElement elem);
|
||||
|
||||
|
||||
static const PerformanceElement DISPLAY_ORDER_PFE[PFE_MAX] = {
|
||||
PFE_GAMELOOP,
|
||||
PFE_GL_ECONOMY,
|
||||
PFE_GL_TRAINS,
|
||||
PFE_GL_ROADVEHS,
|
||||
PFE_GL_SHIPS,
|
||||
PFE_GL_AIRCRAFT,
|
||||
PFE_GL_LANDSCAPE,
|
||||
PFE_ALLSCRIPTS,
|
||||
PFE_GAMESCRIPT,
|
||||
PFE_AI0,
|
||||
PFE_AI1,
|
||||
PFE_AI2,
|
||||
PFE_AI3,
|
||||
PFE_AI4,
|
||||
PFE_AI5,
|
||||
PFE_AI6,
|
||||
PFE_AI7,
|
||||
PFE_AI8,
|
||||
PFE_AI9,
|
||||
PFE_AI10,
|
||||
PFE_AI11,
|
||||
PFE_AI12,
|
||||
PFE_AI13,
|
||||
PFE_AI14,
|
||||
PFE_GL_LINKGRAPH,
|
||||
PFE_DRAWING,
|
||||
PFE_DRAWWORLD,
|
||||
PFE_VIDEO,
|
||||
PFE_SOUND,
|
||||
/** Order of the performance elements in the user interface. */
|
||||
static constexpr EnumIndexArray<PerformanceElement, PerformanceElement, PerformanceElement::End> DISPLAY_ORDER_PFE = {
|
||||
PerformanceElement::GameLoop,
|
||||
PerformanceElement::GameLoopEconomy,
|
||||
PerformanceElement::GameLoopTrains,
|
||||
PerformanceElement::GameLoopRoadVehicles,
|
||||
PerformanceElement::GameLoopShips,
|
||||
PerformanceElement::GameLoopAircraft,
|
||||
PerformanceElement::GameLoopLandscape,
|
||||
PerformanceElement::AllScripts,
|
||||
PerformanceElement::GameScript,
|
||||
PerformanceElement::AI0,
|
||||
PerformanceElement::AI1,
|
||||
PerformanceElement::AI2,
|
||||
PerformanceElement::AI3,
|
||||
PerformanceElement::AI4,
|
||||
PerformanceElement::AI5,
|
||||
PerformanceElement::AI6,
|
||||
PerformanceElement::AI7,
|
||||
PerformanceElement::AI8,
|
||||
PerformanceElement::AI9,
|
||||
PerformanceElement::AI10,
|
||||
PerformanceElement::AI11,
|
||||
PerformanceElement::AI12,
|
||||
PerformanceElement::AI13,
|
||||
PerformanceElement::AI14,
|
||||
PerformanceElement::GameLoopLinkGraph,
|
||||
PerformanceElement::Drawing,
|
||||
PerformanceElement::ViewportDrawing,
|
||||
PerformanceElement::Video,
|
||||
PerformanceElement::Sound,
|
||||
};
|
||||
|
||||
static std::string_view GetAIName(int ai_index)
|
||||
/**
|
||||
* Get the \c CompanyID associated with the AI of the given \c PerformanceElement.
|
||||
* @param e The element to convert.
|
||||
* @return The \c CompanyID.
|
||||
*/
|
||||
static constexpr CompanyID GetAIIndex(PerformanceElement e)
|
||||
{
|
||||
if (!Company::IsValidAiID(ai_index)) return {};
|
||||
return Company::Get(ai_index)->ai_info->GetName();
|
||||
return CompanyID(e - PerformanceElement::AI0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of the AI of the given \c PerformanceElement.
|
||||
* @param e The element to get the name for.
|
||||
* @return The name of an empty string.
|
||||
*/
|
||||
static std::string_view GetAIName(PerformanceElement e)
|
||||
{
|
||||
CompanyID c = GetAIIndex(e);
|
||||
if (!Company::IsValidAiID(c)) return {};
|
||||
return Company::Get(c)->ai_info->GetName();
|
||||
}
|
||||
|
||||
/** @hideinitializer */
|
||||
@@ -469,8 +486,9 @@ struct FramerateWindow : Window {
|
||||
CachedDecimal rate_gameloop{}; ///< cached game loop tick rate
|
||||
CachedDecimal rate_drawing{}; ///< cached drawing frame rate
|
||||
CachedDecimal speed_gameloop{}; ///< cached game loop speed factor
|
||||
std::array<CachedDecimal, PFE_MAX> times_shortterm{}; ///< cached short term average times
|
||||
std::array<CachedDecimal, PFE_MAX> times_longterm{}; ///< cached long term average times
|
||||
using CachedDecimalArray = EnumIndexArray<CachedDecimal, PerformanceElement, PerformanceElement::End>; ///< Array of cached decimals
|
||||
CachedDecimalArray times_shortterm{}; ///< cached short term average times
|
||||
CachedDecimalArray times_longterm{}; ///< cached long term average times
|
||||
|
||||
static constexpr int MIN_ELEMENTS = 5; ///< smallest number of elements to display
|
||||
|
||||
@@ -492,15 +510,15 @@ struct FramerateWindow : Window {
|
||||
|
||||
void UpdateData()
|
||||
{
|
||||
double gl_rate = _pf_data[PFE_GAMELOOP].GetRate();
|
||||
this->rate_gameloop.SetRate(gl_rate, _pf_data[PFE_GAMELOOP].expected_rate);
|
||||
this->speed_gameloop.SetRate(gl_rate / _pf_data[PFE_GAMELOOP].expected_rate, 1.0);
|
||||
double gl_rate = _pf_data[PerformanceElement::GameLoop].GetRate();
|
||||
this->rate_gameloop.SetRate(gl_rate, _pf_data[PerformanceElement::GameLoop].expected_rate);
|
||||
this->speed_gameloop.SetRate(gl_rate / _pf_data[PerformanceElement::GameLoop].expected_rate, 1.0);
|
||||
if (this->IsShaded()) return; // in small mode, this is everything needed
|
||||
|
||||
this->rate_drawing.SetRate(_pf_data[PFE_DRAWING].GetRate(), _settings_client.gui.refresh_rate);
|
||||
this->rate_drawing.SetRate(_pf_data[PerformanceElement::Drawing].GetRate(), _settings_client.gui.refresh_rate);
|
||||
|
||||
int new_active = 0;
|
||||
for (PerformanceElement e : EnumRange(PFE_MAX)) {
|
||||
for (PerformanceElement e : EnumRange(PerformanceElement::End)) {
|
||||
this->times_shortterm[e].SetTime(_pf_data[e].GetAverageDurationMilliseconds(8), MILLISECONDS_PER_TICK);
|
||||
this->times_longterm[e].SetTime(_pf_data[e].GetAverageDurationMilliseconds(NUM_FRAMERATE_POINTS), MILLISECONDS_PER_TICK);
|
||||
if (_pf_data[e].num_valid > 0) {
|
||||
@@ -563,10 +581,10 @@ struct FramerateWindow : Window {
|
||||
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
|
||||
if (_pf_data[e].num_valid == 0) continue;
|
||||
Dimension line_size;
|
||||
if (e < PFE_AI0) {
|
||||
line_size = GetStringBoundingBox(STR_FRAMERATE_GAMELOOP + e);
|
||||
if (e < PerformanceElement::AI0) {
|
||||
line_size = GetStringBoundingBox(STR_FRAMERATE_GAMELOOP + to_underlying(e));
|
||||
} else {
|
||||
line_size = GetStringBoundingBox(GetString(STR_FRAMERATE_AI, e - PFE_AI0 + 1, GetAIName(e - PFE_AI0)));
|
||||
line_size = GetStringBoundingBox(GetString(STR_FRAMERATE_AI, GetAIIndex(e) + 1, GetAIName(e)));
|
||||
}
|
||||
size.width = std::max(size.width, line_size.width);
|
||||
}
|
||||
@@ -593,20 +611,20 @@ struct FramerateWindow : Window {
|
||||
* @param heading_str The header of the column.
|
||||
* @param values The values to draw.
|
||||
*/
|
||||
void DrawElementTimesColumn(const Rect &r, StringID heading_str, std::span<const CachedDecimal> values) const
|
||||
void DrawElementTimesColumn(const Rect &r, StringID heading_str, const CachedDecimalArray &values) const
|
||||
{
|
||||
const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
|
||||
int32_t skip = sb->GetPosition();
|
||||
int drawable = this->num_displayed;
|
||||
int y = r.top;
|
||||
DrawString(r.left, r.right, y, heading_str, TextColour::FromString, SA_CENTER, true);
|
||||
DrawString(r.left, r.right, y, heading_str, TextColour::FromString, {AlignmentH::Centre, AlignmentV::Middle}, true);
|
||||
y += GetCharacterHeight(FontSize::Normal) + WidgetDimensions::scaled.vsep_normal;
|
||||
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
|
||||
if (_pf_data[e].num_valid == 0) continue;
|
||||
if (skip > 0) {
|
||||
skip--;
|
||||
} else {
|
||||
DrawString(r.left, r.right, y, GetString(values[e].strid, values[e].GetValue(), values[e].GetDecimals()), TextColour::FromString, SA_RIGHT | SA_FORCE);
|
||||
DrawString(r.left, r.right, y, GetString(values[e].strid, values[e].GetValue(), values[e].GetDecimals()), TextColour::FromString, AlignmentH::ForceRight);
|
||||
y += GetCharacterHeight(FontSize::Normal);
|
||||
drawable--;
|
||||
if (drawable == 0) break;
|
||||
@@ -620,20 +638,20 @@ struct FramerateWindow : Window {
|
||||
int32_t skip = sb->GetPosition();
|
||||
int drawable = this->num_displayed;
|
||||
int y = r.top;
|
||||
DrawString(r.left, r.right, y, STR_FRAMERATE_MEMORYUSE, TextColour::FromString, SA_CENTER, true);
|
||||
DrawString(r.left, r.right, y, STR_FRAMERATE_MEMORYUSE, TextColour::FromString, {AlignmentH::Centre, AlignmentV::Middle}, true);
|
||||
y += GetCharacterHeight(FontSize::Normal) + WidgetDimensions::scaled.vsep_normal;
|
||||
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
|
||||
if (_pf_data[e].num_valid == 0) continue;
|
||||
if (skip > 0) {
|
||||
skip--;
|
||||
} else if (e == PFE_GAMESCRIPT || e >= PFE_AI0) {
|
||||
uint64_t value = e == PFE_GAMESCRIPT ? Game::GetInstance()->GetAllocatedMemory() : Company::Get(e - PFE_AI0)->ai_instance->GetAllocatedMemory();
|
||||
DrawString(r.left, r.right, y, GetString(STR_FRAMERATE_BYTES_GOOD, value), TextColour::FromString, SA_RIGHT | SA_FORCE);
|
||||
} else if (e == PerformanceElement::GameScript || e >= PerformanceElement::AI0) {
|
||||
uint64_t value = e == PerformanceElement::GameScript ? Game::GetInstance()->GetAllocatedMemory() : Company::Get(GetAIIndex(e))->ai_instance->GetAllocatedMemory();
|
||||
DrawString(r.left, r.right, y, GetString(STR_FRAMERATE_BYTES_GOOD, value), TextColour::FromString, AlignmentH::ForceRight);
|
||||
y += GetCharacterHeight(FontSize::Normal);
|
||||
drawable--;
|
||||
if (drawable == 0) break;
|
||||
} else if (e == PFE_SOUND) {
|
||||
DrawString(r.left, r.right, y, GetString(STR_FRAMERATE_BYTES_GOOD, GetSoundPoolAllocatedMemory()), TextColour::FromString, SA_RIGHT | SA_FORCE);
|
||||
} else if (e == PerformanceElement::Sound) {
|
||||
DrawString(r.left, r.right, y, GetString(STR_FRAMERATE_BYTES_GOOD, GetSoundPoolAllocatedMemory()), TextColour::FromString, AlignmentH::ForceRight);
|
||||
y += GetCharacterHeight(FontSize::Normal);
|
||||
drawable--;
|
||||
if (drawable == 0) break;
|
||||
@@ -660,10 +678,10 @@ struct FramerateWindow : Window {
|
||||
if (skip > 0) {
|
||||
skip--;
|
||||
} else {
|
||||
if (e < PFE_AI0) {
|
||||
DrawString(r.left, r.right, y, STR_FRAMERATE_GAMELOOP + e, TextColour::FromString, SA_LEFT);
|
||||
if (e < PerformanceElement::AI0) {
|
||||
DrawString(r.left, r.right, y, STR_FRAMERATE_GAMELOOP + to_underlying(e), TextColour::FromString, AlignmentH::Start);
|
||||
} else {
|
||||
DrawString(r.left, r.right, y, GetString(STR_FRAMERATE_AI, e - PFE_AI0 + 1, GetAIName(e - PFE_AI0)), TextColour::FromString, SA_LEFT);
|
||||
DrawString(r.left, r.right, y, GetString(STR_FRAMERATE_AI, GetAIIndex(e) + 1, GetAIName(e)), TextColour::FromString, AlignmentH::Start);
|
||||
}
|
||||
y += GetCharacterHeight(FontSize::Normal);
|
||||
drawable--;
|
||||
@@ -759,10 +777,10 @@ struct FrametimeGraphWindow : Window {
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_FGW_CAPTION:
|
||||
if (this->element < PFE_AI0) {
|
||||
return GetString(STR_FRAMETIME_CAPTION_GAMELOOP + this->element);
|
||||
if (this->element < PerformanceElement::AI0) {
|
||||
return GetString(STR_FRAMETIME_CAPTION_GAMELOOP + to_underlying(this->element));
|
||||
}
|
||||
return GetString(STR_FRAMETIME_CAPTION_AI, this->element - PFE_AI0 + 1, GetAIName(this->element - PFE_AI0));
|
||||
return GetString(STR_FRAMETIME_CAPTION_AI, GetAIIndex(this->element) + 1, GetAIName(this->element));
|
||||
|
||||
default:
|
||||
return this->Window::GetWidgetString(widget, stringid);
|
||||
@@ -792,7 +810,7 @@ struct FrametimeGraphWindow : Window {
|
||||
* this lands exactly on the scale = 2 vs scale = 4 boundary.
|
||||
* To avoid excessive switching of the horizontal scale, bias these performance
|
||||
* categories away from this scale boundary. */
|
||||
if (this->element == PFE_DRAWING || this->element == PFE_DRAWWORLD) range += (range / 2);
|
||||
if (this->element == PerformanceElement::Drawing || this->element == PerformanceElement::ViewportDrawing) range += (range / 2);
|
||||
|
||||
/* Determine horizontal scale based on period covered by 60 points
|
||||
* (slightly less than 2 seconds at full game speed) */
|
||||
@@ -931,11 +949,11 @@ struct FrametimeGraphWindow : Window {
|
||||
if ((TimingMeasurement)this->vertical_scale > TIMESTAMP_PRECISION) {
|
||||
DrawString(r.left, x_zero - WidgetDimensions::scaled.hsep_normal, y - GetCharacterHeight(FontSize::Small),
|
||||
GetString(STR_FRAMERATE_GRAPH_SECONDS, this->vertical_scale * division / 10 / TIMESTAMP_PRECISION),
|
||||
TextColour::Grey, SA_RIGHT | SA_FORCE, false, FontSize::Small);
|
||||
TextColour::Grey, AlignmentH::ForceRight, false, FontSize::Small);
|
||||
} else {
|
||||
DrawString(r.left, x_zero - WidgetDimensions::scaled.hsep_normal, y - GetCharacterHeight(FontSize::Small),
|
||||
GetString(STR_FRAMERATE_GRAPH_MILLISECONDS, this->vertical_scale * division / 10 * 1000 / TIMESTAMP_PRECISION),
|
||||
TextColour::Grey, SA_RIGHT | SA_FORCE, false, FontSize::Small);
|
||||
TextColour::Grey, AlignmentH::ForceRight, false, FontSize::Small);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -946,7 +964,7 @@ struct FrametimeGraphWindow : Window {
|
||||
if (division % 2 == 0) {
|
||||
DrawString(x, x_max, y_zero + WidgetDimensions::scaled.vsep_normal,
|
||||
GetString(STR_FRAMERATE_GRAPH_SECONDS, division * horz_div_scl / 2),
|
||||
TextColour::Grey, SA_LEFT | SA_FORCE, false, FontSize::Small);
|
||||
TextColour::Grey, AlignmentH::ForceLeft, false, FontSize::Small);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1006,9 +1024,9 @@ struct FrametimeGraphWindow : Window {
|
||||
uint64_t value = peak_value * 1000 / TIMESTAMP_PRECISION;
|
||||
int label_y = std::max(y_max, peak_point.y - GetCharacterHeight(FontSize::Small));
|
||||
if (peak_point.x - x_zero > (int)this->graph_size.width / 2) {
|
||||
DrawString(x_zero, peak_point.x - WidgetDimensions::scaled.hsep_normal, label_y, GetString(STR_FRAMERATE_GRAPH_MILLISECONDS, value), tc_peak, SA_RIGHT | SA_FORCE, false, FontSize::Small);
|
||||
DrawString(x_zero, peak_point.x - WidgetDimensions::scaled.hsep_normal, label_y, GetString(STR_FRAMERATE_GRAPH_MILLISECONDS, value), tc_peak, AlignmentH::ForceRight, false, FontSize::Small);
|
||||
} else {
|
||||
DrawString(peak_point.x + WidgetDimensions::scaled.hsep_normal, x_max, label_y, GetString(STR_FRAMERATE_GRAPH_MILLISECONDS, value), tc_peak, SA_LEFT | SA_FORCE, false, FontSize::Small);
|
||||
DrawString(peak_point.x + WidgetDimensions::scaled.hsep_normal, x_max, label_y, GetString(STR_FRAMERATE_GRAPH_MILLISECONDS, value), tc_peak, AlignmentH::ForceLeft, false, FontSize::Small);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1037,7 +1055,7 @@ void ShowFramerateWindow()
|
||||
*/
|
||||
void ShowFrametimeGraphWindow(PerformanceElement elem)
|
||||
{
|
||||
if (elem < PFE_FIRST || elem >= PFE_MAX) return; // maybe warn?
|
||||
if (elem >= PerformanceElement::End) return; // maybe warn?
|
||||
AllocateWindowDescFront<FrametimeGraphWindow>(_frametime_graph_window_desc, elem);
|
||||
}
|
||||
|
||||
@@ -1050,7 +1068,7 @@ void ConPrintFramerate()
|
||||
|
||||
IConsolePrint(TextColour::Silver, "Based on num. data points: {} {} {}", count1, count2, count3);
|
||||
|
||||
static const std::array<std::string_view, PFE_MAX> MEASUREMENT_NAMES = {
|
||||
static const EnumIndexArray<std::string_view, PerformanceElement, PerformanceElement::End> MEASUREMENT_NAMES = {
|
||||
"Game loop",
|
||||
" GL station ticks",
|
||||
" GL train ticks",
|
||||
@@ -1070,7 +1088,7 @@ void ConPrintFramerate()
|
||||
|
||||
bool printed_anything = false;
|
||||
|
||||
for (const auto &e : { PFE_GAMELOOP, PFE_DRAWING, PFE_VIDEO }) {
|
||||
for (const auto &e : { PerformanceElement::GameLoop, PerformanceElement::Drawing, PerformanceElement::Video }) {
|
||||
auto &pf = _pf_data[e];
|
||||
if (pf.num_valid == 0) continue;
|
||||
IConsolePrint(TextColour::Green, "{} rate: {:.2f}fps (expected: {:.2f}fps)",
|
||||
@@ -1080,14 +1098,14 @@ void ConPrintFramerate()
|
||||
printed_anything = true;
|
||||
}
|
||||
|
||||
for (PerformanceElement e : EnumRange(PFE_MAX)) {
|
||||
for (PerformanceElement e : EnumRange(PerformanceElement::End)) {
|
||||
auto &pf = _pf_data[e];
|
||||
if (pf.num_valid == 0) continue;
|
||||
std::string_view name;
|
||||
if (e < PFE_AI0) {
|
||||
if (e < PerformanceElement::AI0) {
|
||||
name = MEASUREMENT_NAMES[e];
|
||||
} else {
|
||||
ai_name_buf = fmt::format("AI {} {}", e - PFE_AI0 + 1, GetAIName(e - PFE_AI0));
|
||||
ai_name_buf = fmt::format("AI {} {}", GetAIIndex(e) + 1, GetAIName(e));
|
||||
name = ai_name_buf;
|
||||
}
|
||||
IConsolePrint(TextColour::LightBlue, "{} times: {:.2f}ms {:.2f}ms {:.2f}ms",
|
||||
@@ -1104,8 +1122,8 @@ void ConPrintFramerate()
|
||||
}
|
||||
|
||||
/**
|
||||
* This drains the PFE_SOUND measurement data queue into _pf_data.
|
||||
* PFE_SOUND measurements are made by the mixer thread and so cannot be stored
|
||||
* This drains the PerformanceElement::Sound measurement data queue into _pf_data.
|
||||
* PerformanceElement::Sound measurements are made by the mixer thread and so cannot be stored
|
||||
* into _pf_data directly, because this would not be thread safe and would violate
|
||||
* the invariants of the FPS and frame graph windows.
|
||||
* @see PerformanceMeasurement::~PerformanceMeasurement()
|
||||
@@ -1115,7 +1133,7 @@ void ProcessPendingPerformanceMeasurements()
|
||||
if (_sound_perf_pending.load(std::memory_order_acquire)) {
|
||||
std::lock_guard lk(_sound_perf_lock);
|
||||
for (size_t i = 0; i < _sound_perf_measurements.size(); i += 2) {
|
||||
_pf_data[PFE_SOUND].Add(_sound_perf_measurements[i], _sound_perf_measurements[i + 1]);
|
||||
_pf_data[PerformanceElement::Sound].Add(_sound_perf_measurements[i], _sound_perf_measurements[i + 1]);
|
||||
}
|
||||
_sound_perf_measurements.clear();
|
||||
_sound_perf_pending.store(false, std::memory_order_relaxed);
|
||||
|
||||
+33
-33
@@ -11,7 +11,7 @@
|
||||
* @par Adding new measurements
|
||||
* Adding a new measurement requires multiple steps, which are outlined here.
|
||||
* The first thing to do is add a new member of the #PerformanceElement enum.
|
||||
* It must be added before \c PFE_MAX and should be added in a logical place.
|
||||
* It must be added before \c PerformanceElement::End and should be added in a logical place.
|
||||
* For example, an element of the game loop would be added next to the other game loop elements, and a rendering element next to the other rendering elements.
|
||||
*
|
||||
* @par
|
||||
@@ -43,39 +43,39 @@
|
||||
* @note When adding new elements here, make sure to also update all other locations depending on the length and order of this enum.
|
||||
* See <em>Adding new measurements</em> above.
|
||||
*/
|
||||
enum PerformanceElement : uint8_t {
|
||||
PFE_FIRST = 0,
|
||||
PFE_GAMELOOP = 0, ///< Speed of gameloop processing.
|
||||
PFE_GL_ECONOMY, ///< Time spent processing cargo movement
|
||||
PFE_GL_TRAINS, ///< Time spent processing trains
|
||||
PFE_GL_ROADVEHS, ///< Time spend processing road vehicles
|
||||
PFE_GL_SHIPS, ///< Time spent processing ships
|
||||
PFE_GL_AIRCRAFT, ///< Time spent processing aircraft
|
||||
PFE_GL_LANDSCAPE, ///< Time spent processing other world features
|
||||
PFE_GL_LINKGRAPH, ///< Time spent waiting for link graph background jobs
|
||||
PFE_DRAWING, ///< Speed of drawing world and GUI.
|
||||
PFE_DRAWWORLD, ///< Time spent drawing world viewports in GUI
|
||||
PFE_VIDEO, ///< Speed of painting drawn video buffer.
|
||||
PFE_SOUND, ///< Speed of mixing audio samples
|
||||
PFE_ALLSCRIPTS, ///< Sum of all GS/AI scripts
|
||||
PFE_GAMESCRIPT, ///< Game script execution
|
||||
PFE_AI0, ///< AI execution for player slot 1
|
||||
PFE_AI1, ///< AI execution for player slot 2
|
||||
PFE_AI2, ///< AI execution for player slot 3
|
||||
PFE_AI3, ///< AI execution for player slot 4
|
||||
PFE_AI4, ///< AI execution for player slot 5
|
||||
PFE_AI5, ///< AI execution for player slot 6
|
||||
PFE_AI6, ///< AI execution for player slot 7
|
||||
PFE_AI7, ///< AI execution for player slot 8
|
||||
PFE_AI8, ///< AI execution for player slot 9
|
||||
PFE_AI9, ///< AI execution for player slot 10
|
||||
PFE_AI10, ///< AI execution for player slot 11
|
||||
PFE_AI11, ///< AI execution for player slot 12
|
||||
PFE_AI12, ///< AI execution for player slot 13
|
||||
PFE_AI13, ///< AI execution for player slot 14
|
||||
PFE_AI14, ///< AI execution for player slot 15
|
||||
PFE_MAX, ///< End of enum, must be last.
|
||||
enum class PerformanceElement : uint8_t {
|
||||
GameLoop, ///< Speed of gameloop processing.
|
||||
GameLoopEconomy, ///< Time spent processing cargo movement
|
||||
GameLoopTrains, ///< Time spent processing trains
|
||||
GameLoopRoadVehicles, ///< Time spend processing road vehicles
|
||||
GameLoopShips, ///< Time spent processing ships
|
||||
GameLoopAircraft, ///< Time spent processing aircraft
|
||||
GameLoopLandscape, ///< Time spent processing other world features
|
||||
GameLoopLinkGraph, ///< Time spent waiting for link graph background jobs
|
||||
Drawing, ///< Speed of drawing world and GUI.
|
||||
ViewportDrawing, ///< Time spent drawing world viewports in GUI
|
||||
Video, ///< Speed of painting drawn video buffer.
|
||||
Sound, ///< Speed of mixing audio samples
|
||||
AllScripts, ///< Sum of all GS/AI scripts
|
||||
GameScript, ///< Game script execution
|
||||
AI0, ///< AI execution for player slot 1
|
||||
AI1, ///< AI execution for player slot 2
|
||||
AI2, ///< AI execution for player slot 3
|
||||
AI3, ///< AI execution for player slot 4
|
||||
AI4, ///< AI execution for player slot 5
|
||||
AI5, ///< AI execution for player slot 6
|
||||
AI6, ///< AI execution for player slot 7
|
||||
AI7, ///< AI execution for player slot 8
|
||||
AI8, ///< AI execution for player slot 9
|
||||
AI9, ///< AI execution for player slot 10
|
||||
AI10, ///< AI execution for player slot 11
|
||||
AI11, ///< AI execution for player slot 12
|
||||
AI12, ///< AI execution for player slot 13
|
||||
AI13, ///< AI execution for player slot 14
|
||||
AI14, ///< AI execution for player slot 15
|
||||
End, ///< End of enum, must be last.
|
||||
};
|
||||
DECLARE_ENUM_AS_SEQUENTIAL(PerformanceElement)
|
||||
|
||||
/** Type used to hold a performance timing measurement */
|
||||
typedef uint64_t TimingMeasurement;
|
||||
|
||||
@@ -31,15 +31,15 @@
|
||||
/* static */ void Game::GameLoop()
|
||||
{
|
||||
if (_networking && !_network_server) {
|
||||
PerformanceMeasurer::SetInactive(PFE_GAMESCRIPT);
|
||||
PerformanceMeasurer::SetInactive(PerformanceElement::GameScript);
|
||||
return;
|
||||
}
|
||||
if (Game::instance == nullptr) {
|
||||
PerformanceMeasurer::SetInactive(PFE_GAMESCRIPT);
|
||||
PerformanceMeasurer::SetInactive(PerformanceElement::GameScript);
|
||||
return;
|
||||
}
|
||||
|
||||
PerformanceMeasurer framerate(PFE_GAMESCRIPT);
|
||||
PerformanceMeasurer framerate(PerformanceElement::GameScript);
|
||||
|
||||
Game::frame_counter++;
|
||||
|
||||
|
||||
+14
-14
@@ -107,7 +107,7 @@ void Gamelog::Reset()
|
||||
* @param md5sum array of md5sum to print, if known
|
||||
* @param gc GrfConfig, if known
|
||||
*/
|
||||
static void AddGrfInfo(std::back_insert_iterator<std::string> &output_iterator, uint32_t grfid, const MD5Hash *md5sum, const GRFConfig *gc)
|
||||
static void AddGrfInfo(std::back_insert_iterator<std::string> &output_iterator, GrfID grfid, const MD5Hash *md5sum, const GRFConfig *gc)
|
||||
{
|
||||
if (md5sum != nullptr) {
|
||||
fmt::format_to(output_iterator, "GRF ID {:08X}, checksum {}", std::byteswap(grfid), FormatArrayAsHex(*md5sum));
|
||||
@@ -194,23 +194,23 @@ void Gamelog::Print(std::function<void(const std::string &)> proc)
|
||||
fmt::format_to(output_iterator, "Conversion from ");
|
||||
switch (this->type) {
|
||||
default: NOT_REACHED();
|
||||
case SGT_OTTD:
|
||||
case SavegameType::OTTD:
|
||||
fmt::format_to(output_iterator, "OTTD savegame without gamelog: version {}, {}",
|
||||
GB(this->version, 8, 16), GB(this->version, 0, 8));
|
||||
break;
|
||||
|
||||
case SGT_TTO:
|
||||
case SavegameType::TTO:
|
||||
fmt::format_to(output_iterator, "TTO savegame");
|
||||
break;
|
||||
|
||||
case SGT_TTD:
|
||||
case SavegameType::TTD:
|
||||
fmt::format_to(output_iterator, "TTD savegame");
|
||||
break;
|
||||
|
||||
case SGT_TTDP1:
|
||||
case SGT_TTDP2:
|
||||
case SavegameType::TTDP1:
|
||||
case SavegameType::TTDP2:
|
||||
fmt::format_to(output_iterator, "TTDP savegame, {} format",
|
||||
this->type == SGT_TTDP1 ? "old" : "new");
|
||||
this->type == SavegameType::TTDP1 ? "old" : "new");
|
||||
if (this->version != 0) {
|
||||
fmt::format_to(output_iterator, ", TTDP version {}.{}.{}.{}",
|
||||
GB(this->version, 24, 8), GB(this->version, 20, 4),
|
||||
@@ -380,7 +380,7 @@ void Gamelog::Revision()
|
||||
assert(this->action_type == GamelogActionType::Start || this->action_type == GamelogActionType::Load);
|
||||
|
||||
this->Change(std::make_unique<LoggedChangeRevision>(
|
||||
GetGamelogRevisionString(), _openttd_newgrf_version, SAVEGAME_VERSION, _openttd_revision_modified));
|
||||
GetGamelogRevisionString(), _openttd_newgrf_version, to_underlying(SAVEGAME_VERSION), _openttd_revision_modified));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -401,7 +401,7 @@ void Gamelog::Oldver()
|
||||
assert(this->action_type == GamelogActionType::Load);
|
||||
|
||||
this->Change(std::make_unique<LoggedChangeOldVersion>(_savegame_type,
|
||||
(_savegame_type == SGT_OTTD ? ((uint32_t)_sl_version << 8 | _sl_minor_version) : _ttdp_version)));
|
||||
(_savegame_type == SavegameType::OTTD ? (static_cast<uint32_t>(_sl_version) << 8 | _sl_minor_version) : _ttdp_version)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -463,7 +463,7 @@ void Gamelog::TestMode()
|
||||
* @param bug type of bug, @see enum GRFBugs
|
||||
* @param data additional data
|
||||
*/
|
||||
void Gamelog::GRFBug(uint32_t grfid, ::GRFBug bug, uint64_t data)
|
||||
void Gamelog::GRFBug(GrfID grfid, ::GRFBug bug, uint64_t data)
|
||||
{
|
||||
assert(this->action_type == GamelogActionType::GRFBug);
|
||||
|
||||
@@ -479,7 +479,7 @@ void Gamelog::GRFBug(uint32_t grfid, ::GRFBug bug, uint64_t data)
|
||||
* @param internal_id the internal ID of whatever's broken in the NewGRF
|
||||
* @return true iff a unique record was done
|
||||
*/
|
||||
bool Gamelog::GRFBugReverse(uint32_t grfid, uint16_t internal_id)
|
||||
bool Gamelog::GRFBugReverse(GrfID grfid, uint16_t internal_id)
|
||||
{
|
||||
for (const LoggedAction &la : this->data->action) {
|
||||
for (const auto &lc : la.change) {
|
||||
@@ -514,7 +514,7 @@ static inline bool IsLoggableGrfConfig(const GRFConfig &g)
|
||||
* Logs removal of a GRF
|
||||
* @param grfid ID of removed GRF
|
||||
*/
|
||||
void Gamelog::GRFRemove(uint32_t grfid)
|
||||
void Gamelog::GRFRemove(GrfID grfid)
|
||||
{
|
||||
assert(this->action_type == GamelogActionType::Load || this->action_type == GamelogActionType::GRF);
|
||||
|
||||
@@ -551,7 +551,7 @@ void Gamelog::GRFCompatible(const GRFIdentifier &newg)
|
||||
* @param grfid GRF that is moved
|
||||
* @param offset how far it is moved, positive = moved down
|
||||
*/
|
||||
void Gamelog::GRFMove(uint32_t grfid, int32_t offset)
|
||||
void Gamelog::GRFMove(GrfID grfid, int32_t offset)
|
||||
{
|
||||
assert(this->action_type == GamelogActionType::GRF);
|
||||
|
||||
@@ -563,7 +563,7 @@ void Gamelog::GRFMove(uint32_t grfid, int32_t offset)
|
||||
* Details about parameters changed are not stored
|
||||
* @param grfid ID of GRF to store
|
||||
*/
|
||||
void Gamelog::GRFParameters(uint32_t grfid)
|
||||
void Gamelog::GRFParameters(GrfID grfid)
|
||||
{
|
||||
assert(this->action_type == GamelogActionType::GRF);
|
||||
|
||||
|
||||
+6
-5
@@ -11,6 +11,7 @@
|
||||
#define GAMELOG_H
|
||||
|
||||
#include "newgrf_config.h"
|
||||
#include "newgrf_type.h"
|
||||
|
||||
/** The actions we log. */
|
||||
enum class GamelogActionType : uint8_t {
|
||||
@@ -78,13 +79,13 @@ public:
|
||||
|
||||
void GRFUpdate(const GRFConfigList &oldg, const GRFConfigList &newg);
|
||||
void GRFAddList(const GRFConfigList &newg);
|
||||
void GRFRemove(uint32_t grfid);
|
||||
void GRFRemove(GrfID grfid);
|
||||
void GRFAdd(const GRFConfig &newg);
|
||||
void GRFBug(uint32_t grfid, ::GRFBug bug, uint64_t data);
|
||||
bool GRFBugReverse(uint32_t grfid, uint16_t internal_id);
|
||||
void GRFBug(GrfID grfid, ::GRFBug bug, uint64_t data);
|
||||
bool GRFBugReverse(GrfID grfid, uint16_t internal_id);
|
||||
void GRFCompatible(const GRFIdentifier &newg);
|
||||
void GRFMove(uint32_t grfid, int32_t offset);
|
||||
void GRFParameters(uint32_t grfid);
|
||||
void GRFMove(GrfID grfid, int32_t offset);
|
||||
void GRFParameters(GrfID grfid);
|
||||
|
||||
void TestRevision();
|
||||
void TestMode();
|
||||
|
||||
+98
-11
@@ -25,13 +25,25 @@ struct GRFPresence {
|
||||
const GRFConfig *gc = nullptr; ///< GRFConfig, if known
|
||||
bool was_missing = false; ///< Grf was missing during some gameload in the past
|
||||
|
||||
/**
|
||||
* Create the presence.
|
||||
* @param gc The configuration of the NewGRF.
|
||||
*/
|
||||
GRFPresence(const GRFConfig *gc) : gc(gc) {}
|
||||
|
||||
/** Create an empty presence. */
|
||||
GRFPresence() = default;
|
||||
};
|
||||
using GrfIDMapping = std::map<uint32_t, GRFPresence>;
|
||||
using GrfIDMapping = std::map<GrfID, GRFPresence>; ///< A mapping from \c GrfID to the \c GRFPresence.
|
||||
|
||||
/** Container for any change that we deem needs to be logged. */
|
||||
struct LoggedChange {
|
||||
/**
|
||||
* Create the log entry.
|
||||
* @param type The type of change to log.
|
||||
*/
|
||||
LoggedChange(GamelogChangeType type = GamelogChangeType::None) : ct(type) {}
|
||||
|
||||
/** Ensure the destructor of the sub classes are called as well. */
|
||||
virtual ~LoggedChange() = default;
|
||||
|
||||
@@ -43,7 +55,7 @@ struct LoggedChange {
|
||||
*/
|
||||
virtual void FormatTo(std::back_insert_iterator<std::string> &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) = 0;
|
||||
|
||||
GamelogChangeType ct{};
|
||||
GamelogChangeType ct{}; ///< The type of change.
|
||||
};
|
||||
|
||||
/** Log element for the change of the game mode and landscape. */
|
||||
@@ -64,8 +76,18 @@ struct LoggedChangeMode : LoggedChange {
|
||||
LandscapeType landscape{}; ///< landscape (temperate, arctic, ...)
|
||||
};
|
||||
|
||||
/** A log entry for a change in OpenTTD version. */
|
||||
struct LoggedChangeRevision : LoggedChange {
|
||||
/** Constructor for savegame loading. */
|
||||
LoggedChangeRevision() : LoggedChange(GamelogChangeType::Revision) {}
|
||||
|
||||
/**
|
||||
* Create the new log entry.
|
||||
* @param text The string representation of the version.
|
||||
* @param newgrf The NewGRF version.
|
||||
* @param slver The savegame version.
|
||||
* @param modified Whether the executable was modified.
|
||||
*/
|
||||
LoggedChangeRevision(const std::string &text, uint32_t newgrf, uint16_t slver, uint8_t modified) :
|
||||
LoggedChange(GamelogChangeType::Revision), text(text), newgrf(newgrf), slver(slver), modified(modified) {}
|
||||
void FormatTo(std::back_insert_iterator<std::string> &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override;
|
||||
@@ -76,8 +98,16 @@ struct LoggedChangeRevision : LoggedChange {
|
||||
uint8_t modified = 0; ///< _openttd_revision_modified
|
||||
};
|
||||
|
||||
/** A log entry for loading a really old savegame. */
|
||||
struct LoggedChangeOldVersion : LoggedChange {
|
||||
/** Constructor for savegame loading. */
|
||||
LoggedChangeOldVersion() : LoggedChange(GamelogChangeType::OldVer) {}
|
||||
|
||||
/**
|
||||
* Create the entry.
|
||||
* @param type The \c SavegameType.
|
||||
* @param version The TTDP or ancient OpenTTD version if available.
|
||||
*/
|
||||
LoggedChangeOldVersion(uint32_t type, uint32_t version) :
|
||||
LoggedChange(GamelogChangeType::OldVer), type(type), version(version) {}
|
||||
void FormatTo(std::back_insert_iterator<std::string> &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override;
|
||||
@@ -86,50 +116,95 @@ struct LoggedChangeOldVersion : LoggedChange {
|
||||
uint32_t version = 0; ///< major and minor version OR ttdp version
|
||||
};
|
||||
|
||||
/** A log entry for a NewGRF that was added. */
|
||||
struct LoggedChangeGRFAdd : LoggedChange, GRFIdentifier {
|
||||
/** Constructor for savegame loading. */
|
||||
LoggedChangeGRFAdd() : LoggedChange(GamelogChangeType::GRFAdd) {}
|
||||
|
||||
/**
|
||||
* Create a log entry for an added NewGRF.
|
||||
* @param ident The NewGRF that is added.
|
||||
*/
|
||||
LoggedChangeGRFAdd(const GRFIdentifier &ident) :
|
||||
LoggedChange(GamelogChangeType::GRFAdd), GRFIdentifier(ident) {}
|
||||
void FormatTo(std::back_insert_iterator<std::string> &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override;
|
||||
};
|
||||
|
||||
/** A log entry for a NewGRF that was removed. */
|
||||
struct LoggedChangeGRFRemoved : LoggedChange {
|
||||
/** Constructor for savegame loading. */
|
||||
LoggedChangeGRFRemoved() : LoggedChange(GamelogChangeType::GRFRem) {}
|
||||
LoggedChangeGRFRemoved(uint32_t grfid) :
|
||||
|
||||
/**
|
||||
* Create a log entry for a removed NewGRF.
|
||||
* @param grfid The NewGRF that is removed.
|
||||
*/
|
||||
LoggedChangeGRFRemoved(GrfID grfid) :
|
||||
LoggedChange(GamelogChangeType::GRFRem), grfid(grfid) {}
|
||||
void FormatTo(std::back_insert_iterator<std::string> &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override;
|
||||
|
||||
uint32_t grfid = 0; ///< ID of removed GRF
|
||||
GrfID grfid{}; ///< ID of removed GRF
|
||||
};
|
||||
|
||||
/** A log entry for a NewGRF that was changed. */
|
||||
struct LoggedChangeGRFChanged : LoggedChange, GRFIdentifier {
|
||||
/** Constructor for savegame loading. */
|
||||
LoggedChangeGRFChanged() : LoggedChange(GamelogChangeType::GRFCompat) {}
|
||||
|
||||
/**
|
||||
* Create a log entry for a changed NewGRF.
|
||||
* @param ident The NewGRF that is changed.
|
||||
*/
|
||||
LoggedChangeGRFChanged(const GRFIdentifier &ident) :
|
||||
LoggedChange(GamelogChangeType::GRFCompat), GRFIdentifier(ident) {}
|
||||
void FormatTo(std::back_insert_iterator<std::string> &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override;
|
||||
};
|
||||
|
||||
/** A log entry for a NewGRF for which a parameter was changed. */
|
||||
struct LoggedChangeGRFParameterChanged : LoggedChange {
|
||||
/** Constructor for savegame loading. */
|
||||
LoggedChangeGRFParameterChanged() : LoggedChange(GamelogChangeType::GRFParam) {}
|
||||
LoggedChangeGRFParameterChanged(uint32_t grfid) :
|
||||
|
||||
/**
|
||||
* Create a log entry for a parameter change of a NewGRF.
|
||||
* @param grfid The NewGRF for which the parameter is changed.
|
||||
*/
|
||||
LoggedChangeGRFParameterChanged(GrfID grfid) :
|
||||
LoggedChange(GamelogChangeType::GRFParam), grfid(grfid) {}
|
||||
void FormatTo(std::back_insert_iterator<std::string> &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override;
|
||||
|
||||
uint32_t grfid = 0; ///< ID of GRF with changed parameters
|
||||
GrfID grfid{}; ///< ID of GRF with changed parameters
|
||||
};
|
||||
|
||||
/** A log entry for a NewGRF that was moved. */
|
||||
struct LoggedChangeGRFMoved : LoggedChange {
|
||||
/** Constructor for savegame loading. */
|
||||
LoggedChangeGRFMoved() : LoggedChange(GamelogChangeType::GRFMove) {}
|
||||
LoggedChangeGRFMoved(uint32_t grfid, int32_t offset) :
|
||||
|
||||
/**
|
||||
* Create a log entry for a moved NewGRF.
|
||||
* @param grfid The NewGRF that is moved.
|
||||
* @param offset The amount the NewGRF was moved.
|
||||
*/
|
||||
LoggedChangeGRFMoved(GrfID grfid, int32_t offset) :
|
||||
LoggedChange(GamelogChangeType::GRFMove), grfid(grfid), offset(offset) {}
|
||||
void FormatTo(std::back_insert_iterator<std::string> &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override;
|
||||
|
||||
uint32_t grfid = 0; ///< ID of moved GRF
|
||||
GrfID grfid{}; ///< ID of moved GRF
|
||||
int32_t offset = 0; ///< offset, positive = move down
|
||||
};
|
||||
|
||||
/** A log entry for changing a setting. */
|
||||
struct LoggedChangeSettingChanged : LoggedChange {
|
||||
/** Constructor for savegame loading. */
|
||||
LoggedChangeSettingChanged() : LoggedChange(GamelogChangeType::Setting) {}
|
||||
|
||||
/**
|
||||
* Create the log entry.
|
||||
* @param name The name of the setting.
|
||||
* @param oldval The value before the change.
|
||||
* @param newval The value after the change.
|
||||
*/
|
||||
LoggedChangeSettingChanged(const std::string &name, int32_t oldval, int32_t newval) :
|
||||
LoggedChange(GamelogChangeType::Setting), name(name), oldval(oldval), newval(newval) {}
|
||||
void FormatTo(std::back_insert_iterator<std::string> &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override;
|
||||
@@ -139,18 +214,29 @@ struct LoggedChangeSettingChanged : LoggedChange {
|
||||
int32_t newval = 0; ///< new value
|
||||
};
|
||||
|
||||
/** A log entry for a NewGRF bug. */
|
||||
struct LoggedChangeGRFBug : LoggedChange {
|
||||
/** Constructor for savegame loading. */
|
||||
LoggedChangeGRFBug() : LoggedChange(GamelogChangeType::GRFBug) {}
|
||||
LoggedChangeGRFBug(uint64_t data, uint32_t grfid, GRFBug bug) :
|
||||
|
||||
/**
|
||||
* Create a NewGRF bug log entry.
|
||||
* @param data Bug specific extra data for identifying the buggy entry.
|
||||
* @param grfid The NewGRF that is deemed buggy.
|
||||
* @param bug The bug that has been seen.
|
||||
*/
|
||||
LoggedChangeGRFBug(uint64_t data, GrfID grfid, GRFBug bug) :
|
||||
LoggedChange(GamelogChangeType::GRFBug), data(data), grfid(grfid), bug(bug) {}
|
||||
void FormatTo(std::back_insert_iterator<std::string> &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override;
|
||||
|
||||
uint64_t data = 0; ///< additional data
|
||||
uint32_t grfid = 0; ///< ID of problematic GRF
|
||||
GrfID grfid{}; ///< ID of problematic GRF
|
||||
GRFBug bug{}; ///< type of bug, @see enum GRFBugs
|
||||
};
|
||||
|
||||
/** A log entry denoting that this savegame was involved in an emergency (crash) save. */
|
||||
struct LoggedChangeEmergencySave : LoggedChange {
|
||||
/** Create the entry. */
|
||||
LoggedChangeEmergencySave() : LoggedChange(GamelogChangeType::Emergency) {}
|
||||
void FormatTo(std::back_insert_iterator<std::string> &output_iterator, GrfIDMapping &grf_names, GamelogActionType action_type) override;
|
||||
};
|
||||
@@ -163,8 +249,9 @@ struct LoggedAction {
|
||||
uint64_t tick = 0; ///< Tick when it happened
|
||||
};
|
||||
|
||||
/** Container for some internal data. */
|
||||
struct GamelogInternalData {
|
||||
std::vector<LoggedAction> action;
|
||||
std::vector<LoggedAction> action; ///< The known actions.
|
||||
};
|
||||
|
||||
#endif /* GAMELOG_INTERNAL_H */
|
||||
|
||||
+1
-1
@@ -461,7 +461,7 @@ void LoadTownData()
|
||||
/* Try founding on the target tile, and if that doesn't work, find the nearest suitable tile up to 16 tiles away.
|
||||
* The target might be on water, blocked somehow, or on a steep slope that can't be terraformed by the founding command. */
|
||||
for (auto tile : SpiralTileSequence(target_tile, 16, 0, 0)) {
|
||||
std::tuple<CommandCost, Money, TownID> result = Command<Commands::FoundTown>::Do(DoCommandFlag::Execute, tile, TSZ_SMALL, is_city, _settings_game.economy.town_layout, false, 0, name);
|
||||
std::tuple<CommandCost, Money, TownID> result = Command<Commands::FoundTown>::Do(DoCommandFlag::Execute, tile, TownSize::Small, is_city, _settings_game.economy.town_layout, false, 0, name);
|
||||
|
||||
town_id = std::get<TownID>(result);
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_generate_landscape_w
|
||||
/* Mapsize X * Y. */
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0),
|
||||
NWidget(WWT_DROPDOWN, Colours::Orange, WID_GL_MAPSIZE_X_PULLDOWN), SetToolTip(STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_BY), SetFill(0, 1), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_BY), SetFill(0, 1), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(WWT_DROPDOWN, Colours::Orange, WID_GL_MAPSIZE_Y_PULLDOWN), SetToolTip(STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
NWidget(WWT_DROPDOWN, Colours::Orange, WID_GL_MAX_HEIGHT_PULLDOWN), SetToolTip(STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT), SetFill(1, 1),
|
||||
@@ -178,13 +178,13 @@ static constexpr std::initializer_list<NWidgetPart> _nested_generate_landscape_w
|
||||
/* Map borders buttons for each edge. */
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_HORIZONTAL, NWidContainerFlag::EqualSize),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_NORTHWEST), SetPadding(0, WidgetDimensions::unscaled.hsep_normal, 0, 0), SetFill(1, 1), SetAlignment(SA_RIGHT | SA_VERT_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_NORTHWEST), SetPadding(0, WidgetDimensions::unscaled.hsep_normal, 0, 0), SetFill(1, 1), SetAlignment({AlignmentH::End, AlignmentV::Middle}),
|
||||
NWidget(WWT_TEXTBTN, Colours::Orange, WID_GL_WATER_NW), SetToolTip(STR_MAPGEN_NORTHWEST_TOOLTIP), SetFill(1, 1),
|
||||
NWidget(WWT_TEXTBTN, Colours::Orange, WID_GL_WATER_NE), SetToolTip(STR_MAPGEN_NORTHEAST_TOOLTIP), SetFill(1, 1),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_NORTHEAST), SetPadding(0, 0, 0, WidgetDimensions::unscaled.hsep_normal), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL, NWidContainerFlag::EqualSize),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_SOUTHWEST), SetPadding(0, WidgetDimensions::unscaled.hsep_normal, 0, 0), SetFill(1, 1), SetAlignment(SA_RIGHT | SA_VERT_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_SOUTHWEST), SetPadding(0, WidgetDimensions::unscaled.hsep_normal, 0, 0), SetFill(1, 1), SetAlignment({AlignmentH::End, AlignmentV::Middle}),
|
||||
NWidget(WWT_TEXTBTN, Colours::Orange, WID_GL_WATER_SW), SetToolTip(STR_MAPGEN_SOUTHWEST_TOOLTIP), SetFill(1, 1),
|
||||
NWidget(WWT_TEXTBTN, Colours::Orange, WID_GL_WATER_SE), SetToolTip(STR_MAPGEN_SOUTHEAST_TOOLTIP), SetFill(1, 1),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_SOUTHEAST), SetPadding(0, 0, 0, WidgetDimensions::unscaled.hsep_normal), SetFill(1, 1),
|
||||
@@ -248,7 +248,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_heightmap_load_widge
|
||||
/* Mapsize X * Y. */
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0),
|
||||
NWidget(WWT_DROPDOWN, Colours::Orange, WID_GL_MAPSIZE_X_PULLDOWN), SetToolTip(STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_BY), SetFill(0, 1), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_BY), SetFill(0, 1), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(WWT_DROPDOWN, Colours::Orange, WID_GL_MAPSIZE_Y_PULLDOWN), SetToolTip(STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
NWidget(WWT_DROPDOWN, Colours::Orange, WID_GL_HEIGHTMAP_ROTATION_PULLDOWN), SetToolTip(STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP), SetFill(1, 1),
|
||||
@@ -1301,7 +1301,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_create_scenario_widg
|
||||
/* Map size. */
|
||||
NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0),
|
||||
NWidget(WWT_DROPDOWN, Colours::Orange, WID_CS_MAPSIZE_X_PULLDOWN), SetToolTip(STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_BY), SetFill(0, 1), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid), SetStringTip(STR_MAPGEN_BY), SetFill(0, 1), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(WWT_DROPDOWN, Colours::Orange, WID_CS_MAPSIZE_Y_PULLDOWN), SetToolTip(STR_MAPGEN_MAPSIZE_TOOLTIP), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
|
||||
@@ -1443,17 +1443,17 @@ struct GenerateProgressWindow : public Window {
|
||||
DrawFrameRect(r, Colours::Grey, {FrameFlag::BorderOnly, FrameFlag::Lowered});
|
||||
Rect br = r.Shrink(WidgetDimensions::scaled.bevel);
|
||||
DrawFrameRect(br.WithWidth(br.Width() * GenWorldStatus::percent / 100, _current_text_dir == TD_RTL), Colours::Mauve, {});
|
||||
DrawString(br.CentreToHeight(GetCharacterHeight(FontSize::Normal)), GetString(STR_GENERATION_PROGRESS, GenWorldStatus::percent), TextColour::FromString, SA_HOR_CENTER);
|
||||
DrawString(br.CentreToHeight(GetCharacterHeight(FontSize::Normal)), GetString(STR_GENERATION_PROGRESS, GenWorldStatus::percent), TextColour::FromString, AlignmentH::Centre);
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_GP_PROGRESS_TEXT:
|
||||
/* Tell which class we are generating */
|
||||
DrawString(r.left, r.right, r.top, GenWorldStatus::cls, TextColour::FromString, SA_HOR_CENTER);
|
||||
DrawString(r.left, r.right, r.top, GenWorldStatus::cls, TextColour::FromString, AlignmentH::Centre);
|
||||
|
||||
/* And say where we are in that class */
|
||||
DrawString(r.left, r.right, r.top + GetCharacterHeight(FontSize::Normal) + WidgetDimensions::scaled.vsep_normal,
|
||||
GetString(STR_GENERATION_PROGRESS_NUM, GenWorldStatus::current, GenWorldStatus::total), TextColour::FromString, SA_HOR_CENTER);
|
||||
GetString(STR_GENERATION_PROGRESS_NUM, GenWorldStatus::current, GenWorldStatus::total), TextColour::FromString, AlignmentH::Centre);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
+19
-19
@@ -503,7 +503,7 @@ static void SetColourRemap(ExtendedTextColour colour)
|
||||
* @return In case of left or center alignment the right most pixel we have drawn to.
|
||||
* In case of right alignment the left most pixel we have drawn to.
|
||||
*/
|
||||
static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left, int right, StringAlignment align, bool underline, bool truncation, ExtendedTextColour default_colour)
|
||||
static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left, int right, Alignment align, bool underline, bool truncation, ExtendedTextColour default_colour)
|
||||
{
|
||||
if (line.CountRuns() == 0) return 0;
|
||||
|
||||
@@ -556,26 +556,26 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left,
|
||||
}
|
||||
|
||||
/* In case we have a RTL language we swap the alignment. */
|
||||
if (!(align & SA_FORCE) && _current_text_dir == TD_RTL && (align & SA_HOR_MASK) != SA_HOR_CENTER) align ^= SA_RIGHT;
|
||||
align.h = align.ResolveRTL();
|
||||
|
||||
/* right is the right most position to draw on. In this case we want to do
|
||||
* calculations with the width of the string. In comparison right can be
|
||||
* seen as lastof(todraw) and width as lengthof(todraw). They differ by 1.
|
||||
* So most +1/-1 additions are to move from lengthof to 'indices'.
|
||||
*/
|
||||
switch (align & SA_HOR_MASK) {
|
||||
case SA_LEFT:
|
||||
switch (align.h) {
|
||||
case AlignmentH::ForceLeft:
|
||||
/* right + 1 = left + w */
|
||||
right = left + w - 1;
|
||||
break;
|
||||
|
||||
case SA_HOR_CENTER:
|
||||
case AlignmentH::Centre:
|
||||
left = RoundDivSU(right + 1 + left - w, 2);
|
||||
/* right + 1 = left + w */
|
||||
right = left + w - 1;
|
||||
break;
|
||||
|
||||
case SA_RIGHT:
|
||||
case AlignmentH::ForceRight:
|
||||
left = right + 1 - w;
|
||||
break;
|
||||
|
||||
@@ -645,7 +645,7 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left,
|
||||
GfxFillRect(left, y + h, right, y + h + WidgetDimensions::scaled.bevel.top - 1, PixelColour{_string_colourremap[1]});
|
||||
}
|
||||
|
||||
return (align & SA_HOR_MASK) == SA_RIGHT ? left : right;
|
||||
return align.h == AlignmentH::ForceRight ? left : right;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -665,7 +665,7 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left,
|
||||
* @return In case of left or center alignment the right most pixel we have drawn to.
|
||||
* In case of right alignment the left most pixel we have drawn to.
|
||||
*/
|
||||
int DrawString(int left, int right, int top, std::string_view str, ExtendedTextColour colour, StringAlignment align, bool underline, FontSize fontsize)
|
||||
int DrawString(int left, int right, int top, std::string_view str, ExtendedTextColour colour, Alignment align, bool underline, FontSize fontsize)
|
||||
{
|
||||
/* The string may contain control chars to change the font, just use the biggest font for clipping. */
|
||||
int max_height = std::max({GetCharacterHeight(FontSize::Small), GetCharacterHeight(FontSize::Normal), GetCharacterHeight(FontSize::Large), GetCharacterHeight(FontSize::Monospace)});
|
||||
@@ -701,7 +701,7 @@ int DrawString(int left, int right, int top, std::string_view str, ExtendedTextC
|
||||
* @return In case of left or center alignment the right most pixel we have drawn to.
|
||||
* In case of right alignment the left most pixel we have drawn to.
|
||||
*/
|
||||
int DrawString(int left, int right, int top, StringID str, ExtendedTextColour colour, StringAlignment align, bool underline, FontSize fontsize)
|
||||
int DrawString(int left, int right, int top, StringID str, ExtendedTextColour colour, Alignment align, bool underline, FontSize fontsize)
|
||||
{
|
||||
return DrawString(left, right, top, GetString(str), colour, align, underline, fontsize);
|
||||
}
|
||||
@@ -782,9 +782,9 @@ Dimension GetStringMultiLineBoundingBox(std::string_view str, const Dimension &s
|
||||
* @param underline Whether to underline all strings
|
||||
* @param fontsize The size of the initial characters.
|
||||
*
|
||||
* @return If \a align is #SA_BOTTOM, the top to where we have written, else the bottom to where we have written.
|
||||
* @return If \a align is #AlignmentV::Bottom, the top to where we have written, else the bottom to where we have written.
|
||||
*/
|
||||
int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_view str, ExtendedTextColour colour, StringAlignment align, bool underline, FontSize fontsize)
|
||||
int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_view str, ExtendedTextColour colour, Alignment align, bool underline, FontSize fontsize)
|
||||
{
|
||||
int maxw = right - left + 1;
|
||||
int maxh = bottom - top + 1;
|
||||
@@ -796,16 +796,16 @@ int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_vi
|
||||
Layouter layout(str, maxw, fontsize);
|
||||
int total_height = layout.GetBounds().height;
|
||||
int y;
|
||||
switch (align & SA_VERT_MASK) {
|
||||
case SA_TOP:
|
||||
switch (align.v) {
|
||||
case AlignmentV::Top:
|
||||
y = top;
|
||||
break;
|
||||
|
||||
case SA_VERT_CENTER:
|
||||
case AlignmentV::Middle:
|
||||
y = RoundDivSU(bottom + top - total_height, 2);
|
||||
break;
|
||||
|
||||
case SA_BOTTOM:
|
||||
case AlignmentV::Bottom:
|
||||
y = bottom - total_height;
|
||||
break;
|
||||
|
||||
@@ -827,7 +827,7 @@ int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_vi
|
||||
y += line_height;
|
||||
}
|
||||
|
||||
return ((align & SA_VERT_MASK) == SA_BOTTOM) ? first_line : last_line;
|
||||
return align.v == AlignmentV::Bottom ? first_line : last_line;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -844,9 +844,9 @@ int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_vi
|
||||
* @param underline Whether to underline all strings
|
||||
* @param fontsize The size of the initial characters.
|
||||
*
|
||||
* @return If \a align is #SA_BOTTOM, the top to where we have written, else the bottom to where we have written.
|
||||
* @return If \a align is #AlignmentV::Bottom, the top to where we have written, else the bottom to where we have written.
|
||||
*/
|
||||
int DrawStringMultiLine(int left, int right, int top, int bottom, StringID str, ExtendedTextColour colour, StringAlignment align, bool underline, FontSize fontsize)
|
||||
int DrawStringMultiLine(int left, int right, int top, int bottom, StringID str, ExtendedTextColour colour, Alignment align, bool underline, FontSize fontsize)
|
||||
{
|
||||
return DrawStringMultiLine(left, right, top, bottom, GetString(str), colour, align, underline, fontsize);
|
||||
}
|
||||
@@ -869,7 +869,7 @@ int DrawStringMultiLine(int left, int right, int top, int bottom, StringID str,
|
||||
*
|
||||
* @return true iff the string was drawn.
|
||||
*/
|
||||
bool DrawStringMultiLineWithClipping(int left, int right, int top, int bottom, std::string_view str, ExtendedTextColour colour, StringAlignment align, bool underline, FontSize fontsize)
|
||||
bool DrawStringMultiLineWithClipping(int left, int right, int top, int bottom, std::string_view str, ExtendedTextColour colour, Alignment align, bool underline, FontSize fontsize)
|
||||
{
|
||||
/* The string may contain control chars to change the font, just use the biggest font for clipping. */
|
||||
int max_height = std::max({GetCharacterHeight(FontSize::Small), GetCharacterHeight(FontSize::Normal), GetCharacterHeight(FontSize::Large), GetCharacterHeight(FontSize::Monospace)});
|
||||
|
||||
+14
-14
@@ -93,14 +93,14 @@ Dimension GetScaledSpriteSize(SpriteID sprid); /* widget.cpp */
|
||||
Dimension GetSquareScaledSpriteSize(SpriteID sprid); /* widget.cpp */
|
||||
void DrawSpriteViewport(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr);
|
||||
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr, ZoomLevel zoom = _gui_zoom);
|
||||
void DrawSpriteIgnorePadding(SpriteID img, PaletteID pal, const Rect &r, StringAlignment align); /* widget.cpp */
|
||||
void DrawSpriteIgnorePadding(SpriteID img, PaletteID pal, const Rect &r, Alignment align); /* widget.cpp */
|
||||
std::unique_ptr<uint32_t[]> DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel zoom = _gui_zoom);
|
||||
|
||||
int DrawString(int left, int right, int top, std::string_view str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FontSize::Normal);
|
||||
int DrawString(int left, int right, int top, StringID str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FontSize::Normal);
|
||||
int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_view str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FontSize::Normal);
|
||||
int DrawStringMultiLine(int left, int right, int top, int bottom, StringID str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FontSize::Normal);
|
||||
bool DrawStringMultiLineWithClipping(int left, int right, int top, int bottom, std::string_view str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FontSize::Normal);
|
||||
int DrawString(int left, int right, int top, std::string_view str, ExtendedTextColour colour = TextColour::FromString, Alignment align = AlignmentH::Start, bool underline = false, FontSize fontsize = FontSize::Normal);
|
||||
int DrawString(int left, int right, int top, StringID str, ExtendedTextColour colour = TextColour::FromString, Alignment align = AlignmentH::Start, bool underline = false, FontSize fontsize = FontSize::Normal);
|
||||
int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_view str, ExtendedTextColour colour = TextColour::FromString, Alignment align = {AlignmentH::Start, AlignmentV::Top}, bool underline = false, FontSize fontsize = FontSize::Normal);
|
||||
int DrawStringMultiLine(int left, int right, int top, int bottom, StringID str, ExtendedTextColour colour = TextColour::FromString, Alignment align = {AlignmentH::Start, AlignmentV::Top}, bool underline = false, FontSize fontsize = FontSize::Normal);
|
||||
bool DrawStringMultiLineWithClipping(int left, int right, int top, int bottom, std::string_view str, ExtendedTextColour colour = TextColour::FromString, Alignment align = {AlignmentH::Start, AlignmentV::Top}, bool underline = false, FontSize fontsize = FontSize::Normal);
|
||||
|
||||
void DrawCharCentered(char32_t c, const Rect &r, TextColour colour);
|
||||
|
||||
@@ -121,13 +121,13 @@ void DrawRectOutline(const Rect &r, PixelColour colour, int width = 1, int dash
|
||||
* @param fontsize The size of the initial characters.
|
||||
* @return In case of left or center alignment the right most pixel we have drawn to. In case of right alignment the left most pixel we have drawn to.
|
||||
*/
|
||||
inline int DrawString(const Rect &r, std::string_view str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FontSize::Normal)
|
||||
inline int DrawString(const Rect &r, std::string_view str, ExtendedTextColour colour = TextColour::FromString, Alignment align = AlignmentH::Start, bool underline = false, FontSize fontsize = FontSize::Normal)
|
||||
{
|
||||
return DrawString(r.left, r.right, r.top, str, colour, align, underline, fontsize);
|
||||
}
|
||||
|
||||
/** @copydoc DrawString(const Rect &r, std::string_view str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FontSize::Normal) */
|
||||
inline int DrawString(const Rect &r, StringID str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FontSize::Normal)
|
||||
/** @copydoc DrawString(const Rect &r, std::string_view str, ExtendedTextColour colour = TextColour::FromString, Alignment align = AlignmentH::Start, bool underline = false, FontSize fontsize = FontSize::Normal) */
|
||||
inline int DrawString(const Rect &r, StringID str, ExtendedTextColour colour = TextColour::FromString, Alignment align = AlignmentH::Start, bool underline = false, FontSize fontsize = FontSize::Normal)
|
||||
{
|
||||
return DrawString(r.left, r.right, r.top, str, colour, align, underline, fontsize);
|
||||
}
|
||||
@@ -142,15 +142,15 @@ inline int DrawString(const Rect &r, StringID str, ExtendedTextColour colour = T
|
||||
* @param underline Whether to underline all strings
|
||||
* @param fontsize The size of the initial characters.
|
||||
*
|
||||
* @return If \a align is #SA_BOTTOM, the top to where we have written, else the bottom to where we have written.
|
||||
* @return If \a align is #AlignmentV::Bottom, the top to where we have written, else the bottom to where we have written.
|
||||
*/
|
||||
inline int DrawStringMultiLine(const Rect &r, std::string_view str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FontSize::Normal)
|
||||
inline int DrawStringMultiLine(const Rect &r, std::string_view str, ExtendedTextColour colour = TextColour::FromString, Alignment align = {AlignmentH::Start, AlignmentV::Top}, bool underline = false, FontSize fontsize = FontSize::Normal)
|
||||
{
|
||||
return DrawStringMultiLine(r.left, r.right, r.top, r.bottom, str, colour, align, underline, fontsize);
|
||||
}
|
||||
|
||||
/** @copydoc DrawStringMultiLine(const Rect &r, std::string_view str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FontSize::Normal) */
|
||||
inline int DrawStringMultiLine(const Rect &r, StringID str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FontSize::Normal)
|
||||
/** @copydoc DrawStringMultiLine(const Rect &r, std::string_view str, ExtendedTextColour colour = TextColour::FromString, Alignment align = ({AlignmentH::Start, AlignmentV::Top}), bool underline = false, FontSize fontsize = FontSize::Normal) */
|
||||
inline int DrawStringMultiLine(const Rect &r, StringID str, ExtendedTextColour colour = TextColour::FromString, Alignment align = {AlignmentH::Start, AlignmentV::Top}, bool underline = false, FontSize fontsize = FontSize::Normal)
|
||||
{
|
||||
return DrawStringMultiLine(r.left, r.right, r.top, r.bottom, str, colour, align, underline, fontsize);
|
||||
}
|
||||
@@ -169,7 +169,7 @@ inline int DrawStringMultiLine(const Rect &r, StringID str, ExtendedTextColour c
|
||||
*
|
||||
* @return \c true iff the string was drawn.
|
||||
*/
|
||||
inline bool DrawStringMultiLineWithClipping(const Rect &r, std::string_view str, ExtendedTextColour colour = TextColour::FromString, StringAlignment align = (SA_TOP | SA_LEFT), bool underline = false, FontSize fontsize = FontSize::Normal)
|
||||
inline bool DrawStringMultiLineWithClipping(const Rect &r, std::string_view str, ExtendedTextColour colour = TextColour::FromString, Alignment align = {AlignmentH::Start, AlignmentV::Top}, bool underline = false, FontSize fontsize = FontSize::Normal)
|
||||
{
|
||||
return DrawStringMultiLineWithClipping(r.left, r.right, r.top, r.bottom, str, colour, align, underline, fontsize);
|
||||
}
|
||||
|
||||
@@ -430,24 +430,6 @@ enum class Support8bpp : uint8_t {
|
||||
Hardware, ///< Full 8bpp support by OS and hardware.
|
||||
};
|
||||
|
||||
/** How to align the to-be drawn text. */
|
||||
enum StringAlignment : uint8_t {
|
||||
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)
|
||||
|
||||
/** The four direction keys on a keyboard. */
|
||||
enum class DirectionKey {
|
||||
Left, ///< Left
|
||||
|
||||
+2
-2
@@ -211,7 +211,7 @@ struct GoalListWindow : public Window {
|
||||
case GC_PROGRESS:
|
||||
if (!s->progress.empty()) {
|
||||
StringID str = s->completed ? STR_GOALS_PROGRESS_COMPLETE : STR_GOALS_PROGRESS;
|
||||
DrawString(r.WithWidth(progress_col_width, !rtl), GetString(str, s->progress.GetDecodedString()), TextColour::FromString, SA_RIGHT | SA_FORCE);
|
||||
DrawString(r.WithWidth(progress_col_width, !rtl), GetString(str, s->progress.GetDecodedString()), TextColour::FromString, AlignmentH::ForceRight);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -380,7 +380,7 @@ struct GoalQuestionWindow : public Window {
|
||||
{
|
||||
if (widget != WID_GQ_QUESTION) return;
|
||||
|
||||
DrawStringMultiLine(r, this->question.GetDecodedString(), this->colour, SA_TOP | SA_HOR_CENTER);
|
||||
DrawStringMultiLine(r, this->question.GetDecodedString(), this->colour, {AlignmentH::Centre, AlignmentV::Top});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+50
-33
@@ -196,6 +196,12 @@ protected:
|
||||
const HistoryRange *history_range = nullptr;
|
||||
};
|
||||
|
||||
/** Label and tooltip for a graph range. */
|
||||
struct GraphRange {
|
||||
StringID label; ///< Label for this range.
|
||||
StringID tooltip; ///< Tooltip for this range.
|
||||
};
|
||||
|
||||
static inline constexpr GraphScale MONTHLY_SCALE_WALLCLOCK[] = {
|
||||
{STR_GRAPH_LAST_24_MINUTES_TIME_LABEL, HISTORY_MONTH.total_division, ECONOMY_MONTH_MINUTES, &HISTORY_MONTH},
|
||||
{STR_GRAPH_LAST_72_MINUTES_TIME_LABEL, HISTORY_QUARTER.total_division, ECONOMY_QUARTER_MINUTES, &HISTORY_QUARTER},
|
||||
@@ -240,7 +246,7 @@ protected:
|
||||
};
|
||||
std::vector<DataSet> data{};
|
||||
|
||||
std::span<const StringID> ranges{};
|
||||
std::span<const GraphRange> ranges{};
|
||||
std::span<const GraphScale> scales{};
|
||||
uint8_t selected_scale = 0;
|
||||
|
||||
@@ -482,11 +488,11 @@ protected:
|
||||
if (rtl) {
|
||||
DrawString(r.right + ScaleGUITrad(4), r.right + label_width + ScaleGUITrad(4), y,
|
||||
GetString(STR_GRAPH_Y_LABEL, this->format_str_y_axis, y_label),
|
||||
GRAPH_AXIS_LABEL_COLOUR, SA_RIGHT | SA_FORCE);
|
||||
GRAPH_AXIS_LABEL_COLOUR, AlignmentH::ForceRight);
|
||||
} else {
|
||||
DrawString(r.left - label_width - ScaleGUITrad(4), r.left - ScaleGUITrad(4), y,
|
||||
GetString(STR_GRAPH_Y_LABEL, this->format_str_y_axis, y_label),
|
||||
GRAPH_AXIS_LABEL_COLOUR, SA_RIGHT | SA_FORCE);
|
||||
GRAPH_AXIS_LABEL_COLOUR, AlignmentH::ForceRight);
|
||||
}
|
||||
|
||||
y_label -= y_label_separation;
|
||||
@@ -507,11 +513,11 @@ protected:
|
||||
if (rtl) {
|
||||
DrawStringMultiLineWithClipping(x + x_sep, x, y, this->height,
|
||||
GetString(mo == 0 ? STR_GRAPH_X_LABEL_MONTH_YEAR : STR_GRAPH_X_LABEL_MONTH, STR_MONTH_ABBREV_JAN + mo, yr),
|
||||
GRAPH_AXIS_LABEL_COLOUR, SA_LEFT);
|
||||
GRAPH_AXIS_LABEL_COLOUR, AlignmentH::Start);
|
||||
} else {
|
||||
DrawStringMultiLineWithClipping(x, x + x_sep, y, this->height,
|
||||
GetString(mo == 0 ? STR_GRAPH_X_LABEL_MONTH_YEAR : STR_GRAPH_X_LABEL_MONTH, STR_MONTH_ABBREV_JAN + mo, yr),
|
||||
GRAPH_AXIS_LABEL_COLOUR, SA_LEFT);
|
||||
GRAPH_AXIS_LABEL_COLOUR, AlignmentH::Start);
|
||||
}
|
||||
|
||||
mo += this->month_increment;
|
||||
@@ -538,9 +544,9 @@ protected:
|
||||
|
||||
for (int i = 0; i < this->num_on_x_axis; i++) {
|
||||
if (rtl) {
|
||||
DrawString(x + x_sep + 1, x - 1, y, GetString(STR_GRAPH_Y_LABEL_NUMBER, label), GRAPH_AXIS_LABEL_COLOUR, SA_HOR_CENTER);
|
||||
DrawString(x + x_sep + 1, x - 1, y, GetString(STR_GRAPH_Y_LABEL_NUMBER, label), GRAPH_AXIS_LABEL_COLOUR, AlignmentH::Centre);
|
||||
} else {
|
||||
DrawString(x + 1, x + x_sep - 1, y, GetString(STR_GRAPH_Y_LABEL_NUMBER, label), GRAPH_AXIS_LABEL_COLOUR, SA_HOR_CENTER);
|
||||
DrawString(x + 1, x + x_sep - 1, y, GetString(STR_GRAPH_Y_LABEL_NUMBER, label), GRAPH_AXIS_LABEL_COLOUR, AlignmentH::Centre);
|
||||
}
|
||||
|
||||
label += iterator;
|
||||
@@ -670,7 +676,7 @@ public:
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_GRAPH_RANGE_MATRIX:
|
||||
this->UpdateMatrixSize(widget, size, resize, this->ranges);
|
||||
this->UpdateMatrixSize(widget, size, resize, this->ranges | std::views::transform(&GraphRange::label));
|
||||
break;
|
||||
|
||||
case WID_GRAPH_SCALE_MATRIX:
|
||||
@@ -704,6 +710,17 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
bool OnTooltip([[maybe_unused]] Point pt, WidgetID widget, TooltipCloseCondition close_cond) override
|
||||
{
|
||||
if (widget != WID_GRAPH_RANGE_MATRIX) return false;
|
||||
|
||||
int row = GetRowFromWidget(pt.y, widget, 0, GetCharacterHeight(FontSize::Small) + WidgetDimensions::scaled.framerect.Vertical());
|
||||
if (row == INT_MAX) return false;
|
||||
|
||||
GuiShowTooltips(this, GetEncodedString(this->ranges[row].tooltip), close_cond);
|
||||
return true;
|
||||
}
|
||||
|
||||
void DrawWidget(const Rect &r, WidgetID widget) const override
|
||||
{
|
||||
switch (widget) {
|
||||
@@ -715,14 +732,14 @@ public:
|
||||
uint line_height = GetCharacterHeight(FontSize::Small) + WidgetDimensions::scaled.framerect.Vertical();
|
||||
uint index = 0;
|
||||
Rect line = r.WithHeight(line_height);
|
||||
for (const auto &str : this->ranges) {
|
||||
for (const auto &[label, tooltip] : this->ranges) {
|
||||
bool lowered = !HasBit(this->excluded_range, index) && !HasBit(this->masked_range, index);
|
||||
|
||||
/* Redraw frame if lowered */
|
||||
if (lowered) DrawFrameRect(line, Colours::Brown, FrameFlag::Lowered);
|
||||
|
||||
const Rect text = line.Shrink(WidgetDimensions::scaled.framerect);
|
||||
DrawString(text, str, (this->highlight_state && this->highlight_range == index) ? TextColour::White : TextColour::Black, SA_CENTER, false, FontSize::Small);
|
||||
DrawString(text, label, (this->highlight_state && this->highlight_range == index) ? TextColour::White : TextColour::Black, {AlignmentH::Centre, AlignmentV::Middle}, false, FontSize::Small);
|
||||
|
||||
if (HasBit(this->masked_range, index)) {
|
||||
GfxFillRect(line.Shrink(WidgetDimensions::scaled.bevel), GetColourGradient(Colours::Brown, Shade::Darker), FillRectMode::Checker);
|
||||
@@ -742,7 +759,7 @@ public:
|
||||
/* Redraw frame if selected */
|
||||
if (selected_month_increment == scale.month_increment) DrawFrameRect(line, Colours::Brown, FrameFlag::Lowered);
|
||||
|
||||
DrawString(line.Shrink(WidgetDimensions::scaled.framerect), scale.label, TextColour::Black, SA_CENTER, false, FontSize::Small);
|
||||
DrawString(line.Shrink(WidgetDimensions::scaled.framerect), scale.label, TextColour::Black, {AlignmentH::Centre, AlignmentV::Middle}, false, FontSize::Small);
|
||||
|
||||
line = line.Translate(0, line_height);
|
||||
}
|
||||
@@ -956,7 +973,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_operating_profit_wid
|
||||
NWidget(WWT_PANEL, Colours::Brown, WID_GRAPH_BACKGROUND),
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_GRAPH_GRAPH), SetMinimalSize(576, 160), SetFill(1, 1), SetResize(1, 1),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(WWT_RESIZEBOX, Colours::Brown, WID_GRAPH_RESIZE), SetResizeWidgetTypeTip(ResizeWidgetType::HideBevel, STR_TOOLTIP_RESIZE),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -1010,7 +1027,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_income_graph_widgets
|
||||
NWidget(WWT_PANEL, Colours::Brown, WID_GRAPH_BACKGROUND),
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_GRAPH_GRAPH), SetMinimalSize(576, 128), SetFill(1, 1), SetResize(1, 1),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(WWT_RESIZEBOX, Colours::Brown, WID_GRAPH_RESIZE), SetResizeWidgetTypeTip(ResizeWidgetType::HideBevel, STR_TOOLTIP_RESIZE),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -1062,7 +1079,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_delivered_cargo_grap
|
||||
NWidget(WWT_PANEL, Colours::Brown, WID_GRAPH_BACKGROUND),
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_GRAPH_GRAPH), SetMinimalSize(576, 128), SetFill(1, 1), SetResize(1, 1),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(WWT_RESIZEBOX, Colours::Brown, WID_GRAPH_RESIZE), SetResizeWidgetTypeTip(ResizeWidgetType::HideBevel, STR_TOOLTIP_RESIZE),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -1121,7 +1138,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_performance_history_
|
||||
NWidget(WWT_PANEL, Colours::Brown, WID_GRAPH_BACKGROUND),
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_GRAPH_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(WWT_RESIZEBOX, Colours::Brown, WID_GRAPH_RESIZE), SetResizeWidgetTypeTip(ResizeWidgetType::HideBevel, STR_TOOLTIP_RESIZE),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -1173,7 +1190,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_company_value_graph_
|
||||
NWidget(WWT_PANEL, Colours::Brown, WID_GRAPH_BACKGROUND),
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_GRAPH_GRAPH), SetMinimalSize(576, 224), SetFill(1, 1), SetResize(1, 1),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(WWT_RESIZEBOX, Colours::Brown, WID_GRAPH_RESIZE), SetResizeWidgetTypeTip(ResizeWidgetType::HideBevel, STR_TOOLTIP_RESIZE),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -1445,7 +1462,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_cargo_payment_rates_
|
||||
NWidget(WWT_STICKYBOX, Colours::Brown),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, Colours::Brown, WID_GRAPH_BACKGROUND), SetMinimalSize(568, 128),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_HEADER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetStringTip(STR_GRAPH_CARGO_PAYMENT_RATES_TITLE), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_HEADER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetStringTip(STR_GRAPH_CARGO_PAYMENT_RATES_TITLE), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_GRAPH_GRAPH), SetMinimalSize(495, 0), SetFill(1, 1), SetResize(1, 1),
|
||||
NWidget(NWID_VERTICAL),
|
||||
@@ -1462,7 +1479,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_cargo_payment_rates_
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(0, 1), SetResize(0, 1),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(WWT_RESIZEBOX, Colours::Brown, WID_GRAPH_RESIZE), SetResizeWidgetTypeTip(ResizeWidgetType::HideBevel, STR_TOOLTIP_RESIZE),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -1609,7 +1626,7 @@ struct PerformanceRatingDetailWindow : Window {
|
||||
DrawString(this->score_info_left, this->score_info_right, text_top, STR_PERFORMANCE_DETAIL_VEHICLES + to_underlying(score_type));
|
||||
|
||||
/* Draw the score */
|
||||
DrawString(this->score_info_left, this->score_info_right, text_top, GetString(STR_JUST_COMMA, score), TextColour::Black, SA_RIGHT);
|
||||
DrawString(this->score_info_left, this->score_info_right, text_top, GetString(STR_JUST_COMMA, score), TextColour::Black, AlignmentH::End);
|
||||
|
||||
/* Calculate the %-bar */
|
||||
uint x = Clamp<int64_t>(val, 0, needed) * this->bar_width / needed;
|
||||
@@ -1625,7 +1642,7 @@ struct PerformanceRatingDetailWindow : Window {
|
||||
if (x != this->bar_right) GfxFillRect(x, bar_top, this->bar_right, bar_top + this->bar_height - 1, rtl ? colour_done : colour_notdone);
|
||||
|
||||
/* Draw it */
|
||||
DrawString(this->bar_left, this->bar_right, text_top, GetString(STR_PERFORMANCE_DETAIL_PERCENT, Clamp<int64_t>(val, 0, needed) * 100 / needed), TextColour::FromString, SA_HOR_CENTER);
|
||||
DrawString(this->bar_left, this->bar_right, text_top, GetString(STR_PERFORMANCE_DETAIL_PERCENT, Clamp<int64_t>(val, 0, needed) * 100 / needed), TextColour::FromString, AlignmentH::Centre);
|
||||
|
||||
/* ScoreID::Loan is inverted */
|
||||
if (score_type == ScoreID::Loan) val = needed - val;
|
||||
@@ -1710,11 +1727,11 @@ CompanyID PerformanceRatingDetailWindow::company = CompanyID::Invalid();
|
||||
/*******************************/
|
||||
|
||||
struct IndustryProductionGraphWindow : BaseCargoGraphWindow {
|
||||
static inline constexpr StringID RANGE_LABELS[] = {
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED,
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED,
|
||||
STR_GRAPH_INDUSTRY_RANGE_DELIVERED,
|
||||
STR_GRAPH_INDUSTRY_RANGE_WAITING,
|
||||
static inline constexpr GraphRange RANGE_LABELS[] = {
|
||||
{STR_GRAPH_INDUSTRY_RANGE_PRODUCED, STR_GRAPH_INDUSTRY_RANGE_PRODUCED_TOOLTIP},
|
||||
{STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED, STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED_TOOLTIP},
|
||||
{STR_GRAPH_INDUSTRY_RANGE_DELIVERED, STR_GRAPH_INDUSTRY_RANGE_DELIVERED_TOOLTIP},
|
||||
{STR_GRAPH_INDUSTRY_RANGE_WAITING, STR_GRAPH_INDUSTRY_RANGE_WAITING_TOOLTIP},
|
||||
};
|
||||
|
||||
static inline CargoTypes excluded_cargo_types{};
|
||||
@@ -1851,7 +1868,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_industry_production_
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_GRAPH_GRAPH), SetMinimalSize(495, 0), SetFill(1, 1), SetResize(1, 1),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 1),
|
||||
NWidget(WWT_MATRIX, Colours::Brown, WID_GRAPH_RANGE_MATRIX), SetFill(1, 0), SetResize(0, 0), SetMatrixDataTip(1, 0, STR_GRAPH_TOGGLE_RANGE),
|
||||
NWidget(WWT_MATRIX, Colours::Brown, WID_GRAPH_RANGE_MATRIX), SetFill(1, 0), SetResize(0, 0), SetMatrixDataTip(1, 0),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 4),
|
||||
NWidget(WWT_PUSHTXTBTN, Colours::Brown, WID_GRAPH_ENABLE_CARGOES), SetStringTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, Colours::Brown, WID_GRAPH_DISABLE_CARGOES), SetStringTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0),
|
||||
@@ -1867,7 +1884,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_industry_production_
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(0, 1), SetResize(0, 1),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(WWT_RESIZEBOX, Colours::Brown, WID_GRAPH_RESIZE), SetResizeWidgetTypeTip(ResizeWidgetType::HideBevel, STR_TOOLTIP_RESIZE),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -1887,10 +1904,10 @@ void ShowIndustryProductionGraph(WindowNumber window_number)
|
||||
}
|
||||
|
||||
struct TownCargoGraphWindow : BaseCargoGraphWindow {
|
||||
static inline constexpr StringID RANGE_LABELS[] = {
|
||||
STR_GRAPH_TOWN_RANGE_PRODUCED,
|
||||
STR_GRAPH_TOWN_RANGE_TRANSPORTED,
|
||||
STR_GRAPH_TOWN_RANGE_DELIVERED,
|
||||
static inline constexpr GraphRange RANGE_LABELS[] = {
|
||||
{STR_GRAPH_TOWN_RANGE_PRODUCED, STR_GRAPH_TOWN_RANGE_PRODUCED_TOOLTIP},
|
||||
{STR_GRAPH_TOWN_RANGE_TRANSPORTED, STR_GRAPH_TOWN_RANGE_TRANSPORTED_TOOLTIP},
|
||||
{STR_GRAPH_TOWN_RANGE_DELIVERED, STR_GRAPH_TOWN_RANGE_DELIVERED_TOOLTIP},
|
||||
};
|
||||
|
||||
static inline CargoTypes excluded_cargo_types{};
|
||||
@@ -2015,7 +2032,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_town_cargo_graph_wid
|
||||
NWidget(WWT_EMPTY, Colours::Invalid, WID_GRAPH_GRAPH), SetMinimalSize(495, 0), SetFill(1, 1), SetResize(1, 1),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 1),
|
||||
NWidget(WWT_MATRIX, Colours::Brown, WID_GRAPH_RANGE_MATRIX), SetFill(1, 0), SetResize(0, 0), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO),
|
||||
NWidget(WWT_MATRIX, Colours::Brown, WID_GRAPH_RANGE_MATRIX), SetFill(1, 0), SetResize(0, 0), SetMatrixDataTip(1, 0),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 4),
|
||||
NWidget(WWT_PUSHTXTBTN, Colours::Brown, WID_GRAPH_ENABLE_CARGOES), SetStringTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, Colours::Brown, WID_GRAPH_DISABLE_CARGOES), SetStringTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0),
|
||||
@@ -2031,7 +2048,7 @@ static constexpr std::initializer_list<NWidgetPart> _nested_town_cargo_graph_wid
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(0, 1), SetResize(0, 1),
|
||||
EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment(SA_CENTER),
|
||||
NWidget(WWT_TEXT, Colours::Invalid, WID_GRAPH_FOOTER), SetFill(1, 0), SetResize(1, 0), SetPadding(2, 0, 2, 0), SetTextStyle(TextColour::Black, FontSize::Small), SetAlignment({AlignmentH::Centre, AlignmentV::Middle}),
|
||||
NWidget(WWT_RESIZEBOX, Colours::Brown, WID_GRAPH_RESIZE), SetResizeWidgetTypeTip(ResizeWidgetType::HideBevel, STR_TOOLTIP_RESIZE),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
|
||||
+9
-9
@@ -373,7 +373,7 @@ private:
|
||||
|
||||
/* draw fold / unfold button */
|
||||
if (has_children) {
|
||||
DrawSpriteIgnorePadding(Group::Get(g_id)->folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, r.WithX(this->column_rects[VGC_FOLD]).Translate(indent * level_width, 0), SA_CENTER);
|
||||
DrawSpriteIgnorePadding(Group::Get(g_id)->folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, r.WithX(this->column_rects[VGC_FOLD]).Translate(indent * level_width, 0), {AlignmentH::Centre, AlignmentV::Middle});
|
||||
}
|
||||
|
||||
/* draw group name */
|
||||
@@ -381,24 +381,24 @@ private:
|
||||
|
||||
/* draw autoreplace protection */
|
||||
if (protection) {
|
||||
DrawSpriteIgnorePadding(SPR_GROUP_REPLACE_PROTECT, PAL_NONE, r.WithX(this->column_rects[VGC_PROTECT]), SA_CENTER);
|
||||
DrawSpriteIgnorePadding(SPR_GROUP_REPLACE_PROTECT, PAL_NONE, r.WithX(this->column_rects[VGC_PROTECT]), {AlignmentH::Centre, AlignmentV::Middle});
|
||||
}
|
||||
|
||||
/* draw autoreplace status */
|
||||
if (stats.autoreplace_defined) {
|
||||
DrawSpriteIgnorePadding(SPR_GROUP_REPLACE_ACTIVE, stats.autoreplace_finished ? PALETTE_CRASH : PAL_NONE, r.WithX(this->column_rects[VGC_AUTOREPLACE]), SA_CENTER);
|
||||
DrawSpriteIgnorePadding(SPR_GROUP_REPLACE_ACTIVE, stats.autoreplace_finished ? PALETTE_CRASH : PAL_NONE, r.WithX(this->column_rects[VGC_AUTOREPLACE]), {AlignmentH::Centre, AlignmentV::Middle});
|
||||
}
|
||||
|
||||
/* draw the profit icon */
|
||||
DrawSpriteIgnorePadding(this->GetGroupProfitSpriteID(g_id), PAL_NONE, r.WithX(this->column_rects[VGC_PROFIT]), SA_CENTER);
|
||||
DrawSpriteIgnorePadding(this->GetGroupProfitSpriteID(g_id), PAL_NONE, r.WithX(this->column_rects[VGC_PROFIT]), {AlignmentH::Centre, AlignmentV::Middle});
|
||||
|
||||
/* draw the number of vehicles of the group */
|
||||
int num_vehicle_with_subgroups = GetGroupNumVehicle(this->vli.company, g_id, this->vli.vtype);
|
||||
int num_vehicle = GroupStatistics::Get(this->vli.company, g_id, this->vli.vtype).num_vehicle;
|
||||
if (IsAllGroupID(g_id) || IsDefaultGroupID(g_id) || num_vehicle_with_subgroups == num_vehicle) {
|
||||
DrawString(r.WithX(this->column_rects[VGC_NUMBER]).CentreToHeight(this->column_size[VGC_NUMBER].height), GetString(STR_JUST_COMMA, num_vehicle), colour, SA_RIGHT | SA_FORCE, false, FontSize::Small);
|
||||
DrawString(r.WithX(this->column_rects[VGC_NUMBER]).CentreToHeight(this->column_size[VGC_NUMBER].height), GetString(STR_JUST_COMMA, num_vehicle), colour, AlignmentH::ForceRight, false, FontSize::Small);
|
||||
} else {
|
||||
DrawString(r.WithX(this->column_rects[VGC_NUMBER]).CentreToHeight(this->column_size[VGC_NUMBER].height), GetString(STR_GROUP_COUNT_WITH_SUBGROUP, num_vehicle, num_vehicle_with_subgroups - num_vehicle), colour, SA_RIGHT | SA_FORCE);
|
||||
DrawString(r.WithX(this->column_rects[VGC_NUMBER]).CentreToHeight(this->column_size[VGC_NUMBER].height), GetString(STR_GROUP_COUNT_WITH_SUBGROUP, num_vehicle, num_vehicle_with_subgroups - num_vehicle), colour, AlignmentH::ForceRight);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -663,17 +663,17 @@ public:
|
||||
Rect tr = r.Shrink(WidgetDimensions::scaled.framerect);
|
||||
|
||||
DrawString(tr, TimerGameEconomy::UsingWallclockUnits() ? STR_GROUP_PROFIT_THIS_PERIOD : STR_GROUP_PROFIT_THIS_YEAR, TextColour::Black);
|
||||
DrawString(tr, GetString(STR_JUST_CURRENCY_LONG, this_year), TextColour::Black, SA_RIGHT);
|
||||
DrawString(tr, GetString(STR_JUST_CURRENCY_LONG, this_year), TextColour::Black, AlignmentH::End);
|
||||
|
||||
tr.top += GetCharacterHeight(FontSize::Normal);
|
||||
DrawString(tr, TimerGameEconomy::UsingWallclockUnits() ? STR_GROUP_PROFIT_LAST_PERIOD : STR_GROUP_PROFIT_LAST_YEAR, TextColour::Black);
|
||||
DrawString(tr, GetString(STR_JUST_CURRENCY_LONG, last_year), TextColour::Black, SA_RIGHT);
|
||||
DrawString(tr, GetString(STR_JUST_CURRENCY_LONG, last_year), TextColour::Black, AlignmentH::End);
|
||||
|
||||
tr.top += GetCharacterHeight(FontSize::Normal);
|
||||
DrawString(tr, STR_GROUP_OCCUPANCY, TextColour::Black);
|
||||
const size_t vehicle_count = this->vehicles.size();
|
||||
if (vehicle_count > 0) {
|
||||
DrawString(tr, GetString(STR_GROUP_OCCUPANCY_VALUE, occupancy / vehicle_count), TextColour::Black, SA_RIGHT);
|
||||
DrawString(tr, GetString(STR_GROUP_OCCUPANCY_VALUE, occupancy / vehicle_count), TextColour::Black, AlignmentH::End);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
@@ -158,11 +158,11 @@ struct EndGameWindow : EndGameHighScoreBaseWindow {
|
||||
if (this->background_img == SPR_TYCOON_IMG2_BEGIN) { // Tycoon of the century \o/
|
||||
DrawStringMultiLine(pt.x + ScaleSpriteTrad(15), pt.x + ScaleSpriteTrad(640) - ScaleSpriteTrad(25), pt.y + ScaleSpriteTrad(90), pt.y + ScaleSpriteTrad(160),
|
||||
GetString(STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS, c->index, c->index, EndGameGetPerformanceTitleFromValue(c->old_economy[0].performance_history)),
|
||||
TextColour::FromString, SA_CENTER);
|
||||
TextColour::FromString, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
} else {
|
||||
DrawStringMultiLine(pt.x + ScaleSpriteTrad(36), pt.x + ScaleSpriteTrad(640), pt.y + ScaleSpriteTrad(140), pt.y + ScaleSpriteTrad(206),
|
||||
GetString(STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS, c->index, EndGameGetPerformanceTitleFromValue(c->old_economy[0].performance_history)),
|
||||
TextColour::FromString, SA_CENTER);
|
||||
TextColour::FromString, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -202,7 +202,7 @@ struct HighScoreWindow : EndGameHighScoreBaseWindow {
|
||||
Point pt = this->GetTopLeft(ScaleSpriteTrad(640), ScaleSpriteTrad(480));
|
||||
|
||||
/* Draw the title. */
|
||||
DrawStringMultiLine(pt.x + ScaleSpriteTrad(70), pt.x + ScaleSpriteTrad(570), pt.y, pt.y + ScaleSpriteTrad(140), STR_HIGHSCORE_TOP_COMPANIES, TextColour::FromString, SA_CENTER);
|
||||
DrawStringMultiLine(pt.x + ScaleSpriteTrad(70), pt.x + ScaleSpriteTrad(570), pt.y, pt.y + ScaleSpriteTrad(140), STR_HIGHSCORE_TOP_COMPANIES, TextColour::FromString, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
|
||||
/* Draw Highscore peepz */
|
||||
for (uint8_t i = 0; i < ClampTo<uint8_t>(hs.size()); i++) {
|
||||
|
||||
@@ -537,7 +537,7 @@ public:
|
||||
DrawString(tr, indsp->name, selected ? TextColour::White : TextColour::Orange);
|
||||
GfxFillRect(icon, selected ? PC_WHITE : PC_BLACK);
|
||||
GfxFillRect(icon.Shrink(WidgetDimensions::scaled.bevel), indsp->map_colour);
|
||||
DrawString(tr, GetString(STR_JUST_COMMA, Industry::GetIndustryTypeCount(type)), TextColour::Black, SA_RIGHT, false, FontSize::Small);
|
||||
DrawString(tr, GetString(STR_JUST_COMMA, Industry::GetIndustryTypeCount(type)), TextColour::Black, AlignmentH::End, false, FontSize::Small);
|
||||
|
||||
text = text.Translate(0, this->resize.step_height);
|
||||
icon = icon.Translate(0, this->resize.step_height);
|
||||
@@ -2152,7 +2152,7 @@ struct CargoesField {
|
||||
|
||||
case CargoesFieldType::Header:
|
||||
ypos += (small_height - GetCharacterHeight(FontSize::Normal)) / 2;
|
||||
DrawString(xpos, xpos + industry_width, ypos, this->u.header, TextColour::White, SA_HOR_CENTER);
|
||||
DrawString(xpos, xpos + industry_width, ypos, this->u.header, TextColour::White, AlignmentH::Centre);
|
||||
break;
|
||||
|
||||
case CargoesFieldType::Industry: {
|
||||
@@ -2163,7 +2163,7 @@ struct CargoesField {
|
||||
ypos += (normal_height - GetCharacterHeight(FontSize::Normal)) / 2;
|
||||
if (this->u.industry.ind_type < NUM_INDUSTRYTYPES) {
|
||||
const IndustrySpec *indsp = GetIndustrySpec(this->u.industry.ind_type);
|
||||
DrawString(xpos, xpos2, ypos, indsp->name, TextColour::White, SA_HOR_CENTER);
|
||||
DrawString(xpos, xpos2, ypos, indsp->name, TextColour::White, AlignmentH::Centre);
|
||||
|
||||
/* Draw the industry legend. */
|
||||
int blob_left, blob_right;
|
||||
@@ -2177,7 +2177,7 @@ struct CargoesField {
|
||||
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, TextColour::FromString, SA_HOR_CENTER);
|
||||
DrawString(xpos, xpos2, ypos, STR_INDUSTRY_CARGOES_HOUSES, TextColour::FromString, AlignmentH::Centre);
|
||||
}
|
||||
|
||||
/* Draw the other_produced/other_accepted cargoes. */
|
||||
@@ -2268,7 +2268,7 @@ struct CargoesField {
|
||||
if (IsValidCargoType(this->u.cargo_label.cargoes[i])) {
|
||||
const CargoSpec *csp = CargoSpec::Get(this->u.cargo_label.cargoes[i]);
|
||||
DrawString(xpos + WidgetDimensions::scaled.framerect.left, xpos + industry_width - 1 - WidgetDimensions::scaled.framerect.right, ypos, csp->name, TextColour::White,
|
||||
(this->u.cargo_label.left_align) ? SA_LEFT : SA_RIGHT);
|
||||
(this->u.cargo_label.left_align) ? AlignmentH::Start : AlignmentH::End);
|
||||
}
|
||||
ypos += GetCharacterHeight(FontSize::Normal) + CargoesField::cargo_space.height;
|
||||
}
|
||||
|
||||
+28
-41
@@ -47,27 +47,13 @@
|
||||
* A viewport command for the main menu background (intro game).
|
||||
*/
|
||||
struct IntroGameViewportCommand {
|
||||
/** Horizontal alignment value. */
|
||||
enum AlignmentH : uint8_t {
|
||||
LEFT,
|
||||
CENTRE,
|
||||
RIGHT,
|
||||
};
|
||||
/** Vertical alignment value. */
|
||||
enum AlignmentV : uint8_t {
|
||||
TOP,
|
||||
MIDDLE,
|
||||
BOTTOM,
|
||||
};
|
||||
|
||||
int command_index = 0; ///< Sequence number of the command (order they are performed in).
|
||||
Point position{ 0, 0 }; ///< Calculated world coordinate to position viewport top-left at.
|
||||
VehicleID vehicle = VehicleID::Invalid(); ///< Vehicle to follow, or VehicleID::Invalid() if not following a vehicle.
|
||||
uint delay = 0; ///< Delay until next command.
|
||||
int zoom_adjust = 0; ///< Adjustment to zoom level from base zoom level.
|
||||
bool pan_to_next = false; ///< If true, do a smooth pan from this position to the next.
|
||||
AlignmentH align_h = CENTRE; ///< Horizontal alignment.
|
||||
AlignmentV align_v = MIDDLE; ///< Vertical alignment.
|
||||
Alignment align = {AlignmentH::Centre, AlignmentV::Middle}; ///< Alignment.
|
||||
|
||||
/**
|
||||
* Calculate effective position.
|
||||
@@ -83,15 +69,16 @@ struct IntroGameViewportCommand {
|
||||
}
|
||||
|
||||
Point p;
|
||||
switch (this->align_h) {
|
||||
case LEFT: p.x = this->position.x; break;
|
||||
case CENTRE: p.x = this->position.x - vp.virtual_width / 2; break;
|
||||
case RIGHT: p.x = this->position.x - vp.virtual_width; break;
|
||||
switch (this->align.ResolveRTL()) {
|
||||
case AlignmentH::ForceLeft: p.x = this->position.x; break;
|
||||
case AlignmentH::Centre: p.x = this->position.x - vp.virtual_width / 2; break;
|
||||
case AlignmentH::ForceRight: p.x = this->position.x - vp.virtual_width; break;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
switch (this->align_v) {
|
||||
case TOP: p.y = this->position.y; break;
|
||||
case MIDDLE: p.y = this->position.y - vp.virtual_height / 2; break;
|
||||
case BOTTOM: p.y = this->position.y - vp.virtual_height; break;
|
||||
switch (this->align.v) {
|
||||
case AlignmentV::Top: p.y = this->position.y; break;
|
||||
case AlignmentV::Middle: p.y = this->position.y - vp.virtual_height / 2; break;
|
||||
case AlignmentV::Bottom: p.y = this->position.y - vp.virtual_height; break;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
@@ -151,12 +138,12 @@ struct SelectGameWindow : public Window {
|
||||
switch (toupper(c)) {
|
||||
case '-': vc.zoom_adjust = +1; break;
|
||||
case '+': vc.zoom_adjust = -1; break;
|
||||
case 'T': vc.align_v = IntroGameViewportCommand::TOP; break;
|
||||
case 'M': vc.align_v = IntroGameViewportCommand::MIDDLE; break;
|
||||
case 'B': vc.align_v = IntroGameViewportCommand::BOTTOM; break;
|
||||
case 'L': vc.align_h = IntroGameViewportCommand::LEFT; break;
|
||||
case 'C': vc.align_h = IntroGameViewportCommand::CENTRE; break;
|
||||
case 'R': vc.align_h = IntroGameViewportCommand::RIGHT; break;
|
||||
case 'T': vc.align.v = AlignmentV::Top; break;
|
||||
case 'M': vc.align.v = AlignmentV::Middle; break;
|
||||
case 'B': vc.align.v = AlignmentV::Bottom; break;
|
||||
case 'L': vc.align.h = AlignmentH::ForceLeft; break;
|
||||
case 'C': vc.align.h = AlignmentH::Centre; break;
|
||||
case 'R': vc.align.h = AlignmentH::ForceRight; break;
|
||||
case 'P': vc.pan_to_next = true; break;
|
||||
case 'V': vc.vehicle = static_cast<VehicleID>(consumer.ReadIntegerBase<uint32_t>(10, VehicleID::Invalid().base())); break;
|
||||
}
|
||||
@@ -267,11 +254,11 @@ struct SelectGameWindow : public Window {
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_SGI_BASESET:
|
||||
DrawStringMultiLine(r, GetString(STR_INTRO_BASESET, _missing_extra_graphics), TextColour::FromString, SA_CENTER);
|
||||
DrawStringMultiLine(r, GetString(STR_INTRO_BASESET, _missing_extra_graphics), TextColour::FromString, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
break;
|
||||
|
||||
case WID_SGI_TRANSLATION:
|
||||
DrawStringMultiLine(r, GetString(STR_INTRO_TRANSLATION, _current_language->missing), TextColour::FromString, SA_CENTER);
|
||||
DrawStringMultiLine(r, GetString(STR_INTRO_TRANSLATION, _current_language->missing), TextColour::FromString, {AlignmentH::Centre, AlignmentV::Middle});
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -349,16 +336,16 @@ static constexpr std::initializer_list<NWidgetPart> _nested_select_game_widgets
|
||||
|
||||
/* Single player */
|
||||
NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_GENERATE_GAME), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_LANDSCAPING, STR_INTRO_NEW_GAME, STR_INTRO_TOOLTIP_NEW_GAME), SetAlignment(SA_LEFT | SA_VERT_CENTER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_PLAY_HEIGHTMAP), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SHOW_COUNTOURS, STR_INTRO_PLAY_HEIGHTMAP, STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP), SetAlignment(SA_LEFT | SA_VERT_CENTER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_PLAY_SCENARIO), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SUBSIDIES, STR_INTRO_PLAY_SCENARIO, STR_INTRO_TOOLTIP_PLAY_SCENARIO), SetAlignment(SA_LEFT | SA_VERT_CENTER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_LOAD_GAME), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SAVE, STR_INTRO_LOAD_GAME, STR_INTRO_TOOLTIP_LOAD_GAME), SetAlignment(SA_LEFT | SA_VERT_CENTER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_HIGHSCORE), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_COMPANY_LEAGUE, STR_INTRO_HIGHSCORE, STR_INTRO_TOOLTIP_HIGHSCORE), SetAlignment(SA_LEFT | SA_VERT_CENTER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_GENERATE_GAME), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_LANDSCAPING, STR_INTRO_NEW_GAME, STR_INTRO_TOOLTIP_NEW_GAME), SetAlignment({AlignmentH::Start, AlignmentV::Middle}), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_PLAY_HEIGHTMAP), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SHOW_COUNTOURS, STR_INTRO_PLAY_HEIGHTMAP, STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP), SetAlignment({AlignmentH::Start, AlignmentV::Middle}), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_PLAY_SCENARIO), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SUBSIDIES, STR_INTRO_PLAY_SCENARIO, STR_INTRO_TOOLTIP_PLAY_SCENARIO), SetAlignment({AlignmentH::Start, AlignmentV::Middle}), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_LOAD_GAME), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SAVE, STR_INTRO_LOAD_GAME, STR_INTRO_TOOLTIP_LOAD_GAME), SetAlignment({AlignmentH::Start, AlignmentV::Middle}), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_HIGHSCORE), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_COMPANY_LEAGUE, STR_INTRO_HIGHSCORE, STR_INTRO_TOOLTIP_HIGHSCORE), SetAlignment({AlignmentH::Start, AlignmentV::Middle}), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
|
||||
/* Multi player */
|
||||
NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_PLAY_NETWORK), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_COMPANY_GENERAL, STR_INTRO_MULTIPLAYER, STR_INTRO_TOOLTIP_MULTIPLAYER), SetAlignment(SA_LEFT | SA_VERT_CENTER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_PLAY_NETWORK), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_COMPANY_GENERAL, STR_INTRO_MULTIPLAYER, STR_INTRO_TOOLTIP_MULTIPLAYER), SetAlignment({AlignmentH::Start, AlignmentV::Middle}), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
|
||||
NWidget(NWID_SELECTION, Colours::Invalid, WID_SGI_BASESET_SELECTION),
|
||||
@@ -375,10 +362,10 @@ static constexpr std::initializer_list<NWidgetPart> _nested_select_game_widgets
|
||||
|
||||
/* Other */
|
||||
NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_OPTIONS), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SETTINGS, STR_INTRO_GAME_OPTIONS, STR_INTRO_TOOLTIP_GAME_OPTIONS), SetAlignment(SA_LEFT | SA_VERT_CENTER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_CONTENT_DOWNLOAD), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SHOW_VEHICLES, STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), SetAlignment(SA_LEFT | SA_VERT_CENTER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_EDIT_SCENARIO), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SMALLMAP, STR_INTRO_SCENARIO_EDITOR, STR_INTRO_TOOLTIP_SCENARIO_EDITOR), SetAlignment(SA_LEFT | SA_VERT_CENTER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_HELP), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_QUERY, STR_INTRO_HELP, STR_INTRO_TOOLTIP_HELP), SetAlignment(SA_LEFT | SA_VERT_CENTER), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_OPTIONS), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SETTINGS, STR_INTRO_GAME_OPTIONS, STR_INTRO_TOOLTIP_GAME_OPTIONS), SetAlignment({AlignmentH::Start, AlignmentV::Middle}), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_CONTENT_DOWNLOAD), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SHOW_VEHICLES, STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), SetAlignment({AlignmentH::Start, AlignmentV::Middle}), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_EDIT_SCENARIO), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_SMALLMAP, STR_INTRO_SCENARIO_EDITOR, STR_INTRO_TOOLTIP_SCENARIO_EDITOR), SetAlignment({AlignmentH::Start, AlignmentV::Middle}), SetFill(1, 0),
|
||||
NWidget(WWT_PUSHIMGTEXTBTN, Colours::Orange, WID_SGI_HELP), SetToolbarMinimalSize(1), SetSpriteStringTip(SPR_IMG_QUERY, STR_INTRO_HELP, STR_INTRO_TOOLTIP_HELP), SetAlignment({AlignmentH::Start, AlignmentV::Middle}), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
|
||||
NWidget(NWID_VERTICAL),
|
||||
|
||||
+3
-3
@@ -460,7 +460,7 @@ void DrawFoundation(TileInfo *ti, Foundation f)
|
||||
if (!IsNonContinuousFoundation(f)) {
|
||||
/* Lower part of foundation */
|
||||
static constexpr SpriteBounds bounds{{}, {TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1}, {}};
|
||||
AddSortableSpriteToDraw(leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, *ti, bounds);
|
||||
AddSortableSpriteToDraw(leveled_base + RemoveSteepSlope(ti->tileh), PAL_NONE, *ti, bounds);
|
||||
}
|
||||
|
||||
Corner highest_corner = GetHighestSlopeCorner(ti->tileh);
|
||||
@@ -803,7 +803,7 @@ TileIndex _cur_tileloop_tile;
|
||||
*/
|
||||
void RunTileLoop()
|
||||
{
|
||||
PerformanceAccumulator framerate(PFE_GL_LANDSCAPE);
|
||||
PerformanceAccumulator framerate(PerformanceElement::GameLoopLandscape);
|
||||
|
||||
/* The pseudorandom sequence of tiles is generated using a Galois linear feedback
|
||||
* shift register (LFSR). This allows a deterministic pseudorandom ordering, but
|
||||
@@ -1727,7 +1727,7 @@ void OnTick_LinkGraph();
|
||||
void CallLandscapeTick()
|
||||
{
|
||||
{
|
||||
PerformanceAccumulator framerate(PFE_GL_LANDSCAPE);
|
||||
PerformanceAccumulator framerate(PerformanceElement::GameLoopLandscape);
|
||||
|
||||
OnTick_Town();
|
||||
OnTick_Trees();
|
||||
|
||||
@@ -632,7 +632,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 anos (trimestralmente)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 anos (anualmente)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Mostrar/Ocultar gráfico para este intervalo de dados
|
||||
STR_GRAPH_SELECT_SCALE :Alterar a escala horizontal do gráfico
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tarifas por Carga
|
||||
@@ -1661,12 +1660,12 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :Nenhum
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Melhorado
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Veículos rodoviários: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Escolher o lado de condução
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Lado de condução do veículo rodoviário: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Escolha o lado de condução do veículo rodoviário.{}Isso também pode afetar o lado dos sinais e os gráficos dos semáforos.{}Pode ser necessário recarregar o jogo para que a alteração tenha efeito total
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Conduzir pela esquerda
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Conduzir pela direita
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Esquerda
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Direita
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotação do mapa de altitudes: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Escolher em que sentido a imagem do mapa de altitudes será girada para caber no mundo do jogo
|
||||
@@ -2889,22 +2888,22 @@ STR_PICKER_COLLECTION_DELETE_QUERY :Excluir coleç
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_TEXT :{YELLOW}Você quer mesmo excluir esta coleção?
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_DISABLED_TEXT :{YELLOW}Você quer mesmo excluir esta coleção? Ela contém itens de NewGRFs desativados!
|
||||
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Selecionar uma classe de estação para mostrar
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Selecionar uma classe de estação para exibir. Ctrl+Clique para adicionar ou remover em itens salvos
|
||||
STR_PICKER_STATION_TYPE_TOOLTIP :Escolher um tipo de estação para construir. Ctrl+Clique para adicionar ou remover nos itens salvos
|
||||
STR_PICKER_STATION_COLLECTION_TOOLTIP :Selecione uma coleção de estações para mostrar
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Selecionar uma classe de ponto de controle para mostrar
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Selecionar uma classe de ponto de controle para exibir. Ctrl+Clique para adicionar ou remover em itens salvos
|
||||
STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Escolher um ponto de controle para construir. Ctrl+Clique para adicionar ou remover nos itens salvos
|
||||
STR_PICKER_WAYPOINT_COLLECTION_TOOLTIP :Selecione uma coleção de pontos de controle para mostrar
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Selecionar uma classe de estação de ônibus para mostrar
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Selecionar uma classe de estação de ônibus para exibir. Ctrl+Clique para adicionar ou remover em itens salvos
|
||||
STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Escolher um tipo de estação de ônibus para construir. Ctrl+Clique para adicionar ou remover nos itens salvos
|
||||
STR_PICKER_ROADSTOP_BUS_COLLECTION_TOOLTIP :Selecione uma coleção de estações de ônibus para mostrar
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecionar uma classe de estação de caminhões para mostrar
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecionar uma classe de estação de caminhões para exibir. Ctrl+Clique para adicionar ou remover em itens salvos
|
||||
STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Escolher um tipo de estação de caminhões para construir. Ctrl+Clique para adicionar ou remover nos itens salvos
|
||||
STR_PICKER_ROADSTOP_TRUCK_COLLECTION_TOOLTIP :Selecione uma coleção de estações de caminhões para mostrar
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecionar uma classe de objeto para mostrar
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecionar uma classe de objeto para exibir. Ctrl+Clique para adicionar ou remover em itens salvos
|
||||
STR_PICKER_OBJECT_TYPE_TOOLTIP :Escolher um tipo de objeto para construir. Ctrl+Clique para adicionar ou remover nos itens salvos. Ctrl+Clique+Arraste para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado
|
||||
STR_PICKER_OBJECT_COLLECTION_TOOLTIP :Selecione uma coleção de objetos para mostrar
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Selecionar uma zona urbana para mostrar
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Selecionar uma zona da localidade para exibir. Ctrl+Clique para adicionar ou remover em itens salvos
|
||||
STR_PICKER_HOUSE_TYPE_TOOLTIP :Selecionar um tipo de casa para construir. Ctrl+Clique para adicionar ou remover nos itens salvos
|
||||
STR_PICKER_HOUSE_COLLECTION_TOOLTIP :Selecione uma coleção de casas para mostrar
|
||||
|
||||
@@ -5362,6 +5361,10 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :ponte está {HE
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :ponte está {HEIGHT} abaixo do necessário para o ponto de controle ferroviário
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :ponte está {HEIGHT} abaixo do necessário para o ponto de controle rodoviário
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :ponte está {HEIGHT} abaixo do necessário para a eclusa
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :ponte é {HEIGHT} mais baixa que um depósito de trem
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :ponte é {HEIGHT} mais baixa que um depósito rodoviário
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :ponte é {HEIGHT} mais baixa que um depósito de embarcações
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_OBJECT :ponte é {HEIGHT} mais baixa do que o objeto
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :Não é possível construir túnel aqui...
|
||||
|
||||
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 anys (trimestral)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 anys (anual)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Commuta el gràfic per al rang d'aquestes dades
|
||||
STR_GRAPH_SELECT_SCALE :Canvia l'escala horitzontal del gràfic
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tarifes de pagament de càrregues
|
||||
|
||||
@@ -718,7 +718,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 let (čtvrtletně)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 let (ročně)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Zobrazit nebo skrýt graf pro tento rozsah dat
|
||||
STR_GRAPH_SELECT_SCALE :Změnit vodorovné měřítko grafu
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Ceny za přepravu nákladu
|
||||
|
||||
+15
-3
@@ -525,6 +525,7 @@ STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Lufthavnskonstr
|
||||
STR_LANDSCAPING_MENU_LANDSCAPING :Landskabsværktøjer
|
||||
STR_LANDSCAPING_MENU_PLANT_TREES :Plant træer
|
||||
STR_LANDSCAPING_MENU_PLACE_SIGN :Placer skilt
|
||||
STR_LANDSCAPING_MENU_PLACE_OBJECT :Placer objekt
|
||||
|
||||
# Music menu
|
||||
STR_TOOLBAR_SOUND_MUSIC :Lyd/Musik
|
||||
@@ -630,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 år (quarterly)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 år (yearly)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Slå graf til/fra for dette dataområde
|
||||
STR_GRAPH_SELECT_SCALE :Ændre grafens vandrette skala
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Lastudbetalingsrater
|
||||
@@ -1351,6 +1351,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HIGH :Høj
|
||||
STR_CONFIG_SETTING_RECESSIONS :Kriser: {STRING}
|
||||
STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Hvis aktiveret, kan lavkonjunktur forekomme hvert par år. Under en lavkonjunktur er al produktion væsentligt lavere (den vender tilbage til tidligere niveau, når recessionen er forbi)
|
||||
|
||||
STR_CONFIG_SETTING_TRAIN_FLIP_REVERSE :Tillad tog at vende ved tilbage kørsel: {STRING}
|
||||
|
||||
###length 3
|
||||
|
||||
@@ -1557,7 +1558,11 @@ STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Skalér industr
|
||||
STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Skaler industriens gods produktion med denne procentdel
|
||||
STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}%
|
||||
|
||||
STR_CONFIG_SETTING_CARGO_AGING_RATE :Betalings aldrings sats for skala gods: {STRING}
|
||||
STR_CONFIG_SETTING_CARGO_AGING_RATE_HELPTEXT :Juster hvor hurtigt last lastet på et køretøj falder i værdi over tid
|
||||
STR_CONFIG_SETTING_CARGO_AGING_RATE_VALUE :{NUM}%
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_CARGO_AGING_RATE_ZERO :Ingen forfald
|
||||
|
||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatisk fornyelse af gamle køretøjer: {STRING}
|
||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Når aktiveret, bliver et køretøjder nærmer sig sin afslutning af livet automatisk udskiftet, når betingelserne er opfyldt
|
||||
@@ -1901,6 +1906,8 @@ STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Når den er akt
|
||||
STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Aktiver hastighedsbegrænsning for vogne: {STRING}
|
||||
STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Når tilladt, brug også fartgrænse på vogne, for at bestemme makshastigheden på tog
|
||||
|
||||
STR_CONFIG_SETTING_AIRCRAFT_RANGE :Aktivér flyets maksimale rækkevidde: {STRING}
|
||||
STR_CONFIG_SETTING_AIRCRAFT_RANGE_HELPTEXT :Når det er aktiveret, vil NewGRF'er kunne begrænse flyets maksimale rækkevidde
|
||||
|
||||
STR_CONFIG_SETTING_DISABLE_ELRAILS :Slå elektriske jernbaner fra: {STRING}
|
||||
STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Tilladelse af denne indstilling slår nødvendigheden af elektrisk jernbaner fra, for at få elektriske tog til at kører
|
||||
@@ -3080,6 +3087,7 @@ STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Placér
|
||||
STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Definer ørkenområde.{}Hold Ctrl nede for at fjerne det.
|
||||
STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Forstør landområdet der skal sænkes/hæves
|
||||
STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Formindsk landområdet der skal sænkes/hæves
|
||||
STR_TERRAFORM_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Hæv et hjørne eller et område. Hvis størrelsen er 1x1, skal du klikke og trække for at hæve det første valgte hjørne og justere det valgte område til den nye hjørnehøjde. Ctrl+klik+træk for at vælge området diagonalt. Tryk også på Shift for kun at vise omkostningsestimatet.
|
||||
STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Generer tilfældigt land
|
||||
STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Opret nyt scenarie
|
||||
STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Nulstil landskab
|
||||
@@ -4572,8 +4580,8 @@ STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Giv kør
|
||||
STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Giv skibet et navn
|
||||
STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Navngiv flyet
|
||||
|
||||
STR_VEHICLE_INFO_AGE :{COMMA} år ({COMMA})
|
||||
STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} år ({COMMA})
|
||||
STR_VEHICLE_INFO_AGE :{COMMA} år{P "" s} (lifetime: {COMMA} år{P "" s})
|
||||
STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} år{P "" s} (lifetime: {COMMA} år{P "" s})
|
||||
STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Alder: {LTBLUE}{STRING}{BLACK} Driftsomkostninger: {LTBLUE}{CURRENCY_LONG}/år
|
||||
STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Alder: {LTBLUE}{STRING}{BLACK} Driftsomkostninger: {LTBLUE}{CURRENCY_LONG}/periode
|
||||
|
||||
@@ -4587,6 +4595,7 @@ STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Overskud
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Årets resultat: {LTBLUE}{CURRENCY_LONG} (sidste år: {CURRENCY_LONG}) {BLACK}Mindste ydeevne: {LTBLUE}{POWER_TO_WEIGHT}
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Profit denne periode: {LTBLUE}{CURRENCY_LONG} (sidste periode: {CURRENCY_LONG})
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Profit denne periode: {LTBLUE}{CURRENCY_LONG} (sidste periode: {CURRENCY_LONG}) {BLACK}Min. ydeevne: {LTBLUE}{POWER_TO_WEIGHT}
|
||||
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Pålidelighed: {LTBLUE}{COMMA}% (maks: {COMMA}%) {BLACK}Nedbrud siden sidste service: {LTBLUE}{COMMA}
|
||||
|
||||
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY_LONG}
|
||||
STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Kapacitet: {LTBLUE}Ingen{STRING}
|
||||
@@ -5338,6 +5347,9 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :broen er {HEIGH
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :broen er {HEIGHT} for lav til et rutepunkt
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :broen er {HEIGHT} for lav til et rutepunkt
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :broen er {HEIGHT} for lav til slusen
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :broen er {HEIGHT} for lav til tog depotet
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :broen er {HEIGHT} for lav til bil depotet
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :broen er {HEIGHT} for lav til skibs depotet
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Kan ikke bygge en tunnel her...
|
||||
|
||||
@@ -630,7 +630,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 jaar (per kwartaal)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 jaar (jaarlijks)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Grafiek weergeven-verbergen voor dit gegevensbereik
|
||||
STR_GRAPH_SELECT_SCALE :Horizontale schaal van grafiek aanpassen
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Vrachtprijzen
|
||||
|
||||
+21
-11
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 years (quarterly)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 years (yearly)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Toggle graph for this data range
|
||||
STR_GRAPH_SELECT_SCALE :Change horizontal scale of graph
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Cargo Payment Rates
|
||||
@@ -647,14 +646,21 @@ STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLA
|
||||
|
||||
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Cargo History
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Produced
|
||||
STR_GRAPH_INDUSTRY_RANGE_PRODUCED_TOOLTIP :Toggle graph of cargo produced by this industry
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Transported
|
||||
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED_TOOLTIP :Toggle graph of cargo transported from this industry
|
||||
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Delivered
|
||||
STR_GRAPH_INDUSTRY_RANGE_DELIVERED_TOOLTIP :Toggle graph of cargo delivered to this industry
|
||||
STR_GRAPH_INDUSTRY_RANGE_WAITING :Waiting
|
||||
STR_GRAPH_INDUSTRY_RANGE_WAITING_TOOLTIP :Toggle graph of cargo waiting at this industry
|
||||
|
||||
STR_GRAPH_TOWN_CARGO_CAPTION :{WHITE}{TOWN} - Cargo History
|
||||
STR_GRAPH_TOWN_RANGE_PRODUCED :Produced
|
||||
STR_GRAPH_TOWN_RANGE_PRODUCED_TOOLTIP :Toggle graph of cargo produced by this town
|
||||
STR_GRAPH_TOWN_RANGE_TRANSPORTED :Transported
|
||||
STR_GRAPH_TOWN_RANGE_TRANSPORTED_TOOLTIP :Toggle graph of cargo transported from this town
|
||||
STR_GRAPH_TOWN_RANGE_DELIVERED :Delivered
|
||||
STR_GRAPH_TOWN_RANGE_DELIVERED_TOOLTIP :Toggle graph of cargo delivered to this town
|
||||
|
||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Show detailed performance ratings
|
||||
|
||||
@@ -1660,12 +1666,12 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :None
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Improved
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Road vehicles: {STRING2}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Choose the driving side
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Road vehicle driving side: {STRING2}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Choose the road vehicle driving side.{}This can also affect signal side and semaphore graphics.{}It may require reloading the game for a change to take full effect
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Drive on left
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Drive on right
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Left
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Right
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Heightmap rotation: {STRING2}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Choose which way the heightmap image is rotated to fit into the game world
|
||||
@@ -2888,22 +2894,22 @@ STR_PICKER_COLLECTION_DELETE_QUERY :Delete collecti
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_TEXT :{YELLOW}Are you sure you want to delete this collection?
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_DISABLED_TEXT :{YELLOW}Are you sure you want to delete this collection? There are items from disabled NewGRFs in it!
|
||||
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Select a station class to display
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Select a station class to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_STATION_TYPE_TOOLTIP :Select a station type to build. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_STATION_COLLECTION_TOOLTIP :Select a collection of stations to display
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Select a waypoint class to display
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Select a waypoint class to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Select a waypoint to build. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_WAYPOINT_COLLECTION_TOOLTIP :Select a collection of waypoints to display
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Select a bus station class to display
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Select a bus station class to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Select a bus station type to build. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_ROADSTOP_BUS_COLLECTION_TOOLTIP :Select a collection of bus stations to display
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Select a lorry station class to display
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Select a lorry station class to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Select a lorry station type to build. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_ROADSTOP_TRUCK_COLLECTION_TOOLTIP :Select a collection of lorry stations to display
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_OBJECT_TYPE_TOOLTIP :Select an object type to build. Ctrl+Click to add or remove in saved items. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only
|
||||
STR_PICKER_OBJECT_COLLECTION_TOOLTIP :Select a collection of objects to display
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Select a town zone to display
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Select a town zone to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_HOUSE_TYPE_TOOLTIP :Select a house type to build. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_HOUSE_COLLECTION_TOOLTIP :Select a collection of houses to display
|
||||
|
||||
@@ -5361,6 +5367,10 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :bridge is {HEIG
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :bridge is {HEIGHT} too low for rail waypoint
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :bridge is {HEIGHT} too low for road waypoint
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :bridge is {HEIGHT} too low for lock
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :bridge is {HEIGHT} too low for train depot
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :bridge is {HEIGHT} too low for road vehicle depot
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :bridge is {HEIGHT} too low for ship depot
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_OBJECT :bridge is {HEIGHT} too low for object
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :Can't build tunnel here...
|
||||
|
||||
+14
-11
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 years (quarterly)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 years (yearly)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Toggle graph for this data range
|
||||
STR_GRAPH_SELECT_SCALE :Change horizontal scale of graph
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Cargo Payment Rates
|
||||
@@ -1660,12 +1659,12 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :None
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Improved
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Road vehicles: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Choose the driving side
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Road vehicle driving side: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Choose the road vehicle driving side.{}This can also affect signal side and semaphore graphics.{}It may require reloading the game for a change to take full effect
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Drive on left
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Drive on right
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Left
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Right
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Heightmap rotation: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Choose which way the heightmap image is rotated to fit into the game world
|
||||
@@ -2888,22 +2887,22 @@ STR_PICKER_COLLECTION_DELETE_QUERY :Delete collecti
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_TEXT :{YELLOW}Are you sure you want to delete this collection?
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_DISABLED_TEXT :{YELLOW}Are you sure you want to delete this collection? There are items from disabled NewGRFs in it!
|
||||
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Select a station class to display
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Select a station class to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_STATION_TYPE_TOOLTIP :Select a station type to build. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_STATION_COLLECTION_TOOLTIP :Select a collection of stations to display
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Select a waypoint class to display
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Select a waypoint class to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Select a waypoint to build. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_WAYPOINT_COLLECTION_TOOLTIP :Select a collection of waypoints to display
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Select a bus station class to display
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Select a bus station class to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Select a bus station type to build. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_ROADSTOP_BUS_COLLECTION_TOOLTIP :Select a collection of bus stations to display
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Select a truck station class to display
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Select a truck station class to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Select a truck station type to build. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_ROADSTOP_TRUCK_COLLECTION_TOOLTIP :Select a collection of truck stations to display
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Select an object class to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_OBJECT_TYPE_TOOLTIP :Select an object type to build. Ctrl+Click to add or remove in saved items. Ctrl+Click+Drag to select the area diagonally. Also press Shift to show cost estimate only
|
||||
STR_PICKER_OBJECT_COLLECTION_TOOLTIP :Select a collection of objects to display
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Select a town zone to display
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Select a town zone to display. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_HOUSE_TYPE_TOOLTIP :Select a house type to build. Ctrl+Click to add or remove in saved items
|
||||
STR_PICKER_HOUSE_COLLECTION_TOOLTIP :Select a collection of houses to display
|
||||
|
||||
@@ -5361,6 +5360,10 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :bridge is {HEIG
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :bridge is {HEIGHT} too low for rail waypoint
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :bridge is {HEIGHT} too low for road waypoint
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :bridge is {HEIGHT} too low for lock
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :bridge is {HEIGHT} too low for train depot
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :bridge is {HEIGHT} too low for road vehicle depot
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :bridge is {HEIGHT} too low for ship depot
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_OBJECT :bridge is {HEIGHT} too low for object
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :Can't build tunnel here...
|
||||
|
||||
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 years (quarterly)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 years (yearly)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Toggle graph for this data range
|
||||
STR_GRAPH_SELECT_SCALE :Change horizontal scale of graph
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Cargo Payment Rates
|
||||
@@ -1660,12 +1659,12 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :None
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Improved
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Road vehicles: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Choose the driving side
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Road vehicle driving side: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Choose the road vehicle driving side.{}This can also affect signal side and semaphore graphics.{}It may require reloading the game for a change to take full effect
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Drive on left
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Drive on right
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Left
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Right
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Heightmap rotation: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Choose which way the heightmap image is rotated to fit into the game world
|
||||
@@ -5361,6 +5360,10 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :bridge is {HEIG
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :bridge is {HEIGHT} too low for rail waypoint
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :bridge is {HEIGHT} too low for road waypoint
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :bridge is {HEIGHT} too low for lock
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :bridge is {HEIGHT} too low for train depot
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :bridge is {HEIGHT} too low for road vehicle depot
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :bridge is {HEIGHT} too low for ship depot
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_OBJECT :bridge is {HEIGHT} too low for object
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :Can't build tunnel here...
|
||||
|
||||
@@ -719,7 +719,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 jaroj (po jarkvarono)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 jaroj (po jaro)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :{BLACK}Baskulu diagramon de tiu ŝarĝotipo
|
||||
STR_GRAPH_SELECT_SCALE :Ŝanĝi horizontalan skalon de diagramoj
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Ŝarĝpagaj tarifoj
|
||||
|
||||
+597
-330
File diff suppressed because it is too large
Load Diff
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 vuotta (neljännesvuosittain)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 vuotta (vuosittain)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Valitse, näytetäänkö tämän osion kuvaaja
|
||||
STR_GRAPH_SELECT_SCALE :Muuta kuvaajan vaaka-asteikkoa
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Rahtitaksat
|
||||
@@ -1660,12 +1659,12 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :Ei mitään
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Alkuperäinen
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Parannettu
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Ajoneuvot: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Valitse ajokaista
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Ajoneuvoliikenteen ajopuoli: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Valitse, kummalla puolella tietä ajoneuvot kulkevat.{}Tämä voi myös vaikuttaa siihen, kummalle puolelle rataa opastimet sijoittuvat, sekä siipiopastimien grafiikkaan.{}Saatat joutua lataamaan pelin uudestaan, jotta muutos toteutuisi kokonaan
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Vasemmanpuolinen liikenne
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Oikeanpuolinen liikenne
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Vasemmalla
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Oikealla
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Korkeuskartan pyöritys:{STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Valitse, mihin suuntaan korkeuskartan kuvaa kierretään pelimaailmaan sopiakseen
|
||||
|
||||
@@ -632,7 +632,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 ans (trimestriel)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 ans (annuel)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Basculer le graphique pour les données de cette échelle
|
||||
STR_GRAPH_SELECT_SCALE :Modifier l'échelle horizontale du graphique
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Valeur des marchandises
|
||||
|
||||
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 años (trimestral)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 años (anualmente)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Amosar/ocultar gráfica para este rango de datas
|
||||
STR_GRAPH_SELECT_SCALE :Mudar escala horizontal do gráfico
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Taxas de pago por carga
|
||||
|
||||
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 Jahre (vierteljährlich)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 Jahre (jährlich)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Diagramm für diesen Datenbereich umschalten
|
||||
STR_GRAPH_SELECT_SCALE :Horizontale Skala des Diagramms ändern
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Frachtbeförderungspreise
|
||||
|
||||
+14
-11
@@ -724,7 +724,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 έτη (τετραμηνιαία)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 έτη (ετήσια)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Εναλλαγή γραφήματος για αυτό το εύρος στοιχείων
|
||||
STR_GRAPH_SELECT_SCALE :Αλλαγή οριζόντιας κλίμακας γραφήματος
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Ποσοστά Πληρωμής Φορτίων
|
||||
@@ -1753,12 +1752,12 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :Κανένας
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Αυθεντικός
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Βελτιωμένος
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Οδικά Οχήματα: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Επιλέξτε την πλευρά οδήγησης
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Πλευρά οδήγησης οδικών οχημάτων: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Επιλέξτε την πλευρά οδήγησης του οδικού οχήματος.{}Αυτό μπορεί επίσης να επηρεάσει την πλευρά του σήματος και τα γραφικά του σηματοφόρου.{}Μπορεί να χρειαστεί να επαναφορτώσετε το παιχνίδι για να τεθεί σε πλήρη ισχύ μια αλλαγή.
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Οδήγηση από τα αριστερά
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Οδήγηση από τα δεξιά
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Αριστερά
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Δεξιά
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Περιστροφή χάρτη υψομετρίας: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Επιλέξτε με ποιον τρόπο θα περιστραφεί η εικόνα του ύψους χάρτη, για να ταιριάζει στον κόσμο του παιχνιδιού
|
||||
@@ -2981,22 +2980,22 @@ STR_PICKER_COLLECTION_DELETE_QUERY :Διαγραφ
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_TEXT :{YELLOW}Είστε σίγουρος/η ότι θέλετε να διαγράψετε αυτή τη συλλογή;
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_DISABLED_TEXT :{YELLOW}Είστε σίγουρος/η ότι θέλετε να διαγράψετε αυτή τη συλλογή; Υπάρχουν αντικείμενα από απενεργοποιημένα NewGRFs σε αυτήν!
|
||||
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Επιλογή κατηγορίας σταθμού για εμφάνιση
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Επιλογή κατηγορίας σταθμού για εμφάνιση. Ctrl+κλικ για προσθήκη στα ή αφαίρεση από τα αποθηκευμένα αντικείμενα
|
||||
STR_PICKER_STATION_TYPE_TOOLTIP :Επιλογή τύπου σταθμού για κατασκευή. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία
|
||||
STR_PICKER_STATION_COLLECTION_TOOLTIP :Επιλέξτε μια συλλογή από σταθμούς προς εμφάνιση
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Επιλογή κατηγορίας σημείου καθοδήγησης για εμφάνιση
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Επιλογή κατηγορίας σημείου καθοδήγησης για εμφάνιση. Ctrl+κλικ για προσθήκη στα ή αφαίρεση από τα αποθηκευμένα αντικείμενα
|
||||
STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Επιλογή σημείου καθοδήγησης για κατασκευή. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία
|
||||
STR_PICKER_WAYPOINT_COLLECTION_TOOLTIP :Επιλέξτε μια συλλογή από σημεία καθοδήγησης προς εμφάνιση
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Επιλογή κατηγορίας στάσεων λεωφορείων για εμφάνιση
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Επιλογή κατηγορίας στάσεων λεωφορείων για εμφάνιση. Ctrl+κλικ για προσθήκη στα ή αφαίρεση από τα αποθηκευμένα αντικείμενα
|
||||
STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Επιλογή κατηγορίας στάσεων λεωφορείων για κατασκευή. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία
|
||||
STR_PICKER_ROADSTOP_BUS_COLLECTION_TOOLTIP :Επιλέξτε μια συλλογή από σταθμούς λεωφορείων προς εμφάνιση
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Επιλογή κατηγορίας σταθμών φορτηγών προς εμφάνιση
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Επιλογή κατηγορίας σταθμών φορτηγών για εμφάνιση
|
||||
STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Επιλογή κατηγορίας σταθμών φορτηγών για κατασκευή. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία
|
||||
STR_PICKER_ROADSTOP_TRUCK_COLLECTION_TOOLTIP :Επιλέξτε μια συλλογή από σταθμούς φορτηγών προς εμφάνιση
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Επιλογή κατηγορίας αντικειμένων για εμφάνιση
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Επιλογή κατηγορίας αντικειμένων για εμφάνιση. Ctrl+κλικ για προσθήκη στα ή αφαίρεση από τα αποθηκευμένα αντικείμενα
|
||||
STR_PICKER_OBJECT_TYPE_TOOLTIP :Επιλογή κατηγορίας αντικειμένων για εμφάνιση. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία. Ctrl+κλικ+σύρσιμο για να επιλεγεί διαγώνια περιοχή. Επίσης, πατήστε Shift για εμφάνιση εκτιμώμενου κόστους μόνο
|
||||
STR_PICKER_OBJECT_COLLECTION_TOOLTIP :Επιλέξτε μια συλλογή από αντικείμενα προς εμφάνιση
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Επιλέξτε τη ζώνη της πόλης που θέλετε να εμφανίσετε
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Επιλέξτε τη ζώνη της πόλης που θέλετε να εμφανίσετε. Ctrl+κλικ για προσθήκη στα ή αφαίρεση από τα αποθηκευμένα αντικείμενα
|
||||
STR_PICKER_HOUSE_TYPE_TOOLTIP :Επιλογή τύπου σπιτιού για κατασκευή. Ctrl+κλικ για προσθήκη σε ή αφαίρεση από αποθηκευμένα στοιχεία
|
||||
STR_PICKER_HOUSE_COLLECTION_TOOLTIP :Επιλέξτε μια συλλογή από σπίτια προς εμφάνιση
|
||||
|
||||
@@ -5462,6 +5461,10 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :η γέφυρα
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :η γέφυρα είναι πολύ χαμηλή κατά {HEIGHT} για σιδηροδρομικό σημείο καθοδήγησης
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :η γέφυρα είναι πολύ χαμηλή κατά {HEIGHT} για οδικό σημείο καθοδήγησης
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :η γέφυρα είναι πολύ χαμηλή κατά {HEIGHT} για κλείδωμα
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :η γέφυρα είναι {HEIGHT} πολύ χαμηλή για το αμαξοστάσιο τρένων
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :η γέφυρα είναι {HEIGHT} πολύ χαμηλή για το αμαξοστάσιο οδικών οχημάτων
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :η γέφυρα είναι {HEIGHT} πολύ χαμηλή για το ναυπηγείο πλοίων
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_OBJECT :η γέφυρα είναι {HEIGHT} πολύ χαμηλή για το αντικείμενο
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :Δεν μπορεί να κατασκευαστεί σήραγγα εδώ...
|
||||
|
||||
@@ -694,7 +694,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 év (negyedévente)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 év (évente)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Grafikon megjelenítése ehhez az adatsorhoz
|
||||
STR_GRAPH_SELECT_SCALE :A grafikon vízszintes skálájának módosítása
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Rakományok szállítási díja
|
||||
@@ -3158,7 +3157,7 @@ STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}A tájon
|
||||
|
||||
# Land generation window (SE)
|
||||
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Táj szerkesztése
|
||||
STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Sziklás területek elhelyezése a térképen
|
||||
STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Sziklás területek elhelyezése a térképen.{}Ctrl+kattintással a sziklás terület eltávolítása
|
||||
STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Sivatag létrehozása.{}Ctrl+kattintás a sivatag eltávolításához
|
||||
STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Az emelendő/süllyesztendő földterület növelése
|
||||
STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Az emelendő/süllyesztendő földterület csökkentése
|
||||
|
||||
+306
-226
File diff suppressed because it is too large
Load Diff
+3
-4
@@ -632,7 +632,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6년 (분기별)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24년 (연도별)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :이 데이터 범위에 대한 그래프 전환
|
||||
STR_GRAPH_SELECT_SCALE :그래프 가로 축척 변경
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}화물 운송단가 비율
|
||||
@@ -1662,11 +1661,11 @@ STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :오리지널
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :향상됨
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :자동차 통행 방향: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :통행 방향을 선택합니다
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :도로 차량의 통행 방향을 선택합니다.{}이 설정은 열차 신호기의 설치 위치에도 영향을 미칩니다.{}제대로 적용하기 위해서는 게임을 다시 불러올 필요가 있습니다.
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :좌측통행
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :우측통행
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :좌측
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :우측
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :높이맵 회전: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :높이맵을 게임 세계에 맞추기 위해 어느 방향으로 회전시킬지 선택합니다
|
||||
|
||||
@@ -632,7 +632,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 gadi (ceturkšnos)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 gadi (gadskārtēji)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Pārslēgt diagrammu šim datu diapazonam
|
||||
STR_GRAPH_SELECT_SCALE :Mainīt grafika horizontālo mērogu
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Kravas apmaksas cenas
|
||||
|
||||
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 Joer (véirelsjähreg)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 Joer (jährleg)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Grafik emschalte fir des Data Range
|
||||
STR_GRAPH_SELECT_SCALE :Horizontal Skala vun der Grafik änneren
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Luedungs Bezuelraten
|
||||
|
||||
+150
-147
@@ -287,8 +287,8 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Katia te
|
||||
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Taitara o te matapihi - tōia tēnei kia neke i te matapihi
|
||||
STR_TOOLTIP_SHADE :{BLACK}Pōkaia ake te matapihi - whakaaria te pae taitara anake
|
||||
STR_TOOLTIP_DEBUG :{BLACK}Whakaaturia te pārongo patuiro newGRF
|
||||
STR_TOOLTIP_DEFSIZE :{BLACK}Hurirahitia te matapihi ki te rahi taunoa. Pātaki+Pāwhiri kia pupuru i te rahi onāianei hei taunoa. Pātaki+Pāwhirirua kia tautuhi anō i te taunoa e purutia nei
|
||||
STR_TOOLTIP_STICKY :{BLACK}Mākatia kia kore ai te matapihi e katia e te pātuhi "Katia ngā Matapihi Katoa". Pātaki+Pāwhiri kia purutia hoki tēnei hei taunoa
|
||||
STR_TOOLTIP_DEFSIZE :{BLACK}Hurirahitia te matapihi ki te rahi taunoa. Pātaki+Pāwhiri kia pupuri i te rahi onāianei hei taunoa. Pātaki+Pāwhirirua kia tautuhi anō i te taunoa e puritia nei
|
||||
STR_TOOLTIP_STICKY :{BLACK}Mākatia kia kore ai te matapihi e katia e te pātuhi "Katia ngā Matapihi Katoa". Pātaki+Pāwhiri kia puritia hoki tēnei hei taunoa
|
||||
STR_TOOLTIP_RESIZE :{BLACK}Pāwhiria, tōia hoki kia hurirahi i tēnei matapihi
|
||||
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Hohokona te rahi/iti o te matapihi
|
||||
STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Pae panuku - ka panuku te rārangi ki runga/raro
|
||||
@@ -410,7 +410,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Hangaia
|
||||
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Hangaia he tūāhanga arawai
|
||||
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Hangaia he taunga rererangi
|
||||
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Huakina te tahua hanga whenua, te tahua rākau rānei, makaia he tohu rānei
|
||||
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Huakina te matapihi oro/puoro
|
||||
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Huakina te matapihi oro/pūoro
|
||||
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Huakina te karere/pūrongo kua hipa, te hītori karere rānei, mukua rānei ngā karere katoa
|
||||
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Huakina te pārongo whenua, te tahua kapomata, ngā mihi a OpenTTD, ngā utauta rānei mā ngā kaihanga pūmanawa
|
||||
STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Whitiwhitia ngā paeutauta
|
||||
@@ -627,11 +627,10 @@ STR_GRAPH_LAST_24_MINUTES_TIME_LABEL :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}72 meneti kua hipa
|
||||
STR_GRAPH_LAST_288_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}288 meneti kua hipa
|
||||
|
||||
STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLACK}2 tau (āmarama)
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 tau (āhauwhā)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 tau (ātau)
|
||||
STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLACK}2 tau (ā marama)
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 tau (ā hauwhā)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 tau (ā tau)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Hohokona te kauwhata o tēnei whānui raraunga
|
||||
STR_GRAPH_SELECT_SCALE :Panonitia te āwhata huapae o te kauwhata
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Uara o ngā utu utanga
|
||||
@@ -723,7 +722,7 @@ STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLA
|
||||
STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}--
|
||||
STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM}
|
||||
STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------
|
||||
STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Kāore he puoro e wātea nei
|
||||
STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Kāore he pūoro e wātea nei
|
||||
STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}"
|
||||
STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Waiata
|
||||
STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Taitara
|
||||
@@ -731,12 +730,12 @@ STR_MUSIC_SHUFFLE :{TINY_FONT}{BLA
|
||||
STR_MUSIC_PROGRAM :{TINY_FONT}{BLACK}Hōtaka
|
||||
STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Peke ki te waiata kua hipa i tēnei tīpakonga
|
||||
STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Peke ki te waiata e whai ake nei i tēnei tīpakonga
|
||||
STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Kāti te puoro
|
||||
STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Pureitia te puoro
|
||||
STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Tōia ngā tāneke kia tautuhi te kaha mō te puoro me ngā orotaunaki
|
||||
STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Whakamutua te pūoro
|
||||
STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Pureitia te pūoro
|
||||
STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Tōia ngā tāneke kia tautuhi te kaha mō te pūoro me ngā orotaunaki
|
||||
STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Kōwhiria te hōtaka o "waiata katoa"
|
||||
STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Kōwhiria te hōtaka o "puoro tāera tawhito"
|
||||
STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Kōwhiria te hōtaka o "puoro tāera hou"
|
||||
STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Kōwhiria te hōtaka o "pūoro tāera tawhito"
|
||||
STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Kōwhiria te hōtaka o "pūoro tāera hou"
|
||||
STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Kōwhiria te hōtaka o "Tiritimāmā"
|
||||
STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Kōwhiria te hōtaka o "Motuhake 1" (tautuhitia e te kaiwhakamahi)
|
||||
STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Kōwhiria te hōtaka o "Motuhake 2" (tautuhitia e te kaiwhakamahi)
|
||||
@@ -751,7 +750,7 @@ STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLA
|
||||
STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Ūkui
|
||||
STR_PLAYLIST_CHANGE_SET :{BLACK}Panoni rārangi
|
||||
STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Ūkuia te hōtaka onāianei (ko Motuhake 1 anake, ko Motuhake 2 anake rānei)
|
||||
STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Panonitia te tīpakonga puoro ki tētahi atu rārangi kua tāutangia
|
||||
STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Panonitia te tīpakonga pūoro ki tētahi atu rārangi kua tāutangia
|
||||
STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Pāwhiria he waiata kia tāpiria ki te hōtaka onāianei (ko Motuhake 1 anake, ko Motuhake 2 anake rānei)
|
||||
STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Pāwhiria he waiata kia tangohia mai i te hōtaka onāianei (ko Motuhake 1 anake, ko Motuhake 2 anake rānei)
|
||||
|
||||
@@ -803,7 +802,7 @@ STR_SMALLMAP_LEGENDA_ROAD_VEHICLES :{TINY_FONT}{BLA
|
||||
STR_SMALLMAP_LEGENDA_SHIPS :{TINY_FONT}{BLACK}Kaipuke
|
||||
STR_SMALLMAP_LEGENDA_AIRCRAFT :{TINY_FONT}{BLACK}Waka Rererangi
|
||||
STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLACK}Ara Kawekawe
|
||||
STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Ngahere
|
||||
STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Wao
|
||||
STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Teihana Rerewhenua
|
||||
STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Teihana Taraka
|
||||
STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Tūnga Pahi
|
||||
@@ -812,7 +811,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA
|
||||
STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Whenua Tuarangaranga
|
||||
STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Pātītī
|
||||
STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Whenua Horehore
|
||||
STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Ngahere Ua
|
||||
STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Wao Ua
|
||||
STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Whīra
|
||||
STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Rākau
|
||||
STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Toka
|
||||
@@ -946,7 +945,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC
|
||||
STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE}
|
||||
STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Kei te wātea he {STRING} hou! - {ENGINE}
|
||||
|
||||
STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Huakina te matapihi rōpū e pā ana ki te rōpū o te waka
|
||||
STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Huakina te matapihi rōpū ki te rōpū o te waka
|
||||
|
||||
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}Kāore a {STATION} i te whiwhi tonu i te {CARGO_LIST}
|
||||
STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}Ka whiwhi a {STATION} i te {CARGO_LIST} ināianei
|
||||
@@ -1120,9 +1119,9 @@ STR_GAME_OPTIONS_BASE_SFX :Kohinga oro mā
|
||||
STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :Kōwhiria te kohinga oro mātāmua hei whakamahi
|
||||
STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :Pārongo tāpiri mō te kohinga oro mātāmua
|
||||
|
||||
STR_GAME_OPTIONS_BASE_MUSIC :Kohinga puoro mātāmua
|
||||
STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :Kōwhiria te kohinga puoro mātāmua
|
||||
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :Pārongo tāpiri mō te kohinga puoro mātāmua
|
||||
STR_GAME_OPTIONS_BASE_MUSIC :Kohinga pūoro mātāmua
|
||||
STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :Kōwhiria te kohinga pūoro mātāmua
|
||||
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :Pārongo tāpiri mō te kohinga pūoro mātāmua
|
||||
|
||||
STR_GAME_OPTIONS_ONLINE_CONTENT :Tīkina ngētahi atu ihirangi
|
||||
STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Kimihia he ihirangi hou hei tiki ake
|
||||
@@ -1177,7 +1176,7 @@ STR_FUNDING_ONLY :Whakarato moni
|
||||
STR_MINIMAL :Mōkito
|
||||
STR_NUM_VERY_LOW :Iti rawa
|
||||
STR_NUM_LOW :Iti
|
||||
STR_NUM_NORMAL :Māori
|
||||
STR_NUM_NORMAL :Taunoa
|
||||
STR_NUM_HIGH :Nui
|
||||
STR_NUM_CUSTOM :Tautuhi
|
||||
STR_NUM_CUSTOM_NUMBER :Tautuhi ({NUM})
|
||||
@@ -1213,7 +1212,7 @@ STR_RIVERS_LOT :Maha
|
||||
###length 3
|
||||
STR_DISASTER_NONE :Kore
|
||||
STR_DISASTER_REDUCED :Whakapaku
|
||||
STR_DISASTER_NORMAL :Māori
|
||||
STR_DISASTER_NORMAL :Taunoa
|
||||
|
||||
###length 4
|
||||
STR_SUBSIDY_X1_5 :x1.5
|
||||
@@ -1253,11 +1252,11 @@ STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(kāore he whak
|
||||
STR_CONFIG_SETTING_VALUE :{ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Uara taunoa: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Momo tautuhinga: {ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE_CLIENT :Tautuhinga kiritaki (kāore e purutia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu katoa)
|
||||
STR_CONFIG_SETTING_TYPE_GAME_MENU :Tautuhinga kēmu (ka purutia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu hou anake)
|
||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Tautuhinga kēmu (ka purutia i roto i ngā kōnae tiakikēmu; ka pāngia te kēmu onāianei anake)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Tautuhinga umanga (ka purutia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu hou anake)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Tautuhinga umanga (ka purutia i roto i ngā kōnae tiakikēmu; ka pāngia te umanga onāianei anake)
|
||||
STR_CONFIG_SETTING_TYPE_CLIENT :Tautuhinga kiritaki (kāore e puritia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu katoa)
|
||||
STR_CONFIG_SETTING_TYPE_GAME_MENU :Tautuhinga kēmu (ka puritia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu hou anake)
|
||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Tautuhinga kēmu (ka puritia i roto i ngā kōnae tiakikēmu; ka pāngia te kēmu onāianei anake)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Tautuhinga umanga (ka puritia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu hou anake)
|
||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Tautuhinga umanga (ka puritia i roto i ngā kōnae tiakikēmu; ka pāngia te umanga onāianei anake)
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Kia tūpato!
|
||||
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Ka tautuhitia anō tēnei mahi i ngā tautuhinga kēmu katoa ki ngā uara taunoa.{}Kei te tino hiahia rānei koe ki te whano tonu?
|
||||
|
||||
@@ -1272,11 +1271,11 @@ STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Tautuhinga e re
|
||||
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Ka whakatinaia te rārangi i raro nei ki ngētahi momo tautuhinga
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Momo tautuhinga katoa
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Tautuhinga kiritaki (kāore e purutia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu katoa)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Tautuhinga kēmu (ka purutia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu hou anake)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Tautuhinga kēmu (ka purutia i roto i ngā kōnae tiakikēmu; ka pāngia te kēmu onāianei anake)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Tautuhinga umanga (ka purutia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu hou anake)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Tautuhinga umanga (ka purutia i roto i ngā kōnae tiakikēmu; ka pāngia te umanga onāianei anake)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Tautuhinga kiritaki (kāore e puritia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu katoa)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Tautuhinga kēmu (ka puritia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu hou anake)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Tautuhinga kēmu (ka puritia i roto i ngā kōnae tiakikēmu; ka pāngia te kēmu onāianei anake)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Tautuhinga umanga (ka puritia i roto i ngā kōnae tiakikēmu; ka pāngia ngā kēmu hou anake)
|
||||
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Tautuhinga umanga (ka puritia i roto i ngā kōnae tiakikēmu; ka pāngia te umanga onāianei anake)
|
||||
|
||||
STR_CONFIG_SETTINGS_NONE :{WHITE}- Kore -
|
||||
###length 3
|
||||
@@ -1301,7 +1300,7 @@ STR_CONFIG_SETTING_REALISTIC :Āhua pono
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Mauī
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Pokapū
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Waengapū
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Matau
|
||||
|
||||
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}hēkena
|
||||
@@ -1309,7 +1308,7 @@ STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}h
|
||||
STR_CONFIG_SETTING_INFINITE_MONEY :Moni mutungakore: {STRING}
|
||||
STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Tangohia te tepe hokohoko, kāore e taea te mone
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Moni taurewa mōrahi i te tīmatanga: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Moni taurewa mōrahi i te tīmata: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Te tatau mōrahi ka taea te piki ai e ia umanga (kāore e whaiwhakaarotia te pikiutu tukupū). Mēnā ka tautuhitia ki te "Kāore he moni taurewa", kāore he moni e wātea mēnā kāore hoki i whakaratoa e tētahi hōtuhi kēmu, e te tautuhinga "Moni mutungakore" rānei
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
|
||||
###setting-zero-is-special
|
||||
@@ -1456,10 +1455,10 @@ STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Hei taunoa, ka
|
||||
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :I te maha o ngā wā, ka tū ngā waka i ia teihana ka whakahipa ai. Ina kā tēnei tautuhinga, ka taraiwa mutungakore te waka ki ngā teihana katoa i te haerenga. Kia mahara ka tautuhi tēnei i te uara taunoa mō ngā mahi hou. Ka taea te tautuhi anō ia whanonga ahakoa tēnei tautuhinga
|
||||
|
||||
STR_CONFIG_SETTING_STOP_LOCATION :Hei taunoa, ka mutu ngā mahi hou a ngā tereina i te {STRING} o te atamira
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Te wāhi ka tū ai ngā tereina i te atamira hei taunoa. Ko te "pito tata" te wāhi he tata ki te tomokanga, ko te "pokapū" te pokapū o te atamira, ko te "pito mamao" te wāhi he mamao atu i te tomokanga. Kia mahara ka tautuhi tēnei i te uara taunoa mō ngā mahi hou. Ka taea te tautuhi anō ia mahi mā te pāwhiri ki te kuputuhi mō te mahi
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Te wāhi ka tū ai ngā tereina i te atamira hei taunoa. Ko te "pito tata" te wāhi he tata ki te tomokanga, ko te "waengapū" te waengapū o te atamira, ko te "pito mamao" te wāhi he mamao atu i te tomokanga. Kia mahara ka tautuhi tēnei i te uara taunoa mō ngā mahi hou. Ka taea te tautuhi anō ia mahi mā te pāwhiri ki te kuputuhi mō te mahi
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :pito tata
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :pokapū
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :waengapū
|
||||
STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :pito mamao
|
||||
|
||||
STR_CONFIG_SETTING_AUTOSCROLL :Nekehia te tirohanga ina tata te kiore ki te tapa: {STRING}
|
||||
@@ -1501,7 +1500,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Tautuhitia te t
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Kore*
|
||||
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Whakapaku
|
||||
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Māori
|
||||
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Taunoa
|
||||
|
||||
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Tukuna kia hanga ara whakawhiti rerewhenua i runga i ngā kaiwhakataetae: {STRING}
|
||||
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Tukuna kia hanga ara whakawhiti rerewhenua i ngā rori, ngā rēra rānei a ngā kaiwhakataetae
|
||||
@@ -1522,7 +1521,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Kara tīmata m
|
||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Kōwhiria te kara tīmata mātārua mō te umanga ina whakakāngia e tētahi newGRF
|
||||
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Kāore rawa ngā taunga rererangi e mōnehu: {STRING}
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ina kā, ka wātea āke ake ngā momo taunga rererangi katoa i muri i ana whakaurunga
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ina kā, ka wātea ia momo taunga rererangi ake tonu atu i muri i te whakaurunga
|
||||
|
||||
STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Whakatūpato ina ngaro he waka: {STRING}
|
||||
STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Keua he karere kia whakatūpatotia koe ina kore e taea e ngā waka te kite he ara ki te ūnga
|
||||
@@ -1543,16 +1542,16 @@ STR_CONFIG_SETTING_WARN_OLD_VEHICLE :Whakatūpato in
|
||||
STR_CONFIG_SETTING_WARN_OLD_VEHICLE_HELPTEXT :Ina kā, ka tukuna he karere ina tawhito haere he waka
|
||||
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Kāore rawa ngā waka e mōnehu: {STRING}
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ina kā, ka wātea āke ake ngā tauira katoa o ngā waka i muri i ana whakaurunga
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ina kā, ka wātea ia tauira waka ake tonu atu i muri i te whakaurunga
|
||||
|
||||
STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Tāima: {STRING}
|
||||
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Tīpakona te waeine tāima o te kēmu. Tē taea te panoni ā muri atu.{}{}Ko te tāima āmaramataka te wheako taketake o OpenTTD, e 12 ngā marama o te tau, e 28 ki te 31 ngā rā o ia marama.{}{}I te tāima ākaraka, ka mahi te whakaputa utanga me te ahumoni ki ngā waeine kotahi meneti, he tata ōrite ai te roa o te marama o te 30 rā i te aratau tāima āmaramataka. Ka whakarōpūtia ngēnei ki ngā wā o te 12 meneti, he ōrite ki te tau i te aratau āmaramataka.{}{}Kei ia aratau he maramataka taketake, e whakamahia ana mō ngā rā whakaurunga o ngā waka, ngā whare, me ngētahi momo tūāhanga
|
||||
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Tīpakona te waeine tāima o te kēmu. Tē taea te panoni ā muri atu.{}{}Ko te tāima ā maramataka te wheako taketake o OpenTTD, e 12 ngā marama o te tau, e 28 ki te 31 ngā rā o ia marama.{}{}I te tāima ā karaka, ka mahi te whakaputa utanga me te ahumoni ki ngā waeine kotahi meneti, he tata ōrite ai te roa o te marama o te 30 rā i te aratau tāima ā maramataka. Ka whakarōpūtia ngēnei ki ngā wā o te 12 meneti, he ōrite ki te tau i te aratau ā maramataka.{}{}Kei ia aratau he maramataka taketake, e whakamahia ana mō ngā rā whakaurunga o ngā waka, ngā whare, me ngētahi momo tūāhanga
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Āmaramataka
|
||||
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Ākaraka
|
||||
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Ā maramataka
|
||||
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Ā karaka
|
||||
|
||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR :Meneti i te tau: {STRING}
|
||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Kōwhiria te tatau o ngā meneti i te tau o te maramataka. Ko te 12 meneti te taunoa. Tautuhitia ki te 0 kia āraia te tāima o te maramataka kei haere tonu. Ka whakapōturitia te whakauru i ngā waka, ngā whare, me te tūāhanga e te whakaroa i te tau. Kāore e pāngia te tere o ngā waka me te whaihanga ohaoha, hāunga te pikiutu tukupū. Kāore tēnei tautuhinga e wātea mēnā kāore te tāima ākaraka i te whakamahia
|
||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Kōwhiria te tatau o ngā meneti i te tau o te maramataka. Ko te 12 meneti te taunoa. Tautuhitia ki te 0 kia āraia te tāima o te maramataka kei haere tonu. Ka whakapōturitia te whakauru i ngā waka, ngā whare, me te tūāhanga e te whakaroa i te tau. Kāore e pāngia te tere o ngā waka me te whaihanga ohaoha, hāunga te pikiutu tukupū. Kāore tēnei tautuhinga e wātea mēnā kāore te tāima ā karaka i te whakamahia
|
||||
|
||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
|
||||
###setting-zero-is-special
|
||||
@@ -1592,7 +1591,7 @@ STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Whakaparo mō t
|
||||
STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Pāwhiri matau
|
||||
|
||||
STR_CONFIG_SETTING_POPULATION_IN_LABEL :Whakaaria ngā taupori o ngā tāone i ngā tapanga tāone: {STRING}
|
||||
STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Whakaaria ngā taupori o ngā tāone i ngā tapanga mō ana ingoa i te mahere
|
||||
STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Whakaaria ngā taupori o ngā tāone i ngā tapanga i te mahere
|
||||
|
||||
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Mātotoru o ngā rārangi i ngā kauwhata: {STRING}
|
||||
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Te whānui o ngā rārangi i ngā kauwhata. He māmā ake te rārangi rauangi ki te āta pānui, he māmā ake te rārangi mātotoru ki te kite, he māmā ake hoki ngā kara ki te kite ina mātotoru
|
||||
@@ -1606,7 +1605,7 @@ STR_CONFIG_SETTING_LANDSCAPE :Taiao: {STRING}
|
||||
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Ka tautuhi ngā taiao i ngētahi momo kēmu, he rerekē ngā momo utanga, he rerekē ngā here kia whakatupu ngā tāone. Heoi anō, ka tukuna ngētahi atu kōwhiringa e ngētahi newGRF me ngētahi hōtuhi kēmu
|
||||
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR :Hanga whenua: {STRING}
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Ka whakamahi te papatono hanga whenua taketake i te kohinga whakairoiro mātāmua, ka whakaputa hanga pūmau i te whenua. Ko TerraGenesis he papatono hanga whenua e whakamahi ana i te heihei pērene, he maha hoki ana tautuhinga
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Ka whakamahi te papatono hanga whenua taketake i te kohinga whakairoiro mātāmua, ka whakaputa hanga pūmau i te whenua. Ko TerraGenesis he papatono hanga whenua e whakamahi ana i te heihei pērene, he maha hoki ngā tautuhinga
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Taketake
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
|
||||
@@ -1615,7 +1614,7 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Tatūkē teitei
|
||||
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Kōwhiria te teitei o ngā puke me ngā maunga i te whenua
|
||||
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY :Apiapi ahumahi: {STRING}
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Tautuhi kia whia ngā ahumahi i te tīmatanga, i te toenga hoki o te kēmu
|
||||
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Tautuhi kia whia ngā ahumahi i te tīmata, i te toenga hoki o te kēmu
|
||||
|
||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Roa mōrahi ki te tapa mō ngā ahumahi Hinu: {STRING}
|
||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Te tepe mō te mamao ki te tapa o te mahere me hangaia ai ngā whare whakapai hinu me ngā papahinu. I ngā mahere moutere, ka whakatūturu tēnei ka tata ngaua ahumahi ki te takutai. I ngā mahere rahi ake i te 256 papariki, ka whakarahia taua uara
|
||||
@@ -1640,11 +1639,11 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Tuarangaranga
|
||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Tuarangaranga rawa
|
||||
|
||||
STR_CONFIG_SETTING_AVERAGE_HEIGHT :Teitei toharite: {STRING}
|
||||
STR_CONFIG_SETTING_AVERAGE_HEIGHT_HELPTEXT :Kōwhiria te teitei toharite o te whenua. “Aunoa”: ka whakamahia te taunoa mō te taiao kua tīpakona: 'Raorao' mō te taiao wera, “Māori” mō te taiao hātai me te taiao taonga tākaro, “Mānia tairanga” mō te taiao makariri.
|
||||
STR_CONFIG_SETTING_AVERAGE_HEIGHT_HELPTEXT :Kōwhiria te teitei toharite o te whenua. “Aunoa”: ka whakamahia te taunoa mō te taiao kua tīpakona: 'Raorao' mō te taiao wera, “Taunoa” mō te taiao hātai me te taiao taonga tākaro, “Mānia tairanga” mō te taiao makariri.
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_AVERAGE_HEIGHT_AUTO :Aunoa
|
||||
STR_CONFIG_SETTING_AVERAGE_HEIGHT_LOWLANDS :Raorao
|
||||
STR_CONFIG_SETTING_AVERAGE_HEIGHT_NORMAL :Māori
|
||||
STR_CONFIG_SETTING_AVERAGE_HEIGHT_NORMAL :Taunoa
|
||||
STR_CONFIG_SETTING_AVERAGE_HEIGHT_PLATEAUS :Mānia tairanga
|
||||
|
||||
STR_CONFIG_SETTING_VARIETY :Tuari matatini: {STRING}
|
||||
@@ -1660,18 +1659,18 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :Kore
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Taketake
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Whakapai
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Waka rori: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Kōwhiria te taha me taraiwa ai
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Taha me taraiwa ai ngā waka rori: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Kōwhiria te taha me taraiwa ai ngā waka rori.{}Ka pā hoki pea tēnei ki te taha o ngā tohu me te whakairoiro haki.{}Me uta anō pea te kēmu kia tutuki katoa ai he panonitanga
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Taraiwa ki te mauī
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Taraiwa ki te matau
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Mauī
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Matau
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Hurihanga mahereteitei: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Kōwhiria te ahu me huri ai te ata mahereteitei kia kuhuna ai ki te ao o te kēmu
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Ehara ākaraka
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Ākaraka
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Ehara ā karaka
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Ā karaka
|
||||
|
||||
STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Kōeke teitei mō te mahere takiwā papatahi: {STRING}
|
||||
###length 2
|
||||
@@ -1739,8 +1738,8 @@ STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Topa i te maher
|
||||
STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Panuku i te mahere
|
||||
STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Poko
|
||||
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION :Papapātuhi āmata: {STRING}
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Tīpakona me pēwhea te huaki i te papapātuhi āmata mō te pātuhi e whakamahi ana i te mata anake. Mō ngā pūrere tēnei kāore he papapātuhi tūturu
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION :Papapātuhi ā mata: {STRING}
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Tīpakona me pēwhea te huaki i te papapātuhi ā mata mō te pātuhi e whakamahi ana i te mata anake. Mō ngā pūrere tēnei kāore he papapātuhi tūturu
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Tē āhei
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Pāwhirirua
|
||||
@@ -1775,8 +1774,8 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :roa (31st Dec 2
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :poto (31-12-2008)
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31)
|
||||
|
||||
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Okioki aunoa i te tīmatanga o ngā kēmu hou: {STRING}
|
||||
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Ina kā, ka okioki aunoa te kēmu i te tīmatanga, kia āta mātakitakina te mahere
|
||||
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Okioki aunoa i te tīmata o ngā kēmu hou: {STRING}
|
||||
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Ina kā, ka okioki aunoa te kēmu i te tīmata, kia āta mātakitakina te mahere
|
||||
|
||||
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Ina okioki, me āhei: {STRING}
|
||||
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Tīpakona ngā mahi me āhei i te wā e okioki ai te kēmu
|
||||
@@ -1815,15 +1814,15 @@ STR_CONFIG_SETTING_DEFAULT_RAIL_ROAD_TYPE_MOST_USED :Whakamahi nui
|
||||
STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Whakaaria ngā tāpui i ngā ara rerewhenua: {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Hoatu he kara kē ki ngā ara kua tāpuia, kia āwhina ina kore he tereina e hiahia ki te haere ki runga i tētahi paraka ara
|
||||
|
||||
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Me hohe tonu ngā utauta hangahanga i muri i ana whakamahi: {STRING}
|
||||
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Me hohe tonu i muri i ana whakamahi ngā utauta hangahanga mō ngā arawhiti, ngā anaroa, te mea, te mea
|
||||
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Me hohe tonu ngā utauta hangahanga i muri i te whakamahi: {STRING}
|
||||
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Me hohe tonu i muri i te whakamahi ngā utauta hangahanga mō ngā arawhiti, ngā anaroa, te mea, te mea
|
||||
|
||||
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Tango aunoatia ngā tohu i te hangahanga rerewhenua: {STRING}
|
||||
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Tango aunoatia ngā tohu i te hangahanga rerewhenua mēnā ka āraia e ngā tohu. Kia mahara he pūtake pea tēnei o ngā tukituki tereina
|
||||
|
||||
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Tepetere o te rere whakamua: {STRING}
|
||||
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Te tepe o te tere o te kēmu ina kā te rere whakamua. 0 = kāore he tepe (pērā te tere i tō rorohiko). Ka whakapōturitia te kēmu e ngā uara i raro iho i te 100%. Mō te tere mōrahi, kei te āhua tonu o ngā āhuatanga o tō rorohiko me tēwhea kēmu e tākarotia ana
|
||||
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% o te tere māori
|
||||
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% o te tere taunoa
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Kāore he tepe (pērā te tere i tō rorohiko)
|
||||
|
||||
@@ -2057,10 +2056,10 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Pūrua (taketak
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Rārangi
|
||||
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Whakatakotoranga rākau i roto i te kēmu: {STRING}
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Tautuhitia te putanga a ngā rākau i roto i te kēmu. Ka pā pea tēnei ki ngā ahumahi e whakawhirinaki ana ki te tupuranga a ngā rākau, hei tauira, ngā mira kani rākau
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Tautuhitia te putanga a ngā rākau i roto i te kēmu. Ka pā pea tēnei ki ngā ahumahi e whirinaki ana ki te tupuranga a ngā rākau, hei tauira, ngā mira kani rākau
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :E tupu, engari kaua e hora atu {RED}(ka whakapakarutia ngā mira kani rākau)
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :E tupu, engari e hora i roto i ngā ngahere anake
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :E tupu, engari e hora i roto i ngā wao anake
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :E tupu, e hora i ngā wāhi katoa
|
||||
STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Kaua e tupu, kaua e hora atu {RED}(ka whakapakarutia ngā mira kani rākau)
|
||||
|
||||
@@ -2086,7 +2085,7 @@ STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Te kōeke mōra
|
||||
###length 6
|
||||
STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x
|
||||
STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x
|
||||
STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Māori
|
||||
STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Taunoa
|
||||
STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x
|
||||
STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x
|
||||
STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x
|
||||
@@ -2103,24 +2102,24 @@ STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Tere whakatupu
|
||||
###length 5
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Kore
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Pōturi
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Māori
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Taunoa
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Tere
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Tere rawa
|
||||
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS :Tatau o ngā tāone nui ki te tāone: {STRING}
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :He nui ake ngā tāone nui i te tīmatanga, he tere ake ai te tupu
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :He nui ake ngā tāone nui i te tīmata, he tere ake ai te tupu
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 i te {COMMA}
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Kore
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Tau whakarea o te rahi o ngā tāone nui i te tīmatanga: {STRING}
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Te rahi toharite o ngā tāone nui ki ngā tāone arowhānui i te tīmatanga o te kēmu
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Tau whakarea o te rahi o ngā tāone nui i te tīmata: {STRING}
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Te rahi toharite o ngā tāone nui ki ngā tāone arowhānui i te tīmata o te kēmu
|
||||
STR_CONFIG_SETTING_TOWN_MIN_DISTANCE :Roanga mōkito i waenganui o ngā tāone: {STRING}
|
||||
STR_CONFIG_SETTING_TOWN_MIN_DISTANCE_HELPTEXT :Tautuhia te roanga mōkito i ngā papariki i waenganui o ngā tāone mō te hanga mahere me te whakatūranga matapōkere
|
||||
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Whakahoutia te kauwhata tuari ia {STRING}
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Te wā i waenganui o ngā tātai anō i te kauwhata hono. Mō tētahi huānga o te kauwhata ia tātai anō, nā reira, mēnā ka H tēnei tautuhinga, kāore te kauwhata katoa e whakahoutia ia H hēkena, ka whakahoutia te huānga kotahi anake. Ka poto ake te tautuhinga, ka roa ake te wā ka pīrangitia e te pūtukatuka matua kia tātaitia ai. Ka roa ake te tautuhinga, ka roa ake te tōmuri ki te tīmata o te tuari utanga i ngā ara hou
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Whakamahia {STRING} mō te tātai anō i te kauwhata hono
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Te wā i waenganui o ngā tātai anō i te kauwhata hono. I te tīmatanga o tētahi tātai anō, ka hangaia he miro ka mahi mō tēnei tatau o ngā hēkena. Ka poto ake te tautuhinga, ka nui ake te tūponotanga kāore te miro e oti i te wā tika. Kātahi te kēmu ka mutu tae noa ki te ("takaware"). Ka roa atu te tautuhinga, ka roa atu te tōmuri ki te whakahou i te tuari ina panonitia ngā ara
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Te wā i waenganui o ngā tātai anō i te kauwhata hono. I te tīmata o tētahi tātai anō, ka hangaia he miro ka mahi mō tēnei tatau o ngā hēkena. Ka poto ake te tautuhinga, ka nui ake te tūponotanga kāore te miro e oti i te wā tika. Kātahi te kēmu ka mutu tae noa ki te ("takaware"). Ka roa atu te tautuhinga, ka roa atu te tōmuri ki te whakahou i te tuari ina panonitia ngā ara
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Aratau tuari mō ngā kaieke: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Hangarite": ka tata ōrite te tatau o ngā kaieke ka haere mai i te teihana A ki te teihana E ki ngērā ka haere mai i te teihana E ki te teihana A. "Hikuwaru": ka matapōkere te tatau o ngā kaieke ka haere ki ia ahu. "Āringa": kāore he tuari aunoa mō ngā kaieke
|
||||
@@ -2428,7 +2427,7 @@ STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Kiritaki
|
||||
STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Ngā kiritaki tuihono / ngā kiritaki mōrahi{}Ngā umanga tuihono / ngā umanga mōrahi
|
||||
STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA}
|
||||
STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Rahi o te mahere
|
||||
STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Te rahi o te mahere o te kēmu{}Pāwhiria kia raupapa ki te horahanga
|
||||
STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Te rahi o te mahere o te kēmu{}Pāwhiria kia whakaraupapa ki te horahanga
|
||||
STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Tau
|
||||
STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Te tau nei
|
||||
STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}h {NUM}m
|
||||
@@ -2707,7 +2706,7 @@ STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Mākatia
|
||||
STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Kimi i ngā paetukutuku kei waho
|
||||
STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Kimihia he ihirangi kāore i te wātea i te ratonga a OpenTTD, i ngētahi paetukutuku kāore i te pāhekoheko ki OpenTTD
|
||||
STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Kei te wehe atu koe i OpenTTD!
|
||||
STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Ka rerekē ngā ture me ngā here mō te tiki ihirangi ake i ngā paetukutuku i waho.{}Me whakawhirinaki koe ki ngā paetukutuku mō ngā tohutohu me pēwhea te tāuta ihirangi ki roto i OpenTTD.{}Kei te hiahia rānei koe ki te whano tonu?
|
||||
STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Ka rerekē ngā ture me ngā here mō te tiki ihirangi ake i ngā paetukutuku i waho.{}Me whirinaki koe ki ngā paetukutuku mō ngā tohutohu me pēwhea te tāuta ihirangi ki roto i OpenTTD.{}Kei te hiahia rānei koe ki te whano tonu?
|
||||
STR_CONTENT_FILTER_TITLE :{BLACK}Tātari tapanga/ingoa:
|
||||
STR_CONTENT_OPEN_URL :{BLACK}Paetukutuku
|
||||
STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Toroa te paetukutuku mō tēnei ihirangi
|
||||
@@ -2867,7 +2866,7 @@ STR_PICKER_MODE_ALL_TOOLTIP :Hohokona te wha
|
||||
STR_PICKER_MODE_USED :Whakamahi
|
||||
STR_PICKER_MODE_USED_TOOLTIP :Hohokona te whakaari i ngā tūemi kua whakamahia
|
||||
STR_PICKER_MODE_SAVED :Kua tiakina
|
||||
STR_PICKER_MODE_SAVED_TOOLTIP :Hohokona te whakaari i ngā tūemi anake kua purutia
|
||||
STR_PICKER_MODE_SAVED_TOOLTIP :Hohokona te whakaari i ngā tūemi anake kua puritia
|
||||
|
||||
STR_PICKER_PREVIEW_SHRINK :-
|
||||
STR_PICKER_PREVIEW_SHRINK_TOOLTIP :Whakapakutia te teitei o ngā ata tiro takamua. Pātaki+Pāwhiri kia whakapakutia ki te mōkito
|
||||
@@ -2888,23 +2887,23 @@ STR_PICKER_COLLECTION_DELETE_QUERY :Mukua te kohing
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_TEXT :{YELLOW}Kei te tino hiahia rānei koe ki te muku i tēnei kohinga?
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_DISABLED_TEXT :{YELLOW}Kei te tino hiahia rānei koe ki te muku i tēnei kohinga? Kei roto he tūemi nō ngā newGRF poko!
|
||||
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Tīpakona he rōpū teihana hei whakaari
|
||||
STR_PICKER_STATION_TYPE_TOOLTIP :Tīpakona he momo teihana hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua purutia
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Tīpakona he rōpū teihana hei whakaari. Pātaki+Pāwhiri kia tāpiri, tango rānei ki ngā tūemi kua puritia
|
||||
STR_PICKER_STATION_TYPE_TOOLTIP :Tīpakona he momo teihana hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua puritia
|
||||
STR_PICKER_STATION_COLLECTION_TOOLTIP :Tīpakona he kohinga teihana hei whakaari
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Tīpakona he rōpū aratohu hei whakaari
|
||||
STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Tīpakona he aratohu hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua purutia
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Tīpakona he rōpū aratohu hei whakaari. Pātaki+Pāwhiri kia tāpiri, tango rānei ki ngā tūemi kua puritia
|
||||
STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Tīpakona he aratohu hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua puritia
|
||||
STR_PICKER_WAYPOINT_COLLECTION_TOOLTIP :Tīpakona he kohinga aratohu hei whakaari
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Tīpakona he rōpū tūnga pahi hei whakaari
|
||||
STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Tīpakona he momo tūnga pahi hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua purutia
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Tīpakona he rōpū tūnga pahi hei whakaari. Pātaki+Pāwhiri kia tāpiri, tango rānei ki ngā tūemi kua puritia
|
||||
STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Tīpakona he momo tūnga pahi hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua puritia
|
||||
STR_PICKER_ROADSTOP_BUS_COLLECTION_TOOLTIP :Tīpakona he kohinga tūnga pahi hei whakaari
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Tīpakona he rōpū teihana taraka hei whakaari
|
||||
STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Tīpakona he momo teihana taraka hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua purutia
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Tīpakona he rōpū teihana taraka hei whakaari. Pātaki+Pāwhiri kia tāpiri, tango rānei ki ngā tūemi kua puritia
|
||||
STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Tīpakona he momo teihana taraka hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua puritia
|
||||
STR_PICKER_ROADSTOP_TRUCK_COLLECTION_TOOLTIP :Tīpakona he kohinga teihana taraka hei whakaari
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Tīpakona he rōpū mea hei whakaari
|
||||
STR_PICKER_OBJECT_TYPE_TOOLTIP :Tīpakona he momo mea hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua purutia. Pātaki+Pāwhiri+Tō kia tīpako i te rohe hauroki. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Tīpakona he rōpū mea hei whakaari. Pātaki+Pāwhiri kia tāpiri, tango rānei ki ngā tūemi kua puritia
|
||||
STR_PICKER_OBJECT_TYPE_TOOLTIP :Tīpakona he momo mea hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua puritia. Pātaki+Pāwhiri+Tō kia tīpako i te rohe hauroki. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
STR_PICKER_OBJECT_COLLECTION_TOOLTIP :Tīpakona he kohinga mea hei whakaari
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Tīpakona he rohe tāone hei whakaari
|
||||
STR_PICKER_HOUSE_TYPE_TOOLTIP :Tīpakona he momo whare hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua purutia
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Tīpakona he rohe tāone hei whakaari. Pātaki+Pāwhiri kia tāpiri, tango rānei ki ngā tūemi kua puritia
|
||||
STR_PICKER_HOUSE_TYPE_TOOLTIP :Tīpakona he momo whare hei hanga. Pātaki+Pāwhiri kia tāpiri, tango rānei i ngā tūemi kua puritia
|
||||
STR_PICKER_HOUSE_COLLECTION_TOOLTIP :Tīpakona he kohinga whare hei whakaari
|
||||
|
||||
STR_HOUSE_PICKER_CAPTION :Tīpakonga Whare
|
||||
@@ -2922,7 +2921,7 @@ STR_HOUSE_PICKER_CLASS_ZONE1 :Tapa
|
||||
STR_HOUSE_PICKER_CLASS_ZONE2 :Mōwaho
|
||||
STR_HOUSE_PICKER_CLASS_ZONE3 :Paenoho Waho
|
||||
STR_HOUSE_PICKER_CLASS_ZONE4 :Paenoho Roto
|
||||
STR_HOUSE_PICKER_CLASS_ZONE5 :Pokapū Tāone
|
||||
STR_HOUSE_PICKER_CLASS_ZONE5 :Waengapū tāone
|
||||
|
||||
STR_HOUSE_PICKER_PROTECT :Āraia kei whakamohoa
|
||||
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Kōwhiria mēnā ka tiakina tēnei whare kei whakakapi ina tupu ake te tāone
|
||||
@@ -3058,7 +3057,7 @@ STR_AIRPORT_HELISTATION :Teihana waka to
|
||||
|
||||
STR_AIRPORT_CLASS_SMALL :Taunga rererangi iti
|
||||
STR_AIRPORT_CLASS_LARGE :Taunga rererangi rahi
|
||||
STR_AIRPORT_CLASS_HUB :Taunga rererangi pokapū
|
||||
STR_AIRPORT_CLASS_HUB :Taunga rererangi waengapū
|
||||
STR_AIRPORT_CLASS_HELIPORTS :Taunga waka topatopa
|
||||
|
||||
STR_STATION_BUILD_NOISE :{BLACK}Turituri e puta ana: {GOLD}{COMMA}
|
||||
@@ -3085,12 +3084,12 @@ STR_TREES_RANDOM_TYPE :{BLACK}Rākau i
|
||||
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Maka rākau i ngētahi momo matapōkere. Pātaki+Pāwhiri+Tō kia kōwhiri i te rohe hauroki. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Rākau Matapōkere
|
||||
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Whakatō rākau i ngētahi wāhi matapōkere i te whenua
|
||||
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Māori
|
||||
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Taunoa
|
||||
STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Whakatō rākau tōtahi mā te tō i runga i te whenua
|
||||
STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Uru
|
||||
STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Whakatō ngahere iti mā te tō i runga i te whenua
|
||||
STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Ngahere
|
||||
STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Whakatō ngahere rahi mā te tō i runga i te whenua
|
||||
STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Whakatō wao iti mā te tō i runga i te whenua
|
||||
STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Wao
|
||||
STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Whakatō wao rahi mā te tō i runga i te whenua
|
||||
|
||||
# Land generation window (SE)
|
||||
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Hanga Whenua
|
||||
@@ -3172,8 +3171,8 @@ STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Ara Utan
|
||||
STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Ahumahi e whakaputa ana
|
||||
STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Ahumahi e whiwhi ana
|
||||
STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Whare
|
||||
STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Pāwhiria te ahumahi kia kite i ana kaiwhakarato me ana kiritaki
|
||||
STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Pāwhiria te utanga kia kite i ana kaiwhakarato me ana kiritaki
|
||||
STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Pāwhiria te ahumahi kia kite i ngā kaiwhakarato me ngā kiritaki
|
||||
STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Pāwhiria te utanga kia kite i ngā kaiwhakarato me ngā kiritaki
|
||||
STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Ara tukutuku
|
||||
STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Whakaaria ngā ahumahi ka whakaputa utanga, whiwhi utanga hoki
|
||||
STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Honoa ki te mahereiti
|
||||
@@ -3262,7 +3261,7 @@ STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Taramuwē
|
||||
STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION :{STRING} (kei te hangaia)
|
||||
|
||||
STR_LAI_TREE_NAME_TREES :Rākau
|
||||
STR_LAI_TREE_NAME_RAINFOREST :Ngahere ua
|
||||
STR_LAI_TREE_NAME_RAINFOREST :Wao ua
|
||||
STR_LAI_TREE_NAME_CACTUS_PLANTS :Tātātiotio
|
||||
|
||||
STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Teihana rerewhenua
|
||||
@@ -3311,7 +3310,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Whenua o te uma
|
||||
|
||||
# About OpenTTD window
|
||||
STR_ABOUT_OPENTTD :{WHITE}Pārongo mō OpenTTD
|
||||
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Manatārua taketake {COPYRIGHT} 1995 Chris Sawyer, Ka purutia ngā mōtika katoa
|
||||
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Manatārua taketake {COPYRIGHT} 1995 Chris Sawyer, Ka puritia ngā mōtika katoa
|
||||
STR_ABOUT_VERSION :{BLACK}Whakaputanga {REV} o OpenTTD
|
||||
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} Te kapa o OpenTTD
|
||||
|
||||
@@ -3323,7 +3322,7 @@ STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Te tatau
|
||||
STR_FRAMERATE_RATE_BLITTER :{BLACK}Pāpātanga kapohanga whakairoiro: {STRING}
|
||||
STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Te tatau o ngā kapohanga ataata e tāhuahuatia ana i ia hēkena
|
||||
STR_FRAMERATE_SPEED_FACTOR :{BLACK}Tau whakarea o te tere o te kēmu nei: {DECIMAL}x
|
||||
STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Te tere o te kēmu ināianei e whakatairitea ana ki te kawatau i te pāpātanga whaihanga māori
|
||||
STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Te tere o te kēmu ināianei e whakatairitea ana ki te kawatau i te pāpātanga whaihanga taunoa
|
||||
STR_FRAMERATE_CURRENT :{WHITE}Onāianei
|
||||
STR_FRAMERATE_AVERAGE :{WHITE}Toharite
|
||||
STR_FRAMERATE_MEMORYUSE :{WHITE}Pūmahara
|
||||
@@ -3631,18 +3630,18 @@ STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Tīaroar
|
||||
STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Tīaroaro i tētahi ata: Mahi 0xA, {COMMA} ({STRING}:{NUM})
|
||||
STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Tīaroaro i tētahi ata: Mahi 0x5, type {HEX}, {COMMA} ({STRING}:{NUM})
|
||||
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Ata ki muri
|
||||
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Whano ki te ata māori ki muri, peke atu i ngā ata tipatipa/kara/momotuhi ka takai ai mai i te ata mutunga ki te tuatahi
|
||||
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Whano ki te ata tōkau ki muri, peke atu i ngā ata tipatipa/kara/momotuhi ka takai ai mai i te ata mutunga ki te tuatahi
|
||||
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Haere ki tētahi ata
|
||||
STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Haere ki te ata kua tukuna. Mēnā ehara te ata i te māori, e whano ki te ata māori tata rawaatu
|
||||
STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Haere ki te ata kua tukuna. Mēnā ehara te ata i te tōkau, e whano ki te ata tōkau tata rawaatu
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Ata ki mua
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Whano ki te ata māori ki mua, peke atu i ngā ata tipatipa/kara/momotuhi ka takai ai mai i te ata tuatahi ki te mutunga
|
||||
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Whano ki te ata tōkau ki mua, peke atu i ngā ata tipatipa/kara/momotuhi ka takai ai mai i te ata tuatahi ki te mutunga
|
||||
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Te whakaahuahanga o te ata e tīpakona nei. Ka whakaturi te papatono ki te tīaroaro ina tuhia taua ata
|
||||
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Nekenekehia te ata, panonitia ngā haukume i te tuaka X me te tuaka Y. Pātaki+Pāwhiri kia neke i te ata mā te waru waeine i ia wā
|
||||
STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM}
|
||||
|
||||
###length 2
|
||||
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Pokapū o ngā haukume
|
||||
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Pokapū whānui
|
||||
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Waengapū o ngā haukume
|
||||
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Waengapū whānui
|
||||
|
||||
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Makawe whakawhiti
|
||||
|
||||
@@ -3810,12 +3809,12 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Hokona mai ngā
|
||||
STR_LOCAL_AUTHORITY_ACTION_BRIBE :Whakapatia te kāwanatanga ārohe
|
||||
###next-name-looks-similar
|
||||
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Tīmatahia he whakatairanga iti kia whakamanea ai i te maha ake o ngā kaieke me te utanga ki ngō ratonga kawekawe.{}Ka whakapai taupuatia te hau o ngā teihana i tētahi pūtoro iti mai i te pokapū o te tāone.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Tīmatahia he whakatairanga wawaenga kia whakamanea ai i te maha ake o ngā kaieke me te utanga ki ngō ratonga kawekawe.{}Ka whakapai taupuatia te hau o ngā teihana i tētahi pūtoro wawaenga mai i te pokapū o te tāone.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Tīmatahia he whakatairanga rahi kia whakamanea ai i te maha ake o ngā kaieke me te utanga ki ngō ratonga kawekawe.{}Ka whakapai taupuatia te hau o ngā teihana i tētahi pūtoro rahi mai i te pokapū o te tāone.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Tīmatahia he whakatairanga iti kia whakamanea ai i te maha ake o ngā kaieke me te utanga ki ngō ratonga kawekawe.{}Ka whakapai taupuatia te hau o ngā teihana i tētahi pūtoro iti mai i waengapū o te tāone.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Tīmatahia he whakatairanga wawaenga kia whakamanea ai i te maha ake o ngā kaieke me te utanga ki ngō ratonga kawekawe.{}Ka whakapai taupuatia te hau o ngā teihana i tētahi pūtoro wawaenga mai i waengapū o te tāone.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Tīmatahia he whakatairanga rahi kia whakamanea ai i te maha ake o ngā kaieke me te utanga ki ngō ratonga kawekawe.{}Ka whakapai taupuatia te hau o ngā teihana i tētahi pūtoro rahi mai i waengapū o te tāone.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Whakarato moni mō te whakahouhou i te whatunga rori tāone.{}Ka whakatōhenehene nuitia ngā waka rori mō te 6 marama pea i te mōrahi.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Whakarato moni mō te whakahouhou i te whatunga rori tāone.{}Ka whakatōhenehene nuitia ngā waka rori mō te 6 meneti pea i te mōrahi.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Hangaia he pakoko hei hōnore i tō umanga.{}Ka whakapaia ake tonu atu te hau o ngā teihana i tēnei tāone.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Hangaia he pakoko hei hōnore i tō umanga.{}Ka whakapaia te hau o ngā teihana i tēnei tāone ake tonu atu.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Whakarato moni mō te hanga i ngētahi whare hou i te tāone.{}Ka whakahohoro taupuatia te tupu a te tāone.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Hokona mai ngā mōtika kawekawe kaupare i te tāone mō te 12 marama.{}Ka āraia te kāwanatanga ārohe kei whakamahi ngā kaieke me te utanga i ngā teihana o ngā kaiwhakataetae. Ka whakakorea tēnei kirimana e te whakapati nā ngā kaiwhakataetae.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Hokona mai ngā mōtika kawekawe kaupare i te tāone mō te 12 meneti.{}Ka āraia te kāwanatanga ārohe kei whakamahi ngā kaieke me te utanga i ngā teihana o ngā kaiwhakataetae. Ka whakakorea tēnei kirimana e te whakapati nā ngā kaiwhakataetae.{}{POP_COLOUR}Utu: {CURRENCY_LONG}
|
||||
@@ -3958,10 +3957,10 @@ STR_CARGO_RATING_OUTSTANDING :Kei runga rawaa
|
||||
STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Nekehia te tirohanga matua ki te tauwāhi o te teihana. Pātaki+Pāwhiri kia huaki i tētahi atu tirohanga i te tauwāhi o te teihana
|
||||
STR_STATION_VIEW_EDIT_TOOLTIP :{BLACK}Tapaia anō te teihana, nekehia rānei te tohu
|
||||
|
||||
STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Whakaaria ngā tereina katoa e toro ana i tēnei teihana i ana rārangi mahi
|
||||
STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Whakaaria ngā waka rori katoa e toro ana i tēnei teihana i ana rārangi mahi
|
||||
STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Whakaaria ngā waka rererangi katoa e toro ana i tēnei teihana i ana rārangi mahi
|
||||
STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Whakaaria ngā kaipuke katoa e toro ana i tēnei teihana i ana rārangi mahi
|
||||
STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Whakaaria ngā tereina katoa e toro ana i tēnei teihana i ngā rārangi mahi
|
||||
STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Whakaaria ngā waka rori katoa e toro ana i tēnei teihana i ngā rārangi mahi
|
||||
STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Whakaaria ngā waka rererangi katoa e toro ana i tēnei teihana i ngā rārangi mahi
|
||||
STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Whakaaria ngā kaipuke katoa e toro ana i tēnei teihana i ngā rārangi mahi
|
||||
|
||||
STR_STATION_VIEW_EDIT_STATION_SIGN :{WHITE}Whakarerekētia te tohu o te teihana
|
||||
|
||||
@@ -4134,10 +4133,10 @@ STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING}
|
||||
STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Waka Rererangi
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Tereina - pāwhiria te tereina mō te pārongo. Purutia te Pātaki+Pāhiki kia paparuatia te momo utanga
|
||||
STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Waka rori - pāwhiria te waka mō te pārongo. Purutia te Pātaki+Pāhiki kia paparuatia te momo utanga
|
||||
STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Kaipuke - pāwhiria te kaipuke mō te pārongo. Purutia te Pātaki+Pāhiki kia paparuatia te momo utanga
|
||||
STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Waka rererangi - pāwhiria te waka mō te pārongo. Purutia te Pātaki+Pāhiki kia paparuatia te momo utanga
|
||||
STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Tereina - pāwhiria te tereina mō te pārongo. Puritia te Pātaki+Pāhiki kia paparuatia te momo utanga
|
||||
STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Waka rori - pāwhiria te waka mō te pārongo. Puritia te Pātaki+Pāhiki kia paparuatia te momo utanga
|
||||
STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Kaipuke - pāwhiria te kaipuke mō te pārongo. Puritia te Pātaki+Pāhiki kia paparuatia te momo utanga
|
||||
STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Waka rererangi - pāwhiria te waka mō te pārongo. Puritia te Pātaki+Pāhiki kia paparuatia te momo utanga
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_VEHICLE_LIST_AVAILABLE_TRAINS :Tereina e wātea ana
|
||||
@@ -4181,7 +4180,7 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Waka rererangi
|
||||
|
||||
STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA})
|
||||
|
||||
STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Rōpū - pāwhiria he rōpū kia rārangitia ngā waka katoa o tēnei rōpū. Tōtaka rōpū kia raupapa ki te hirahira
|
||||
STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Rōpū - pāwhiria he rōpū kia rārangitia ngā waka katoa o tēnei rōpū. Tōtaka rōpū kia whakaraupapa i te hirahira
|
||||
STR_GROUP_CREATE_TOOLTIP :{BLACK}Pāwhiri kia hangaia he rōpū
|
||||
STR_GROUP_DELETE_TOOLTIP :{BLACK}Mukua te rōpū kua tīpakona
|
||||
STR_GROUP_RENAME_TOOLTIP :{BLACK}Tapaia anō te rōpū kua tīpakona
|
||||
@@ -4387,7 +4386,7 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Pūruati
|
||||
STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Pūruatia he waka rererangi
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_DEPOT_CLONE_TRAIN_DEPOT_TOOLTIP :{BLACK}Hokona mai he tārua o tētahi tereina me ana wākena. Pāwhiria tēnei pātene, kātahi pāwhiria he tereina kei roto, kei waho rānei i te taupuni. Pātaki+Pāwhiri kia toha i ngā rārangi mahi. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
STR_DEPOT_CLONE_TRAIN_DEPOT_TOOLTIP :{BLACK}Hokona mai he tārua o tētahi tereina me ngā wākena. Pāwhiria tēnei pātene, kātahi pāwhiria he tereina kei roto, kei waho rānei i te taupuni. Pātaki+Pāwhiri kia toha i ngā rārangi mahi. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_TOOLTIP :{BLACK}Hokona mai he tārua o tētahi waka rori. Pāwhiria tēnei pātene, kātahi pāwhiria he waka rori kei roto, kei waho rānei i te taupuni. Pātaki+Pāwhiri kia toha i ngā rārangi mahi. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
STR_DEPOT_CLONE_SHIP_DEPOT_TOOLTIP :{BLACK}Hokona mai he tārua o tētahi kaipuke. Pāwhiria tēnei pātene, kātahi pāwhiria he kaipuke kei roto, kei waho rānei i te taupuni. Pātaki+Pāwhiri kia toha i ngā rārangi mahi. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
STR_DEPOT_CLONE_AIRCRAFT_HANGAR_TOOLTIP :{BLACK}Hokona mai he tārua o tētahi waka rererangi. Pāwhiria tēnei pātene, kātahi pāwhiria he waka rererangi kei roto, kei waho rānei i te whare. Pātaki+Pāwhiri kia toha i ngā rārangi mahi. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
@@ -4399,10 +4398,10 @@ STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Nekehia
|
||||
STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Nekehia te tirohanga matua ki te tauwāhi o te whare rererangi. Pātaki+Pāwhiri kia huaki i tētahi atu tirohanga i te tauwāhi o te whare rererangi
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Whakaaria he rārangi o ngā tereina katoa e toro ana i te taupuni nei i ana rārangi mahi
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Whakaaria he rārangi o ngā waka rori katoa e toro ana i te taupuni nei i ana rārangi mahi
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Whakaaria he rārangi o ngā kaipuke katoa e toro ana i te taupuni nei i ana rārangi mahi
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Whakaaria he rārangi o ngā waka rererangi katoa e toro ana i te taupuni nei i ana rārangi mahi
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Whakaaria he rārangi o ngā tereina katoa e toro ana i te taupuni nei i ngā rārangi mahi
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Whakaaria he rārangi o ngā waka rori katoa e toro ana i te taupuni nei i ngā rārangi mahi
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Whakaaria he rārangi o ngā kaipuke katoa e toro ana i te taupuni nei i ngā rārangi mahi
|
||||
STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Whakaaria he rārangi o ngā waka rererangi katoa e toro ana i te taupuni nei i ngā rārangi mahi
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Pāwhiri kia whakatū i ngā tereina katoa kei roto i te taupuni
|
||||
@@ -4521,7 +4520,7 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Ungaia t
|
||||
STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Ungaia te waka rererangi ki te whare. Pātaki+Pāwhiri kia tapia anake
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Hokona mai he tārua o te tereina me ana wākena. Pātaki+Pāwhiri kia toha i te rārangi mahi. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Hokona mai he tārua o te tereina me ngā wākena. Pātaki+Pāwhiri kia toha i te rārangi mahi. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Hokona mai he tārua o te waka rori. Pātaki+Pāwhiri kia toha i te rārangi mahi. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Hokona mai he tārua o te kaipuke. Pātaki+Pāwhiri kia toha i te rārangi mahi. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Hokona mai he tārua o te waka rererangi. Pātaki+Pāwhiri kia toha i te rārangi mahi. Pēhi hoki i te Pāhiki kia whakaatu noa iho i te whakataunga tata o te utu
|
||||
@@ -4699,8 +4698,8 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Whakawhi
|
||||
STR_ORDERS_LIST_TOOLTIP :{BLACK}Te rārangi mahi - pāwhiria he mahi kia miramiratia. Pātaki+Pāwhiri kia panuku ki te ūnga o te mahi
|
||||
STR_ORDER_INDEX :{COMMA}:{NBSP}
|
||||
|
||||
STR_ORDERS_END_OF_ORDERS :- - Mutunga o ngā Mahi - -
|
||||
STR_ORDERS_END_OF_SHARED_ORDERS :- - Mutunga o ngā Mahi e Tohaina Ana - -
|
||||
STR_ORDERS_END_OF_ORDERS :- - Mutunga o ngā mahi - -
|
||||
STR_ORDERS_END_OF_SHARED_ORDERS :- - Mutunga o ngā mahi e tohaina ana - -
|
||||
|
||||
# Order bottom buttons
|
||||
STR_ORDER_NON_STOP :{BLACK}Mutungakore
|
||||
@@ -4785,9 +4784,9 @@ STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Whakamut
|
||||
STR_ORDERS_GO_TO_BUTTON :{BLACK}Haere ki
|
||||
STR_ORDER_GO_TO_NEAREST_DEPOT :Haere ki te taupuni tata rawaatu
|
||||
STR_ORDER_GO_TO_NEAREST_HANGAR :Haere ki te whare waka rererangi tata rawaatu
|
||||
STR_ORDER_CONDITIONAL :Peke whakawhirinaki
|
||||
STR_ORDER_CONDITIONAL :Peke whirinaki
|
||||
STR_ORDER_SHARE :Tohaina ngā mahi
|
||||
STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Kuhuna he mahi hou ki mua ki te mahi kua miramiratia, tāpiria rānei ki te mutunga o te rārangi. Pātaki+Pāwhiri ki tētahi teihana kia "uta katoatia tētahi momo utanga", ki tētahi aratohu kia huripoki i te tautuhinga "mutungakore hei taunoa", ki tētahi taupuni rānei kia "wetepiri". Pāwhiria tētahi atu waka kia tārua i ana mahi, Pātaki+Pāwhiri rānei kia toha i ngā mahi. Ka ārai he toro taupuni i te tapi aunoa i te waka
|
||||
STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Kuhuna he mahi hou ki mua ki te mahi kua miramiratia, tāpiria rānei ki te mutunga o te rārangi. Pātaki+Pāwhiri ki tētahi teihana kia "uta katoatia tētahi momo utanga", ki tētahi aratohu kia huripoki i te tautuhinga "mutungakore hei taunoa", ki tētahi taupuni rānei kia "wetepiri". Pāwhiria tētahi atu waka kia tārua i ngā mahi, Pātaki+Pāwhiri rānei kia toha i ngā mahi. Ka ārai he toro taupuni i te tapi aunoa i te waka
|
||||
|
||||
STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Whakaaturia ngā waka katoa e toha ana i ngēnei mahi
|
||||
|
||||
@@ -4825,11 +4824,11 @@ STR_ORDER_NO_LOAD :{SPACE}(Kaua e
|
||||
STR_ORDER_UNLOAD :{SPACE}(Tukuna atu, uta mai)
|
||||
STR_ORDER_UNLOAD_FULL_LOAD :{SPACE}(Tukuna atu, tatari kia kī katoa)
|
||||
STR_ORDER_UNLOAD_FULL_LOAD_ANY :{SPACE}(Tukuna atu, tatari kia kī i tētahi momo utanga)
|
||||
STR_ORDER_UNLOAD_NO_LOAD :{SPACE}(Tukuna atu, kia hemahema noa iho)
|
||||
STR_ORDER_UNLOAD_NO_LOAD :{SPACE}(Tukuna atu kia hemahema)
|
||||
STR_ORDER_TRANSFER :{SPACE}(Whakawhitia atu, uta mai)
|
||||
STR_ORDER_TRANSFER_FULL_LOAD :{SPACE}(Whakawhitia atu, tatari kia kī katoa)
|
||||
STR_ORDER_TRANSFER_FULL_LOAD_ANY :{SPACE}(Whakawhitia atu, tatari kia kī i tētahi momo utanga)
|
||||
STR_ORDER_TRANSFER_NO_LOAD :{SPACE}(Whakawhitia atu, kia hemahema noa iho)
|
||||
STR_ORDER_TRANSFER_NO_LOAD :{SPACE}(Whakawhitia atu kia hemahema)
|
||||
STR_ORDER_NO_UNLOAD :{SPACE}(Kaua e tuku atu, uta mai)
|
||||
STR_ORDER_NO_UNLOAD_FULL_LOAD :{SPACE}(Kaua e tuku atu, tatari kia kī katoa)
|
||||
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :{SPACE}(Kaua e tuku atu, tatari kia kī i tētahi momo utanga)
|
||||
@@ -4852,7 +4851,7 @@ STR_ORDER_AUTO_REFIT_ANY :utanga e wātea
|
||||
|
||||
###length 3
|
||||
STR_ORDER_STOP_LOCATION_NEAR_END :{SPACE}[pito tata]
|
||||
STR_ORDER_STOP_LOCATION_MIDDLE :{SPACE}[pokapū]
|
||||
STR_ORDER_STOP_LOCATION_MIDDLE :{SPACE}[waengapū]
|
||||
STR_ORDER_STOP_LOCATION_FAR_END :{SPACE}[pito mamao]
|
||||
|
||||
STR_ORDER_OUT_OF_RANGE :{RED} (He mamao rawa te ūnga)
|
||||
@@ -5002,7 +5001,7 @@ STR_AI_LIST_ACCEPT :{BLACK}Whakaae
|
||||
STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Tīpakona te hōtuhi kua miramiratia
|
||||
|
||||
STR_SCREENSHOT_CAPTION :{WHITE}Kapomata
|
||||
STR_SCREENSHOT_SCREENSHOT :{BLACK}Kapomata māori
|
||||
STR_SCREENSHOT_SCREENSHOT :{BLACK}Kapomata taunoa
|
||||
STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Kapomata kua topa mai katoatia
|
||||
STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Kapomata kua topa taunoatia
|
||||
STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Kapomata o te mahere katoa
|
||||
@@ -5164,7 +5163,7 @@ STR_ERROR_TOO_MANY_TOWNS :tuhene ngā tā
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :kāore he wāhi atu i te mahere
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :kei te whakatikaia ngā rori
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :Tē taea te muku tēnei tāone...{}{}He tohutoro tā tētahi teihana, tētahi taupuni rānei ki te tāone, tē taea rānei te tango tētahi papariki o te tāone
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :kāore he wāhi pai mō te pakoko i te pokapū o tēnei tāone
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :kāore he wāhi pai mō te pakoko i waengapū o tēnei tāone
|
||||
STR_ERROR_CAN_T_BUILD_HOUSE :Tē taea te hanga te whare...
|
||||
|
||||
# Industry related errors
|
||||
@@ -5177,13 +5176,13 @@ STR_ERROR_INDUSTRY_TOO_CLOSE :tata rawa ki t
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :me mātua whakatū he tāone
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :kotahi anake ka tukuna ki ia tāone
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :ka taea te hanga i ngā tāone anake neke atu i te 1200 te taupori
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :ka taea te hanga i ngā rohe ngahere ua anake
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :ka taea te hanga i ngā rohe wao ua anake
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :ka taea te hanga i ngā rohe onepū anake
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :ka taea te hanga i ngā tāone anake (ka whakakapi whare)
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :ka taea te hanga i tētahi wāhi anake e tata ana ki te pokapū o te tāone
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :ka taea te hanga i tētahi wāhi anake he tata ki waengapū o te tāone
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :ka taea te hanga i ngā wāhi tapotu anake
|
||||
STR_ERROR_CAN_ONLY_BE_POSITIONED :ka taea te maka ki tētahi wāhi anake e tata ana ki ngā tapa o te mahere
|
||||
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :ka taea te whakatō ngahere i runga ake anake i te rārangi hukarere
|
||||
STR_ERROR_CAN_ONLY_BE_POSITIONED :ka taea te maka ki tētahi wāhi anake he tata ki ngā tapa o te mahere
|
||||
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :ka taea te whakatō wao i runga ake anake i te rārangi hukarere
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :ka taea te hanga i runga ake anake i te rārangi hukarere
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :ka taea te hanga i raro iho anake i te rārangi hukarere
|
||||
|
||||
@@ -5284,8 +5283,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :momo taupuni h
|
||||
STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :me kotahi noa iho te mahi wetepiri
|
||||
STR_ERROR_UNBUNCHING_NO_FULL_LOAD :tē taea te uta katoa mēnā he mahi wetepiri tā te waka
|
||||
STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :tē taea te wetepiri mēnā he mahi uta katoa tā te waka
|
||||
STR_ERROR_UNBUNCHING_NO_CONDITIONAL :tē taea te peke whakawhirinaki mēnā he mahi wetepiri tā te waka
|
||||
STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :tē taea te wetepiri mēnā he peke whakawhirinaki tā te waka
|
||||
STR_ERROR_UNBUNCHING_NO_CONDITIONAL :tē taea te peke whirinaki mēnā he mahi wetepiri tā te waka
|
||||
STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :tē taea te wetepiri mēnā he peke whirinaki tā te waka
|
||||
|
||||
# Autoreplace related errors
|
||||
STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :roa rawa a {VEHICLE} i muri i te whakakapi
|
||||
@@ -5346,11 +5345,11 @@ STR_ERROR_CAN_T_PLANT_TREE_HERE :Tē taea te wha
|
||||
# Bridge related errors
|
||||
STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :Tē taea te hanga te arawhiti i konei...
|
||||
STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :me mātua turaki te arawhiti
|
||||
STR_ERROR_CAN_T_START_AND_END_ON :tē taea te takoto tahi e te tīmatanga me te mutunga i te wāhi kotahi
|
||||
STR_ERROR_CAN_T_START_AND_END_ON :tē taea te takoto tahi e te tīmata me te mutunga i te wāhi kotahi
|
||||
STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :ehara i te ōrite ngā teitei o ngā putanga o te arawhiti
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :he hakahaka rawa te arawhiti mō tēnei whenua
|
||||
STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :he teitei rawa te arawhiti mō tēnei whenua
|
||||
STR_ERROR_START_AND_END_MUST_BE_IN :me tōtika te rārangi i waenganui o te tīmatanga me te mutunga
|
||||
STR_ERROR_START_AND_END_MUST_BE_IN :me tōtika te rārangi i waenganui o te tīmata me te mutunga
|
||||
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :me tū i te whenua ngā pito e rua o te arawhiti
|
||||
STR_ERROR_BRIDGE_TOO_LONG :roa rawa te arawhiti
|
||||
STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :ka mutu te arawhiti i waho i te mahere
|
||||
@@ -5361,6 +5360,10 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :{HEIGHT} e haka
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :{HEIGHT} e hakahaka rawa ai te arawhiti mō te aratohu rerewhenua
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :{HEIGHT} e hakahaka rawa ai te arawhiti mō te aratohu rori
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :{HEIGHT} e hakahaka rawa ai te arawhiti mō te matatara
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :{HEIGHT} te hakahaka rawa o te arawhiti mō te taupuni tereina
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :{HEIGHT} te hakahaka rawa o te arawhiti mō te taupuni waka rori
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :{HEIGHT} te hakahaka rawa o te arawhiti mō te taupuni kaipuke
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_OBJECT :{HEIGHT} te hakahaka rawa o te arawhiti mō te mea
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :Tē taea te hanga te anaroa i konei...
|
||||
@@ -5548,7 +5551,7 @@ STR_BASESOUNDS_NONE_DESCRIPTION :He takai oro k
|
||||
STR_BASEMUSIC_WIN_DESCRIPTION :Pūoro taketake o Transport Tycoon Deluxe Windows edition.
|
||||
STR_BASEMUSIC_DOS_DESCRIPTION :Pūoro taketake o Transport Tycoon Deluxe DOS edition.
|
||||
STR_BASEMUSIC_TTO_DESCRIPTION :Pūoro taketake o Transport Tycoon (Original/World Editor) DOS edition.
|
||||
STR_BASEMUSIC_NONE_DESCRIPTION :He takai puoro kāore he puoro tūturu.
|
||||
STR_BASEMUSIC_NONE_DESCRIPTION :He takai pūoro kāore he pūoro tūturu.
|
||||
|
||||
##id 0x2000
|
||||
# Town building names
|
||||
@@ -5591,7 +5594,7 @@ STR_TOWN_BUILDING_NAME_PIGGY_BANK_1 :Pūtea poaka
|
||||
STR_INDUSTRY_NAME_COAL_MINE :Maina Waro
|
||||
STR_INDUSTRY_NAME_POWER_STATION :Punahiko
|
||||
STR_INDUSTRY_NAME_SAWMILL :Mira Kani Rākau
|
||||
STR_INDUSTRY_NAME_FOREST :Ngahere
|
||||
STR_INDUSTRY_NAME_FOREST :Wao
|
||||
STR_INDUSTRY_NAME_OIL_REFINERY :Whare Whakapai Hinu
|
||||
STR_INDUSTRY_NAME_OIL_RIG :Papahinu
|
||||
STR_INDUSTRY_NAME_FACTORY :Wheketere
|
||||
@@ -5614,7 +5617,7 @@ STR_INDUSTRY_NAME_WATER_TOWER :Pourewa Wai
|
||||
STR_INDUSTRY_NAME_FACTORY_2 :Wheketere
|
||||
STR_INDUSTRY_NAME_FARM_2 :Pāmu
|
||||
STR_INDUSTRY_NAME_LUMBER_MILL :Mira Kani Rākau
|
||||
STR_INDUSTRY_NAME_COTTON_CANDY_FOREST :Ngahere Pawa Huka
|
||||
STR_INDUSTRY_NAME_COTTON_CANDY_FOREST :Wao Pawa Huka
|
||||
STR_INDUSTRY_NAME_CANDY_FACTORY :Wheketere Rare
|
||||
STR_INDUSTRY_NAME_BATTERY_FARM :Pāmu Pūhiko
|
||||
STR_INDUSTRY_NAME_COLA_WELLS :Puna Kōra
|
||||
@@ -5643,13 +5646,13 @@ STR_SV_STNAME_NORTH :{STRING} ki te
|
||||
STR_SV_STNAME_SOUTH :{STRING} ki te Tonga
|
||||
STR_SV_STNAME_EAST :{STRING} ki te Rāwhiti
|
||||
STR_SV_STNAME_WEST :{STRING} ki te Uru
|
||||
STR_SV_STNAME_CENTRAL :Te Pokapū o {STRING}
|
||||
STR_SV_STNAME_CENTRAL :{STRING} Waengapū
|
||||
STR_SV_STNAME_TRANSFER :Te Whakawhitinga o {STRING}
|
||||
STR_SV_STNAME_HALT :Te Teihana o {STRING}
|
||||
STR_SV_STNAME_VALLEY :Te Awaawa o {STRING}
|
||||
STR_SV_STNAME_HEIGHTS :Ngā Puke o {STRING}
|
||||
STR_SV_STNAME_WOODS :Te Wao o {STRING}
|
||||
STR_SV_STNAME_LAKESIDE :Te Roto o {STRING}
|
||||
STR_SV_STNAME_VALLEY :Kōawaawa {STRING}
|
||||
STR_SV_STNAME_HEIGHTS :Maunga {STRING}
|
||||
STR_SV_STNAME_WOODS :Ngahere {STRING}
|
||||
STR_SV_STNAME_LAKESIDE :Roto {STRING}
|
||||
STR_SV_STNAME_EXCHANGE :Te Hononga o {STRING}
|
||||
STR_SV_STNAME_AIRPORT :Te Taunga o {STRING}
|
||||
STR_SV_STNAME_OILFIELD :Te Whīra Hinu o {STRING}
|
||||
@@ -5659,12 +5662,12 @@ STR_SV_STNAME_BUOY :{STRING}
|
||||
STR_SV_STNAME_WAYPOINT :{STRING}
|
||||
##id 0x6020
|
||||
STR_SV_STNAME_ANNEXE :{STRING} Nui
|
||||
STR_SV_STNAME_SIDINGS :Te Taha o {STRING}
|
||||
STR_SV_STNAME_SIDINGS :Ngā Arataha o {STRING}
|
||||
STR_SV_STNAME_BRANCH :Te Manga o {STRING}
|
||||
STR_SV_STNAME_UPPER :{STRING} ki Uta
|
||||
STR_SV_STNAME_LOWER :{STRING} ki Tai
|
||||
STR_SV_STNAME_HELIPORT :Ngā Topatopa o {STRING}
|
||||
STR_SV_STNAME_FOREST :Te Ngahere o {STRING}
|
||||
STR_SV_STNAME_HELIPORT :Waka Topatopa o {STRING}
|
||||
STR_SV_STNAME_FOREST :Wao {STRING}
|
||||
STR_SV_STNAME_FALLBACK :Teihana #{1:NUM} o {0:STRING}
|
||||
|
||||
############ end of savegame specific region!
|
||||
|
||||
@@ -633,7 +633,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 år (kvartalsvis)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 år (årlig)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Aktiver graf for dette dataområdet
|
||||
STR_GRAPH_SELECT_SCALE :Endre horisontal grafskala
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Varetakster
|
||||
|
||||
+25
-20
@@ -904,7 +904,7 @@ STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Budowa lotnisk
|
||||
STR_LANDSCAPING_MENU_LANDSCAPING :Kształtowanie krajobrazu
|
||||
STR_LANDSCAPING_MENU_PLANT_TREES :Sadzenie drzew
|
||||
STR_LANDSCAPING_MENU_PLACE_SIGN :Umieszczanie napisów
|
||||
STR_LANDSCAPING_MENU_PLACE_OBJECT :Umieść obiekt
|
||||
STR_LANDSCAPING_MENU_PLACE_OBJECT :Umieszczanie obiektów
|
||||
|
||||
# Music menu
|
||||
STR_TOOLBAR_SOUND_MUSIC :Dźwięk/muzyka
|
||||
@@ -1010,7 +1010,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 lat (kwartalny)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 lata (roczny)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Przełącz ukrywanie/wyświetlanie wykresu dla tego zakresu danych
|
||||
STR_GRAPH_SELECT_SCALE :Zmień skalę poziomą wykresu
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Stawki płatności za ładunek
|
||||
@@ -1733,8 +1732,8 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HIGH :Wysokie
|
||||
STR_CONFIG_SETTING_RECESSIONS :Kryzys: {STRING}
|
||||
STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Jeśli włączone, kryzys może występować okresowo. Podczas kryzysu produkcja jest znacznie niższa (powraca do poprzedniego poziomu, kiedy kryzys się kończy)
|
||||
|
||||
STR_CONFIG_SETTING_TRAIN_FLIP_REVERSE :Pozwól pociągom obrócić się przy zawracaniu: {STRING}
|
||||
STR_CONFIG_SETTING_TRAIN_FLIP_REVERSE_HELPTEXT :Wybierz kiedy pociągi mogą obrócić się, aby zmienić kierunek jazdy. Z ustawnieniem "Wszędzie", pociągi mogą obrócić się wszędzie. Z "Tylko koniec toru", pociągi nie obrócą się na stacjach, jeśli jest możliwa trasa na przód. Z "Nigdzie", pociągi nie będą mogły się obracać i cofać jeżeli będzie to potrzebne, lecz w zwolnionym tempie, gdy tylni pojazd nie ma kabiny maszynisty.
|
||||
STR_CONFIG_SETTING_TRAIN_FLIP_REVERSE :Pozwól pociągom odwrócić się przy zawracaniu: {STRING}
|
||||
STR_CONFIG_SETTING_TRAIN_FLIP_REVERSE_HELPTEXT :Wybierz, gdzie pociągi mogą się odwracać, aby zmienić kierunek jazdy. Z opcją „wszędzie” mogą odwracać się w dowolnym miejscu. Z opcją „tylko koniec toru” nie mogą odwracać się na stacjach, jeśli możliwa jest jazda do przodu. Z opcją „nigdzie” w ogóle nie mogą się odwracać, więc pojadą do tyłu ze zmniejszoną prędkością (jeśli tylny wagon nie posiada kabiny maszynisty)
|
||||
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_TRAIN_FLIP_REVERSE_ALL :Wszędzie
|
||||
@@ -1742,7 +1741,7 @@ STR_CONFIG_SETTING_TRAIN_FLIP_REVERSE_END_OF_LINE_ONLY :Tylko koniec to
|
||||
STR_CONFIG_SETTING_TRAIN_FLIP_REVERSE_NONE :Nigdzie
|
||||
|
||||
STR_CONFIG_SETTING_DISASTERS :Katastrofy: {STRING}
|
||||
STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ustaw katastrofy, które mogą okazjonalnie zablokować lub zniszczyć pojazdy albo infrastrukturę
|
||||
STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Włącz katastrofy, które mogą sporadycznie blokować lub niszczyć pojazdy oraz infrastrukturę
|
||||
|
||||
STR_CONFIG_SETTING_CITY_APPROVAL :Nastawienie władz lokalnych: {STRING}
|
||||
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Wybierz, jak bardzo hałas i niszczenie środowiska przez firmy wpływają na ich ocenę w mieście i na dalsze działania związane z budową na jego obszarze
|
||||
@@ -2040,12 +2039,12 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :Brak
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Oryginalny
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Ulepszony
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Pojazdy drogowe: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Wybierz stronę, po której będą jeździć samochody
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Strona w ruchu drogowym: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Wybierz stronę, po której będą jeździć pojazdy drogowe{}Może to również wpłynąć na stronę sygnalizacji oraz grafikę semaforów.{}Aby zmiana w pełni zadziałała, może być konieczne ponowne załadowanie gry
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Jazda po lewej
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Jazda po prawej
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Lewa
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Prawa
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Obrót mapy wysokości: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Wybierz kierunek obrotu mapy wysokości, aby dopasować ją do świata gry
|
||||
@@ -2185,8 +2184,8 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Wyświetlanie p
|
||||
STR_CONFIG_SETTING_QUICKGOTO :Szybkie tworzenie poleceń pojazdu: {STRING}
|
||||
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Po otworzeniu okna pustej listy poleceń pojazdu automatycznie wybierz narzędzie „idź do”
|
||||
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_ROAD_TYPE :Domyślne typy torów kolejowych i tramwajowych i dróg (po utworzeniu nowej/wczytaniu gry): {STRING}
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_ROAD_TYPE_HELPTEXT :Rodzaj dróg i torów wybierany przy rozpoczęciu lub załadowaniu gry. „Pierwszy dostępny” wybiera najstarszy rodzaj torów, „najnowszy” wybiera najnowszy rodzaj torów, a „najczęściej używany” wybiera ten, który jest używany najczęściej
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_ROAD_TYPE :Domyślne typy torów kolejowych i tramwajowych oraz dróg (po wczytaniu gry lub utworzeniu nowej): {STRING}
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_ROAD_TYPE_HELPTEXT :Rodzaj dróg i torów wybierany jako domyślny po rozpoczęciu lub wczytaniu gry. „Pierwszy dostępny” wybiera najstarszy rodzaj, „najnowszy” wybiera najnowszy rodzaj, a „najczęściej używany” wybiera ten, który jest używany najczęściej
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_ROAD_TYPE_FIRST :Pierwszy dostępny
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_ROAD_TYPE_LAST :Najnowszy
|
||||
@@ -3445,9 +3444,9 @@ STR_STATION_BUILD_NOISE :{BLACK}Wytwarza
|
||||
|
||||
# Landscaping toolbar
|
||||
STR_LANDSCAPING_TOOLBAR :{WHITE}Kształtowanie krajobrazu
|
||||
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Obniż narożnik terenu. Przeciągnij, aby obniżyć pierwszy zaznaczony narożnik oraz wyrównać zaznaczony obszar do nowej wysokości narożnika. Przeciągnij z użyciem Ctrl, aby zaznaczyć obszar po przekątnej. Użyj Shift, aby tylko wyświetlić szacunkowy koszt
|
||||
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Podwyższ narożnik terenu. Przeciągnij, aby podwyższyć pierwszy zaznaczony narożnik oraz wyrównać zaznaczony obszar do nowej wysokości narożnika. Przeciągnij z użyciem Ctrl, aby zaznaczyć obszar po przekątnej. Użyj Shift, aby tylko wyświetlić szacunkowy koszt
|
||||
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Wyrównaj teren do wysokości pierwszego zaznaczonego rogu. Przeciągnij z użyciem Ctrl, aby zaznaczyć obszar po przekątnej. Użyj Shift, aby tylko wyświetlić szacunkowy koszt
|
||||
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Obniż narożnik terenu. Zaznacz obszar do obniżenia, przeciągając od wskazanego narożnika. Przeciągnij z użyciem Ctrl, aby zaznaczyć obszar po przekątnej. Użyj Shift, aby tylko wyświetlić szacunkowy koszt
|
||||
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Podwyższ narożnik terenu. Zaznacz obszar do podwyższenia, przeciągając od wskazanego narożnika. Przeciągnij z użyciem Ctrl, aby zaznaczyć obszar po przekątnej. Użyj Shift, aby tylko wyświetlić szacunkowy koszt
|
||||
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Wyrównaj teren do wysokości wskazanego narożnika. Przeciągnij z użyciem Ctrl, aby zaznaczyć obszar po przekątnej. Użyj Shift, aby tylko wyświetlić szacunkowy koszt
|
||||
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakup teren do przyszłego użycia. Przeciągnij z użyciem Ctrl, aby zaznaczyć obszar po przekątnej. Użyj Shift, aby tylko wyświetlić szacunkowy koszt
|
||||
|
||||
# Object construction window
|
||||
@@ -3476,8 +3475,10 @@ STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Sadź du
|
||||
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Tworzenie terenu
|
||||
STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Umieść skalisty teren.{}Użyj Ctrl, aby usunąć skały
|
||||
STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Wyznacz obszar pustyni.{}Użyj Ctrl, aby usunąć obszar pustyni
|
||||
STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Zwiększ powierzchnie do podwyższenia/obniżenia
|
||||
STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Zmniejsz powierzchnie do podwyższenia/obniżenia
|
||||
STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Zwiększ rozmiar obniżanego/podwyższanego terenu
|
||||
STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Zmniejsz rozmiar obniżanego/podwyższanego terenu
|
||||
STR_TERRAFORM_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Obniż narożnik terenu lub obszar. Rozmiar 1x1 pozwala zaznaczać obszar do obniżenia, przeciągając od wskazanego narożnika. Przeciągnij z użyciem Ctrl, aby zaznaczyć obszar po przekątnej. Użyj Shift, aby tylko wyświetlić szacunkowy koszt
|
||||
STR_TERRAFORM_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Podwyższ narożnik terenu lub obszar. Rozmiar 1x1 pozwala zaznaczać obszar do podwyższenia, przeciągając od wskazanego narożnika. Przeciągnij z użyciem Ctrl, aby zaznaczyć obszar po przekątnej. Użyj Shift, aby tylko wyświetlić szacunkowy koszt
|
||||
STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Wygeneruj losowy teren
|
||||
STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Stwórz nowy scenariusz
|
||||
STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Resetuj krajobraz
|
||||
@@ -4724,9 +4725,9 @@ STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG}
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Pociągi - przeciągnij pojazd lewym przyciskiem myszy, aby go dodać/usunąć ze składu pociągu; kliknij prawym, aby uzyskać o nim informacje. Użyj Ctrl, aby wykonać te funkcje dla tego pojazdu i kolejnych
|
||||
STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Pojazdy - prawy klik na pojeździe pozwala uzyskać więcej informacji
|
||||
STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Statki - prawy klik pozwala uzyskać informacje o statku
|
||||
STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Samolot - prawy klik na samolocie pozwala uzyskać informacje
|
||||
STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Pojazdy - kliknij prawym na pojazd, aby wyświetlić informacje
|
||||
STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Statki - kliknij prawym na statek, aby wyświetlić informacje
|
||||
STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Samolot - kliknij prawym na samolot, aby wyświetlić informacje
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Przeciągnij tutaj pojazd kolejowy, aby go sprzedać
|
||||
@@ -5745,6 +5746,10 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :most jest o {HE
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :most jest o {HEIGHT} za niski dla posterunku kolejowego
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :most jest o {HEIGHT} za niski dla posterunku drogowego
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :most jest o {HEIGHT} za niski dla śluzy
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :most jest o {HEIGHT} za niski dla hali warsztatów
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :most jest o {HEIGHT} za niski dla zajezdni samochodowej
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :most jest o {HEIGHT} za niski dla stoczni
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_OBJECT :most jest o {HEIGHT} za niski dla obiektu
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :Nie można tutaj zbudować tunelu...
|
||||
@@ -5852,7 +5857,7 @@ STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :nie wszystkie p
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :Żadne pojazdy nie będą dostępne
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :Zmień konfigurację swoich NewGRF-ów
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :Obecnie żaden pojazd nie jest dostępny
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :Zacznij grę po {DATE_SHORT} albo użyj zestawu NewGRF, który zawiera wczesne pojazdy
|
||||
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :Rozpocznij nową grę po dacie {DATE_SHORT}, albo użyj zestawu NewGRF, który zawiera wcześniej dostępne pojazdy
|
||||
|
||||
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :Żadne rodzaje dróg miejskich nie są dostępne
|
||||
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :Zmień konfigurację NewGRF
|
||||
|
||||
+14
-11
@@ -632,7 +632,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 anos (trimestral)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 anos (anual)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Alternar o gráfico para este intervalo de dados
|
||||
STR_GRAPH_SELECT_SCALE :Alterar a escala horizontal do gráfico
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tarifas por tipo de carga
|
||||
@@ -1661,12 +1660,12 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :Nenhum
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Melhorada
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Veículos rodoviários: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Escolher o lado de condução
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Lado do condutor dos veículos rodoviários: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Escolha o lado de condução dos veículos rodoviários.{}Isto também pode afetar o lado dos sinais e os gráficos dos semáforos.{}Pode ser necessário recarregar o jogo para que a alteração tenha efeito total
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Circular pela esquerda
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Circular pela direita
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Esquerda
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Direita
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotação mapa de alt.: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Escolher de que forma a imagem topográfica será girada para caber no mundo do jogo
|
||||
@@ -2889,22 +2888,22 @@ STR_PICKER_COLLECTION_DELETE_QUERY :Apagar coleçã
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_TEXT :{YELLOW}Tem a certeza que quer apagar esta coleção?
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_DISABLED_TEXT :{YELLOW}Tem a certeza que quer apagar esta coleção? Contém NewGRFs desativados!
|
||||
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Selecionar uma classe de estação para mostrar
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Selecionar uma classe de estação para visualização. Ctrl+clique para adicionar ou remover os itens guardados
|
||||
STR_PICKER_STATION_TYPE_TOOLTIP :Escolher um tipo de estação para construir. Ctrl+Clique para adicionar ou remover nos itens guardados
|
||||
STR_PICKER_STATION_COLLECTION_TOOLTIP :Selecione uma coleção de estações para mostrar
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Selecionar uma classe de ponto de controlo para mostrar
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Selecionar uma classe de ponto de controlo para visualização. Ctrl+clique para adicionar ou remover os itens guardados
|
||||
STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Escolher um tipo de ponto de controlo para construir. Ctrl+Clique para adicionar ou remover nos itens guardados
|
||||
STR_PICKER_WAYPOINT_COLLECTION_TOOLTIP :Selecione uma coleção de pontos de controlo para mostrar
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Selecionar uma classe de estação rodoviária para mostrar
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Selecionar uma classe de paragem de autocarro para visualização. Ctrl+clique para adicionar ou remover os itens guardados
|
||||
STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Escolher um tipo de estação rodoviária para construir. Ctrl+Clique para adicionar ou remover nos itens guardados
|
||||
STR_PICKER_ROADSTOP_BUS_COLLECTION_TOOLTIP :Selecione uma coleção de paragens de autocarro para mostrar
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecionar uma classe de terminal de carga para camiões para mostrar
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selecionar uma classe de terminal de carga para camiões para visualização. Ctrl+clique para adicionar ou remover os itens guardados
|
||||
STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Escolher um tipo de terminal de carga para camiões para construir. Ctrl+Clique para adicionar ou remover nos itens guardados
|
||||
STR_PICKER_ROADSTOP_TRUCK_COLLECTION_TOOLTIP :Selecione uma coleção de terminais de carga para camiões para mostrar
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecionar uma classe de objeto para mostrar
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Selecionar uma classe de objeto para visualização. Ctrl+clique para adicionar ou remover os itens guardados
|
||||
STR_PICKER_OBJECT_TYPE_TOOLTIP :Selecione um tipo de objeto para construir. Ctrl+Clique para adicionar ou remover nos itens guardados. Ctrl+Clique+Arrastar para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado
|
||||
STR_PICKER_OBJECT_COLLECTION_TOOLTIP :Selecione uma coleção de objetos para mostrar
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Selecione uma zona de localidade para mostrar
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Selecione uma zona de localidade para visualização. Ctrl+clique para adicionar ou remover os itens guardados
|
||||
STR_PICKER_HOUSE_TYPE_TOOLTIP :Escolher um tipo de casa para construir. Ctrl+Clique para adicionar ou remover nos itens guardados
|
||||
STR_PICKER_HOUSE_COLLECTION_TOOLTIP :Selecione uma coleção de casas para mostrar
|
||||
|
||||
@@ -5362,6 +5361,10 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :A ponte está {
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :A ponte está {HEIGHT} abaixo do necessário para o ponto de controlo ferroviário
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :A ponte está {HEIGHT} abaixo do necessário para o ponto de controlo rodoviário
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :A ponte está {HEIGHT} abaixo do necessário para a eclusa
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :ponte é {HEIGHT} mais baixa do que o depósito ferroviário
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :ponte é {HEIGHT} mais baixa do que a garagem
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :ponte é {HEIGHT} mais baixa do que o estaleiro naval
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_OBJECT :ponte é {HEIGHT} mais baixa do que o objeto
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :Não é possível construir túnel aqui...
|
||||
|
||||
@@ -769,7 +769,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 лет (поквартально)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 года
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Включить/отключить отображение графика
|
||||
STR_GRAPH_SELECT_SCALE :Сменить горизонтальный масштаб графика
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Оплата за перевозку грузов
|
||||
@@ -1812,7 +1811,7 @@ STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Оригина
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Улучшенный
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Движение автотранспорта: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Выберите сторону дороги, по которой движется автотранспорт
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Выберите сторону дороги, по которой движется автотранспорт.{}Это также может повлиять на расстановку светофоров.{}При изменении этой настройки игру, возможно, придётся перезапустить для полного и корректного применения для всех транспортных средств.
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Левостороннее
|
||||
@@ -5548,6 +5547,10 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :высота м
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :высота моста - {HEIGHT}, этого недостаточно для маршрутной точки
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :высота моста - {HEIGHT}, этого недостаточно для маршрутной точки
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :высота моста - {HEIGHT}, этого недостаточно для шлюза
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :депо не поместится под мостом с высотой {HEIGHT}
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :гараж не поместится под мостом с высотой {HEIGHT}
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :док не поместится под мостом с высотой {HEIGHT}
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_OBJECT :объект не поместится под мостом с высотой {HEIGHT}
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :Здесь невозможно построить туннель...
|
||||
|
||||
@@ -630,7 +630,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 年(每季)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 年(每年)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :切换图表数据范围
|
||||
STR_GRAPH_SELECT_SCALE :改变图标水平比例
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}货物运费表
|
||||
|
||||
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 años (trimestral)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 años (anual)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Alterna entre mostrar/ocultar la gráfica para este rango de datos
|
||||
STR_GRAPH_SELECT_SCALE :Cambia la escala horizontal de la gráfica
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tarifas de pago de cargas
|
||||
|
||||
@@ -629,7 +629,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 años (trimestral)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 años (anual)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Mostrar u ocultar gráfica para este rango de datos
|
||||
STR_GRAPH_SELECT_SCALE :Cambiar escala horizontal de gráfica
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tasas de pago por carga
|
||||
|
||||
+35
-32
@@ -166,7 +166,7 @@ STR_PASSENGERS :{COMMA}{NBSP}pa
|
||||
STR_BAGS :{COMMA}{NBSP}väsk{P a or}
|
||||
STR_TONS :{COMMA}{NBSP}ton
|
||||
STR_LITERS :{COMMA}{NBSP}liter
|
||||
STR_ITEMS :{COMMA}{NBSP}föremål
|
||||
STR_ITEMS :{COMMA}{NBSP}stycke{P "" n}
|
||||
STR_CRATES :{COMMA}{NBSP}låd{P a or}
|
||||
|
||||
STR_COLOUR_DEFAULT :Standard
|
||||
@@ -449,7 +449,7 @@ STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Placera ut hus
|
||||
STR_SETTINGS_MENU_GAME_OPTIONS :Spelalternativ
|
||||
STR_SETTINGS_MENU_AI_SETTINGS :AI-inställningar
|
||||
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Spelskriptinställningar
|
||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS : NewGRF-inställningar
|
||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-inställningar
|
||||
STR_SETTINGS_MENU_SANDBOX_OPTIONS :Sandlådealternativ
|
||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Genomskinlighetsalternativ
|
||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Stadsnamn visas
|
||||
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 år (kvartalsvis)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 år (årsvis)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Växla graf för dataintervall
|
||||
STR_GRAPH_SELECT_SCALE :Ändra horisontell skala på grafen
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Fraktförtjänster
|
||||
@@ -953,7 +952,7 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION
|
||||
|
||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Erbjudanden subvention har gått ut:{}{}{STRING} från {STRING} till {STRING} kommer nu inte attrahera en subvention
|
||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subventionen återkallad:{}{}{STRING} från {STRING} till {STRING} är inte längre subventionerad
|
||||
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subvention erbjuden:{}{}Första {STRING} från {STRING} till {STRING} kommer tilldelas en {UNITS_YEARS_OR_MINUTES}s subvention från de lokala myndigheterna!
|
||||
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subvention erbjuden:{}{}Första trafiken med {STRING} från {STRING} till {STRING} kommer tilldelas en {UNITS_YEARS_OR_MINUTES}s subvention från de lokala myndigheterna!
|
||||
###length 4
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvention tilldelad {STRING}!{}{}{STRING} från {STRING} till {STRING} kommer ge 50% extra utdelning nästkommande {UNITS_YEARS_OR_MINUTES}!
|
||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvention tilldelad {STRING}!{}{}{STRING} från {STRING} till {STRING} kommer ge dubbel utdelning nästkommande {UNITS_YEARS_OR_MINUTES}!
|
||||
@@ -1205,10 +1204,10 @@ STR_SEA_LEVEL_CUSTOM :Valfri
|
||||
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Valfri ({NUM}%)
|
||||
|
||||
###length 4
|
||||
STR_RIVERS_NONE :inga
|
||||
STR_RIVERS_FEW :få
|
||||
STR_RIVERS_MODERATE :mellan
|
||||
STR_RIVERS_LOT :många
|
||||
STR_RIVERS_NONE :Inga
|
||||
STR_RIVERS_FEW :Få
|
||||
STR_RIVERS_MODERATE :Mellan
|
||||
STR_RIVERS_LOT :Många
|
||||
|
||||
###length 3
|
||||
STR_DISASTER_NONE :Ingen
|
||||
@@ -1660,12 +1659,12 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :Inget
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Förbättrad
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Vägfordon: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Välj körsida
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :Vägfordons körsida: {STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Välj vägfordons körsida.{}Detta kan också påverka vilken sida som signaler vissas på samt hur semaforer ser ut.{}Det kan krävas att du laddar om spelet för att ändringen ska gå igenom.
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Kör på vänster sida
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Kör på höger sida
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Vänster sida
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Höger sida
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Höjdkartans rotation: {STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Välj på vilket sätt höjdkartan ska roteras för att få plats inuti spelvärlden
|
||||
@@ -2323,7 +2322,7 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Ändra m
|
||||
STR_CHEAT_CHANGE_DATE :{LTBLUE}Byt datum: {ORANGE} {DATE_SHORT}
|
||||
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ändra nuvarande år
|
||||
STR_CHEAT_SETUP_PROD :{LTBLUE}Aktivera modifiering av produktionsvärden: {ORANGE}{STRING}
|
||||
STR_CHEAT_STATION_RATING :{LTBLUE}Fixera stationens gradering vid 100%: {ORANGE}{STRING}
|
||||
STR_CHEAT_STATION_RATING :{LTBLUE}Fixera stationers gradering vid 100%: {ORANGE}{STRING}
|
||||
|
||||
# Livery window
|
||||
STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Färgschema
|
||||
@@ -2888,22 +2887,22 @@ STR_PICKER_COLLECTION_DELETE_QUERY :Ta bort denna s
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_TEXT :{YELLOW}Är du säker på att du vill ta bort denna samling?
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_DISABLED_TEXT :{YELLOW}Är du säker på att du vill ta bort denna samling? Det finns saker från NewGRFs i den!
|
||||
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Välj vilken klass av stationer som ska visas
|
||||
STR_PICKER_STATION_TYPE_TOOLTIP :Välj en stationstyp att bygga. Ctrl+Klick för att lägga till eller ta bort i sparade objekt
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :Välj vilken klass av stationer som ska visas. Ctrl+klicka för att lägga till eller ta bort från sparade artiklar
|
||||
STR_PICKER_STATION_TYPE_TOOLTIP :Välj en stationstyp att bygga. Ctrl+klicka för att lägga till eller ta bort från sparade artiklar
|
||||
STR_PICKER_STATION_COLLECTION_TOOLTIP :Välj en samling med stationer att visa
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Välj vilken klass av riktmärken som ska visas
|
||||
STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Välj ett riktmärke att bygga. Ctrl+Klick för att lägga till eller ta bort i sparade objekt
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Välj vilken klass av riktmärken som ska visas. Ctrl+klicka för att lägga till eller ta bort från sparade artiklar
|
||||
STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Välj ett riktmärke att bygga. Ctrl+klicka för att lägga till eller ta bort från sparade artiklar
|
||||
STR_PICKER_WAYPOINT_COLLECTION_TOOLTIP :Välj en samling riktningsvisare att visa
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Välj vilken klass av busstationer som ska visas
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Välj vilken klass av busstationer som ska visas. Ctrl+klicka för att lägga till eller ta bort från sparade artiklar
|
||||
STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Välj en busstationstyp att bygga. Ctrl+Klick för att lägga till eller ta bort i sparade objekt
|
||||
STR_PICKER_ROADSTOP_BUS_COLLECTION_TOOLTIP :Välj en samling av busstationer att visa
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Välj vilken klass av laststationer som ska visas
|
||||
STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Välj en laststationstyp att bygga. Ctrl+Klick för att lägga till eller ta bort i sparade objekt
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Välj vilken klass av laststationer som ska visas. Ctrl+klicka för att lägga till eller ta bort från sparade artiklar
|
||||
STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Välj en laststationstyp att bygga. Ctrl+klicka för att lägga till eller ta bort från sparade artiklar
|
||||
STR_PICKER_ROADSTOP_TRUCK_COLLECTION_TOOLTIP :Välj en samling av laststationer att visa
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Välj vilken klass av objekt som ska visas
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :Välj vilken klass av objekt som ska visas. Ctrl+klicka för att lägga till eller ta bort från sparade artiklar
|
||||
STR_PICKER_OBJECT_TYPE_TOOLTIP :Välj en objektstyp att bygga. Ctrl+klicka för att lägga till eller ta bort i sparade objekt. Ctrl+klicka+dra för att välja ytan diagonalt. Håll även in Shift för att endast visa uppskattad kostnad
|
||||
STR_PICKER_OBJECT_COLLECTION_TOOLTIP :Välj en samling av objekt att visa
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Välj vilken stadszon som ska visas
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :Välj vilken stadszon som ska visas. Ctrl+klicka för att lägga till eller ta bort från sparade objekt
|
||||
STR_PICKER_HOUSE_TYPE_TOOLTIP :Välj en hustyp att bygga. Ctrl+Klick för att lägga till eller ta bort i sparade objekt
|
||||
STR_PICKER_HOUSE_COLLECTION_TOOLTIP :Välj en samling av hus att visa
|
||||
|
||||
@@ -5354,13 +5353,17 @@ STR_ERROR_START_AND_END_MUST_BE_IN :start- och slut
|
||||
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :brons båda ändar måste vara på land
|
||||
STR_ERROR_BRIDGE_TOO_LONG :bron är för lång
|
||||
STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :bron skulle sluta utanför kartans gränser
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_STATION :bron är {HEIGHT} för låg för station
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADSTOP :bron är {HEIGHT} för låg för depå
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_DOCK :bron är {HEIGHT} för låg för en kaj
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :bron är {HEIGHT} för låg för boj
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :bron är {HEIGHT} för låg för järnvägsriktmärke
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :bron är {HEIGHT} för låg för vägriktmärke
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :bron är {HEIGHT} för låg för sluss
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_STATION :bron är {HEIGHT} för låg för stationen
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADSTOP :bron är {HEIGHT} för låg för depån
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_DOCK :bron är {HEIGHT} för låg för kajen
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :bron är {HEIGHT} för låg för bojen
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :bron är {HEIGHT} för låg för järnvägsriktmärket
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :bron är {HEIGHT} för låg för vägriktmärket
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :bron är {HEIGHT} för låg för slussen
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :bron är {HEIGHT} för låg för tågdepån
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :bron är {HEIGHT} för låg för vägfordonsdepån
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :bron är {HEIGHT} för låg för skeppsvarvet
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_OBJECT :bron är {HEIGHT} för låg för objektet
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :Kan inte bygga tunnel här...
|
||||
@@ -5770,15 +5773,15 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GOODS_VAN :Godsvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_GRAIN_HOPPER :Spannmålsvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WOOD_TRUCK :Timmervagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_IRON_ORE_HOPPER :Järnmalmsvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_STEEL_TRUCK :Stållastvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_STEEL_TRUCK :Stålvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_ARMORED_VAN :Bepansrad vagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FOOD_VAN :Matvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PAPER_TRUCK :Pappersvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COPPER_ORE_HOPPER :Kopparmalmsvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :Vattentank
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FRUIT_TRUCK :Fruktvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_RUBBER_TRUCK :Gummilastvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :Sockerlastvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_RUBBER_TRUCK :Gummivagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :Sockervagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :Sockervaddsvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOFFEE_HOPPER :Knäckvagn
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :Bubbelvagn
|
||||
|
||||
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 年(每季)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 年(每年)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :切換圖表數據範圍
|
||||
STR_GRAPH_SELECT_SCALE :變更圖表水平比例
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}貨物運費表
|
||||
@@ -1660,12 +1659,12 @@ STR_CONFIG_SETTING_TREE_PLACER_NONE :無
|
||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :原版
|
||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :改進版
|
||||
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :公路車輛:{STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :選擇行車方向。
|
||||
STR_CONFIG_SETTING_ROAD_SIDE :公路車輛行車方向:{STRING}
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :選擇公路車輛行車方向。{}這亦會影響號誌的方向與號誌燈的圖形。{}變更後可能需要重新載入遊戲才能完全生效
|
||||
|
||||
###length 2
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :靠左行駛
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :靠右行駛
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_LEFT :靠左
|
||||
STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :靠右
|
||||
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :旋轉高度圖:{STRING}
|
||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :選擇高度圖的旋轉方向以設立遊戲版圖
|
||||
@@ -1871,7 +1870,7 @@ STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :每所公司擁
|
||||
STR_CONFIG_SETTING_AI_BUILDS_TRAINS :禁止電腦使用鐵道:{STRING}
|
||||
STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :如啟用此選項,電腦玩家將無法建造列車。
|
||||
|
||||
STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :禁止電腦使用道路車輛:{STRING}
|
||||
STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :禁止電腦使用公路車輛:{STRING}
|
||||
STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :如啟用此選項,電腦玩家將無法建造公路車輛 (包括電車)。
|
||||
|
||||
STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :禁止電腦使用飛機:{STRING}
|
||||
@@ -2888,22 +2887,22 @@ STR_PICKER_COLLECTION_DELETE_QUERY :刪除收藏夾
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_TEXT :{YELLOW}你確定要刪除此收藏夾嗎?
|
||||
STR_PICKER_COLLECTION_DELETE_QUERY_DISABLED_TEXT :{YELLOW}你確定要刪除此收藏夾嗎?收藏夾內尚有些已停用 NewGRF 的項目!
|
||||
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :選擇顯示的車站種類
|
||||
STR_PICKER_STATION_CLASS_TOOLTIP :選擇顯示的車站種類。按住 <Ctrl> 點選可增加或移除收藏的物品
|
||||
STR_PICKER_STATION_TYPE_TOOLTIP :選擇建設的車站類型。按住 <Ctrl> 點選可在儲存項目中新增或刪除
|
||||
STR_PICKER_STATION_COLLECTION_TOOLTIP :選擇要顯示的車站收藏夾
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :選擇顯示的中途站種類
|
||||
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :選擇顯示的中途站種類。按住 <Ctrl> 點選可增加或移除收藏的物品
|
||||
STR_PICKER_WAYPOINT_TYPE_TOOLTIP :選擇建設的中途站類型。按住 <Ctrl> 點選可在儲存項目中新增或刪除
|
||||
STR_PICKER_WAYPOINT_COLLECTION_TOOLTIP :選擇要顯示的中途站收藏夾
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :選擇顯示的公車站種類
|
||||
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :選擇顯示的公車站種類。按住 <Ctrl> 點選可增加或移除收藏的物品
|
||||
STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :選擇建設的公車站類型。按住 <Ctrl> 點選可在儲存項目中新增或刪除
|
||||
STR_PICKER_ROADSTOP_BUS_COLLECTION_TOOLTIP :選擇要顯示的公車站收藏夾
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :選擇顯示的貨車場種類
|
||||
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :選擇顯示的貨車場種類。按住 <Ctrl> 點選可增加或移除收藏的物品
|
||||
STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :選擇建設的貨車場類型。按住 <Ctrl> 點選可在儲存項目中新增或刪除
|
||||
STR_PICKER_ROADSTOP_TRUCK_COLLECTION_TOOLTIP :選擇要顯示的貨運站收藏夾
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :選擇顯示的物品種類
|
||||
STR_PICKER_OBJECT_CLASS_TOOLTIP :選擇顯示的物品種類。按住 <Ctrl> 點選可增加或移除收藏的物品
|
||||
STR_PICKER_OBJECT_TYPE_TOOLTIP :選擇建設的物件類型。按住 <Ctrl> 點選可在儲存項目中新增或刪除。按住 <Ctrl> 以對角線選擇區域。按住 <Shift> 可顯示預估成本
|
||||
STR_PICKER_OBJECT_COLLECTION_TOOLTIP :選擇要顯示的物件收藏夾
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :選擇顯示的市鎮區域
|
||||
STR_PICKER_HOUSE_CLASS_TOOLTIP :選擇顯示的市鎮區域。按住 <Ctrl> 點選可增加或移除收藏的物品
|
||||
STR_PICKER_HOUSE_TYPE_TOOLTIP :選擇建設的房屋類型。按住 <Ctrl> 點選可在儲存項目中新增或刪除
|
||||
STR_PICKER_HOUSE_COLLECTION_TOOLTIP :選擇要顯示的房屋收藏夾
|
||||
|
||||
@@ -5361,6 +5360,10 @@ STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :橋樑過低,
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :橋樑過低,橋高僅有 {HEIGHT},不足以興建中途站
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :橋樑過低,橋高僅有 {HEIGHT},不足以興建中途站
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :橋樑過低,橋高僅有 {HEIGHT},不足以興建水閘
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_TRAIN_DEPOT :橋樑過低,橋高僅有 {HEIGHT},不足以興建鐵道機廠
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADVEH_DEPOT :橋樑過低,橋高僅有 {HEIGHT},不足以興建車廠
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_SHIP_DEPOT :橋樑過低,橋高僅有 {HEIGHT},不足以興建船塢
|
||||
STR_ERROR_BRIDGE_TOO_LOW_FOR_OBJECT :橋樑過低,橋高僅有 {HEIGHT},不足以設置物件
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :無法在此挖掘隧道……
|
||||
|
||||
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 yıl (çeyreklik)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 yıl (yıllık)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Bu veri aralığı için grafiği aç
|
||||
STR_GRAPH_SELECT_SCALE :Grafiğin yatay ölçeğini değiştir
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Kargo Ödeme Seviyeleri
|
||||
|
||||
@@ -767,7 +767,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 років (щоквартально)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 роки (щорічно)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Перемкнути графік для цього проміжку даних
|
||||
STR_GRAPH_SELECT_SCALE :Змінити горизонтальну шкалу графа
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Тарифи доставки вантажів
|
||||
|
||||
@@ -631,7 +631,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 năm (theo từng quý)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 năm (theo từng năm)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Bật/tắt đồ thị cho khoảng dữ liệu này
|
||||
STR_GRAPH_SELECT_SCALE :Chỉnh tỷ lệ chiều ngang của đồ thị
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Bảng Giá Cước Vận Chuyển Hàng Hóa
|
||||
|
||||
@@ -630,7 +630,6 @@ STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLA
|
||||
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 mlynedd (chwarterol)
|
||||
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 mlynedd (blynyddol)
|
||||
|
||||
STR_GRAPH_TOGGLE_RANGE :Toglu graff ar gyfer yr ystod data yma
|
||||
STR_GRAPH_SELECT_SCALE :Newid graddfa llorweddol y graff
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Cyfraddau Tâl Llwythi
|
||||
|
||||
+3
-2
@@ -14,6 +14,7 @@
|
||||
#include <unicode/coll.h>
|
||||
#endif /* WITH_ICU_I18N */
|
||||
#include "strings_type.h"
|
||||
#include "newgrf_text_type.h"
|
||||
#include <filesystem>
|
||||
|
||||
static const uint8_t CASE_GENDER_LEN = 16; ///< The (maximum) length of a case/gender string.
|
||||
@@ -49,7 +50,7 @@ struct LanguagePackHeader {
|
||||
* http://msdn.microsoft.com/en-us/library/ms776294.aspx
|
||||
*/
|
||||
uint16_t winlangid = 0; ///< windows language id
|
||||
uint8_t newgrflangid = 0; ///< newgrf language id
|
||||
GRFLanguage newgrflangid{}; ///< newgrf language id
|
||||
uint8_t num_genders = 0; ///< the number of genders of this language
|
||||
uint8_t num_cases = 0; ///< the number of cases of this language
|
||||
uint8_t pad[3] = {}; ///< pad header to be a multiple of 4
|
||||
@@ -104,6 +105,6 @@ extern std::unique_ptr<icu::Collator> _current_collator;
|
||||
#endif /* WITH_ICU_I18N */
|
||||
|
||||
bool ReadLanguagePack(const LanguageMetadata *lang);
|
||||
const LanguageMetadata *GetLanguage(uint8_t newgrflangid);
|
||||
const LanguageMetadata *GetLanguage(GRFLanguage newgrflangid);
|
||||
|
||||
#endif /* LANGUAGE_H */
|
||||
|
||||
+1
-1
@@ -337,7 +337,7 @@ public:
|
||||
DrawString(rank_rect.left, rank_rect.right, ir.top + text_y_offset, GetString(STR_COMPANY_LEAGUE_COMPANY_RANK, rank + 1));
|
||||
if (this->icon_size.width > 0 && lte->company != CompanyID::Invalid()) DrawCompanyIcon(lte->company, icon_rect.left, ir.top + icon_y_offset);
|
||||
DrawString(text_rect.left, text_rect.right, ir.top + text_y_offset, lte->text.GetDecodedString(), TextColour::Black);
|
||||
DrawString(score_rect.left, score_rect.right, ir.top + text_y_offset, lte->score.GetDecodedString(), TextColour::Black, SA_RIGHT | SA_FORCE);
|
||||
DrawString(score_rect.left, score_rect.right, ir.top + text_y_offset, lte->score.GetDecodedString(), TextColour::Black, AlignmentH::ForceRight);
|
||||
ir.top += this->line_height;
|
||||
}
|
||||
|
||||
|
||||
@@ -622,13 +622,13 @@ void LinkGraphLegendWindow::DrawWidget(const Rect &r, WidgetID widget) const
|
||||
str = STR_LINKGRAPH_LEGEND_SATURATED;
|
||||
}
|
||||
if (str != STR_NULL) {
|
||||
DrawString(br.left, br.right, CentreBounds(br.top, br.bottom, GetCharacterHeight(FontSize::Small)), str, ExtendedTextColour{GetContrastColour(colour), ExtendedTextColourFlag::Forced}, SA_HOR_CENTER, false, FontSize::Small);
|
||||
DrawString(br.left, br.right, CentreBounds(br.top, br.bottom, GetCharacterHeight(FontSize::Small)), str, ExtendedTextColour{GetContrastColour(colour), ExtendedTextColourFlag::Forced}, AlignmentH::Centre, false, FontSize::Small);
|
||||
}
|
||||
}
|
||||
if (IsInsideMM(widget, WID_LGL_CARGO_FIRST, WID_LGL_CARGO_LAST + 1)) {
|
||||
const CargoSpec *cargo = _sorted_cargo_specs[widget - WID_LGL_CARGO_FIRST];
|
||||
GfxFillRect(br, cargo->legend_colour);
|
||||
DrawString(br.left, br.right, CentreBounds(br.top, br.bottom, GetCharacterHeight(FontSize::Small)), cargo->abbrev, GetContrastColour(cargo->legend_colour, 73), SA_HOR_CENTER, false, FontSize::Small);
|
||||
DrawString(br.left, br.right, CentreBounds(br.top, br.bottom, GetCharacterHeight(FontSize::Small)), cargo->abbrev, GetContrastColour(cargo->legend_colour, 73), AlignmentH::Centre, false, FontSize::Small);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -207,10 +207,10 @@ void OnTick_LinkGraph()
|
||||
LinkGraphSchedule::instance.SpawnNext();
|
||||
} else if (offset == (_settings_game.linkgraph.recalc_interval / EconomyTime::SECONDS_PER_DAY) / 2) {
|
||||
if (!_networking || _network_server) {
|
||||
PerformanceMeasurer::SetInactive(PFE_GL_LINKGRAPH);
|
||||
PerformanceMeasurer::SetInactive(PerformanceElement::GameLoopLinkGraph);
|
||||
LinkGraphSchedule::instance.JoinNext();
|
||||
} else {
|
||||
PerformanceMeasurer framerate(PFE_GL_LINKGRAPH);
|
||||
PerformanceMeasurer framerate(PerformanceElement::GameLoopLinkGraph);
|
||||
LinkGraphSchedule::instance.JoinNext();
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user