Compare commits

...
93 Commits
Author SHA1 Message Date
Peter NelsonandGitHub e4620d5832 Doc: Update changelog for 16.0-beta2 (#15844) 2026-07-12 13:51:23 +01:00
translators cf48f866eb Update: Translations from eints
english (au): 6 changes by krysclarke
swedish: 20 changes by joeax910
chinese (traditional): 6 changes by KogentaSan
greek: 6 changes by gh658804
maori (new zealand): 10 changes by Kyle-McDangersword
portuguese: 6 changes by jcteotonio
portuguese (brazilian): 6 changes by pasantoro
polish: 4 changes by Rito13
2026-07-12 07:07:44 +00:00
Peter NelsonandGitHub 3c30f962d4 Fix: Use meaningful tooltips for graph range toggle buttons (#15842)
Previously the tooltip only mentioned toggling the cargo, which is only correct for the cargo toggle buttons.
2026-07-11 13:51:01 +01:00
translators 3fb3006dff Update: Translations from eints
english (au): 4 changes by krysclarke
chinese (traditional): 4 changes by KogentaSan
english (us): 4 changes by 2TallTyler
greek: 4 changes by gh658804
russian: 4 changes by Ln-Wolf
danish: 15 changes by bscargo
portuguese: 4 changes by jcteotonio
portuguese (brazilian): 3 changes by pasantoro, 1 change by jcteotonio
2026-07-11 06:34:16 +00:00
Charles PigottandGitHub 0ab5b6df1b Feature: Increase maximum number of vehicles per type to 10,000 (#15810) 2026-07-10 12:11:36 +01:00
mmtunligitandGitHub a961e64928 Add: Adding and removing whole classes to collections (#15808) 2026-07-10 06:54:50 -04:00
translators 9f8ac2aaa1 Update: Translations from eints
indonesian: 86 changes by q1t0
2026-07-10 07:59:11 +00:00
Rubidiumandrubidium42 0c6de46b4c Codechange: unify logging of GrfIDs 2026-07-10 09:51:02 +02:00
Peter NelsonandGitHub 83f20c3375 Doc: Changelog for 16.0-beta1 was missing Markdown formatting (#15840) 2026-07-10 00:00:53 +01:00
Peter NelsonandGitHub 85e6f020f9 Change: Use "bridge ... too low" message for bridgeable objects (#15838) 2026-07-09 19:56:06 +01:00
Peter NelsonandGitHub 83ce49f6cb Feature: Allow bridges over depots (#15836)
Depots are somewhat tall, so bridges must be at least 3 height levels above them.
2026-07-09 18:26:13 +01:00
translators 44b51a94c5 Update: Translations from eints
estonian: 417 changes by JooReb
2026-07-09 07:59:14 +00:00
Peter NelsonandGitHub f5e4bd1ed7 Fix #15826: Exclude allow any/all options for AI companies (#15834) 2026-07-09 00:20:07 +00:00
Rubidiumandrubidium42 5303aa6516 Codechange: use const for writing savegame data 2026-07-09 02:01:13 +02:00
Peter NelsonandGitHub 5403257dca Codechange: Don't calculate bridge height difference twice (#15831) 2026-07-08 22:23:55 +01:00
Rubidiumandrubidium42 05e596661e Codechange: move VarType constants into 'VarTypes' 2026-07-08 17:51:45 +02:00
Tyler TrahanandGitHub e95f43a720 Codechange: Use sprite table instead of magic number when drawing ground sprite (#15828) 2026-07-08 08:46:21 -04:00
translators 51af63cc9f Update: Translations from eints
english (us): 4 changes by 2TallTyler
estonian: 182 changes by JooReb
maori (new zealand): 2 changes by Kyle-McDangersword
2026-07-08 06:45:25 +00:00
Cyprian KlimaszewskiandGitHub 8e89414d9e Codechange: Add regression tests for terraforming and its costs (#15820) 2026-07-07 16:19:14 -04:00
Tyler TrahanandGitHub 24333d76a9 Codefix: Clean up rocky ground placement in Editor (#15819) 2026-07-07 16:17:19 -04:00
verbosecodesandrubidium42 ac51eab537 Fix #7992: Fix for catenary road and tram catenary sprites not being drawn on bridges 2026-07-07 21:27:52 +02:00
translators 0f09b4b371 Update: Translations from eints
swedish: 8 changes by Brickblock1
korean: 3 changes by telk5093
maori (new zealand): 5 changes by Kyle-McDangersword
2026-07-07 07:58:44 +00:00
Rubidiumandrubidium42 bf7bb3efaf Codechange: add missing documentation 2026-07-06 16:41:08 +02:00
Rubidiumandrubidium42 9ba2e386ac Codechange: use GrfID over uint32_t for NewGRF IDs 2026-07-06 16:41:08 +02:00
translators 21d9af637a Update: Translations from eints
swedish: 3 changes by Brickblock1
2026-07-06 08:46:35 +00:00
translators 788e112be1 Update: Translations from eints
english (au): 4 changes by krysclarke
swedish: 4 changes by Brickblock1
chinese (traditional): 5 changes by KogentaSan
greek: 4 changes by gh658804
russian: 1 change by Ln-Wolf
finnish: 4 changes by hpiirai
maori (new zealand): 16 changes by Kyle-McDangersword
portuguese: 4 changes by jcteotonio
portuguese (brazilian): 4 changes by pasantoro
polish: 4 changes by pAter-exe
2026-07-05 07:45:33 +00:00
translators bf70c61fb8 Update: Translations from eints
maori (new zealand): 24 changes by Kyle-McDangersword
2026-07-04 07:21:48 +00:00
livingBEEFandGitHub c18b3a8a04 Fix traffic side inconsistencies (#15661)
* Update: change wording for driving side setting

* Fix: [NewGRF] Make 'signals on traffic side' consistent with explicit settings

Previously this TTDPatchFlag returned 'true' when the 'train signal side'
setting was 'road vehicle driving side'. Now it will also return 'true' when
both the settings are the same, i.e. both are 'left' or both are 'right'.
2026-07-03 08:21:23 -04:00
translators 8e08f1a3c5 Update: Translations from eints
hungarian: 1 change by vargaviktor
maori (new zealand): 14 changes by Kyle-McDangersword
2026-07-03 07:46:16 +00:00
Rubidiumandrubidium42 8303b2d694 Codechange: document gamelog_internal.h 2026-07-02 14:40:52 +02:00
translators 4d7e1385f9 Update: Translations from eints
indonesian: 75 changes by q1t0
maori (new zealand): 11 changes by Kyle-McDangersword
2026-07-02 05:49:00 +00:00
Rubidiumandrubidium42 d2a3f52257 Codechange: improve documentation by removing unneeded constructors/operators 2026-07-01 21:05:56 +02:00
translators 01919af55b Update: Translations from eints
maori (new zealand): 68 changes by Kyle-McDangersword
2026-07-01 06:02:27 +00:00
translators 9c3f5bc375 Update: Translations from eints
indonesian: 29 changes by q1t0
2026-06-30 05:55:38 +00:00
Rubidiumandrubidium42 0a9aa3d20b Codechange: make VarMemType scoped 2026-06-30 00:19:27 +02:00
Rubidiumandrubidium42 8db7db5569 Codechange: make VarFileType scoped 2026-06-30 00:19:27 +02:00
Rubidiumandrubidium42 d9d7f441db Codechange: make SLRefType scoped 2026-06-30 00:19:27 +02:00
Rubidiumandrubidium42 76265b8451 Codechange: replace SaveLoadFlags with StringValidationSettings 2026-06-29 23:33:13 +02:00
Rubidiumandrubidium42 1310531139 Codechange: replace GetVarFileType with just direct member access 2026-06-29 19:56:06 +02:00
Rubidiumandrubidium42 0bd12558d4 Codechange: replace GetVarMemType with just direct struct member access 2026-06-29 19:56:06 +02:00
Rubidiumandrubidium42 bdbe305771 Codechange: make SlVarSize, ReadValue and WriteValue use VarMemType 2026-06-29 19:56:06 +02:00
Rubidiumandrubidium42 71ca79c6d5 Codechange: split up VarTypes in separate enumerations and recombine as struct 2026-06-29 19:56:06 +02:00
Rubidiumandrubidium42 afbe2d3070 Codechange: unify order of file and variable saveload configuration 2026-06-29 19:56:06 +02:00
Rubidiumandrubidium42 f72a239b97 Codechange: make SaveFileType clearly distinct from VarType 2026-06-29 19:56:06 +02:00
Rubidiumandrubidium42 df20fed464 Codechange: replace GRFBaseLanguages with an EnumBitSet 2026-06-29 09:09:28 +02:00
Rubidiumandrubidium42 af1e9864a0 Codechange: replace GRFExtendedLanguages with scoped enum GRFLanguage 2026-06-29 09:09:28 +02:00
Peter NelsonandPeter Nelson 3f557fb673 Codechange: make NeedLength a scoped enum. 2026-06-29 07:41:41 +01:00
Peter NelsonandPeter Nelson 36551ba6b5 Codechange: make SaveLoadAction a scoped enum 2026-06-29 07:41:25 +01:00
Peter NelsonandGitHub 11f46bc5f4 Fix: explicitly initialize COM in Win32 video driver (#15553) 2026-06-29 07:40:03 +01:00
Peter NelsonandPeter Nelson 099df1054e Codechange: make TileContext a scoped enum 2026-06-29 07:35:19 +01:00
Peter NelsonandPeter Nelson d3d1de822d Codechange: make Action5BlockType a scoped enum 2026-06-29 07:30:02 +01:00
Rubidiumandrubidium42 ef0d26f9f7 Codechange: properly decode VarType to determine whether the maximum value fits in the type 2026-06-29 08:11:12 +02:00
Rubidiumandrubidium42 8a8ece49ec Codechange: simplify/shrink SaveLoadCompat
Remove the unneeded null_type and change the name to std::string_view
2026-06-29 08:10:02 +02:00
Rubidiumandrubidium42 a01a2f8401 Codechange: remove essentially pointless 'shortcut values' 2026-06-29 08:09:31 +02:00
Rubidiumandrubidium42 d0dcd1b134 Codechange: use SLE_INT8 instead of SLE_CHAR 2026-06-29 08:09:31 +02:00
Rubidiumandrubidium42 a5430717b1 Codechange: prefer SLE_INT32 over SLE_INT 2026-06-29 08:09:31 +02:00
Rubidiumandrubidium42 c367b10bde Codechange: prefer SLE_UINT32 over SLE_UINT 2026-06-29 08:09:31 +02:00
Peter NelsonandPeter Nelson 2934eca24a Codechange: make TownCargoGenMode a scoped enum 2026-06-28 20:48:11 +01:00
Peter NelsonandPeter Nelson 02becd50c5 Codechange: make TownFounding a scoped enum 2026-06-28 20:48:11 +01:00
Peter NelsonandPeter Nelson 3ba0706a5c Codechange: make TownLayout a scoped enum 2026-06-28 20:48:11 +01:00
Peter NelsonandPeter Nelson 1acbb1c654 Codechange: make TownSize a scoped enum 2026-06-28 20:48:11 +01:00
Peter NelsonandPeter Nelson 6f6551c08d Codechange: Use general Alignment for intro game viewport commands 2026-06-28 20:43:36 +01:00
Peter NelsonandPeter Nelson b4d16d319f Codechange: Replace Alignment enum with struct
Alignment struct contains separate horizontal and vertical alignment members.
2026-06-28 20:43:36 +01:00
Peter NelsonandPeter Nelson 8e637cefed Codechange: Rename StringAlignment to Alignment
Alignment is also used things other than strings.
2026-06-28 20:43:36 +01:00
Peter NelsonandGitHub 5923d105ec Revert: "Fix: [NewGRF] Ensure Act2 read error replaces current set id (#15782)" (#15795)
This reverts commit f9e6b8b7dd.
2026-06-28 19:35:09 +00:00
Rubidiumandrubidium42 a76ba0d3d4 Codechange: make ChunkType scoped 2026-06-28 21:07:12 +02:00
Rubidiumandrubidium42 b7d07252e7 Codechange: make SaveLoadType scoped 2026-06-28 19:26:21 +02:00
Rubidiumandrubidium42 f8af6bbc2f Codechange: make OpenGLSprite::Texture scoped 2026-06-28 19:25:45 +02:00
Rubidiumandrubidium42 8b83bac31f Codechange: make SavegameType scoped 2026-06-28 17:49:19 +02:00
Peter NelsonandPeter Nelson b02242d5fc Codechange: make RandomizedSpriteGroupCompareMode a scoped enum 2026-06-28 16:21:01 +01:00
Peter NelsonandPeter Nelson 4344ffb7a0 Codechange: make DeterministicSpriteGroupAdjustOperation a scoped enum 2026-06-28 16:21:01 +01:00
Peter NelsonandPeter Nelson 4e9645e9d0 Codechange: make DeterministicSpriteGroupAdjustType a scoped enum 2026-06-28 16:21:01 +01:00
Peter NelsonandPeter Nelson 947767a2ff Codechange: make DeterministicSpriteGroupSize a scoped enum 2026-06-28 16:21:01 +01:00
Peter NelsonandPeter Nelson 4b93bd74ef Codechange: make VarSpriteGroupScope a scoped enum 2026-06-28 16:21:01 +01:00
Rubidiumandrubidium42 061e5c9cd3 Codechange: use helper for common mappings using PerformanceElement::AI0 2026-06-28 16:55:28 +02:00
Rubidiumandrubidium42 5b3b7995bb Codechange: make PerformanceElement scoped 2026-06-28 16:55:28 +02:00
Peter NelsonandGitHub 3666eb23a1 Fix #15784: Do close and reopen road build toolbar when switching road tram types (#15789) 2026-06-28 07:08:13 +00:00
Peter NelsonandGitHub f9e6b8b7dd Fix: [NewGRF] Ensure Act2 read error replaces current set id (#15782) 2026-06-28 08:07:09 +01:00
translators 2a6a65662d Update: Translations from eints
indonesian: 117 changes by q1t0
2026-06-28 05:59:00 +00:00
Peter NelsonandGitHub b7e693ced6 Codechange: no need to pre-declare local variables (#15781) 2026-06-27 18:31:50 +01:00
rubidium42andGitHub b9986cdadf Change: upgrade emscripten from 3.1.57 to 6.0.1 (#15780) 2026-06-27 16:00:51 +01:00
Cyprian KlimaszewskiandGitHub dc87cd3d7a Codechange: Use more helper functions for slopes. (#15722) 2026-06-27 10:17:48 -04:00
Rubidiumandrubidium42 8ca99f96ee Codechange: remove macros for SDLVkMapping 2026-06-27 16:14:27 +02:00
Rubidiumandrubidium42 790a6903af Codechange: document several SDL members 2026-06-27 16:14:16 +02:00
mmtunligitandrubidium42 98dfc7376c Codechange: Split long single line loop to match #15589 2026-06-26 18:26:01 +02:00
Rubidiumandrubidium42 cc92e3d421 Codechange: make 32bpp blitter enumerations scoped 2026-06-26 17:33:15 +02:00
Rubidiumandrubidium42 42fe1133ad Doc: make obvious what the numbers in SaveLoadVersion mean, especially in the generated doxygen 2026-06-26 13:04:33 +02:00
Rubidiumandrubidium42 fc0ad4bb0a Codechange: remove unneeded spaces 2026-06-26 13:04:33 +02:00
Rubidiumandrubidium42 5bb87d39b7 Codechange: make SaveLoadVersion a scoped enum 2026-06-26 13:04:33 +02:00
translators f8ad1a4999 Update: Translations from eints
polish: 17 changes by pAter-exe
2026-06-26 05:55:39 +00:00
Rubidiumandrubidium42 f0a1b507fe Codechange: make ClientID a scoped enumeration 2026-06-26 06:26:52 +02:00
Rubidiumandrubidium42 2f4ae80226 Codechange: use ClientID for the 'user' of OrderBackup 2026-06-25 23:57:45 +02:00
Peter NelsonandGitHub 11e713ce9a Add: Station list can be filtered by name (#15772) 2026-06-25 22:28:21 +01:00
331 changed files with 6544 additions and 5566 deletions
+2 -9
View File
@@ -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: |
+2 -9
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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 -4
View File
@@ -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/*
+62
View File
@@ -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--")
+58 -1
View File
@@ -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
+1
View File
@@ -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
View File
@@ -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);
+1 -1
View File
@@ -2141,7 +2141,7 @@ bool Aircraft::Tick()
{
if (!this->IsNormalAircraft()) return true;
PerformanceAccumulator framerate(PFE_GL_AIRCRAFT);
PerformanceAccumulator framerate(PerformanceElement::GameLoopAircraft);
this->tick_counter++;
+1 -1
View File
@@ -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;
+8 -8
View File
@@ -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);
}
}
}
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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.
};
+37 -25
View File
@@ -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;
}
}
+2
View File
@@ -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
+8 -8
View File
@@ -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:
+16 -16
View File
@@ -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 */
+2 -2
View File
@@ -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
View File
@@ -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);
}
+7 -7
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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);
}
}
+15
View File
@@ -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.
+37
View File
@@ -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
View File
@@ -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;
}
+3
View File
@@ -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 */
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+3 -3
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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);
+8 -8
View File
@@ -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
View File
@@ -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
View File
@@ -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);
}
-18
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+3 -3
View File
@@ -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++) {
+5 -5
View File
@@ -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
View File
@@ -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
View File
@@ -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();
+14 -11
View File
@@ -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...
-1
View File
@@ -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
-1
View File
@@ -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
View File
@@ -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...
-1
View File
@@ -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
View File
@@ -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
View File
@@ -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...
+8 -5
View File
@@ -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...
-1
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+4 -5
View File
@@ -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
-1
View File
@@ -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
-1
View File
@@ -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
-1
View File
@@ -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
View File
@@ -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 :Δεν μπορεί να κατασκευαστεί σήραγγα εδώ...
+1 -2
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+3 -4
View File
@@ -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 :높이맵을 게임 세계에 맞추기 위해 어느 방향으로 회전시킬지 선택합니다
-1
View File
@@ -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
-1
View File
@@ -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
View File
@@ -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!
-1
View File
@@ -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
View File
@@ -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
View File
@@ -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...
+5 -2
View File
@@ -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 :Здесь невозможно построить туннель...
-1
View File
@@ -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}货物运费表
-1
View File
@@ -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
-1
View File
@@ -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
View File
@@ -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
+15 -12
View File
@@ -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 :無法在此挖掘隧道……
-1
View File
@@ -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
-1
View File
@@ -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}Тарифи доставки вантажів
-1
View File
@@ -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
-1
View File
@@ -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
View File
@@ -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
View File
@@ -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;
}
+2 -2
View File
@@ -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);
}
}
+2 -2
View File
@@ -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