Compare commits

...

143 Commits

Author SHA1 Message Date
Michael Lutz 2ebc601d97 Doc: Update 13.0 changelog. 2023-02-05 14:59:47 +01:00
Michael Lutz 9daec1cb30 Update: Backport language changes 2023-02-05 14:59:21 +01:00
Rubidium 6bd2b9c34f Change: explicitly allow initial loan of 0, however show warning in UI 2023-02-05 14:59:21 +01:00
Rubidium 292ec1ced7 Change #10077: make maximum loan a positive multiple of the loan interval
And set the minimum maximum loan to the value of loan interval, so there is
always an amount of money to lend. Compared to being allowed to set max loan
to 0 and never be allowed to lend any money.
2023-02-05 14:59:21 +01:00
Loïc Guilloux 6b36f07eb8 Fix #10361, fe30f66: Don't try to give saved data to a dead script (#10433) 2023-02-05 14:59:21 +01:00
Jonathan G Rennison f6170ec782 Fix: Water infrastructure accounting when building docks 2023-02-05 14:59:21 +01:00
Jonathan G Rennison 32d80d1a57 Fix #10419: Water infrastructure accounting when building ship depots 2023-02-05 14:59:21 +01:00
Michael Lutz 8aa4173bce Doc: Update RC2 changelog. 2023-01-28 21:50:32 +01:00
Michael Lutz ada33a6885 Update: Backport language changes 2023-01-28 21:50:32 +01:00
Patric Stout 64bd824b48 Add: [Actions] upload releases to GOG automatically 2023-01-28 21:50:32 +01:00
Patric Stout ce9c4fc31f Change: [Actions] release Windows Store files to CDN
Currently they had a name that the rest of our system cannot
deal with correctly. "cert.pfx" is also not very descriptive from
a system as a whole.

As such, we now name it like any other file, so it can be published
safely to the CDN.
2023-01-28 21:50:32 +01:00
Patric Stout ff07af905a Change: [Actions] split GitHub workflows into several smaller ones 2023-01-28 21:50:32 +01:00
Patric Stout b5f8fcb280 Remove: [Actions] Ubuntu/Debian release binaries (instead, use the Generic) 2023-01-28 21:50:32 +01:00
Rubidium bac7ad72b1 Fix #10009: bad overflow protection when taking out loans 2023-01-28 21:50:32 +01:00
PeterN 0cb3d85a87 Change: Display font status as aa/noaa instead of true/false. (#10352) 2023-01-28 21:50:32 +01:00
Tyler Trahan 05c0295d32 Feature: Set a custom number of industries in map generation window (#10340) 2023-01-28 21:50:32 +01:00
Tyler Trahan 556e9e8434 Feature: Press Ctrl to build a diagonal area of trees (#10342) 2023-01-28 21:50:32 +01:00
Michael Lutz 4fe8d97623 Update: Backport language changes (#10425) 2023-01-28 19:16:14 +00:00
Michael Lutz c31195509f Doc: Changelog for 13.0-RC2. (#10424) 2023-01-28 16:30:30 +00:00
Michael Lutz aa4cd1012f Update: Backport language changes 2023-01-28 17:10:46 +01:00
Rubidium c9948a4517 Fix: scripts are not aware of nullptr, they only know null 2023-01-28 17:10:46 +01:00
Rubidium d1daf34c91 Fix: missing/duplicate documentation tags for scripts 2023-01-28 17:10:46 +01:00
Rubidium 18c701d274 Fix: warnings about obsolete settings/setting values in Doxygen configurations 2023-01-28 17:10:46 +01:00
Rubidium 3357aff494 Fix: scripts cannot call constructors of ScriptEvents, so remove from the documentation 2023-01-28 17:10:46 +01:00
Rubidium 08ca0746b1 Fix: no ScriptEvent sub class should export constructors to scripts 2023-01-28 17:10:46 +01:00
merni-ns 1cb459de3f Change #10255: Reduce basic thickness of linkgraph GUI lines (#10410)
From 3px to 2px (multiplied by UI scale).
2023-01-28 17:10:46 +01:00
PeterN 7e61264e3c Fix #10220: Don't select unselectable engine as default. (#10404) 2023-01-28 17:10:46 +01:00
Tyler Trahan 75c37bf7c2 Fix #10395: When loading old saves, don't forcibly bar level crossings (#10400) 2023-01-28 17:10:46 +01:00
Rubidium f88766c976 Fix #10377, Fix 94167df: bad sorting of rail vehicles when primary variant is missing 2023-01-28 17:10:46 +01:00
SamuXarick 52319891ce Fix 3c047b1: AIGroup.GetProfitLastYear could get values different than those displayed in GUI (#10227)
* Change: Store "all time" and "since minimum age" last year profits on groups

* Fix: Update last year profit for groups when copying vehicle statistics on autoreplace

* Codechange: Refactor profit last year

* Change: Rename some group related items for clarity

* Change: Reorder the fields in GroupStatistics

That way less memory gets wasted.
2023-01-28 17:10:46 +01:00
Francis Herne 0a5dc852bb Fix #10362: NewGRF bridges without speed limits.
For bridges, a max speed of 0xFFFF (i.e. no effective limit)
 is no longer displayed as a limit in the UI.

A max speed of 0 is also considered unlimited, for similarity to the
 roadtype and railtype interface.
2023-01-28 17:10:46 +01:00
PeterN 5b27cd029f Fix: Switch to OWNER_TOWN prevented OWNER_DEITY test during industry prospecting. (#10360) 2023-01-28 17:10:46 +01:00
Rubidium 2104849fad Fix #10368, Fix 994bf19: server restarting game caused clients to hit assertion
Upon closing the EndGameWindow, triggered from UnInitWindowSystem, the
HighScoreWindow would be opened and _z_windows would not be empty.
2023-01-28 17:10:46 +01:00
Tyler Trahan 25940cdbd1 Fix #10363: CargoDist setting helptext shouldn't suggest symmetric distribution for diamonds in subtropic (#10364)
* Fix #10363: CargoDist setting helptext shouldn't suggest symmetric distribution for diamonds in subtropic

* Fix: Always capitalize the first word of a sentence, even if a quoted setting name
2023-01-28 17:10:46 +01:00
Rubidium f37b6cb17f Fix #9865: removing files with the console always failed 2023-01-28 17:10:46 +01:00
Rubidium 87d74389fb Fix #10177: company list password padlock showed after switching to single player 2023-01-28 17:10:46 +01:00
Rubidium 557c5a8583 Fix #10057: FallbackParagraphLayout fails to properly wrap
... during the first word after a new run has been started.
2023-01-28 17:10:46 +01:00
Jonathan G Rennison bd6a95c6b9 Fix #10032: Capacities of articulated vehicles in build window
See also: #9954
2023-01-28 17:10:46 +01:00
Tyler Trahan 6d1331ebcd Fix: Various Wide River issues (#10348) 2023-01-28 17:10:46 +01:00
PeterN 680fcb8611 Fix: Link variants to parents when finalising engines. (#10346)
This ensures that definition-order of engines within the NewGRF does not matter.
2023-01-28 17:10:46 +01:00
Tyler Trahan 548a9c41d5 Fix #10333, c53f29d: Only show industry prospecting errors to local company (#10338) 2023-01-28 17:10:46 +01:00
PeterN 4c6b6c9d33 Fix #10335: Set initial scrollbar count for object GUI. (#10336)
This previously happened when the window was resized by itself which was fixed by #10196. Explicitly set the count instead.
2023-01-28 17:10:46 +01:00
PeterN c935a58272 Fix #10331: Starting new company during load must happen after AI start. (#10332)
This situation occurs when loading a savegame in single-player which only
has AI companies.
2023-01-28 17:10:46 +01:00
Rubidium 88030d781b Fix #10309: [SDL] Uninitialized width and height when turning off full screen 2023-01-28 17:10:46 +01:00
PeterN 7ccfc4b143 Fix: Don't assume engclass 2 should be elrail. (#10315)
When disabling/enabling elrail, there is an assumption that `engclass` of 2
means the engine will run on elrail. While this holds for default engines,
NewGRFs can do other things.

To resolve this we store the intended railtype so that toggling elrail will
restore to the correct type.
2023-01-28 17:10:46 +01:00
Rubidium f5193aeba2 Fix: prevent corrupted GRF files to allocate stupid amounts of memory 2023-01-28 17:10:46 +01:00
Rubidium ed65594868 Fix: do not allow more palette colours than there are indices for the colours
Or: do not pass unchecked size from BMP file into memory allocation
2023-01-28 17:10:46 +01:00
Loïc Guilloux b211a88b71 Fix #10304, fe30f66: [Scripts] Don't start GS in intro (#10305) 2023-01-28 17:10:46 +01:00
Michael Lutz 2414cf0e8f Doc: [Script] Outdated API changelog comment. 2023-01-01 23:34:14 +01:00
Michael Lutz 400addf7af Fix: [Script] Copy compat files for version 13 to build output. 2023-01-01 23:34:14 +01:00
Tyler Trahan 4b123394cf Update: Title game for 13.0 release (#10247) 2023-01-01 12:45:13 -05:00
Charles Pigott 8978f11146 Doc: 13.0-RC1 changelog (#10295) 2023-01-01 17:39:43 +00:00
PeterN 5e22788664 Fix #10220: Adding unavailable variants failed for non-rail engines. (#10297)
Unavailable parent variant engine for non-rail engines was added to the
wrong (temporary) list so the hierarchy was not added correctly.
2022-12-31 10:10:25 +00:00
translators 22035b7eab Update: Translations from eints
english (us): 10 changes by 2TallTyler
chinese (simplified): 1 change by lysinelai
korean: 13 changes by telk5093
catalan: 1 change by DiogoMCampos
2022-12-30 18:42:42 +00:00
Charles Pigott 67f02e20de Change: Display text files in black (#10291) 2022-12-30 10:31:02 +00:00
glx22 012fd2be0d Codechange: Suppress warnings when asserts are disabled 2022-12-30 02:17:38 +01:00
glx22 ffc1f7ce56 Fix 57717a2: [CMake] Don't apply 'cl' workaround to 'clang-cl' 2022-12-30 02:17:38 +01:00
clienthax 25f247047d Update: emsdk to 3.1.28 and lzma (for emsdk) to 5.4.0 (#10234)
Co-authored-by: Patric Stout <truebrain@openttd.org>
2022-12-29 23:34:45 +01:00
translators f90156f74c Update: Translations from eints
romanian: 2 changes by bnegrut
spanish: 2 changes by MontyMontana
2022-12-29 18:43:05 +00:00
translators 918b2cb3ee Update: Translations from eints
english (au): 10 changes by krysclarke
italian: 3 changes by Rivarossi
russian: 3 changes by Ln-Wolf
finnish: 3 changes by hpiirai
spanish: 15 changes by MontyMontana
portuguese: 6 changes by azulcosta
portuguese (brazilian): 2 changes by DiogoMCampos
2022-12-28 18:44:23 +00:00
Loïc Guilloux fe30f66570 Fix #9720: Delay start of GS/AI to after loading of savegame (#9745) 2022-12-28 05:02:26 +01:00
PeterN f7e2b6ef12 Change: Make vehicle list dropdown buttons resize to fit strings. (#10286) 2022-12-27 18:39:37 +00:00
Francis Herne 6caed5f15e Add: Slope-aware and roadtype-specific one-way sprites. (#10282) 2022-12-26 15:06:21 -05:00
translators 7a18631291 Update: Translations from eints
italian: 10 changes by bagnacauda
romanian: 91 changes by bnegrut
russian: 6 changes by Ln-Wolf
finnish: 9 changes by hpiirai
portuguese: 8 changes by azulcosta
2022-12-26 18:42:39 +00:00
PeterN 9e56e16147 Fix: Local authority window rating list height ignored icon sizes. (#10285)
Only font height was taken into account, so the list was broken if icon
sizes were taller than font height.
2022-12-26 18:26:01 +00:00
PeterN 961e66df30 Fix #10224: Don't fiddle with fast-forward when saving. (#10230)
The original comment about saving with fast-forward on was written 18 years
ago, and predates lots of changes to how saveload work.
2022-12-26 00:05:14 +01:00
Michael Lutz 3d3ed87d99 Fix: Bad alignment of button icons when using the original baseset. (#10200) 2022-12-25 18:03:39 -05:00
PeterN 4f26f6b8aa Cleanup: Simplify GRFLabel linked-list with std::vector. (#10284) 2022-12-25 22:32:22 +00:00
Daniel Robinson c53f29df53 Fix #10181: Show error message on failed industry prospecting (#10202) 2022-12-25 23:12:06 +01:00
Didac Perez Parera 35d55bd534 Feature: Expand all towns in the scenario editor (#10215) 2022-12-25 19:42:50 +01:00
Tyler Trahan 4ffe7e0477 Fix #10198: Rearrange Intro GUI to make button rows narrower (#10203) 2022-12-25 13:26:26 -05:00
Tyler Trahan 8063fcb6e0 Feature: Ctrl-click to bulk edit timetable speeds/waiting times (#10265) 2022-12-25 13:20:31 -05:00
Peter Nelson efa20dd969 Change: Support engine property 0xC6 in purchase list. 2022-12-25 16:41:58 +00:00
Peter Nelson cbf48c4dd9 Change: Add extra random seed to StartupEngines().
This means that calling reset_engines will rerandomise introduction dates
and reliability.

Probably not necessary.
2022-12-25 16:41:58 +00:00
Peter Nelson 74180efe7f Change: Attempt to improve randomisation of reliability 2022-12-25 16:41:58 +00:00
Peter Nelson 3485709f53 Add: Additional vehicle flags to control variants. 2022-12-25 16:41:58 +00:00
Peter Nelson 898dadadb2 Change: Mark build/autoreplace windows dirty less often in monthy loop.
These window classes were marked dirty for every engine that had
reliability calculated every month.
2022-12-25 16:41:58 +00:00
Peter Nelson 85814b29d4 Feature: Vehicle add-ons can now group engines in purchase list.
Grouped engines are collapsed by default but can be expanded. This allows
similar engines to be grouped together to avoid cluttering the list.

Suggested uses for this are e.g.:
* Liveries; same stats but different paint job.
* Re-gearing; engine design is mostly the same but different stats.

... but avoiding complex hidden cargo subtype refit systems.

Grouped engines are otherwise separate, so can be independently
autoreplaced, even between variants.
2022-12-25 16:41:58 +00:00
peter1138 94167dfd34 Change: Add variant hierarchy to build vehicle window list. 2022-12-25 16:41:58 +00:00
Peter Nelson c11db7d593 Change: Clear last variant when engine becomes unavailable. 2022-12-25 16:41:58 +00:00
peter1138 d7f561a400 Change: Add variant property to engines. 2022-12-25 16:41:58 +00:00
PeterN c8cc61d889 Fix #10150: Force FS_SMALL for small viewport signs. (#10283)
* Fix #10150: Force FS_SMALL for small viewport signs.

This is a workaround for string widths being different with mixed
font-sizes.

* Fix: Flag small sign shadow as small text.

(This method of drawing shadows is hilarious and needs replacing, but
this is a quick fix.)
2022-12-25 13:29:38 +00:00
PeterN 23eec0b7b3 Fix #8971: Resize QueryStrings with interface scale change. (#10281)
* Fix: Use width of caret symbol '_' for text entry.

This replaces an arbitrary pixel width with the space actually required.

* Fix #8971: Update QueryString sizes with interface scale change.
2022-12-25 00:40:55 +00:00
translators 3451c0a82c Update: Translations from eints
russian: 3 changes by Ln-Wolf
latvian: 21 changes by lexuslatvia
dutch: 3 changes by Afoklala
portuguese: 3 changes by azulcosta
portuguese (brazilian): 13 changes by ericandradex
2022-12-24 18:43:00 +00:00
glx22 04ee86d3ac Add: 'font' console command to configure fonts 2022-12-23 23:23:03 +01:00
glx22 e6c857cdba Codechange: [windows] cache the actually loaded font name 2022-12-23 23:23:03 +01:00
glx22 af3df959c2 Codechange: reduce code duplication 2022-12-23 23:23:03 +01:00
PeterN 7b5edba76c Change: Support flipping shorter engines without NewGRF support. (#10262)
* Change: Support flipping shorter engines without NewGRF support.
* Cleanup: Remove write-only prop27_set temporary flag.
2022-12-23 21:02:14 +00:00
Peter Nelson a971eee2e0 Cleanup: Replace foundation drawing magic numbers.
Use TILE_SIZE or TILE_HEIGHT as appropriate instead.
2022-12-23 15:43:11 +00:00
Peter Nelson 138198e971 Change: Separate ground sprite from foundation sprite offsets. 2022-12-23 15:43:11 +00:00
Peter Nelson 002fe67bef Add: Optionally disable child sprites drawing relative to parent sprites offsets. 2022-12-23 15:43:11 +00:00
Jonathan G Rennison 14c1266bbc Fix: Wrong type cast for selected AI/GS script info in AIListWindow
This resulted in technically undefined behaviour when listing GSs
2022-12-22 21:26:27 +01:00
Jonathan G Rennison d4c530904c Fix #10274: Use after free when rescanning scripts with GS selected 2022-12-22 21:23:48 +01:00
PeterN f6e7e44169 Fix #10151: Use smaller padding for viewport signs. (#10272)
Before variable-scaling, the padding was always 1x1 pixel. This was
changed to be scaled, except using the wrong dimension of 2x1 pixels
instead of 1x1 pixel.
2022-12-21 22:21:50 +00:00
Loïc Guilloux c179c10048 Fix #10263, ccefa76: [scripts] restore tile validation for commands (#10269) 2022-12-21 02:37:59 +01:00
translators a857ed8240 Update: Translations from eints
finnish: 13 changes by hpiirai
spanish: 1 change by MontyMontana
2022-12-20 18:41:59 +00:00
PeterN c962c77306 Fix: Incorrect available height for dropdowns due to unsigned promotion. (#10264)
Dropdowns which are taller than the main window should automatically have
a scrollbar added. This did not work for toolbar dropdown as the location
near the top of the window resulted in an unsigned underflow.
2022-12-20 09:39:23 -05:00
PeterN 03c1b5169c Fix #10260: Incorrect rect height drawing image in vehicle details. (#10261) 2022-12-19 21:01:17 +00:00
PeterN dde15a403c Fix #10257: Incorrect wire position on sloped bridge heads. (#10258) 2022-12-19 20:16:26 +00:00
translators 2012998563 Update: Translations from eints
finnish: 3 changes by hpiirai
2022-12-19 18:42:04 +00:00
translators e5720325ff Update: Translations from eints
english (au): 3 changes by krysclarke
english (us): 3 changes by 2TallTyler
2022-12-18 18:39:25 +00:00
Peter Nelson daaa058493 Change: Vertically centre sprite font relative to TrueType font. 2022-12-18 11:46:01 -05:00
Peter Nelson 8599041ce4 Fix: GetDefaultFontHeight() is static, don't use -> 2022-12-18 11:46:01 -05:00
translators 888c9172e0 Update: Translations from eints
spanish (mexican): 3 changes by absay
korean: 1 change by telk5093
2022-12-17 18:40:23 +00:00
PeterN 1eecbd39ed Change: Use lowered not disabled widget for current tab. (#10252)
While tab-buttons are not often used, all other similar occurences use
lowered rather than disabled widgets, so use them for train detail
window too.
2022-12-17 18:04:39 +00:00
Czcibor Bohusz-Dobosz 7425660b3e Change: Set minimum macOS version to 10.13 (#10253) 2022-12-17 18:35:45 +01:00
Peter Nelson 5eb7e1d3ab Fix: Improve sprite aligner list size and alignment. 2022-12-17 15:38:28 +00:00
Peter Nelson 8adc47858d Change: Set minimal size on aligner buttons. 2022-12-17 15:38:28 +00:00
Peter Nelson 33eb9688cf Add: Sprite centre and crosshair toggles on sprite aligner. 2022-12-17 15:38:28 +00:00
Loïc Guilloux c50fabb574 Fix #10208: allow to use specific underlay for road/tram tunnels (#10233) 2022-12-17 09:01:47 -05:00
PeterN 131b7f5127 Fix: Vertically centre chat prompt. (#10250) 2022-12-17 12:22:02 +00:00
2TallTyler 0116a422ea Cleanup: Refactor Wide Rivers code slightly 2022-12-16 17:43:33 -05:00
2TallTyler d67259334a Fix #10218: Sloped river tiles need water both up and downstream 2022-12-16 17:43:33 -05:00
Jonathan G Rennison c7d7658004 Fix #10214: CMD_CREATE_LEAGUE_TABLE did not set CMD_STR_CTRL 2022-12-16 21:07:36 +01:00
Jonathan G Rennison 1a05e95945 Fix #10214: League and graph buttons in toolbar not having a default action 2022-12-16 21:07:36 +01:00
Jonathan G Rennison e0cb31ff07 Fix #10214: Header and footer missing from league table saveload 2022-12-16 21:07:36 +01:00
Loïc Guilloux 4f9893cc98 Fix 55a1171: Restore skipping of "colour" character (#10244) 2022-12-16 01:56:25 +01:00
PeterN c448eb04d8 Fix #10242: Allow a space for text shadow when clipping WWT_EMPTY/WWT_TEXT. (#10243) 2022-12-15 23:21:10 +00:00
Loïc Guilloux 2848483810 Fix #10206: Disable scripts in intro game (#10241) 2022-12-15 21:43:07 +01:00
Eddi-z 8db4892f49 Codechange: Reshuffle debuglevels in fileio to address spammyness (#10240) 2022-12-15 13:25:06 -05:00
translators ac12028278 Update: Translations from eints
spanish: 2 changes by MontyMontana
portuguese (brazilian): 86 changes by ericandradex
2022-12-14 18:45:21 +00:00
translators 7e7e1183cf Update: Translations from eints
finnish: 1 change by hpiirai
2022-12-13 18:43:24 +00:00
translators fd5de3b366 Update: Translations from eints
spanish (mexican): 7 changes by absay
romanian: 5 changes by bnegrut
finnish: 108 changes by hpiirai
2022-12-12 18:46:56 +00:00
translators 49c121ec29 Update: Translations from eints
vietnamese: 38 changes by KhoiCanDev
2022-12-11 18:44:33 +00:00
PeterN daacde4496 Fix #10147: Sound effect volume slider no longer set volume. (#10228) 2022-12-10 15:51:45 +00:00
translators 2756741575 Update: Translations from eints
italian: 11 changes by Rivarossi
2022-12-09 18:43:26 +00:00
translators 5cef40591b Update: Translations from eints
slovak: 2 changes by legitalk
2022-12-08 18:43:04 +00:00
Michael Lutz d5fc423793 Fix #10223: Crash when vehicle cloning fails on order cloning. 2022-12-08 00:09:12 +01:00
translators 985f487065 Update: Translations from eints
spanish: 1 change by MontyMontana
2022-12-05 18:43:08 +00:00
PeterN 53b827c460 Fix: Maximum space for engine preview image was never scaled. (#10219) 2022-12-05 17:57:27 +00:00
Loïc Guilloux 13d2d11fa8 Fix #10216: Initialise RoadStop caches before using them and don't try to teleport crashed vehicles (#10217) 2022-12-05 12:46:46 +01:00
translators 2c5eb206d4 Update: Translations from eints
vietnamese: 39 changes by KhoiCanDev
spanish: 2 changes by MontyMontana
2022-12-04 18:40:57 +00:00
Michael Lutz ab9d77ebbe Add: [Script] Regression for ScriptAccounting. 2022-12-04 11:27:24 +01:00
Michael Lutz 1c205b2cda Fix #10212: [Script] Nested ScriptAccounting scopes are not restored properly. 2022-12-04 11:27:24 +01:00
PeterN 1131608eb4 Fix #10114: Incorrect drag-highlight position with non-power-of-2 scaling. (#10211) 2022-12-03 09:31:52 +00:00
translators 644012dea2 Update: Translations from eints
dutch: 7 changes by Afoklala
2022-12-02 18:45:14 +00:00
translators a7f78af4aa Update: Translations from eints
chinese (simplified): 3 changes by XiaoJi-Game
2022-12-01 18:47:04 +00:00
PeterN 485368f607 Fix: Missing extra padding when drawing tooltip text. (#10201)
* Fix: Missing extra padding when drawing tooltip text.

This padding is included when calculating the size of the tooltips, the
difference caused a mismatch in height for some tooltips.

* Codechange: Don't draw grey panel underneath tooltip.

This removes the default framerect padding so it is now added explicitly.
SetMinimalSize is also removed as this is overridden in UpdateWidgetSize
anyway.
2022-11-29 18:55:02 +00:00
translators 3100c6e7d0 Update: Translations from eints
chinese (simplified): 30 changes by XiaoJi-Game
2022-11-29 18:44:34 +00:00
PeterN 387c57b023 Fix eb4ba1991: Signal icons incorrectly positioned in UI. (#10199) 2022-11-28 20:03:27 +00:00
translators 41c893dd4e Update: Translations from eints
chinese (simplified): 13 changes by XiaoJi-Game
russian: 4 changes by Ln-Wolf
slovak: 7 changes by legitalk
catalan: 77 changes by J0anJosep
turkish: 7 changes by EndChapter
polish: 7 changes by pAter-exe
2022-11-28 18:45:52 +00:00
PeterN eaf1e33bd7 Fix #10021: Object GUI resized when switching between different objects. (#10196)
* Fix: Scale object gui margin by interface scale.

* Fix: Improve padding on object info text.

* Fix #10021: Resizing for 1/2/4 object views didn't account for interface scale.

As halving and doubling padding is problematic due to rounding, it is now
added on lower view counts instead of removing on higher view counts.
2022-11-28 00:27:57 +00:00
translators 978f5b9341 Update: Translations from eints
english (au): 3 changes by krysclarke
english (us): 7 changes by 2TallTyler
korean: 52 changes by telk5093
russian: 4 changes by Ln-Wolf
spanish: 6 changes by MontyMontana
portuguese: 3 changes by azulcosta
2022-11-27 18:46:09 +00:00
243 changed files with 7697 additions and 4082 deletions
+3 -3
View File
@@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-20.04
container:
# If you change this version, change the number in the cache step too.
image: emscripten/emsdk:2.0.31
image: emscripten/emsdk:3.1.28
steps:
- name: Checkout
@@ -26,7 +26,7 @@ jobs:
uses: actions/cache@v3
with:
path: /emsdk/upstream/emscripten/cache
key: 2.0.31-${{ runner.os }}
key: 3.1.28-${{ runner.os }}
- name: Patch Emscripten to support LZMA
run: |
@@ -162,7 +162,7 @@ jobs:
runs-on: macos-latest
env:
MACOSX_DEPLOYMENT_TARGET: 10.14
MACOSX_DEPLOYMENT_TARGET: 10.13
steps:
- name: Checkout
+2 -2
View File
@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-20.04
container:
# If you change this version, change the number in the cache step too.
image: emscripten/emsdk:2.0.31
image: emscripten/emsdk:3.1.28
steps:
- name: Update deployment status to in progress
@@ -44,7 +44,7 @@ jobs:
uses: actions/cache@v3
with:
path: /emsdk/upstream/emscripten/cache
key: 2.0.31-${{ runner.os }}
key: 3.1.28-${{ runner.os }}
- name: Patch Emscripten to support LZMA
run: |
+85
View File
@@ -0,0 +1,85 @@
name: Release (Docs)
on:
workflow_call:
inputs:
version:
required: true
type: string
jobs:
docs:
name: Docs
runs-on: ubuntu-20.04
steps:
- name: Download source
uses: actions/download-artifact@v3
with:
name: internal-source
- name: Unpack source
run: |
tar -xf source.tar.gz --strip-components=1
- name: Install dependencies
run: |
echo "::group::Update apt"
sudo apt-get update
echo "::endgroup::"
echo "::group::Install dependencies"
sudo apt-get install -y --no-install-recommends \
doxygen \
# EOF
echo "::endgroup::"
env:
DEBIAN_FRONTEND: noninteractive
- name: Build
run: |
mkdir -p ${GITHUB_WORKSPACE}/build
cd ${GITHUB_WORKSPACE}/build
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DOPTION_DOCS_ONLY=ON \
# EOF
echo "::endgroup::"
echo "::group::Build"
cmake --build . --target docs
echo "::endgroup::"
- name: Create bundles
run: |
BASENAME=openttd-${{ inputs.version }}
cd ${GITHUB_WORKSPACE}/build
mv docs/source ${BASENAME}-docs
mv docs/ai-api ${BASENAME}-docs-ai
mv docs/gs-api ${BASENAME}-docs-gs
mkdir -p bundles
echo "::group::Create docs bundle"
tar --xz -cf bundles/${BASENAME}-docs.tar.xz ${BASENAME}-docs
echo "::endgroup::"
echo "::group::Create AI API docs bundle"
tar --xz -cf bundles/${BASENAME}-docs-ai.tar.xz ${BASENAME}-docs-ai
echo "::endgroup::"
echo "::group::Create GameScript API docs bundle"
tar --xz -cf bundles/${BASENAME}-docs-gs.tar.xz ${BASENAME}-docs-gs
echo "::endgroup::"
- name: Store bundles
uses: actions/upload-artifact@v3
with:
name: openttd-docs
path: build/bundles/*.tar.xz
retention-days: 5
+100
View File
@@ -0,0 +1,100 @@
name: Release (Linux)
on:
workflow_call:
jobs:
linux:
name: Linux (Generic)
runs-on: ubuntu-20.04
container:
# manylinux2014 is based on CentOS 7, but already has a lot of things
# installed and preconfigured. It makes it easier to build OpenTTD.
image: quay.io/pypa/manylinux2014_x86_64
steps:
- name: Download source
uses: actions/download-artifact@v3
with:
name: internal-source
- name: Unpack source
run: |
tar -xf source.tar.gz --strip-components=1
- name: Install dependencies
run: |
echo "::group::Install dependencies"
yum install -y \
fontconfig-devel \
freetype-devel \
libicu-devel \
libpng-devel \
lzo-devel \
SDL2-devel \
wget \
xz-devel \
zlib-devel \
# EOF
echo "::endgroup::"
# The yum variant of fluidsynth depends on all possible audio drivers,
# like jack, ALSA, pulseaudio, etc. This is not really useful for us,
# as we route the output of fluidsynth back via our sound driver, and
# as such do not use these audio driver outputs at all. So instead,
# we compile fluidsynth ourselves, with as little dependencies as
# possible. This currently means it picks up SDL2, but this is fine,
# as we need SDL2 anyway.
echo "::group::Install fluidsynth"
wget https://github.com/FluidSynth/fluidsynth/archive/v2.1.6.tar.gz
tar xf v2.1.6.tar.gz
(
cd fluidsynth-2.1.6
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr
cmake --build . -j $(nproc)
cmake --install .
)
echo "::endgroup::"
- name: Install GCC problem matcher
uses: ammaraskar/gcc-problem-matcher@master
- name: Build
run: |
mkdir -p build
cd build
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DOPTION_PACKAGE_DEPENDENCIES=ON \
# EOF
echo "::endgroup::"
echo "::group::Build"
echo "Running on $(nproc) cores"
cmake --build . -j $(nproc)
echo "::endgroup::"
- name: Create bundles
run: |
cd ${GITHUB_WORKSPACE}/build
echo "::group::Run CPack"
cpack
echo "::endgroup::"
echo "::group::Cleanup"
# Remove the sha256 files CPack generates; we will do this ourself at
# the end of this workflow.
rm -f bundles/*.sha256
echo "::endgroup::"
- name: Store bundles
uses: actions/upload-artifact@v3
with:
name: openttd-linux-generic
path: build/bundles
retention-days: 5
+195
View File
@@ -0,0 +1,195 @@
name: Release (MacOS)
on:
workflow_call:
jobs:
macos:
name: MacOS
runs-on: macos-11
env:
MACOSX_DEPLOYMENT_TARGET: 10.13
steps:
- name: Download source
uses: actions/download-artifact@v3
with:
name: internal-source
- name: Unpack source
run: |
tar -xf source.tar.gz --strip-components=1
- name: Install dependencies
env:
HOMEBREW_NO_AUTO_UPDATE: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
run: |
brew install pandoc
- name: Prepare cache key
id: key
run: |
echo "image=$ImageOS-$ImageVersion" >> $GITHUB_OUTPUT
- name: Enable vcpkg cache
uses: actions/cache@v3
with:
path: /usr/local/share/vcpkg/installed
key: ${{ steps.key.outputs.image }}-vcpkg-release-0 # Increase the number whenever dependencies are modified
restore-keys: |
${{ steps.key.outputs.image }}-vcpkg-release
${{ steps.key.outputs.image }}-vcpkg-x64
- name: Prepare vcpkg
run: |
vcpkg install \
liblzma:x64-osx \
liblzma:arm64-osx \
libpng:x64-osx \
libpng:arm64-osx \
lzo:x64-osx \
lzo:arm64-osx \
zlib:x64-osx \
zlib:arm64-osx \
# EOF
- name: Install GCC problem matcher
uses: ammaraskar/gcc-problem-matcher@master
- name: Build tools
run: |
mkdir build-host
cd build-host
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DOPTION_TOOLS_ONLY=ON \
# EOF
echo "::endgroup::"
echo "::group::Build tools"
echo "Running on $(sysctl -n hw.logicalcpu) cores"
cmake --build . -j $(sysctl -n hw.logicalcpu) --target tools
echo "::endgroup::"
- name: Import code signing certificates
uses: Apple-Actions/import-codesign-certs@v1
with:
# The certificates in a PKCS12 file encoded as a base64 string
p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
# The password used to import the PKCS12 file.
p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
# If this is run on a fork, there may not be a certificate set up - continue in this case
continue-on-error: true
- name: Build arm64
run: |
mkdir build-arm64
cd build-arm64
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DVCPKG_TARGET_TRIPLET=arm64-osx \
-DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
# EOF
echo "::endgroup::"
echo "::group::Build"
echo "Running on $(sysctl -n hw.logicalcpu) cores"
cmake --build . -j $(sysctl -n hw.logicalcpu)
echo "::endgroup::"
- name: Build x64
run: |
mkdir build-x64
cd build-x64
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DVCPKG_TARGET_TRIPLET=x64-osx \
-DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCPACK_BUNDLE_APPLE_CERT_APP=${{ secrets.APPLE_DEVELOPER_CERTIFICATE_ID }} \
"-DCPACK_BUNDLE_APPLE_CODESIGN_PARAMETER=--deep -f --options runtime" \
-DAPPLE_UNIVERSAL_PACKAGE=1 \
# EOF
echo "::endgroup::"
echo "::group::Build"
echo "Running on $(sysctl -n hw.logicalcpu) cores"
cmake --build . -j $(sysctl -n hw.logicalcpu)
echo "::endgroup::"
- name: Create bundles
run: |
cd build-x64
echo "::group::Create universal binary"
# Combine the `openttd` binaries from each build into a single file
lipo -create -output openttd-universal ../build-*/openttd
mv openttd-universal openttd
echo "::endgroup::"
echo "::group::Run CPack"
cpack
echo "::endgroup::"
echo "::group::Cleanup"
# Remove the sha256 files CPack generates; we will do this ourself at
# the end of this workflow.
rm -f bundles/*.sha256
echo "::endgroup::"
- name: Install gon
env:
HOMEBREW_NO_AUTO_UPDATE: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
run: |
brew tap mitchellh/gon
brew install mitchellh/gon/gon
- name: Notarize
env:
AC_USERNAME: ${{ secrets.APPLE_DEVELOPER_APP_USERNAME }}
AC_PASSWORD: ${{ secrets.APPLE_DEVELOPER_APP_PASSWORD }}
run: |
cd build-x64
../os/macosx/notarize.sh
- name: Build zip
run: |
cd build-x64
pushd _CPack_Packages/*/Bundle/openttd-*/
# Remove the Applications symlink from the staging folder
rm -f Applications
# Remove the original dmg built by CPack to avoid a conflict when resolving
# the zip_filename variable below
rm -f ../*.dmg
zip_filename=(../openttd-*)
# Package up the existing, notarised .app into a zip file
zip -r -9 ${zip_filename}.zip OpenTTD.app
popd
# Now move it into place to be uploaded
mv _CPack_Packages/*/Bundle/openttd-*.zip bundles/
- name: Store bundles
uses: actions/upload-artifact@v3
with:
name: openttd-macos-universal
path: build-x64/bundles
retention-days: 5
+186
View File
@@ -0,0 +1,186 @@
name: Release (Source)
on:
workflow_call:
outputs:
version:
value: ${{ jobs.source.outputs.version }}
is_tag:
value: ${{ jobs.source.outputs.is_tag }}
trigger_type:
value: ${{ jobs.source.outputs.trigger_type }}
folder:
value: ${{ jobs.source.outputs.folder }}
jobs:
source:
name: Source
runs-on: ubuntu-20.04
outputs:
version: ${{ steps.metadata.outputs.version }}
is_tag: ${{ steps.metadata.outputs.is_tag }}
trigger_type: ${{ steps.metadata.outputs.trigger_type }}
folder: ${{ steps.metadata.outputs.folder }}
steps:
- name: Checkout (Release)
if: github.event_name == 'release'
uses: actions/checkout@v3
with:
# We generate a changelog; for this we need the full git log.
fetch-depth: 0
- name: Checkout (Manual)
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.ref }}
# We generate a changelog; for this we need the full git log.
fetch-depth: 0
- name: Checkout (Trigger)
if: github.event_name == 'repository_dispatch'
uses: actions/checkout@v3
with:
ref: ${{ github.event.client_payload.ref }}
# We generate a changelog; for this we need the full git log.
fetch-depth: 0
- name: Check valid branch name
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
REF="${{ github.event.inputs.ref }}"
elif [ "${{ github.event_name }}" = "repository_dispatch" ]; then
REF="${{ github.event.client_payload.ref }}"
else
REF="${{ github.ref }}"
fi
# Check if we are a tag.
if [ -n "$(git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || false)" ]; then
exit 0
fi
# Check if the checkout caused the branch to be named.
if [ "$(git rev-parse --abbrev-ref HEAD)" != "HEAD" ]; then
exit 0
fi
# Check if this was a pull request.
if [ -n "$(echo ${REF} | grep '^refs/pull/[0-9]*')" ]; then
PULL=$(echo ${REF} | cut -d/ -f3)
git checkout -b pr${PULL}
fi
# Are we still in a detached state? Error out.
if [ "$(git rev-parse --abbrev-ref HEAD)" == "HEAD" ]; then
echo "The 'ref' given resulted in a checkout of a detached HEAD."
echo "We cannot detect the version for these checkout accurate."
echo ""
echo "If you want to build a Pull Request, make sure you use 'refs/pull/NNN/head'."
echo ""
echo "Cancelling build, as without a version we cannot store the artifacts."
exit 1
fi
- name: Generate metadata
id: metadata
run: |
echo "::group::Prepare metadata files"
cmake -DGENERATE_OTTDREV=1 -P cmake/scripts/FindVersion.cmake
./.github/changelog.sh > .changelog
TZ='UTC' date +"%Y-%m-%d %H:%M UTC" > .release_date
cat .ottdrev | cut -f 1 -d$'\t' > .version
if [ $(cat .ottdrev | cut -f 5 -d$'\t') = '1' ]; then
# Assume that all tags are always releases. Why else make a tag?
IS_TAG="true"
FOLDER="${{ env.FOLDER_RELEASES }}"
TRIGGER_TYPE="new-tag"
else
IS_TAG="false"
BRANCH=$(git symbolic-ref -q HEAD | sed 's@.*/@@')
if [ -z "${BRANCH}" ]; then
echo "Internal error: branch name is empty."
echo "An earlier step should have prevented this from happening."
echo "Cancelling build, as without a branch name we cannot store the artifacts"
exit 1
fi
if [ "${BRANCH}" = "${{ env.NIGHTLIES_BRANCH }}" ]; then
# The "master" branch is special, and we call a nightly.
FOLDER="${{ env.FOLDER_NIGHTLIES }}/$(date +%Y)"
TRIGGER_TYPE="new-master"
else
# All other branches, which can be builds of Pull Requests, are
# put in their own folder.
FOLDER="${{ env.FOLDER_BRANCHES }}/${BRANCH}"
TRIGGER_TYPE="new-branch"
fi
fi
mkdir -p build/bundles
cp .changelog build/bundles/changelog.txt
cp .release_date build/bundles/released.txt
cp README.md build/bundles/README.md
echo "::endgroup::"
echo "Release Date: $(cat .release_date)"
echo "Revision: $(cat .ottdrev)"
echo "Version: $(cat .version)"
echo "Is tag: ${IS_TAG}"
echo "Folder on CDN: ${FOLDER}"
echo "Workflow trigger: ${TRIGGER_TYPE}"
echo "version=$(cat .version)" >> $GITHUB_OUTPUT
echo "is_tag=${IS_TAG}" >> $GITHUB_OUTPUT
echo "folder=${FOLDER}" >> $GITHUB_OUTPUT
echo "trigger_type=${TRIGGER_TYPE}" >> $GITHUB_OUTPUT
env:
NIGHTLIES_BRANCH: master
FOLDER_RELEASES: openttd-releases
FOLDER_NIGHTLIES: openttd-nightlies
FOLDER_BRANCHES: openttd-branches
- name: Remove VCS information
run: |
rm -rf .git
- name: Create bundles
run: |
FOLDER_NAME=openttd-${{ steps.metadata.outputs.version }}
# Rename the folder to openttd-NNN
mkdir ${FOLDER_NAME}
find . -maxdepth 1 -not -name . -not -name build -not -name ${FOLDER_NAME} -exec mv {} ${FOLDER_NAME}/ \;
echo "::group::Create tarball (xz) bundle"
tar --xz -cvf build/bundles/${FOLDER_NAME}-source.tar.xz ${FOLDER_NAME}
echo "::endgroup::"
# This tarball is only to be used within this workflow.
echo "::group::Create tarball (gz) bundle"
tar --gzip -cvf source.tar.gz ${FOLDER_NAME}
echo "::endgroup::"
echo "::group::Create zip bundle"
zip -9 -r build/bundles/${FOLDER_NAME}-source.zip ${FOLDER_NAME}
echo "::endgroup::"
- name: Store bundles
uses: actions/upload-artifact@v3
with:
name: openttd-source
path: build/bundles/*
retention-days: 5
- name: Store source (for other jobs)
uses: actions/upload-artifact@v3
with:
name: internal-source
path: source.tar.gz
retention-days: 1
+192
View File
@@ -0,0 +1,192 @@
name: Release (Windows Store)
on:
workflow_call:
inputs:
version:
required: true
type: string
jobs:
windows-store:
name: Windows Store
runs-on: windows-latest
steps:
- name: Download source
uses: actions/download-artifact@v3
with:
name: internal-source
- name: Unpack source
shell: bash
run: |
tar -xf source.tar.gz --strip-components=1
- name: Download x86 build
uses: actions/download-artifact@v3
with:
name: openttd-windows-x86
- name: Download x64 build
uses: actions/download-artifact@v3
with:
name: openttd-windows-x64
- name: Download arm64 build
uses: actions/download-artifact@v3
with:
name: openttd-windows-arm64
- name: Unpack builds
shell: bash
run: |
mkdir builds
cd builds
function extract {
mkdir $1
# Extract the zip version of the release
unzip ../openttd-*-windows-$2.zip -d $1
# Remove the extraneous directory
mv $1/openttd-*-windows-$2/* $1/
rmdir $1/openttd-*-windows-$2
# Move the openttd.exe to the '{arch}-binaries' folder
mkdir $1-binaries
mv $1/openttd.exe $1-binaries/
}
extract x86 win32
extract x64 win64
extract arm64 arm64
# Use the "x86" folder as the source of the common binaries (lang files, etc) and remove the others
mv x86 common-binaries
rm -rf x64 arm64
- name: Install OpenGFX
shell: bash
run: |
mkdir -p builds/common-binaries/baseset
cd builds/common-binaries/baseset
echo "::group::Download OpenGFX"
curl -L https://cdn.openttd.org/opengfx-releases/7.1/opengfx-7.1-all.zip -o opengfx-all.zip
echo "::endgroup::"
echo "::group::Unpack OpenGFX"
unzip opengfx-all.zip
tar xf opengfx-*.tar
echo "::endgroup::"
rm -f opengfx-all.zip opengfx-*.tar
- name: Install OpenMSX
shell: bash
run: |
mkdir -p builds/common-binaries/baseset
cd builds/common-binaries/baseset
echo "::group::Download OpenMSX"
curl -L https://cdn.openttd.org/openmsx-releases/0.4.2/openmsx-0.4.2-all.zip -o openmsx-all.zip
echo "::endgroup::"
echo "::group::Unpack OpenGFX"
unzip openmsx-all.zip
tar xf openmsx-*.tar
echo "::endgroup::"
rm -f openmsx-all.zip openmsx-*.tar
- name: Install OpenSFX
shell: bash
run: |
mkdir -p builds/common-binaries/baseset/opensfx
cd builds/common-binaries/baseset/opensfx
echo "::group::Download OpenSFX"
curl -L https://cdn.openttd.org/opensfx-releases/1.0.3/opensfx-1.0.3-all.zip -o opensfx-all.zip
echo "::endgroup::"
echo "::group::Unpack OpenSFX"
unzip opensfx-all.zip
tar xf opensfx-*.tar
echo "::endgroup::"
rm -f opensfx-all.zip opensfx-*.tar
- name: Generate signing certificate
shell: cmd
run: |
cd builds
REM We need to provide a signed .appx to the Windows Store, so generate a certificate with password 'password'
call ..\os\windows\winstore\generate-key.bat "CN=78024DA8-4BE4-4C77-B12E-547BBF7359D2" password cert.pfx
- name: Generate assets
shell: cmd
run: |
cd os\windows\winstore
call generate-assets.bat
- name: Prepare manifests
shell: cmd
run: |
cd builds
mkdir manifests
REM Set the version environment variable
call ..\os\windows\winstore\set-version.bat x86-binaries\openttd.exe
call ..\os\windows\winstore\prepare-manifests.bat manifests "CN=78024DA8-4BE4-4C77-B12E-547BBF7359D2" "57420OpenTTDDevelopers.OpenTTDofficial"
- name: Prepare binaries
shell: bash
run: |
cd builds
# Copy the Windows Store assets
mkdir common-binaries/Assets
cp -R ../os/windows/winstore/assets-common/* common-binaries/Assets/
mkdir Assets
cp -R ../os/windows/winstore/assets/* Assets/
cp manifests/*.xml .
- name: Build
shell: cmd
run: |
REM Add the Windows SDK tools to the PATH
echo|set /p="SET VS_INSTALLDIR=" > _vspath.bat
vswhere -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath >> _vspath.bat
call _vspath.bat
call "%VS_INSTALLDIR%\Common7\Tools\VsDevCmd.bat"
REM Set the version environment variable
call os\windows\winstore\set-version.bat builds\x86-binaries\openttd.exe
cd builds
mkdir output
REM Build and sign the package
makeappx build /v /f PackagingLayout.xml /op output\ /bv %OTTD_VERSION% /pv %OTTD_VERSION% /ca
SignTool sign /fd sha256 /a /f cert.pfx /p password "output\OpenTTD.appxbundle"
REM Move resulting files to bundles folder
mkdir bundles
mkdir bundles\internal
move cert.pfx bundles\internal\openttd-${{ inputs.version }}-windows-store.pfx
move output\OpenTTD.appxbundle bundles\internal\openttd-${{ inputs.version }}-windows-store.appxbundle
- name: Store bundles
uses: actions/upload-artifact@v3
with:
name: openttd-windows-store
path: builds/bundles
retention-days: 5
+201
View File
@@ -0,0 +1,201 @@
name: Release (Windows)
on:
workflow_call:
inputs:
is_tag:
required: true
type: string
jobs:
windows:
name: Windows
strategy:
fail-fast: false
matrix:
include:
- arch: x86
host: x86
- arch: x64
host: x64
- arch: arm64
host: x64_arm64
runs-on: windows-latest
steps:
- name: Download source
uses: actions/download-artifact@v3
with:
name: internal-source
- name: Unpack source
shell: bash
run: |
tar -xf source.tar.gz --strip-components=1
- name: Install dependencies
shell: bash
run: |
choco install pandoc
- name: Prepare cache key
id: key
shell: powershell
run: |
# Work around caching failure with GNU tar
New-Item -Type Junction -Path vcpkg -Target c:\vcpkg
Write-Output "image=$env:ImageOS-$env:ImageVersion" >> $env:GITHUB_OUTPUT
- name: Enable vcpkg cache
uses: actions/cache@v3
with:
path: vcpkg/installed
key: ${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}-0 # Increase the number whenever dependencies are modified
restore-keys: |
${{ steps.key.outputs.image }}-vcpkg-${{ matrix.arch }}
- name: Prepare vcpkg
shell: bash
run: |
vcpkg install --triplet=${{ matrix.arch }}-windows-static \
liblzma \
libpng \
lzo \
zlib \
# EOF
- name: Install MSVC problem matcher
uses: ammaraskar/msvc-problem-matcher@master
- name: Configure developer command prompt for tools
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Build tools
shell: bash
run: |
mkdir build-host
cd build-host
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-GNinja \
-DOPTION_TOOLS_ONLY=ON \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
# EOF
echo "::endgroup::"
echo "::group::Build"
cmake --build . --target tools
echo "::endgroup::"
- name: Configure developer command prompt for ${{ matrix.arch }}
uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.host }}
- name: Import code signing certificate
shell: powershell
# If this is run on a fork, there may not be a certificate set up - continue in this case
continue-on-error: true
run: |
$tempFile = [System.IO.Path]::GetTempFileName()
$bytes = [System.Convert]::FromBase64String($env:WINDOWS_CERTIFICATE_P12)
[IO.File]::WriteAllBytes($tempFile, $bytes)
$pwd = ConvertTo-SecureString $env:WINDOWS_CERTIFICATE_PASSWORD -AsPlainText -Force
Import-PfxCertificate -FilePath $tempFile -CertStoreLocation Cert:\CurrentUser\My -Password $pwd
Remove-Item $tempFile
env:
WINDOWS_CERTIFICATE_P12: ${{ secrets.WINDOWS_CERTIFICATE_P12 }}
WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
- name: Build (with installer)
if: inputs.is_tag == 'true'
shell: bash
run: |
mkdir build
cd build
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-GNinja \
-DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \
-DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" \
-DOPTION_USE_NSIS=ON \
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DWINDOWS_CERTIFICATE_COMMON_NAME="${WINDOWS_CERTIFICATE_COMMON_NAME}" \
# EOF
echo "::endgroup::"
echo "::group::Build"
cmake --build .
echo "::endgroup::"
env:
WINDOWS_CERTIFICATE_COMMON_NAME: ${{ secrets.WINDOWS_CERTIFICATE_COMMON_NAME }}
- name: Build (without installer)
if: inputs.is_tag != 'true'
shell: bash
run: |
mkdir build
cd build
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-GNinja \
-DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \
-DCMAKE_TOOLCHAIN_FILE="c:\vcpkg\scripts\buildsystems\vcpkg.cmake" \
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DWINDOWS_CERTIFICATE_COMMON_NAME="${WINDOWS_CERTIFICATE_COMMON_NAME}" \
# EOF
echo "::endgroup::"
echo "::group::Build"
cmake --build .
echo "::endgroup::"
env:
WINDOWS_CERTIFICATE_COMMON_NAME: ${{ secrets.WINDOWS_CERTIFICATE_COMMON_NAME }}
- name: Create bundles
shell: bash
run: |
cd ${GITHUB_WORKSPACE}/build
echo "::group::Run CPack"
cpack
echo "::endgroup::"
echo "::group::Prepare PDB to be bundled"
PDB=$(ls bundles/*.zip | cut -d/ -f2 | sed 's/.zip$/.pdb/')
cp openttd.pdb bundles/${PDB}
xz -9 bundles/${PDB}
echo "::endgroup::"
echo "::group::Cleanup"
# Remove the sha256 files CPack generates; we will do this ourself at
# the end of this workflow.
rm -f bundles/*.sha256
echo "::endgroup::"
- name: Sign installer
if: inputs.is_tag == 'true'
shell: bash
# If this is run on a fork, there may not be a certificate set up - continue in this case
continue-on-error: true
run: |
cd ${GITHUB_WORKSPACE}/build/bundles
../../os/windows/sign.bat *.exe "${WINDOWS_CERTIFICATE_COMMON_NAME}"
env:
WINDOWS_CERTIFICATE_COMMON_NAME: ${{ secrets.WINDOWS_CERTIFICATE_COMMON_NAME }}
- name: Store bundles
uses: actions/upload-artifact@v3
with:
name: openttd-windows-${{ matrix.arch }}
path: build/bundles
retention-days: 5
File diff suppressed because it is too large Load Diff
+76
View File
@@ -0,0 +1,76 @@
name: Upload (AWS)
on:
workflow_call:
inputs:
version:
required: true
type: string
folder:
required: true
type: string
trigger_type:
required: true
type: string
jobs:
upload:
name: Upload (AWS)
runs-on: ubuntu-20.04
steps:
- name: Download all bundles
uses: actions/download-artifact@v3
- name: Calculate checksums
run: |
echo "::group::Move bundles to a single folder"
mkdir bundles
mv openttd-*/* bundles/
echo "::endgroup::"
cd bundles
for i in $(ls openttd-*); do
echo "::group::Calculating checksums for ${i}"
openssl dgst -r -md5 -hex $i > $i.md5sum
openssl dgst -r -sha1 -hex $i > $i.sha1sum
openssl dgst -r -sha256 -hex $i > $i.sha256sum
echo "::endgroup::"
done
# Some targets generate files that are meant for our-eyes-only.
# They are stored in the "internal" folder, and contains bundles
# for targets like Windows Store. No user has a benefit of knowing
# they exist, hence: internal.
if [ -e internal ]; then
cd internal
for i in $(ls openttd-*); do
echo "::group::Calculating checksums for ${i}"
openssl dgst -r -md5 -hex $i > $i.md5sum
openssl dgst -r -sha1 -hex $i > $i.sha1sum
openssl dgst -r -sha256 -hex $i > $i.sha256sum
echo "::endgroup::"
done
fi
- name: Upload bundles to AWS
run: |
aws s3 cp --recursive --only-show-errors bundles/ s3://${{ secrets.CDN_S3_BUCKET }}/${{ inputs.folder }}/${{ inputs.version }}/
# We do not invalidate the CloudFront distribution here. The trigger
# for "New OpenTTD release" first updated the manifest files and
# creates an index.html. We invalidate after that, so everything
# becomes visible at once.
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION }}
- name: Trigger 'New OpenTTD release'
uses: peter-evans/repository-dispatch@v2
with:
token: ${{ secrets.DEPLOYMENT_TOKEN }}
repository: OpenTTD/workflows
event-type: ${{ inputs.trigger_type }}
client-payload: '{"version": "${{ inputs.version }}", "folder": "${{ inputs.folder }}"}'
+124
View File
@@ -0,0 +1,124 @@
name: Upload (GOG)
on:
workflow_call:
inputs:
version:
required: true
type: string
jobs:
upload:
name: Upload (GOG)
runs-on: ubuntu-20.04
steps:
- name: Download all bundles
uses: actions/download-artifact@v3
- name: Install GOG Galaxy Build Creator
run: |
wget https://cdn.gog.com/open/galaxy/pipeline/build_creator/gnu-linux/GOGGalaxyBuildCreator-1.4.0.AppImage
7z x GOGGalaxyBuildCreator-1.4.0.AppImage
chmod +x ./app/GOGGalaxyPipelineBuilder
- name: Install OpenGFX
shell: bash
run: |
mkdir -p gog/opengfx/baseset
cd gog/opengfx/baseset
echo "::group::Download OpenGFX"
curl -L https://cdn.openttd.org/opengfx-releases/7.1/opengfx-7.1-all.zip -o opengfx-all.zip
echo "::endgroup::"
echo "::group::Unpack OpenGFX"
unzip opengfx-all.zip
echo "::endgroup::"
rm -f opengfx-all.zip
- name: Install OpenMSX
shell: bash
run: |
mkdir -p gog/openmsx/baseset
cd gog/openmsx/baseset
echo "::group::Download OpenMSX"
curl -L https://cdn.openttd.org/openmsx-releases/0.4.2/openmsx-0.4.2-all.zip -o openmsx-all.zip
echo "::endgroup::"
echo "::group::Unpack OpenGFX"
unzip openmsx-all.zip
tar xf openmsx-*.tar
echo "::endgroup::"
rm -f openmsx-all.zip openmsx-*.tar
- name: Install OpenSFX
shell: bash
run: |
mkdir -p gog/opensfx/baseset
cd gog/opensfx/baseset
echo "::group::Download OpenSFX"
curl -L https://cdn.openttd.org/opensfx-releases/1.0.3/opensfx-1.0.3-all.zip -o opensfx-all.zip
echo "::endgroup::"
echo "::group::Unpack OpenSFX"
unzip opensfx-all.zip
tar xf opensfx-*.tar
echo "::endgroup::"
rm -f opensfx-all.zip opensfx-*.tar
- name: Upload to GOG
run: |
echo "::group::Extracting source"
mkdir source
(
cd source
tar -xf ../internal-source/source.tar.gz --strip-components=1
)
echo "::endgroup::"
(
cd gog
echo "::group::Prepare Win32"
unzip ../openttd-windows-x86/openttd-*-windows-win32.zip
mv openttd-*-windows-win32 win32
echo "::endgroup::"
echo "::group::Prepare Win64"
unzip ../openttd-windows-x64/openttd-*-windows-win64.zip
mv openttd-*-windows-win64 win64
echo "::endgroup::"
echo "::group::Prepare macOS"
mkdir macos
(
cd macos
unzip ../../openttd-macos-universal/openttd-*-macos-universal.zip
)
echo "::endgroup::"
echo "::group::Prepare Linux"
tar xvf ../openttd-linux-generic/openttd-*-linux-generic-amd64.tar.xz
mv openttd-*-linux-generic-amd64 linux
echo "::endgroup::"
echo "::group::Preparing build files"
cp ../source/os/gog/*.json .
for json in $(ls *.json); do
sed -i 's/VERSION/${{ inputs.version }}/g;s/CLIENT_ID/${{ secrets.GOG_CLIENT_ID }}/g;s/CLIENT_SECRET/${{ secrets.GOG_CLIENT_SECRET }}/g' ${json}
done
echo "::endgroup::"
echo "::group::Upload to GOG"
../app/GOGGalaxyPipelineBuilder build-game --username "${{ secrets.GOG_USERNAME }}" --password "${{ secrets.GOG_PASSWORD }}" --branch Testing windows.json
../app/GOGGalaxyPipelineBuilder build-game --username "${{ secrets.GOG_USERNAME }}" --password "${{ secrets.GOG_PASSWORD }}" --branch Testing macos.json
../app/GOGGalaxyPipelineBuilder build-game --username "${{ secrets.GOG_USERNAME }}" --password "${{ secrets.GOG_PASSWORD }}" --branch Testing linux.json
echo "::endgroup::"
)
+82
View File
@@ -0,0 +1,82 @@
name: Upload (Steam)
on:
workflow_call:
inputs:
version:
required: true
type: string
trigger_type:
required: true
type: string
jobs:
upload:
name: Upload (Steam)
runs-on: ubuntu-20.04
steps:
- name: Download all bundles
uses: actions/download-artifact@v3
- name: Setup steamcmd
uses: CyberAndrii/setup-steamcmd@v1
- name: Generate Steam auth code
id: steam-totp
uses: CyberAndrii/steam-totp@v1
with:
shared_secret: ${{ secrets.STEAM_SHARED_SECRET }}
- name: Upload to Steam
run: |
echo "::group::Extracting source"
mkdir source
(
cd source
tar -xf ../internal-source/source.tar.gz --strip-components=1
)
echo "::endgroup::"
mkdir steam
(
cd steam
echo "::group::Prepare Win32"
unzip ../openttd-windows-x86/openttd-*-windows-win32.zip
mv openttd-*-windows-win32 steam-win32
echo "::endgroup::"
echo "::group::Prepare Win64"
unzip ../openttd-windows-x64/openttd-*-windows-win64.zip
mv openttd-*-windows-win64 steam-win64
echo "::endgroup::"
echo "::group::Prepare macOS"
mkdir steam-macos
(
cd steam-macos
unzip ../../openttd-macos-universal/openttd-*-macos-universal.zip
)
echo "::endgroup::"
echo "::group::Prepare Linux"
tar xvf ../openttd-linux-generic/openttd-*-linux-generic-amd64.tar.xz
mv openttd-*-linux-generic-amd64 steam-linux
echo "::endgroup::"
echo "::group::Preparing build file"
if [ "${{ inputs.trigger_type }}" = "new-tag" ]; then
BRANCH="testing"
else
BRANCH="nightly"
fi
cat ../source/os/steam/release.vdf | sed 's/@@DESCRIPTION@@/openttd-${{ inputs.version }}/;s/@@BRANCH@@/'${BRANCH}'/' > release.vdf
cat release.vdf
echo "::endgroup::"
echo "::group::Upload to Steam"
steamcmd +login ${{ secrets.STEAM_USERNAME }} ${{ secrets.STEAM_PASSWORD }} ${{ steps.steam-totp.outputs.code }} +run_app_build $(pwd)/release.vdf +quit
echo "::endgroup::"
)
+1 -1
View File
@@ -22,7 +22,7 @@ if (EMSCRIPTEN)
endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.14)
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13)
# Use GNUInstallDirs to allow customisation
# but set our own default data and bin dir
+1 -3
View File
@@ -41,7 +41,6 @@ INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 2
ALIASES =
TCL_SUBST =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
@@ -155,7 +154,6 @@ VERBATIM_HEADERS = YES
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
@@ -224,7 +222,7 @@ LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
PAPER_TYPE = a4
EXTRA_PACKAGES =
LATEX_HEADER =
LATEX_FOOTER =
+1
View File
@@ -13,6 +13,7 @@ set(AI_COMPAT_SOURCE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.10.nut
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.11.nut
${CMAKE_CURRENT_SOURCE_DIR}/compat_12.nut
${CMAKE_CURRENT_SOURCE_DIR}/compat_13.nut
)
foreach(AI_COMPAT_SOURCE_FILE IN LISTS AI_COMPAT_SOURCE_FILES)
+1
View File
@@ -10,6 +10,7 @@ set(GS_COMPAT_SOURCE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.10.nut
${CMAKE_CURRENT_SOURCE_DIR}/compat_1.11.nut
${CMAKE_CURRENT_SOURCE_DIR}/compat_12.nut
${CMAKE_CURRENT_SOURCE_DIR}/compat_13.nut
)
foreach(GS_COMPAT_SOURCE_FILE IN LISTS GS_COMPAT_SOURCE_FILES)
+86
View File
@@ -1,3 +1,89 @@
13.0 (2023-02-05)
------------------------------------------------------------------------
Change #10077: Make maximum loan a positive multiple of the loan interval (#10355)
Fix #10361: [Script] Don't try to give saved data to a dead script (#10433)
Fix #10419: Water infrastructure accounting when building ship depots and docks (#10432)
13.0-RC2 (2023-01-28)
------------------------------------------------------------------------
Feature: Press Ctrl to build a diagonal area of trees (#10342)
Feature: Set a custom number of industries in map generation window (#10340)
Change: Display font status as aa/noaa instead of true/false (#10352)
Fix: [Script] Improved API documentation for scripts (#10413, #10412)
Fix #10255: Reduce basic thickness of linkgraph GUI lines (#10410)
Fix #10220: Don't select unselectable engine as default (#10404)
Fix #10395: When loading old saves, don't forcibly bar level crossings (#10400)
Fix #10377: Bad sorting of rail vehicles when primary variant is missing (#10378)
Fix #10368: Server restarting game caused clients to hit assertion (#10369)
Fix #10362: NewGRF bridges without speed limits (#10365)
Fix #10363: CargoDist setting helptext shouldn't suggest symmetric distribution for diamonds in subtropic (#10364)
Fix: [Script] Switch to OWNER_TOWN prevented OWNER_DEITY test during industry prospecting (#10360)
Fix #10009: Bad overflow protection when taking out loans (#10359)
Fix #9865: Removing files with the console always failed (#10357)
Fix #10057: FallbackParagraphLayout fails to properly wrap (#10356)
Fix #10177: Company list password padlock showed after switching to single player (#10354)
Fix: Various Wide River issues (#10348)
Fix: Link variants to parents when finalising engines (#10346)
Fix #10333: Only show industry prospecting errors to local company (#10338)
Fix #10335: Set initial scrollbar count for object GUI (#10336)
Fix #10331: Starting new company during load must happen after AI start (#10332)
Fix #10309: [SDL] Uninitialized width and height when turning off full screen (#10328)
Fix #10032: Capacities of articulated vehicles in build window (#10326)
Fix: Improve handling of corrupt NewGRF or image files (#10321, #10316)
Fix: [NewGRF] Don't assume engclass 2 should be elrail (#10315)
Fix: [Script] AIGroup.GetProfitLastYear could get values different than those displayed in GUI (#10227)
Fix #10304: [Scripts] Don't start GS in intro game (#10305)
Fix: [Script] Copy compat files for version 13 (#10303)
13.0-RC1 (2023-01-01)
------------------------------------------------------------------------
Feature: 'font' console command to configure fonts within game (#10278)
Feature: Ctrl-click to bulk edit timetable speeds/waiting times (#10265)
Feature: [NewGRF] Vehicle variants in expandable purchase list (#10220)
Feature: Expand all towns in the scenario editor (#10215)
Add: [NewGRF] Slope-aware and roadtype-specific one-way sprites (#10282)
Change: Display text files in black (#10291)
Change: Make vehicle list dropdown buttons resize to fit strings (#10286)
Change: [NewGRF] Support flipping shorter engines without explicit support (#10262)
Change: Separate ground sprite from foundation sprite offsets (#10256)
Change: Vertically centre sprite font relative to TrueType font (#10254)
Change: [macOS] Set minimum macOS version to 10.13 (#10253)
Change: Use lowered not disabled widget for current vehicle details tab (#10252)
Change: Various improvements to NewGRF sprite aligner (#10249)
Change: reset_engines console command now rerandomises introduction dates and reliability (#10220)
Change: Show error message on failed industry prospecting (#10202)
Fix: Local authority window rating list height ignored icon sizes (#10285)
Fix #10150: Town signs could be truncated when using custom fonts (#10283)
Fix #8971: Resize QueryStrings with interface scale change (#10281)
Fix #10274: Crash when rescanning scripts with GS selected (#10276)
Fix #10151: Use smaller padding for signs (#10272)
Fix #10263: [Script] Restore tile validation for commands (#10269)
Fix: Missing scrollbar for rail/roadtype dropdowns (#10264)
Fix #10260: Incorrect rect height drawing image in vehicle details (#10261)
Fix #10257: Incorrect catenary position on sloped bridge heads (#10258)
Fix: Vertically centre chat prompt (#10250)
Fix #10214: League and graph buttons in toolbar did not have a default action (#10246)
Fix #10242: Allow a space for text shadow when clipping text (#10243)
Fix #10206: Fully disable scripts in intro game (#10241)
Fix #10218: Don't try to create river tiles along incorrect slopes (#10235)
Fix #10208: [NewGRF] Allow using a specific underlay for road/tram tunnels (#10233)
Fix #10224: Don't change fast-forward mode while saving (#10230)
Fix #10147: Sound effect volume slider no longer set volume (#10228)
Fix #10223: Crash when vehicle cloning fails on order cloning (#10225)
Fix: Maximum space for engine preview image was never scaled (#10219)
Fix #10216: Crash when upgrading savegame with crashed vehicles (#10217)
Fix #10212: [Script] Nested ScriptAccounting scopes not restored properly (#10213)
Fix #10114: Incorrect drag-highlight position with non-power-of-2 scaling (#10211)
Fix #10198: Rearrange Intro GUI to make button rows narrower (#10203)
Fix: Missing extra padding when drawing tooltip text (#10201)
Fix: Bad alignment of button icons when using the original baseset (#10200)
Fix: Signal icons incorrectly positioned in UI (#10199)
Fix #10021: Object GUI resized when switching between different objects (#10196)
Fix #9720: Delay start of GS/AI to after loading of savegame (#9745)
13.0-beta2 (2022-11-27)
------------------------------------------------------------------------
Feature: Allow AI/GS to be fully modified in scenario editor (#10152)
+1 -1
View File
@@ -56,7 +56,7 @@ macro(compile_flags)
if(MSVC)
add_compile_options(/W3)
if(MSVC_VERSION GREATER 1929)
if(MSVC_VERSION GREATER 1929 AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
# Starting with version 19.30, there is an optimisation bug, see #9966 for details
# This flag disables the broken optimisation to work around the bug
add_compile_options(/d2ssa-rse-)
+1 -1
View File
@@ -342,7 +342,7 @@ foreach(LINE IN LISTS SOURCE_LINES)
else()
string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.PreRegister(engine, \"${API_SUPER_CLS}\");")
endif()
if(NOT "${SUPER_CLS}" STREQUAL "ScriptEvent")
if(NOT "${SUPER_CLS}" MATCHES "^ScriptEvent")
if("${CLS_PARAM_2}" STREQUAL "v")
string(APPEND SQUIRREL_EXPORT "\n SQ${API_CLS}.AddSQAdvancedConstructor(engine);")
else()
Binary file not shown.
+21 -7
View File
@@ -4,10 +4,24 @@
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
//
-1 * 0 0C "One way road graphics"
-1 * 3 05 09 06
-1 sprites/oneway.png 8bpp 34 8 24 16 -12 -8 normal
-1 sprites/oneway.png 8bpp 66 8 24 16 -12 -8 normal
-1 sprites/oneway.png 8bpp 98 8 24 16 -12 -8 normal
-1 sprites/oneway.png 8bpp 130 8 24 16 -12 -8 normal
-1 sprites/oneway.png 8bpp 162 8 24 16 -12 -8 normal
-1 sprites/oneway.png 8bpp 194 8 24 16 -12 -8 normal
-1 * 3 05 09 12
-1 sprites/oneway.png 8bpp 34 8 24 16 -10 -9 normal
-1 sprites/oneway.png 8bpp 66 8 24 16 -13 -7 normal
-1 sprites/oneway.png 8bpp 98 8 24 16 -12 -8 normal
-1 sprites/oneway.png 8bpp 130 8 24 16 -15 -10 normal
-1 sprites/oneway.png 8bpp 162 8 24 16 -12 -9 normal
-1 sprites/oneway.png 8bpp 194 8 24 16 -11 -8 normal
-1 sprites/oneway.png 8bpp 34 40 24 16 -13 -10 normal
-1 sprites/oneway.png 8bpp 66 40 24 16 -12 -8 normal
-1 sprites/oneway.png 8bpp 98 40 24 16 -12 -9 normal
-1 sprites/oneway.png 8bpp 130 40 24 16 -11 -8 normal
-1 sprites/oneway.png 8bpp 162 40 24 16 -9 -10 normal
-1 sprites/oneway.png 8bpp 194 40 24 16 -10 -9 normal
-1 sprites/oneway.png 8bpp 34 72 24 16 -8 -11 normal
-1 sprites/oneway.png 8bpp 66 72 24 16 -11 -5 normal
-1 sprites/oneway.png 8bpp 98 72 24 16 -12 -8 normal
-1 sprites/oneway.png 8bpp 130 72 24 16 -12 -5 normal
-1 sprites/oneway.png 8bpp 162 72 24 16 -14 -10 normal
-1 sprites/oneway.png 8bpp 194 72 24 16 -12 -8 normal
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.
Binary file not shown.
@@ -0,0 +1,12 @@
// This file is part of OpenTTD.
// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
//
-1 * 0 0C "Fix alignment of button icons."
// Fix alignment of button icons.
-1 * 11 0A 03 01 DC 02 01 E2 02 01 E6 02
-1 sprites/fix_gui_icons.png 8bpp 8 13 20 20 0 0 normal nocrop
-1 sprites/fix_gui_icons.png 8bpp 40 13 20 20 0 0 normal nocrop
-1 sprites/fix_gui_icons.png 8bpp 72 13 20 20 0 0 normal nocrop
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

+1
View File
@@ -83,3 +83,4 @@
#include "rivers/arctic.nfo"
#include "rivers/tropic.nfo"
#include "rivers/toyland.nfo"
#include "fix_gui_icons.nfo"
+1 -1
View File
@@ -1,4 +1,4 @@
FROM emscripten/emsdk:2.0.34
FROM emscripten/emsdk:3.1.28
COPY emsdk-liblzma.patch /
RUN cd /emsdk/upstream/emscripten && patch -p1 < /emsdk-liblzma.patch
+14 -16
View File
@@ -1,40 +1,38 @@
## How to build with Emscripten
Building with Emscripten works with emsdk 2.0.31 and above.
Please use docker with the supplied `Dockerfile` to build for emscripten.
It takes care of a few things:
- Use a version of emscripten we know works
- Patch in LibLZMA support (as this is not supported by upstream)
Currently there is no LibLZMA support upstream; for this we suggest to apply
the provided patch in this folder to your emsdk installation.
For convenience, a Dockerfile is supplied that does this patches for you
against upstream emsdk docker. Best way to use it:
Build the docker image:
First, build the docker image by navigating in the folder this `README.md` is in, and executing:
```
docker build -t emsdk-lzma .
```
Build the host tools first:
Next, navigate back to the root folder of this project.
Now we build the host tools first:
```
mkdir build-host
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build-host emsdk-lzma cmake .. -DOPTION_TOOLS_ONLY=ON
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build-host emsdk-lzma make -j5 tools
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build-host emsdk-lzma make -j$(nproc) tools
```
Next, build the game with emscripten:
Finally, we build the actual game:
```
mkdir build
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build emsdk-lzma emcmake cmake .. -DHOST_BINARY_DIR=../build-host -DCMAKE_BUILD_TYPE=Release -DOPTION_USE_ASSERTS=OFF
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build emsdk-lzma emmake make -j5
docker run -it --rm -v $(pwd):$(pwd) -u $(id -u):$(id -g) --workdir $(pwd)/build emsdk-lzma emmake make -j$(nproc)
```
And now you have in your build folder files like "openttd.html".
In the `build` folder you will now see `openttd.html`.
To run it locally, you would have to start a local webserver, like:
To run it locally, you would have to start a local webserver; something like:
```
cd build
python3 -m http.server
````
Now you can play the game via http://127.0.0.1:8000/openttd.html .
You can now play the game via http://127.0.0.1:8000/openttd.html .
+26 -36
View File
@@ -13,7 +13,7 @@ of emsdk.
diff --git a/tools/settings.py b/tools/settings.py
--- a/tools/settings.py
+++ b/tools/settings.py
@@ -38,6 +38,7 @@
@@ -40,6 +40,7 @@ PORTS_SETTINGS = {
'USE_SDL_NET',
'USE_SDL_GFX',
'USE_LIBJPEG',
@@ -24,24 +24,23 @@ diff --git a/tools/settings.py b/tools/settings.py
diff --git a/src/settings.js b/src/settings.js
--- a/src/settings.js
+++ b/src/settings.js
@@ -1382,8 +1382,12 @@ var USE_BZIP2 = 0;
// 1 = use libjpeg from emscripten-ports
// [link]
var USE_LIBJPEG = 0;
@@ -1450,6 +1450,10 @@ var USE_GIFLIB = false;
// [compile+link]
var USE_LIBJPEG = false;
+// 1 = use liblzma from emscripten-ports
+// [link]
+var USE_LIBLZMA = 0;
+// [compile+link]
+var USE_LIBLZMA = false;
+
// 1 = use libpng from emscripten-ports
// [link]
var USE_LIBPNG = 0;
// [compile+link]
var USE_LIBPNG = false;
diff --git a/tools/ports/liblzma.py b/tools/ports/liblzma.py
new file mode 100644
--- /dev/null
+++ b/tools/ports/liblzma.py
@@ -0,0 +1,160 @@
@@ -0,0 +1,151 @@
+# Copyright 2020 The Emscripten Authors. All rights reserved.
+# Emscripten is available under two separate licenses, the MIT license and the
+# University of Illinois/NCSA Open Source License. Both these licenses can be
@@ -52,8 +51,8 @@ new file mode 100644
+import logging
+from pathlib import Path
+
+VERSION = '5.2.5'
+HASH = '7443674247deda2935220fbc4dfc7665e5bb5a260be8ad858c8bd7d7b9f0f868f04ea45e62eb17c0a5e6a2de7c7500ad2d201e2d668c48ca29bd9eea5a73a3ce'
+VERSION = '5.4.0'
+HASH = '29b2cd25bb5b234b329ffe9547692d2c29be393db9d8d4ce70a66dfdaebd54433e79a89d80c57e58cd4559c3c68b9845507d5fedf3eec1c528a81e3d9ddbd811'
+
+
+def needed(settings):
@@ -61,40 +60,31 @@ new file mode 100644
+
+
+def get(ports, settings, shared):
+ ports.fetch_project('liblzma', 'https://tukaani.org/xz/xz-' + VERSION + '.tar.gz', 'xz-' + VERSION, sha512hash=HASH)
+ ports.fetch_project('liblzma', f'https://tukaani.org/xz/xz-{VERSION}.tar.gz', sha512hash=HASH)
+
+ def create(final):
+ logging.info('building port: liblzma')
+
+ ports.clear_project_build('liblzma')
+
+ source_path = os.path.join(ports.get_dir(), 'liblzma', 'xz-' + VERSION)
+ dest_path = os.path.join(ports.get_build_dir(), 'liblzma')
+
+ shared.try_delete(dest_path)
+ os.makedirs(dest_path)
+ shutil.rmtree(dest_path, ignore_errors=True)
+ shutil.copytree(source_path, dest_path)
+ source_path = os.path.join(ports.get_dir(), 'liblzma', f'xz-{VERSION}', 'src', 'liblzma')
+ ports.write_file(os.path.join(source_path, 'config.h'), config_h)
+ ports.install_headers(os.path.join(source_path, 'api'), pattern='lzma.h')
+ ports.install_headers(os.path.join(source_path, 'api', 'lzma'), pattern='*.h', target='lzma')
+
+ build_flags = ['-DHAVE_CONFIG_H', '-DTUKLIB_SYMBOL_PREFIX=lzma_', '-fvisibility=hidden']
+ exclude_dirs = ['xzdec', 'xz', 'lzmainfo']
+ exclude_files = ['crc32_small.c', 'crc64_small.c', 'crc32_tablegen.c', 'crc64_tablegen.c', 'price_tablegen.c', 'fastpos_tablegen.c'
+ exclude_files = ['crc32_small.c', 'crc64_small.c', 'crc32_tablegen.c', 'crc64_tablegen.c', 'price_tablegen.c', 'fastpos_tablegen.c',
+ 'tuklib_exit.c', 'tuklib_mbstr_fw.c', 'tuklib_mbstr_width.c', 'tuklib_open_stdxxx.c', 'tuklib_progname.c']
+ include_dirs_rel = ['../common', 'api', 'common', 'check', 'lz', 'rangecoder', 'lzma', 'delta', 'simple']
+ include_dirs_rel = ['../common', 'api', 'check', 'common', 'delta', 'lz', 'lzma', 'rangecoder', 'simple']
+
+ Path(dest_path, os.path.join('src', 'config.h')).write_text(config_h)
+ include_dirs = [os.path.join(source_path, p) for p in include_dirs_rel]
+ ports.build_port(source_path, final, 'liblzma', flags=build_flags, exclude_files=exclude_files, includes=include_dirs)
+
+ include_dirs = [os.path.join(dest_path, 'src', 'liblzma', p) for p in include_dirs_rel]
+ ports.build_port(os.path.join(dest_path, 'src'), final, flags=build_flags, exclude_dirs=exclude_dirs, exclude_files=exclude_files, includes=include_dirs)
+
+ ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api'), 'lzma.h')
+ ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api', 'lzma'), '*.h', 'lzma')
+
+ return [shared.Cache.get_lib('liblzma.a', create, what='port')]
+ return [shared.cache.get_lib('liblzma.a', create, what='port')]
+
+
+def clear(ports, settings, shared):
+ shared.Cache.erase_lib('liblzma.a')
+ shared.cache.erase_lib('liblzma.a')
+
+
+def process_args(ports):
@@ -105,7 +95,7 @@ new file mode 100644
+ return 'liblzma (USE_LIBLZMA=1; public domain)'
+
+
+config_h = r'''
+config_h = '''
+#define ASSUME_RAM 128
+#define ENABLE_NLS 1
+#define HAVE_CHECK_CRC32 1
@@ -177,9 +167,9 @@ new file mode 100644
+#define PACKAGE "xz"
+#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org"
+#define PACKAGE_NAME "XZ Utils"
+#define PACKAGE_STRING "XZ Utils 5.2.5"
+#define PACKAGE_STRING "XZ Utils 5.4.0"
+#define PACKAGE_TARNAME "xz"
+#define PACKAGE_VERSION "5.2.5"
+#define PACKAGE_VERSION "5.4.0"
+#define SIZEOF_SIZE_T 4
+#define STDC_HEADERS 1
+#define TUKLIB_CPUCORES_SYSCONF 1
@@ -200,5 +190,5 @@ new file mode 100644
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
+#define VERSION "5.2.5"
+#define VERSION "5.4.0"
+'''
+64
View File
@@ -0,0 +1,64 @@
{
"project": {
"baseProductId": "1293297882",
"clientId": "CLIENT_ID",
"clientSecret": "CLIENT_SECRET",
"version": "VERSION",
"installDirectory": "OpenTTD",
"name": "OpenTTD",
"platform": "gnu-linux",
"tags": [
"editor_v_1_4_0"
],
"languageMode": "together",
"products": [
{
"name": "OpenTTD",
"productId": "1293297882",
"depots": [
{
"name": "Linux",
"folder": "linux",
"languages": [
"en-US"
]
},
{
"name": "OpenGFX",
"folder": "opengfx",
"languages": [
"en-US"
]
},
{
"name": "OpenMSX",
"folder": "openmsx",
"languages": [
"en-US"
]
},
{
"name": "OpenSFX",
"folder": "opensfx",
"languages": [
"en-US"
]
}
],
"tasks": [
{
"type": "FileTask",
"name": "OpenTTD",
"languages": [
"en-US"
],
"category": "game",
"path": "openttd",
"isPrimary": true
}
],
"supportDepots": []
}
]
}
}
+65
View File
@@ -0,0 +1,65 @@
{
"project": {
"baseProductId": "1293297882",
"clientId": "CLIENT_ID",
"clientSecret": "CLIENT_SECRET",
"version": "VERSION",
"installDirectory": "OpenTTD",
"name": "OpenTTD",
"platform": "osx",
"tags": [
"editor_v_1_4_0"
],
"languageMode": "together",
"products": [
{
"name": "OpenTTD",
"productId": "1293297882",
"depots": [
{
"name": "MacOS",
"folder": "macos",
"languages": [
"en-US"
]
},
{
"name": "OpenGFX",
"folder": "opengfx",
"languages": [
"en-US"
]
},
{
"name": "OpenMSX",
"folder": "openmsx",
"languages": [
"en-US"
]
},
{
"name": "OpenSFX",
"folder": "opensfx",
"languages": [
"en-US"
]
}
],
"tasks": [
{
"type": "FileTask",
"name": "OpenTTD",
"languages": [
"en-US"
],
"category": "game",
"path": "OpenTTD.app/Contents/MacOS/openttd",
"isPrimary": true
}
],
"supportDepots": []
}
]
}
}
+94
View File
@@ -0,0 +1,94 @@
{
"project": {
"baseProductId": "1293297882",
"clientId": "CLIENT_ID",
"clientSecret": "CLIENT_SECRET",
"version": "VERSION",
"installDirectory": "OpenTTD",
"name": "OpenTTD",
"platform": "windows",
"tags": [
"editor_v_1_4_0"
],
"languageMode": "together",
"products": [
{
"name": "OpenTTD",
"productId": "1293297882",
"depots": [
{
"name": "Win32",
"folder": "win32",
"languages": [
"en-US"
],
"osBitness": [
"32"
]
},
{
"name": "Win64",
"folder": "win64",
"languages": [
"en-US"
],
"osBitness": [
"64"
]
},
{
"name": "OpenGFX",
"folder": "opengfx",
"languages": [
"en-US"
],
"osBitness": [
"32",
"64"
]
},
{
"name": "OpenMSX",
"folder": "openmsx",
"languages": [
"en-US"
],
"osBitness": [
"32",
"64"
]
},
{
"name": "OpenSFX",
"folder": "opensfx",
"languages": [
"en-US"
],
"osBitness": [
"32",
"64"
]
}
],
"tasks": [
{
"type": "FileTask",
"name": "OpenTTD",
"languages": [
"en-US"
],
"category": "game",
"path": "openttd.exe",
"isPrimary": true,
"osBitness": [
"32",
"64"
]
}
],
"supportDepots": []
}
],
"scriptInterpreter": true
}
}
+1 -1
View File
@@ -32,6 +32,6 @@
<key>NSHighResolutionCapable</key>
<string>True</string>
<key>LSMinimumSystemVersion</key>
<string>10.14.0</string>
<string>10.13.0</string>
</dict>
</plist>
+21
View File
@@ -562,6 +562,25 @@ function Regression::Prices()
print(" BT_CLEAR_WATER: " + AITile.GetBuildCost(AITile.BT_CLEAR_WATER));
}
function Regression::Commands()
{
print("");
print("--Commands--");
print(" -Command accounting-");
local test = AITestMode();
local costs = AIAccounting();
AITile.DemolishTile(2834);
print(" Command cost: " + costs.GetCosts());
{
local inner = AIAccounting();
print(" New inner cost scope: " + costs.GetCosts());
AITile.DemolishTile(2835);
print(" Further command cost: " + costs.GetCosts());
}
print(" Saved cost of outer scope: " + costs.GetCosts());
}
function cost_callback(old_path, new_tile, new_direction, self) { if (old_path == null) return 0; return old_path.GetCost() + 1; }
function estimate_callback(tile, direction, goals, self) { return goals[0] - tile; }
function neighbours_callback(path, cur_tile, self) { return [[cur_tile + 1, 1]]; }
@@ -1684,6 +1703,7 @@ function Regression::Vehicle()
print(" BuildVehicle(): " + AIVehicle.BuildVehicle(33417, 153));
print(" IsValidVehicle(12): " + AIVehicle.IsValidVehicle(12));
print(" CloneVehicle(): " + AIVehicle.CloneVehicle(33417, 12, true));
print(" BuildVehicle(): " + AIVehicle.BuildVehicle(-1, 153));
local bank_after = AICompany.GetBankBalance(AICompany.COMPANY_SELF);
@@ -1940,6 +1960,7 @@ function Regression::Start()
/* Do this first as it gains maximum loan (which is faked to quite a lot). */
this.Company();
this.Commands();
this.Airport();
this.Bridge();
this.BridgeList();
+8
View File
@@ -788,6 +788,13 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetQuarterlyPerformanceRating(): 0
GetQuarterlyCompanyValue(): 0
--Commands--
-Command accounting-
Command cost: 7500
New inner cost scope: 0
Further command cost: 30
Saved cost of outer scope: 7500
--AIAirport--
IsHangarTile(): false
IsAirportTile(): false
@@ -9288,6 +9295,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
BuildVehicle(): 12
IsValidVehicle(12): true
CloneVehicle(): 13
BuildVehicle(): 1048575
--Accounting--
GetCosts(): 11894
Should be: 11894
+1 -1
View File
@@ -450,7 +450,7 @@ void RefTable::Resize(SQUnsignedInteger size)
SQUnsignedInteger oldnumofslots = _numofslots;
AllocNodes(size);
//rehash
SQUnsignedInteger nfound = 0;
[[maybe_unused]] SQUnsignedInteger nfound = 0;
for(SQUnsignedInteger n = 0; n < oldnumofslots; n++) {
if(type(t->obj) != OT_NULL) {
//add back;
-5
View File
@@ -128,11 +128,6 @@ public:
*/
static void Save(CompanyID company);
/**
* Load data for an AI from a savegame.
*/
static void Load(CompanyID company, int version);
/**
* Get the number of days before the next AI should start.
*/
+2 -15
View File
@@ -57,6 +57,8 @@
assert(c->ai_instance == nullptr);
c->ai_instance = new AIInstance();
c->ai_instance->Initialize(info);
c->ai_instance->LoadOnStack(config->GetToLoadData());
config->SetToLoadData(nullptr);
cur_company.Restore();
@@ -289,21 +291,6 @@
}
}
/* static */ void AI::Load(CompanyID company, int version)
{
if (!_networking || _network_server) {
Company *c = Company::GetIfValid(company);
assert(c != nullptr && c->ai_instance != nullptr);
Backup<CompanyID> cur_company(_current_company, company, FILE_LINE);
c->ai_instance->Load(version);
cur_company.Restore();
} else {
/* Read, but ignore, the load data */
AIInstance::LoadEmpty();
}
}
/* static */ int AI::GetStartNextTime()
{
/* Find the first company which doesn't exist yet */
+2 -2
View File
@@ -142,11 +142,11 @@ struct AIListWindow : public Window {
break;
}
case WID_AIL_INFO_BG: {
AIInfo *selected_info = nullptr;
ScriptInfo *selected_info = nullptr;
int i = 0;
for (const auto &item : *this->info_list) {
i++;
if (this->selected == i - 1) selected_info = static_cast<AIInfo *>(item.second);
if (this->selected == i - 1) selected_info = static_cast<ScriptInfo *>(item.second);
}
/* Some info about the currently selected AI. */
if (selected_info != nullptr) {
+3
View File
@@ -61,6 +61,9 @@ void AIInstance::Died()
{
ScriptInstance::Died();
/* Intro is not supposed to use AI, but it may have 'dummy' AI which instant dies. */
if (_game_mode == GM_MENU) return;
ShowAIDebugWindow(_current_company);
const AIInfo *info = AIConfig::GetConfig(_current_company, AIConfig::SSS_FORCE_GAME)->GetInfo();
+6
View File
@@ -10,6 +10,7 @@
#include "../stdafx.h"
#include "../debug.h"
#include "../network/network.h"
#include "../openttd.h"
#include "../core/random_func.hpp"
#include "../script/squirrel_class.hpp"
@@ -59,6 +60,11 @@ void AIScannerInfo::RegisterAPI(class Squirrel *engine)
AIInfo *AIScannerInfo::SelectRandomAI() const
{
if (_game_mode == GM_MENU) {
Debug(script, 0, "The intro game should not use AI, loading 'dummy' AI.");
return this->info_dummy;
}
uint num_random_ais = 0;
for (const auto &item : info_single_list) {
AIInfo *i = static_cast<AIInfo *>(item.second);
-35
View File
@@ -160,41 +160,6 @@ CargoArray GetCapacityOfArticulatedParts(EngineID engine)
return capacity;
}
/**
* Get the default cargoes and refits of an articulated vehicle.
* The refits are linked to a cargo rather than an articulated part to prevent a long list of parts.
* @param engine Model to investigate.
* @param[out] cargoes Total amount of units that can be transported, summed by cargo.
* @param[out] refits Whether a (possibly partial) refit for each cargo is possible.
* @param cargo_type Selected refitted cargo type
* @param cargo_capacity Capacity of selected refitted cargo type
*/
void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits, CargoID cargo_type, uint cargo_capacity)
{
cargoes->Clear();
*refits = 0;
const Engine *e = Engine::Get(engine);
if (cargo_type < NUM_CARGO && cargo_capacity > 0) {
(*cargoes)[cargo_type] += cargo_capacity;
if (IsEngineRefittable(engine)) SetBit(*refits, cargo_type);
}
if (!e->IsGroundVehicle() || !HasBit(e->info.callback_mask, CBM_VEHICLE_ARTIC_ENGINE)) return;
for (uint i = 1; i < MAX_ARTICULATED_PARTS; i++) {
EngineID artic_engine = GetNextArticulatedPart(i, engine);
if (artic_engine == INVALID_ENGINE) break;
cargo_capacity = GetVehicleDefaultCapacity(artic_engine, &cargo_type);
if (cargo_type < NUM_CARGO && cargo_capacity > 0) {
(*cargoes)[cargo_type] += cargo_capacity;
if (IsEngineRefittable(artic_engine)) SetBit(*refits, cargo_type);
}
}
}
/**
* Checks whether any of the articulated parts is refittable
* @param engine the first part
+2 -1
View File
@@ -346,7 +346,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) = Command<CMD_BUILD_VEHICLE>::Do(DC_EXEC | DC_AUTOREPLACE, old_veh->tile, e, true, CT_INVALID, INVALID_CLIENT_ID);
std::tie(cost, new_veh_id, std::ignore, std::ignore, std::ignore) = Command<CMD_BUILD_VEHICLE>::Do(DC_EXEC | DC_AUTOREPLACE, old_veh->tile, e, true, CT_INVALID, INVALID_CLIENT_ID);
if (cost.Failed()) return cost;
Vehicle *new_veh = Vehicle::Get(new_veh_id);
@@ -422,6 +422,7 @@ static CommandCost CopyHeadSpecificThings(Vehicle *old_head, Vehicle *new_head,
if (cost.Succeeded() && old_head != new_head && (flags & DC_EXEC) != 0) {
/* Copy other things which cannot be copied by a command and which shall not stay resetted from the build vehicle command */
new_head->CopyVehicleConfigAndStatistics(old_head);
GroupStatistics::AddProfitLastYear(new_head);
/* Switch vehicle windows/news to the new vehicle, so they are not closed/deleted when the old vehicle is sold */
ChangeVehicleViewports(old_head->index, new_head->index);
+71 -15
View File
@@ -33,11 +33,11 @@
#include "safeguards.h"
void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList *eng_list, uint16 min, uint16 max, EngineID selected_id, bool show_count, GroupID selected_group);
void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, uint16 min, uint16 max, EngineID selected_id, bool show_count, GroupID selected_group);
static bool EngineNumberSorter(const EngineID &a, const EngineID &b)
static bool EngineNumberSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
return Engine::Get(a)->list_position < Engine::Get(b)->list_position;
return Engine::Get(a.engine_id)->list_position < Engine::Get(b.engine_id)->list_position;
}
/**
@@ -113,6 +113,26 @@ class ReplaceVehicleWindow : public Window {
return true;
}
void AddChildren(const GUIEngineList &source, GUIEngineList &target, EngineID parent, int indent, int side)
{
for (const auto &item : source) {
if (item.variant_id != parent || item.engine_id == parent) continue;
const Engine *e = Engine::Get(item.engine_id);
EngineDisplayFlags flags = item.flags;
if (e->display_last_variant != INVALID_ENGINE) flags &= ~EngineDisplayFlags::Shaded;
target.emplace_back(e->display_last_variant == INVALID_ENGINE ? item.engine_id : e->display_last_variant, item.engine_id, flags, indent);
/* Add variants if not folded */
if ((item.flags & (EngineDisplayFlags::HasVariants | EngineDisplayFlags::IsFolded)) == EngineDisplayFlags::HasVariants) {
/* Add this engine again as a child */
if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) {
target.emplace_back(item.engine_id, item.engine_id, EngineDisplayFlags::None, indent + 1);
}
AddChildren(source, target, item.engine_id, indent + 1, side);
}
}
}
/**
* Generate an engines list
@@ -120,12 +140,12 @@ class ReplaceVehicleWindow : public Window {
*/
void GenerateReplaceVehList(bool draw_left)
{
std::vector<EngineID> variants;
EngineID selected_engine = INVALID_ENGINE;
VehicleType type = (VehicleType)this->window_number;
byte side = draw_left ? 0 : 1;
GUIEngineList *list = &this->engines[side];
list->clear();
GUIEngineList list;
for (const Engine *e : Engine::IterateType(type)) {
if (!draw_left && !this->show_hidden_engines && e->IsHidden(_local_company)) continue;
@@ -155,15 +175,37 @@ class ReplaceVehicleWindow : public Window {
if (!CheckAutoreplaceValidity(this->sel_engine[0], eid, _local_company)) continue;
}
list->push_back(eid);
EngineDisplayFlags flags = (side == 0) ? EngineDisplayFlags::None : e->display_flags;
if (side == 1 && eid == this->sel_engine[0]) flags |= EngineDisplayFlags::Shaded;
list.emplace_back(eid, e->info.variant_id, flags, 0);
if (side == 1 && e->info.variant_id != INVALID_ENGINE) variants.push_back(e->info.variant_id);
if (eid == this->sel_engine[side]) selected_engine = eid; // The selected engine is still in the list
}
if (side == 1) {
/* ensure primary engine of variant group is in list */
for (const auto &variant : variants) {
if (std::find(list.begin(), list.end(), variant) == list.end()) {
const Engine *e = Engine::Get(variant);
list.emplace_back(variant, e->info.variant_id, e->display_flags | EngineDisplayFlags::Shaded, 0);
}
}
}
this->sel_engine[side] = selected_engine; // update which engine we selected (the same or none, if it's not in the list anymore)
if (draw_left) {
EngList_Sort(list, &EngineNumberSorter);
EngList_Sort(&list, &EngineNumberSorter);
} else {
_engine_sort_direction = this->descending_sort_order;
EngList_Sort(list, _engine_sort_functions[this->window_number][this->sort_criteria]);
EngList_Sort(&list, _engine_sort_functions[this->window_number][this->sort_criteria]);
}
this->engines[side].clear();
if (side == 1) {
AddChildren(list, this->engines[side], INVALID_ENGINE, 0, side);
} else {
this->engines[side].swap(list);
}
}
@@ -177,7 +219,7 @@ class ReplaceVehicleWindow : public Window {
this->GenerateReplaceVehList(true);
this->vscroll[0]->SetCount((uint)this->engines[0].size());
if (this->reset_sel_engine && this->sel_engine[0] == INVALID_ENGINE && this->engines[0].size() != 0) {
this->sel_engine[0] = this->engines[0][0];
this->sel_engine[0] = this->engines[0][0].engine_id;
}
}
@@ -198,8 +240,8 @@ class ReplaceVehicleWindow : public Window {
this->vscroll[1]->SetCount((uint)this->engines[1].size());
if (this->reset_sel_engine && this->sel_engine[1] != INVALID_ENGINE) {
int position = 0;
for (EngineID &eid : this->engines[1]) {
if (eid == this->sel_engine[1]) break;
for (const auto &item : this->engines[1]) {
if (item.engine_id == this->sel_engine[1]) break;
++position;
}
this->vscroll[1]->ScrollTowards(position);
@@ -433,7 +475,7 @@ public:
EngineID end = static_cast<EngineID>(std::min<size_t>(this->vscroll[side]->GetCapacity() + start, this->engines[side].size()));
/* Do the actual drawing */
DrawEngineList((VehicleType)this->window_number, r, &this->engines[side], start, end, this->sel_engine[side], side == 0, this->sel_group);
DrawEngineList((VehicleType)this->window_number, r, this->engines[side], start, end, this->sel_engine[side], side == 0, this->sel_group);
break;
}
}
@@ -481,8 +523,7 @@ public:
const Engine *e = Engine::Get(this->sel_engine[side]);
TestedEngineDetails ted;
ted.cost = 0;
ted.cargo = e->GetDefaultCargoType();
ted.capacity = e->GetDisplayDefaultCapacity(&ted.mail_capacity);
ted.FillDefaultCapacities(e);
const Rect r = this->GetWidget<NWidgetBase>(side == 0 ? WID_RV_LEFT_DETAILS : WID_RV_RIGHT_DETAILS)->GetCurrentRect()
.Shrink(WidgetDimensions::scaled.frametext, WidgetDimensions::scaled.framerect);
@@ -579,7 +620,22 @@ public:
uint i = this->vscroll[click_side]->GetScrolledRowFromWidget(pt.y, this, widget);
size_t engine_count = this->engines[click_side].size();
EngineID e = engine_count > i ? this->engines[click_side][i] : INVALID_ENGINE;
EngineID e = INVALID_ENGINE;
if (i < engine_count) {
const auto &item = this->engines[click_side][i];
const Rect r = this->GetWidget<NWidgetBase>(widget)->GetCurrentRect().Shrink(WidgetDimensions::scaled.matrix).WithWidth(WidgetDimensions::scaled.hsep_indent * (item.indent + 1), _current_text_dir == TD_RTL);
if ((item.flags & EngineDisplayFlags::HasVariants) != EngineDisplayFlags::None && IsInsideMM(r.left, r.right, pt.x)) {
/* toggle folded flag on engine */
assert(item.variant_id != INVALID_ENGINE);
Engine *engine = Engine::Get(item.variant_id);
engine->display_flags ^= EngineDisplayFlags::IsFolded;
InvalidateWindowData(WC_REPLACE_VEHICLE, (VehicleType)this->window_number, 0); // Update the autoreplace window
InvalidateWindowClassesData(WC_BUILD_VEHICLE); // The build windows needs updating as well
return;
}
if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) e = item.engine_id;
}
/* If Ctrl is pressed on the left side and we don't have any engines of the selected type, stop autoreplacing.
* This is most common when we have finished autoreplacing the engine and want to remove it from the list. */
+6 -1
View File
@@ -367,7 +367,12 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
info->palette_size = ReadDword(buffer); // number of colours in palette
SkipBytes(buffer, header_size - 16); // skip the end of info header
}
if (info->palette_size == 0) info->palette_size = 1 << info->bpp;
uint maximum_palette_size = 1U << info->bpp;
if (info->palette_size == 0) info->palette_size = maximum_palette_size;
/* More palette colours than palette indices is not supported. */
if (info->palette_size > maximum_palette_size) return false;
data->palette = CallocT<Colour>(info->palette_size);
+23 -16
View File
@@ -130,6 +130,23 @@ private:
this->SetWidgetDirty(WID_BBS_BRIDGE_LIST);
}
/**
* Get the StringID to draw in the selection list and set the appropriate DParams.
* @param bridge_data the bridge to get the StringID of.
* @return the StringID.
*/
StringID GetBridgeSelectString(const BuildBridgeData &bridge_data) const
{
SetDParam(0, bridge_data.spec->material);
SetDParam(1, bridge_data.spec->speed);
SetDParam(2, bridge_data.cost);
/* If the bridge has no meaningful speed limit, don't display it. */
if (bridge_data.spec->speed == UINT16_MAX) {
return _game_mode == GM_EDITOR ? STR_SELECT_BRIDGE_INFO_NAME : STR_SELECT_BRIDGE_INFO_NAME_COST;
}
return _game_mode == GM_EDITOR ? STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED : STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST;
}
public:
BuildBridgeWindow(WindowDesc *desc, TileIndex start, TileIndex end, TransportType transport_type, byte road_rail_type, GUIBridgeList *bl) : Window(desc),
start_tile(start),
@@ -183,14 +200,9 @@ public:
case WID_BBS_BRIDGE_LIST: {
Dimension sprite_dim = {0, 0}; // Biggest bridge sprite dimension
Dimension text_dim = {0, 0}; // Biggest text dimension
for (int i = 0; i < (int)this->bridges->size(); i++) {
const BridgeSpec *b = this->bridges->at(i).spec;
sprite_dim = maxdim(sprite_dim, GetSpriteSize(b->sprite));
SetDParam(2, this->bridges->at(i).cost);
SetDParam(1, b->speed);
SetDParam(0, b->material);
text_dim = maxdim(text_dim, GetStringBoundingBox(_game_mode == GM_EDITOR ? STR_SELECT_BRIDGE_SCENEDIT_INFO : STR_SELECT_BRIDGE_INFO));
for (const BuildBridgeData &bridge_data : *this->bridges) {
sprite_dim = maxdim(sprite_dim, GetSpriteSize(bridge_data.spec->sprite));
text_dim = maxdim(text_dim, GetStringBoundingBox(GetBridgeSelectString(bridge_data)));
}
sprite_dim.height++; // Sprite is rendered one pixel down in the matrix field.
text_dim.height++; // Allowing the bottom row pixels to be rendered on the edge of the matrix field.
@@ -224,15 +236,10 @@ public:
case WID_BBS_BRIDGE_LIST: {
Rect tr = r.WithHeight(this->resize.step_height).Shrink(WidgetDimensions::scaled.matrix);
for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < (int)this->bridges->size(); i++) {
const BridgeSpec *b = this->bridges->at(i).spec;
SetDParam(2, this->bridges->at(i).cost);
SetDParam(1, b->speed);
SetDParam(0, b->material);
const BuildBridgeData &bridge_data = this->bridges->at(i);
const BridgeSpec *b = bridge_data.spec;
DrawSprite(b->sprite, b->pal, tr.left, tr.bottom - GetSpriteSize(b->sprite).height);
DrawStringMultiLine(tr.Indent(this->bridgetext_offset, false),
_game_mode == GM_EDITOR ? STR_SELECT_BRIDGE_SCENEDIT_INFO : STR_SELECT_BRIDGE_INFO);
DrawStringMultiLine(tr.Indent(this->bridgetext_offset, false), GetBridgeSelectString(bridge_data));
tr = tr.Translate(0, this->resize.step_height);
}
break;
+232 -118
View File
@@ -106,9 +106,9 @@ static CargoID _engine_sort_last_cargo_criteria[] = {CF_ANY, CF_ANY, CF_ANY, CF_
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool EngineNumberSorter(const EngineID &a, const EngineID &b)
static bool EngineNumberSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
int r = Engine::Get(a)->list_position - Engine::Get(b)->list_position;
int r = Engine::Get(a.engine_id)->list_position - Engine::Get(b.engine_id)->list_position;
return _engine_sort_direction ? r > 0 : r < 0;
}
@@ -119,10 +119,10 @@ static bool EngineNumberSorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool EngineIntroDateSorter(const EngineID &a, const EngineID &b)
static bool EngineIntroDateSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
const int va = Engine::Get(a)->intro_date;
const int vb = Engine::Get(b)->intro_date;
const int va = Engine::Get(a.engine_id)->intro_date;
const int vb = Engine::Get(b.engine_id)->intro_date;
const int r = va - vb;
/* Use EngineID to sort instead since we want consistent sorting */
@@ -139,19 +139,19 @@ static EngineID _last_engine[2] = { INVALID_ENGINE, INVALID_ENGINE };
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool EngineNameSorter(const EngineID &a, const EngineID &b)
static bool EngineNameSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
static char last_name[2][64] = { "", "" };
if (a != _last_engine[0]) {
_last_engine[0] = a;
SetDParam(0, a);
if (a.engine_id != _last_engine[0]) {
_last_engine[0] = a.engine_id;
SetDParam(0, a.engine_id);
GetString(last_name[0], STR_ENGINE_NAME, lastof(last_name[0]));
}
if (b != _last_engine[1]) {
_last_engine[1] = b;
SetDParam(0, b);
if (b.engine_id != _last_engine[1]) {
_last_engine[1] = b.engine_id;
SetDParam(0, b.engine_id);
GetString(last_name[1], STR_ENGINE_NAME, lastof(last_name[1]));
}
@@ -168,10 +168,10 @@ static bool EngineNameSorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool EngineReliabilitySorter(const EngineID &a, const EngineID &b)
static bool EngineReliabilitySorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
const int va = Engine::Get(a)->reliability;
const int vb = Engine::Get(b)->reliability;
const int va = Engine::Get(a.engine_id)->reliability;
const int vb = Engine::Get(b.engine_id)->reliability;
const int r = va - vb;
/* Use EngineID to sort instead since we want consistent sorting */
@@ -185,10 +185,10 @@ static bool EngineReliabilitySorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool EngineCostSorter(const EngineID &a, const EngineID &b)
static bool EngineCostSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
Money va = Engine::Get(a)->GetCost();
Money vb = Engine::Get(b)->GetCost();
Money va = Engine::Get(a.engine_id)->GetCost();
Money vb = Engine::Get(b.engine_id)->GetCost();
int r = ClampToI32(va - vb);
/* Use EngineID to sort instead since we want consistent sorting */
@@ -202,10 +202,10 @@ static bool EngineCostSorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool EngineSpeedSorter(const EngineID &a, const EngineID &b)
static bool EngineSpeedSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
int va = Engine::Get(a)->GetDisplayMaxSpeed();
int vb = Engine::Get(b)->GetDisplayMaxSpeed();
int va = Engine::Get(a.engine_id)->GetDisplayMaxSpeed();
int vb = Engine::Get(b.engine_id)->GetDisplayMaxSpeed();
int r = va - vb;
/* Use EngineID to sort instead since we want consistent sorting */
@@ -219,10 +219,10 @@ static bool EngineSpeedSorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool EnginePowerSorter(const EngineID &a, const EngineID &b)
static bool EnginePowerSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
int va = Engine::Get(a)->GetPower();
int vb = Engine::Get(b)->GetPower();
int va = Engine::Get(a.engine_id)->GetPower();
int vb = Engine::Get(b.engine_id)->GetPower();
int r = va - vb;
/* Use EngineID to sort instead since we want consistent sorting */
@@ -236,10 +236,10 @@ static bool EnginePowerSorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool EngineTractiveEffortSorter(const EngineID &a, const EngineID &b)
static bool EngineTractiveEffortSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
int va = Engine::Get(a)->GetDisplayMaxTractiveEffort();
int vb = Engine::Get(b)->GetDisplayMaxTractiveEffort();
int va = Engine::Get(a.engine_id)->GetDisplayMaxTractiveEffort();
int vb = Engine::Get(b.engine_id)->GetDisplayMaxTractiveEffort();
int r = va - vb;
/* Use EngineID to sort instead since we want consistent sorting */
@@ -253,10 +253,10 @@ static bool EngineTractiveEffortSorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool EngineRunningCostSorter(const EngineID &a, const EngineID &b)
static bool EngineRunningCostSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
Money va = Engine::Get(a)->GetRunningCost();
Money vb = Engine::Get(b)->GetRunningCost();
Money va = Engine::Get(a.engine_id)->GetRunningCost();
Money vb = Engine::Get(b.engine_id)->GetRunningCost();
int r = ClampToI32(va - vb);
/* Use EngineID to sort instead since we want consistent sorting */
@@ -270,10 +270,10 @@ static bool EngineRunningCostSorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool EnginePowerVsRunningCostSorter(const EngineID &a, const EngineID &b)
static bool EnginePowerVsRunningCostSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
const Engine *e_a = Engine::Get(a);
const Engine *e_b = Engine::Get(b);
const Engine *e_a = Engine::Get(a.engine_id);
const Engine *e_b = Engine::Get(b.engine_id);
uint p_a = e_a->GetPower();
uint p_b = e_b->GetPower();
Money r_a = e_a->GetRunningCost();
@@ -312,13 +312,13 @@ static bool EnginePowerVsRunningCostSorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool TrainEngineCapacitySorter(const EngineID &a, const EngineID &b)
static bool TrainEngineCapacitySorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
const RailVehicleInfo *rvi_a = RailVehInfo(a);
const RailVehicleInfo *rvi_b = RailVehInfo(b);
const RailVehicleInfo *rvi_a = RailVehInfo(a.engine_id);
const RailVehicleInfo *rvi_b = RailVehInfo(b.engine_id);
int va = GetTotalCapacityOfArticulatedParts(a) * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
int vb = GetTotalCapacityOfArticulatedParts(b) * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
int va = GetTotalCapacityOfArticulatedParts(a.engine_id) * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
int vb = GetTotalCapacityOfArticulatedParts(b.engine_id) * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
int r = va - vb;
/* Use EngineID to sort instead since we want consistent sorting */
@@ -332,10 +332,10 @@ static bool TrainEngineCapacitySorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool TrainEnginesThenWagonsSorter(const EngineID &a, const EngineID &b)
static bool TrainEnginesThenWagonsSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
int val_a = (RailVehInfo(a)->railveh_type == RAILVEH_WAGON ? 1 : 0);
int val_b = (RailVehInfo(b)->railveh_type == RAILVEH_WAGON ? 1 : 0);
int val_a = (RailVehInfo(a.engine_id)->railveh_type == RAILVEH_WAGON ? 1 : 0);
int val_b = (RailVehInfo(b.engine_id)->railveh_type == RAILVEH_WAGON ? 1 : 0);
int r = val_a - val_b;
/* Use EngineID to sort instead since we want consistent sorting */
@@ -351,10 +351,10 @@ static bool TrainEnginesThenWagonsSorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool RoadVehEngineCapacitySorter(const EngineID &a, const EngineID &b)
static bool RoadVehEngineCapacitySorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
int va = GetTotalCapacityOfArticulatedParts(a);
int vb = GetTotalCapacityOfArticulatedParts(b);
int va = GetTotalCapacityOfArticulatedParts(a.engine_id);
int vb = GetTotalCapacityOfArticulatedParts(b.engine_id);
int r = va - vb;
/* Use EngineID to sort instead since we want consistent sorting */
@@ -370,10 +370,10 @@ static bool RoadVehEngineCapacitySorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool ShipEngineCapacitySorter(const EngineID &a, const EngineID &b)
static bool ShipEngineCapacitySorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
const Engine *e_a = Engine::Get(a);
const Engine *e_b = Engine::Get(b);
const Engine *e_a = Engine::Get(a.engine_id);
const Engine *e_b = Engine::Get(b.engine_id);
int va = e_a->GetDisplayDefaultCapacity();
int vb = e_b->GetDisplayDefaultCapacity();
@@ -392,10 +392,10 @@ static bool ShipEngineCapacitySorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool AircraftEngineCargoSorter(const EngineID &a, const EngineID &b)
static bool AircraftEngineCargoSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
const Engine *e_a = Engine::Get(a);
const Engine *e_b = Engine::Get(b);
const Engine *e_a = Engine::Get(a.engine_id);
const Engine *e_b = Engine::Get(b.engine_id);
uint16 mail_a, mail_b;
int va = e_a->GetDisplayDefaultCapacity(&mail_a);
@@ -420,10 +420,10 @@ static bool AircraftEngineCargoSorter(const EngineID &a, const EngineID &b)
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool AircraftRangeSorter(const EngineID &a, const EngineID &b)
static bool AircraftRangeSorter(const GUIEngineListItem &a, const GUIEngineListItem &b)
{
uint16 r_a = Engine::Get(a)->GetRange();
uint16 r_b = Engine::Get(b)->GetRange();
uint16 r_a = Engine::Get(a.engine_id)->GetRange();
uint16 r_b = Engine::Get(b.engine_id)->GetRange();
int r = r_a - r_b;
@@ -537,14 +537,14 @@ const StringID _engine_sort_listing[][12] = {{
}};
/** Filters vehicles by cargo and engine (in case of rail vehicle). */
static bool CDECL CargoAndEngineFilter(const EngineID *eid, const CargoID cid)
static bool CDECL CargoAndEngineFilter(const GUIEngineListItem *item, const CargoID cid)
{
if (cid == CF_ANY) {
return true;
} else if (cid == CF_ENGINES) {
return Engine::Get(*eid)->GetPower() != 0;
return Engine::Get(item->engine_id)->GetPower() != 0;
} else {
CargoTypes refit_mask = GetUnionOfArticulatedRefitMasks(*eid, true) & _standard_cargo_mask;
CargoTypes refit_mask = GetUnionOfArticulatedRefitMasks(item->engine_id, true) & _standard_cargo_mask;
return (cid == CF_NONE ? refit_mask == 0 : HasBit(refit_mask, cid));
}
}
@@ -553,18 +553,29 @@ static GUIEngineList::FilterFunction * const _filter_funcs[] = {
&CargoAndEngineFilter,
};
static int DrawCargoCapacityInfo(int left, int right, int y, EngineID engine, TestedEngineDetails &te)
static uint GetCargoWeight(const CargoArray &cap, VehicleType vtype)
{
CargoArray cap;
CargoTypes refits;
GetArticulatedVehicleCargoesAndRefits(engine, &cap, &refits, te.cargo, te.capacity);
uint weight = 0;
for (CargoID c = 0; c < NUM_CARGO; c++) {
if (cap[c] == 0) continue;
if (cap[c] != 0) {
if (vtype == VEH_TRAIN) {
weight += CargoSpec::Get(c)->WeightOfNUnitsInTrain(cap[c]);
} else {
weight += CargoSpec::Get(c)->WeightOfNUnits(cap[c]);
}
}
}
return weight;
}
static int DrawCargoCapacityInfo(int left, int right, int y, TestedEngineDetails &te, bool refittable)
{
for (CargoID c = 0; c < NUM_CARGO; c++) {
if (te.all_capacities[c] == 0) continue;
SetDParam(0, c);
SetDParam(1, cap[c]);
SetDParam(2, HasBit(refits, c) ? STR_PURCHASE_INFO_REFITTABLE : STR_EMPTY);
SetDParam(1, te.all_capacities[c]);
SetDParam(2, refittable ? STR_PURCHASE_INFO_REFITTABLE : STR_EMPTY);
DrawString(left, right, y, STR_PURCHASE_INFO_CAPACITY);
y += FONT_HEIGHT_NORMAL;
}
@@ -591,8 +602,7 @@ static int DrawRailWagonPurchaseInfo(int left, int right, int y, EngineID engine
/* Wagon weight - (including cargo) */
uint weight = e->GetDisplayWeight();
SetDParam(0, weight);
uint cargo_weight = (e->CanCarryCargo() ? CargoSpec::Get(te.cargo)->WeightOfNUnitsInTrain(te.capacity) : 0);
SetDParam(1, cargo_weight + weight);
SetDParam(1, GetCargoWeight(te.all_capacities, VEH_TRAIN) + weight);
DrawString(left, right, y, STR_PURCHASE_INFO_WEIGHT_CWEIGHT);
y += FONT_HEIGHT_NORMAL;
@@ -685,8 +695,7 @@ static int DrawRoadVehPurchaseInfo(int left, int right, int y, EngineID engine_n
/* Road vehicle weight - (including cargo) */
int16 weight = e->GetDisplayWeight();
SetDParam(0, weight);
uint cargo_weight = (e->CanCarryCargo() ? CargoSpec::Get(te.cargo)->WeightOfNUnits(te.capacity) : 0);
SetDParam(1, cargo_weight + weight);
SetDParam(1, GetCargoWeight(te.all_capacities, VEH_ROAD) + weight);
DrawString(left, right, y, STR_PURCHASE_INFO_WEIGHT_CWEIGHT);
y += FONT_HEIGHT_NORMAL;
@@ -868,6 +877,21 @@ static uint ShowAdditionalText(int left, int right, int y, EngineID engine)
return result;
}
void TestedEngineDetails::FillDefaultCapacities(const Engine *e)
{
this->cargo = e->GetDefaultCargoType();
if (e->type == VEH_TRAIN || e->type == VEH_ROAD) {
this->all_capacities = GetCapacityOfArticulatedParts(e->index);
this->capacity = this->all_capacities[this->cargo];
this->mail_capacity = 0;
} else {
this->capacity = e->GetDisplayDefaultCapacity(&this->mail_capacity);
this->all_capacities[this->cargo] = this->capacity;
this->all_capacities[CT_MAIL] = this->mail_capacity;
}
if (this->all_capacities.GetCount() == 0) this->cargo = CT_INVALID;
}
/**
* Draw the purchase info details of a vehicle at a given location.
* @param left,right,y location where to draw the info
@@ -909,7 +933,7 @@ int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number,
if (articulated_cargo) {
/* Cargo type + capacity, or N/A */
int new_y = DrawCargoCapacityInfo(left, right, y, engine_number, te);
int new_y = DrawCargoCapacityInfo(left, right, y, te, refittable);
if (new_y == y) {
SetDParam(0, CT_INVALID);
@@ -962,21 +986,22 @@ int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number,
* @param show_count Whether to show the amount of engines or not
* @param selected_group the group to list the engines of
*/
void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList *eng_list, uint16 min, uint16 max, EngineID selected_id, bool show_count, GroupID selected_group)
void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, uint16 min, uint16 max, EngineID selected_id, bool show_count, GroupID selected_group)
{
static const int sprite_y_offsets[] = { -1, -1, -2, -2 };
/* Obligatory sanity checks! */
assert(max <= eng_list->size());
assert(max <= eng_list.size());
bool rtl = _current_text_dir == TD_RTL;
int step_size = GetEngineListHeight(type);
int sprite_left = GetVehicleImageCellSize(type, EIT_PURCHASE).extend_left;
int sprite_right = GetVehicleImageCellSize(type, EIT_PURCHASE).extend_right;
int sprite_width = sprite_left + sprite_right;
int circle_width = std::max(GetScaledSpriteSize(SPR_CIRCLE_FOLDED).width, GetScaledSpriteSize(SPR_CIRCLE_UNFOLDED).width);
int linecolour = _colour_gradient[COLOUR_ORANGE][4];
Rect ir = r.WithHeight(step_size).Shrink(WidgetDimensions::scaled.matrix);
int sprite_x = ir.WithWidth(sprite_width, rtl).left + sprite_left;
int sprite_y_offset = ScaleSpriteTrad(sprite_y_offsets[type]) + ir.Height() / 2;
Dimension replace_icon = {0, 0};
@@ -987,7 +1012,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList *eng_li
count_width = GetStringBoundingBox(STR_TINY_BLACK_COMA).width;
}
Rect tr = ir.Indent(sprite_width + WidgetDimensions::scaled.hsep_wide, rtl); // Name position
Rect tr = ir.Indent(circle_width + WidgetDimensions::scaled.hsep_normal + sprite_width + WidgetDimensions::scaled.hsep_wide, rtl); // Name position
Rect cr = tr.Indent(replace_icon.width + WidgetDimensions::scaled.hsep_wide, !rtl).WithWidth(count_width, !rtl); // Count position
Rect rr = tr.WithWidth(replace_icon.width, !rtl); // Replace icon position
if (show_count) tr = tr.Indent(count_width + WidgetDimensions::scaled.hsep_normal + replace_icon.width + WidgetDimensions::scaled.hsep_wide, !rtl);
@@ -998,22 +1023,40 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList *eng_li
int y = ir.top;
for (; min < max; min++, y += step_size) {
const EngineID engine = (*eng_list)[min];
const auto &item = eng_list[min];
uint indent = item.indent * WidgetDimensions::scaled.hsep_indent;
bool has_variants = (item.flags & EngineDisplayFlags::HasVariants) != EngineDisplayFlags::None;
bool is_folded = (item.flags & EngineDisplayFlags::IsFolded) != EngineDisplayFlags::None;
bool shaded = (item.flags & EngineDisplayFlags::Shaded) != EngineDisplayFlags::None;
/* Note: num_engines is only used in the autoreplace GUI, so it is correct to use _local_company here. */
const uint num_engines = GetGroupNumEngines(_local_company, selected_group, engine);
const uint num_engines = GetGroupNumEngines(_local_company, selected_group, item.engine_id);
const Engine *e = Engine::Get(engine);
const Engine *e = Engine::Get(item.engine_id);
bool hidden = HasBit(e->company_hidden, _local_company);
StringID str = hidden ? STR_HIDDEN_ENGINE_NAME : STR_ENGINE_NAME;
TextColour tc = (engine == selected_id) ? TC_WHITE : (TC_NO_SHADE | (hidden ? TC_GREY : TC_BLACK));
TextColour tc = (item.engine_id == selected_id) ? TC_WHITE : (TC_NO_SHADE | ((hidden | shaded) ? TC_GREY : TC_BLACK));
SetDParam(0, engine);
DrawString(tr.left, tr.right, y + normal_text_y_offset, str, tc);
DrawVehicleEngine(r.left, r.right, sprite_x, y + sprite_y_offset, engine, (show_count && num_engines == 0) ? PALETTE_CRASH : GetEnginePalette(engine, _local_company), EIT_PURCHASE);
SetDParam(0, item.engine_id);
Rect itr = tr.Indent(indent, rtl);
DrawString(itr.left, itr.right, y + normal_text_y_offset, str, tc);
int sprite_x = ir.Indent(indent + circle_width + WidgetDimensions::scaled.hsep_normal, rtl).WithWidth(sprite_width, rtl).left + sprite_left;
DrawVehicleEngine(r.left, r.right, sprite_x, y + sprite_y_offset, item.engine_id, (show_count && num_engines == 0) ? PALETTE_CRASH : GetEnginePalette(item.engine_id, _local_company), EIT_PURCHASE);
if (show_count) {
SetDParam(0, num_engines);
DrawString(cr.left, cr.right, y + small_text_y_offset, STR_TINY_BLACK_COMA, TC_FROMSTRING, SA_RIGHT | SA_FORCE);
if (EngineHasReplacementForCompany(Company::Get(_local_company), engine, selected_group)) DrawSprite(SPR_GROUP_REPLACE_ACTIVE, num_engines == 0 ? PALETTE_CRASH : PAL_NONE, rr.left, y + replace_icon_y_offset);
if (EngineHasReplacementForCompany(Company::Get(_local_company), item.engine_id, selected_group)) DrawSprite(SPR_GROUP_REPLACE_ACTIVE, num_engines == 0 ? PALETTE_CRASH : PAL_NONE, rr.left, y + replace_icon_y_offset);
}
if (has_variants) {
Rect fr = ir.Indent(indent, rtl).WithWidth(circle_width, rtl);
DrawSpriteIgnorePadding(is_folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, {fr.left, y, fr.right, y + ir.Height() - 1}, false, SA_CENTER);
}
if (indent > 0) {
/* Draw tree lines */
Rect fr = ir.Indent(indent - WidgetDimensions::scaled.hsep_indent, rtl).WithWidth(circle_width, rtl);
int ycenter = y + normal_text_y_offset + FONT_HEIGHT_NORMAL / 2;
bool continues = (min + 1U) < eng_list.size() && eng_list[min + 1].indent == item.indent;
GfxDrawLine(fr.left + circle_width / 2, y - WidgetDimensions::scaled.matrix.top, fr.left + circle_width / 2, continues ? y - WidgetDimensions::scaled.matrix.top + step_size - 1 : ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top);
GfxDrawLine(fr.left + circle_width / 2, ycenter, fr.right, ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top);
}
}
}
@@ -1078,6 +1121,27 @@ struct BuildVehicleWindow : Window {
}
}
void AddChildren(const GUIEngineList &source, EngineID parent, int indent)
{
for (const auto &item : source) {
if (item.variant_id != parent || item.engine_id == parent) continue;
const Engine *e = Engine::Get(item.engine_id);
EngineDisplayFlags flags = item.flags;
if (e->display_last_variant != INVALID_ENGINE) flags &= ~EngineDisplayFlags::Shaded;
this->eng_list.emplace_back(e->display_last_variant == INVALID_ENGINE ? item.engine_id : e->display_last_variant, item.engine_id, flags, indent);
/* Add variants if not folded */
if ((item.flags & (EngineDisplayFlags::HasVariants | EngineDisplayFlags::IsFolded)) == EngineDisplayFlags::HasVariants) {
/* Add this engine again as a child */
if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) {
this->eng_list.emplace_back(item.engine_id, item.engine_id, EngineDisplayFlags::None, indent + 1);
}
AddChildren(source, item.engine_id, indent + 1);
}
}
}
BuildVehicleWindow(WindowDesc *desc, TileIndex tile, VehicleType type) : Window(desc)
{
this->vehicle_type = type;
@@ -1123,12 +1187,12 @@ struct BuildVehicleWindow : Window {
this->eng_list.ForceRebuild();
this->GenerateBuildList(); // generate the list, since we need it in the next line
/* Select the first engine in the list as default when opening the window */
if (this->eng_list.size() > 0) {
this->SelectEngine(this->eng_list[0]);
} else {
this->SelectEngine(INVALID_ENGINE);
}
/* Select the first unshaded engine in the list as default when opening the window */
EngineID engine = INVALID_ENGINE;
auto it = std::find_if(this->eng_list.begin(), this->eng_list.end(), [&](GUIEngineListItem &item){ return (item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None; });
if (it != this->eng_list.end()) engine = it->engine_id;
this->SelectEngine(engine);
}
/** Set the filter type according to the depot type */
@@ -1221,28 +1285,23 @@ struct BuildVehicleWindow : Window {
if (this->sel_engine == INVALID_ENGINE) return;
const Engine *e = Engine::Get(this->sel_engine);
if (!e->CanCarryCargo()) {
this->te.cost = 0;
this->te.cargo = CT_INVALID;
return;
}
if (!this->listview_mode) {
/* Query for cost and refitted capacity */
auto [ret, veh_id, refit_capacity, refit_mail] = Command<CMD_BUILD_VEHICLE>::Do(DC_QUERY_COST, this->window_number, this->sel_engine, true, cargo, INVALID_CLIENT_ID);
auto [ret, veh_id, refit_capacity, refit_mail, cargo_capacities] = Command<CMD_BUILD_VEHICLE>::Do(DC_QUERY_COST, this->window_number, this->sel_engine, true, cargo, INVALID_CLIENT_ID);
if (ret.Succeeded()) {
this->te.cost = ret.GetCost() - e->GetCost();
this->te.capacity = refit_capacity;
this->te.mail_capacity = refit_mail;
this->te.cargo = (cargo == CT_INVALID) ? e->GetDefaultCargoType() : cargo;
this->te.all_capacities = cargo_capacities;
return;
}
}
/* Purchase test was not possible or failed, fill in the defaults instead. */
this->te.cost = 0;
this->te.capacity = e->GetDisplayDefaultCapacity(&this->te.mail_capacity);
this->te.cargo = e->GetDefaultCargoType();
this->te.FillDefaultCapacities(e);
}
void OnInit() override
@@ -1257,7 +1316,7 @@ struct BuildVehicleWindow : Window {
if (0 == this->eng_list.size()) { // no engine passed through the filter, invalidate the previously selected engine
this->SelectEngine(INVALID_ENGINE);
} else if (std::find(this->eng_list.begin(), this->eng_list.end(), this->sel_engine) == this->eng_list.end()) { // previously selected engine didn't pass the filter, select the first engine of the list
this->SelectEngine(this->eng_list[0]);
this->SelectEngine(this->eng_list[0].engine_id);
}
}
@@ -1265,17 +1324,18 @@ struct BuildVehicleWindow : Window {
bool FilterSingleEngine(EngineID eid)
{
CargoID filter_type = this->cargo_filter[this->cargo_filter_criteria];
return CargoAndEngineFilter(&eid, filter_type);
GUIEngineListItem item = {eid, eid, EngineDisplayFlags::None, 0};
return CargoAndEngineFilter(&item, filter_type);
}
/* Figure out what train EngineIDs to put in the list */
void GenerateBuildTrainList()
void GenerateBuildTrainList(GUIEngineList &list)
{
std::vector<EngineID> variants;
EngineID sel_id = INVALID_ENGINE;
int num_engines = 0;
int num_wagons = 0;
size_t num_engines = 0;
this->eng_list.clear();
list.clear();
/* Make list of all available train engines and wagons.
* Also check to see if the previously selected engine is still available,
@@ -1292,17 +1352,22 @@ struct BuildVehicleWindow : Window {
/* Filter now! So num_engines and num_wagons is valid */
if (!FilterSingleEngine(eid)) continue;
this->eng_list.push_back(eid);
if (rvi->railveh_type != RAILVEH_WAGON) {
num_engines++;
} else {
num_wagons++;
}
list.emplace_back(eid, e->info.variant_id, e->display_flags, 0);
if (rvi->railveh_type != RAILVEH_WAGON) num_engines++;
if (e->info.variant_id != eid && e->info.variant_id != INVALID_ENGINE) variants.push_back(e->info.variant_id);
if (eid == this->sel_engine) sel_id = eid;
}
/* ensure primary engine of variant group is in list */
for (const auto &variant : variants) {
if (std::find(list.begin(), list.end(), variant) == list.end()) {
const Engine *e = Engine::Get(variant);
list.emplace_back(variant, e->info.variant_id, e->display_flags | EngineDisplayFlags::Shaded, 0);
if (e->u.rail.railveh_type != RAILVEH_WAGON) num_engines++;
}
}
this->SelectEngine(sel_id);
/* invalidate cached values for name sorter - engine names could change */
@@ -1310,14 +1375,14 @@ struct BuildVehicleWindow : Window {
/* make engines first, and then wagons, sorted by selected sort_criteria */
_engine_sort_direction = false;
EngList_Sort(&this->eng_list, TrainEnginesThenWagonsSorter);
EngList_Sort(&list, TrainEnginesThenWagonsSorter);
/* and then sort engines */
_engine_sort_direction = this->descending_sort_order;
EngList_SortPartial(&this->eng_list, _engine_sort_functions[0][this->sort_criteria], 0, num_engines);
EngList_SortPartial(&list, _engine_sort_functions[0][this->sort_criteria], 0, num_engines);
/* and finally sort wagons */
EngList_SortPartial(&this->eng_list, _engine_sort_functions[0][this->sort_criteria], num_engines, num_wagons);
EngList_SortPartial(&list, _engine_sort_functions[0][this->sort_criteria], num_engines, list.size() - num_engines);
}
/* Figure out what road vehicle EngineIDs to put in the list */
@@ -1333,7 +1398,7 @@ struct BuildVehicleWindow : Window {
if (!IsEngineBuildable(eid, VEH_ROAD, _local_company)) continue;
if (this->filter.roadtype != INVALID_ROADTYPE && !HasPowerOnRoad(e->u.road.roadtype, this->filter.roadtype)) continue;
this->eng_list.push_back(eid);
this->eng_list.emplace_back(eid, e->info.variant_id, e->display_flags, 0);
if (eid == this->sel_engine) sel_id = eid;
}
@@ -1350,7 +1415,7 @@ struct BuildVehicleWindow : Window {
if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue;
EngineID eid = e->index;
if (!IsEngineBuildable(eid, VEH_SHIP, _local_company)) continue;
this->eng_list.push_back(eid);
this->eng_list.emplace_back(eid, e->info.variant_id, e->display_flags, 0);
if (eid == this->sel_engine) sel_id = eid;
}
@@ -1377,7 +1442,7 @@ struct BuildVehicleWindow : Window {
/* First VEH_END window_numbers are fake to allow a window open for all different types at once */
if (!this->listview_mode && !CanVehicleUseStation(eid, st)) continue;
this->eng_list.push_back(eid);
this->eng_list.emplace_back(eid, e->info.variant_id, e->display_flags, 0);
if (eid == this->sel_engine) sel_id = eid;
}
@@ -1392,13 +1457,18 @@ struct BuildVehicleWindow : Window {
/* Update filter type in case the road/railtype of the depot got converted */
this->UpdateFilterByTile();
this->eng_list.clear();
GUIEngineList list;
switch (this->vehicle_type) {
default: NOT_REACHED();
case VEH_TRAIN:
this->GenerateBuildTrainList();
this->GenerateBuildTrainList(list);
AddChildren(list, INVALID_ENGINE, 0);
this->eng_list.shrink_to_fit();
this->eng_list.RebuildDone();
return; // trains should not reach the last sorting
return;
case VEH_ROAD:
this->GenerateBuildRoadVehList();
break;
@@ -1412,9 +1482,23 @@ struct BuildVehicleWindow : Window {
this->FilterEngineList();
/* ensure primary engine of variant group is in list after filtering */
std::vector<EngineID> variants;
for (const auto &item : this->eng_list) {
if (item.engine_id != item.variant_id && item.variant_id != INVALID_ENGINE) variants.push_back(item.variant_id);
}
for (const auto &variant : variants) {
if (std::find(this->eng_list.begin(), this->eng_list.end(), variant) == this->eng_list.end()) {
const Engine *e = Engine::Get(variant);
this->eng_list.emplace_back(variant, e->info.variant_id, e->display_flags | EngineDisplayFlags::Shaded, 0);
}
}
_engine_sort_direction = this->descending_sort_order;
EngList_Sort(&this->eng_list, _engine_sort_functions[this->vehicle_type][this->sort_criteria]);
this->eng_list.swap(list);
AddChildren(list, INVALID_ENGINE, 0);
this->eng_list.shrink_to_fit();
this->eng_list.RebuildDone();
}
@@ -1440,7 +1524,23 @@ struct BuildVehicleWindow : Window {
case WID_BV_LIST: {
uint i = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_BV_LIST);
size_t num_items = this->eng_list.size();
this->SelectEngine((i < num_items) ? this->eng_list[i] : INVALID_ENGINE);
EngineID e = INVALID_ENGINE;
if (i < num_items) {
const auto &item = this->eng_list[i];
const Rect r = this->GetWidget<NWidgetBase>(widget)->GetCurrentRect().Shrink(WidgetDimensions::scaled.matrix).WithWidth(WidgetDimensions::scaled.hsep_indent * (item.indent + 1), _current_text_dir == TD_RTL);
if ((item.flags & EngineDisplayFlags::HasVariants) != EngineDisplayFlags::None && IsInsideMM(r.left, r.right, pt.x)) {
/* toggle folded flag on engine */
assert(item.variant_id != INVALID_ENGINE);
Engine *engine = Engine::Get(item.variant_id);
engine->display_flags ^= EngineDisplayFlags::IsFolded;
InvalidateWindowData(WC_REPLACE_VEHICLE, this->vehicle_type, 0); // Update the autoreplace window
InvalidateWindowClassesData(WC_BUILD_VEHICLE); // The build windows needs updating as well
return;
}
if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) e = item.engine_id;
}
this->SelectEngine(e);
this->SetDirty();
if (_ctrl_pressed) {
this->OnClick(pt, WID_BV_SHOW_HIDE, 1);
@@ -1476,6 +1576,20 @@ struct BuildVehicleWindow : Window {
} else {
Command<CMD_BUILD_VEHICLE>::Post(GetCmdBuildVehMsg(this->vehicle_type), CcBuildPrimaryVehicle, this->window_number, sel_eng, true, cargo, INVALID_CLIENT_ID);
}
/* Update last used variant and refresh if necessary. */
bool refresh = false;
int recursion = 10; /* In case of infinite loop */
for (Engine *e = Engine::Get(sel_eng); recursion > 0; e = Engine::Get(e->info.variant_id), --recursion) {
refresh |= (e->display_last_variant != sel_eng);
e->display_last_variant = sel_eng;
if (e->info.variant_id == INVALID_ENGINE) break;
}
if (refresh) {
InvalidateWindowData(WC_REPLACE_VEHICLE, this->vehicle_type, 0); // Update the autoreplace window
InvalidateWindowClassesData(WC_BUILD_VEHICLE); // The build windows needs updating as well
return;
}
}
break;
}
@@ -1589,7 +1703,7 @@ struct BuildVehicleWindow : Window {
DrawEngineList(
this->vehicle_type,
r,
&this->eng_list,
this->eng_list,
this->vscroll->GetPosition(),
static_cast<uint16>(std::min<size_t>(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->eng_list.size())),
this->sel_engine,
+1
View File
@@ -331,6 +331,7 @@ enum Commands : uint16 {
CMD_MOVE_ORDER, ///< move an order
CMD_CHANGE_TIMETABLE, ///< change the timetable for a vehicle
CMD_BULK_CHANGE_TIMETABLE, ///< change the timetable for all orders of a vehicle
CMD_SET_VEHICLE_ON_TIME, ///< set the vehicle on time feature (timetable)
CMD_AUTOFILL_TIMETABLE, ///< autofill the timetable
CMD_SET_TIMETABLE_START, ///< set the date that a timetable should start
+2 -1
View File
@@ -560,7 +560,8 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY)
ResetCompanyLivery(c);
_company_colours[c->index] = (Colours)c->colour;
c->money = c->current_loan = (std::min<int64>(INITIAL_LOAN, _economy.max_loan) * _economy.inflation_prices >> 16) / 50000 * 50000;
/* Scale the initial loan based on the inflation rounded down to the loan interval. The maximum loan has already been inflation adjusted. */
c->money = c->current_loan = std::min<int64>((INITIAL_LOAN * _economy.inflation_prices >> 16) / LOAN_INTERVAL * LOAN_INTERVAL, _economy.max_loan);
std::fill(c->share_owners.begin(), c->share_owners.end(), INVALID_OWNER);
+80 -2
View File
@@ -23,6 +23,7 @@
#include "settings_func.h"
#include "fios.h"
#include "fileio_func.h"
#include "fontcache.h"
#include "screenshot.h"
#include "genworld.h"
#include "strings_func.h"
@@ -453,8 +454,8 @@ DEF_CONSOLE_CMD(ConRemove)
_console_file_list.ValidateFileList();
const FiosItem *item = _console_file_list.FindItem(file);
if (item != nullptr) {
if (!FiosDelete(item->name)) {
IConsolePrint(CC_ERROR, "Failed to delete '{}'.", file);
if (unlink(item->name) != 0) {
IConsolePrint(CC_ERROR, "Failed to delete '{}'.", item->name);
}
} else {
IConsolePrint(CC_ERROR, "'{}' could not be found.", file);
@@ -1982,6 +1983,82 @@ DEF_CONSOLE_CMD(ConContent)
}
#endif /* defined(WITH_ZLIB) */
DEF_CONSOLE_CMD(ConFont)
{
if (argc == 0) {
IConsolePrint(CC_HELP, "Manage the fonts configuration.");
IConsolePrint(CC_HELP, "Usage 'font'.");
IConsolePrint(CC_HELP, " Print out the fonts configuration.");
IConsolePrint(CC_HELP, "Usage 'font [medium|small|large|mono] [<name>] [<size>] [aa|noaa]'.");
IConsolePrint(CC_HELP, " Change the configuration for a font.");
IConsolePrint(CC_HELP, " Omitting an argument will keep the current value.");
IConsolePrint(CC_HELP, " Set <name> to \"\" for the sprite font (size and aa have no effect on sprite font).");
return true;
}
FontSize argfs;
for (argfs = FS_BEGIN; argfs < FS_END; argfs++) {
if (argc > 1 && strcasecmp(argv[1], FontSizeToName(argfs)) == 0) break;
}
/* First argument must be a FontSize. */
if (argc > 1 && argfs == FS_END) return false;
if (argc > 2) {
FontCacheSubSetting *setting = GetFontCacheSubSetting(argfs);
std::string font = setting->font;
uint size = setting->size;
bool aa = setting->aa;
byte arg_index = 2;
if (argc > arg_index) {
/* We may encounter "aa" or "noaa" but it must be the last argument. */
if (strcasecmp(argv[arg_index], "aa") == 0 || strcasecmp(argv[arg_index], "noaa") == 0) {
aa = strncasecmp(argv[arg_index++], "no", 2) != 0;
if (argc > arg_index) return false;
} else {
/* For <name> we want a string. */
uint v;
if (!GetArgumentInteger(&v, argv[arg_index])) {
font = argv[arg_index++];
}
}
}
if (argc > arg_index) {
/* For <size> we want a number. */
uint v;
if (GetArgumentInteger(&v, argv[arg_index])) {
size = v;
arg_index++;
}
}
if (argc > arg_index) {
/* Last argument must be "aa" or "noaa". */
if (strcasecmp(argv[arg_index], "aa") != 0 && strcasecmp(argv[arg_index], "noaa") != 0) return false;
aa = strncasecmp(argv[arg_index++], "no", 2) != 0;
if (argc > arg_index) return false;
}
SetFont(argfs, font, size, aa);
}
for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
FontCache *fc = FontCache::Get(fs);
FontCacheSubSetting *setting = GetFontCacheSubSetting(fs);
/* Make sure all non sprite fonts are loaded. */
if (!setting->font.empty() && !fc->HasParent()) {
InitFontCache(fs == FS_MONO);
fc = FontCache::Get(fs);
}
IConsolePrint(CC_DEFAULT, "{}: \"{}\" {} {} [\"{}\" {} {}]", FontSizeToName(fs), fc->GetFontName(), fc->GetFontSize(), GetFontAAState(fs) ? "aa" : "noaa", setting->font, setting->size, setting->aa ? "aa" : "noaa");
}
return true;
}
DEF_CONSOLE_CMD(ConSetting)
{
if (argc == 0) {
@@ -2480,6 +2557,7 @@ void IConsoleStdLibRegister()
IConsole::CmdRegister("cd", ConChangeDirectory);
IConsole::CmdRegister("pwd", ConPrintWorkingDirectory);
IConsole::CmdRegister("clear", ConClearBuffer);
IConsole::CmdRegister("font", ConFont);
IConsole::CmdRegister("setting", ConSetting);
IConsole::CmdRegister("setting_newgame", ConSettingNewgame);
IConsole::CmdRegister("list_settings", ConListSettings);
+3
View File
@@ -176,6 +176,9 @@ public:
inline constexpr bool operator <= (const int other) const { return !(*this > other); }
inline constexpr operator T () const { return this->m_value; }
static inline constexpr OverflowSafeInt<T> max() { return T_MAX; }
static inline constexpr OverflowSafeInt<T> min() { return T_MIN; }
};
+3 -3
View File
@@ -757,8 +757,8 @@ bool AddInflation(bool check_year)
*/
void RecomputePrices()
{
/* Setup maximum loan */
_economy.max_loan = ((uint64)_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / 50000 * 50000;
/* Setup maximum loan as a rounded down multiple of LOAN_INTERVAL. */
_economy.max_loan = ((uint64)_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / LOAN_INTERVAL * LOAN_INTERVAL;
/* Setup price bases */
for (Price i = PR_BEGIN; i < PR_END; i++) {
@@ -1494,7 +1494,7 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station
if (st->goods[cid].cargo.HasCargoFor(next_station)) {
/* Try to find out if auto-refitting would succeed. In case the refit is allowed,
* the returned refit capacity will be greater than zero. */
auto [cc, refit_capacity, mail_capacity] = Command<CMD_REFIT_VEHICLE>::Do(DC_QUERY_COST, v_start->index, cid, 0xFF, true, false, 1); // Auto-refit and only this vehicle including artic parts.
auto [cc, refit_capacity, mail_capacity, cargo_capacities] = Command<CMD_REFIT_VEHICLE>::Do(DC_QUERY_COST, v_start->index, cid, 0xFF, true, false, 1); // Auto-refit and only this vehicle including artic parts.
/* Try to balance different loadable cargoes between parts of the consist, so that
* all of them can be loaded. Avoid a situation where all vehicles suddenly switch
* to the first loadable cargo for which there is only one packet. If the capacities
+6 -7
View File
@@ -485,10 +485,11 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
/*
* The "wire"-sprite position is inside the tile, i.e. 0 <= sss->?_offset < TILE_SIZE.
* Therefore it is safe to use GetSlopePixelZ() for the elevation.
* Also note that the result of GetSlopePixelZ() is very special for bridge-ramps.
* Also note that the result of GetSlopePixelZ() is very special for bridge-ramps, so we round the result up or
* down to the nearest full height change.
*/
AddSortableSpriteToDraw(wire_base + sss->image_offset, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
sss->x_size, sss->y_size, sss->z_size, GetSlopePixelZ(ti->x + sss->x_offset, ti->y + sss->y_offset) + sss->z_offset,
sss->x_size, sss->y_size, sss->z_size, (GetSlopePixelZ(ti->x + sss->x_offset, ti->y + sss->y_offset) + 4) / 8 * 8 + sss->z_offset,
IsTransparencySet(TO_CATENARY));
}
}
@@ -596,16 +597,14 @@ void SettingsDisableElrail(int32 new_value)
{
bool disable = (new_value != 0);
/* we will now walk through all electric train engines and change their railtypes if it is the wrong one*/
const RailType old_railtype = disable ? RAILTYPE_ELECTRIC : RAILTYPE_RAIL;
/* pick appropriate railtype for elrail engines depending on setting */
const RailType new_railtype = disable ? RAILTYPE_RAIL : RAILTYPE_ELECTRIC;
/* walk through all train engines */
for (Engine *e : Engine::IterateType(VEH_TRAIN)) {
RailVehicleInfo *rv_info = &e->u.rail;
/* if it is an electric rail engine and its railtype is the wrong one */
if (rv_info->engclass == 2 && rv_info->railtype == old_railtype) {
/* change it to the proper one */
/* update railtype of engines intended to use elrail */
if (rv_info->intended_railtype == RAILTYPE_ELECTRIC) {
rv_info->railtype = new_railtype;
}
}
+77 -14
View File
@@ -73,6 +73,7 @@ Engine::Engine(VehicleType type, EngineID base)
this->grf_prop.local_id = base;
this->list_position = base;
this->preview_company = INVALID_COMPANY;
this->display_last_variant = INVALID_ENGINE;
/* Check if this base engine is within the original engine data range */
if (base >= _engine_counts[type]) {
@@ -93,6 +94,8 @@ Engine::Engine(VehicleType type, EngineID base)
}
/* Set cargo aging period to the default value. */
this->info.cargo_age_period = CARGO_AGING_TICKS;
/* Not a variant */
this->info.variant_id = INVALID_ENGINE;
return;
}
@@ -535,7 +538,7 @@ void SetupEngines()
_engine_pool.CleanPool();
assert(_engine_mngr.size() >= _engine_mngr.NUM_DEFAULT_ENGINES);
uint index = 0;
[[maybe_unused]] uint index = 0;
for (const EngineIDMapping &eid : _engine_mngr) {
/* Assert is safe; there won't be more than 256 original vehicles
* in any case, and we just cleaned the pool. */
@@ -559,13 +562,32 @@ static bool IsWagon(EngineID index)
return e->type == VEH_TRAIN && e->u.rail.railveh_type == RAILVEH_WAGON;
}
/**
* Ensure engine is not set as the last used variant for any other engine.
* @param engine_id Engine being removed.
* @param type Type of engine.
*/
static void ClearLastVariant(EngineID engine_id, VehicleType type)
{
for (Engine *e : Engine::IterateType(type)) {
if (e->display_last_variant == engine_id) e->display_last_variant = INVALID_ENGINE;
}
}
/**
* Update #Engine::reliability and (if needed) update the engine GUIs.
* @param e %Engine to update.
*/
static void CalcEngineReliability(Engine *e)
void CalcEngineReliability(Engine *e, bool new_month)
{
uint age = e->age;
/* Get source engine for reliability age. This is normally our engine unless variant reliability syncing is requested. */
Engine *re = e;
while (re->info.variant_id != INVALID_ENGINE && re->info.variant_id != re->index && (re->info.extra_flags & ExtraEngineFlags::SyncReliability) != ExtraEngineFlags::None) {
re = Engine::Get(re->info.variant_id);
}
uint age = re->age;
if (new_month && re->index > e->index && age != MAX_DAY) age++; /* parent variant's age has not yet updated. */
/* Check for early retirement */
if (e->company_avail != 0 && !_settings_game.vehicle.never_expire_vehicles && e->info.base_life != 0xFF) {
@@ -574,6 +596,7 @@ static void CalcEngineReliability(Engine *e)
if (retire_early != 0 && age >= retire_early_max_age) {
/* Early retirement is enabled and we're past the date... */
e->company_avail = 0;
ClearLastVariant(e->index, e->type);
AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type);
}
}
@@ -594,10 +617,10 @@ static void CalcEngineReliability(Engine *e)
e->company_avail = 0;
e->reliability = e->reliability_final;
/* Kick this engine out of the lists */
ClearLastVariant(e->index, e->type);
AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type);
}
SetWindowClassesDirty(WC_BUILD_VEHICLE); // Update to show the new reliability
SetWindowClassesDirty(WC_REPLACE_VEHICLE);
}
/** Compute the value for #_year_engine_aging_stops. */
@@ -625,8 +648,9 @@ void SetYearEngineAgingStops()
* Start/initialise one engine.
* @param e The engine to initialise.
* @param aging_date The date used for age calculations.
* @param seed Random seed.
*/
void StartupOneEngine(Engine *e, Date aging_date)
void StartupOneEngine(Engine *e, Date aging_date, uint32 seed)
{
const EngineInfo *ei = &e->info;
@@ -639,7 +663,7 @@ void StartupOneEngine(Engine *e, Date aging_date)
* Make sure they use the same randomisation of the date. */
SavedRandomSeeds saved_seeds;
SaveRandomSeeds(&saved_seeds);
SetRandomSeed(_settings_game.game_creation.generation_seed ^
SetRandomSeed(_settings_game.game_creation.generation_seed ^ seed ^
ei->base_intro ^
e->type ^
e->GetGRFID());
@@ -655,7 +679,17 @@ void StartupOneEngine(Engine *e, Date aging_date)
e->flags |= ENGINE_AVAILABLE;
}
RestoreRandomSeeds(saved_seeds);
/* Get parent variant index for syncing reliability via random seed. */
const Engine *re = e;
while (re->info.variant_id != INVALID_ENGINE && re->info.variant_id != re->index && (re->info.extra_flags & ExtraEngineFlags::SyncReliability) != ExtraEngineFlags::None) {
re = Engine::Get(re->info.variant_id);
}
SetRandomSeed(_settings_game.game_creation.generation_seed ^ seed ^
(re->index << 16) ^ (re->info.base_intro << 12) ^ (re->info.decay_speed << 8) ^
(re->info.lifelength << 4) ^ re->info.retire_early ^
e->type ^
e->GetGRFID());
r = Random();
e->reliability_start = GB(r, 16, 14) + 0x7AE0;
@@ -667,9 +701,9 @@ void StartupOneEngine(Engine *e, Date aging_date)
e->duration_phase_2 = GB(r, 5, 4) + ei->base_life * 12 - 96;
e->duration_phase_3 = GB(r, 9, 7) + 120;
e->reliability_spd_dec = ei->decay_speed << 2;
RestoreRandomSeeds(saved_seeds);
CalcEngineReliability(e);
e->reliability_spd_dec = ei->decay_speed << 2;
/* prevent certain engines from ever appearing. */
if (!HasBit(ei->climates, _settings_game.game_creation.landscape)) {
@@ -686,9 +720,13 @@ void StartupEngines()
{
/* Aging of vehicles stops, so account for that when starting late */
const Date aging_date = std::min(_date, ConvertYMDToDate(_year_engine_aging_stops, 0, 1));
uint32 seed = Random();
for (Engine *e : Engine::Iterate()) {
StartupOneEngine(e, aging_date);
StartupOneEngine(e, aging_date, seed);
}
for (Engine *e : Engine::Iterate()) {
CalcEngineReliability(e, false);
}
/* Update the bitmasks for the vehicle lists */
@@ -699,6 +737,9 @@ void StartupEngines()
/* Invalidate any open purchase lists */
InvalidateWindowClassesData(WC_BUILD_VEHICLE);
SetWindowClassesDirty(WC_BUILD_VEHICLE);
SetWindowClassesDirty(WC_REPLACE_VEHICLE);
}
/**
@@ -747,6 +788,7 @@ static void DisableEngineForCompany(EngineID eid, CompanyID company)
}
if (company == _local_company) {
ClearLastVariant(e->index, e->type);
AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type);
}
}
@@ -755,8 +797,9 @@ static void DisableEngineForCompany(EngineID eid, CompanyID company)
* Company \a company accepts engine \a eid for preview.
* @param eid Engine being accepted (is under preview).
* @param company Current company previewing the engine.
* @param recursion_depth Recursion depth to avoid infinite loop.
*/
static void AcceptEnginePreview(EngineID eid, CompanyID company)
static void AcceptEnginePreview(EngineID eid, CompanyID company, int recursion_depth = 0)
{
Engine *e = Engine::Get(eid);
@@ -771,6 +814,16 @@ static void AcceptEnginePreview(EngineID eid, CompanyID company)
* we have to use the GUI-scope scheduling of InvalidateWindowData.
*/
InvalidateWindowData(WC_ENGINE_PREVIEW, eid);
/* Don't search for variants to include if we are 10 levels deep already. */
if (recursion_depth >= 10) return;
/* Find variants to be included in preview. */
for (Engine *ve : Engine::IterateType(e->type)) {
if (ve->index != eid && ve->info.variant_id == eid && (ve->info.extra_flags & ExtraEngineFlags::JoinPreview) != ExtraEngineFlags::None) {
AcceptEnginePreview(ve->index, company, recursion_depth + 1);
}
}
}
/**
@@ -994,7 +1047,7 @@ static void NewVehicleAvailable(Engine *e)
if (!IsVehicleTypeDisabled(e->type, true)) AI::BroadcastNewEvent(new ScriptEventEngineAvailable(index));
/* Only provide the "New Vehicle available" news paper entry, if engine can be built. */
if (!IsVehicleTypeDisabled(e->type, false)) {
if (!IsVehicleTypeDisabled(e->type, false) && (e->info.extra_flags & ExtraEngineFlags::NoNews) == ExtraEngineFlags::None) {
SetDParam(0, GetEngineCategoryName(index));
SetDParam(1, index);
AddNewsItem(STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE, NT_NEW_VEHICLES, NF_VEHICLE, NR_ENGINE, index);
@@ -1013,11 +1066,13 @@ static void NewVehicleAvailable(Engine *e)
void EnginesMonthlyLoop()
{
if (_cur_year < _year_engine_aging_stops) {
bool refresh = false;
for (Engine *e : Engine::Iterate()) {
/* Age the vehicle */
if ((e->flags & ENGINE_AVAILABLE) && e->age != MAX_DAY) {
e->age++;
CalcEngineReliability(e);
CalcEngineReliability(e, true);
refresh = true;
}
/* Do not introduce invalid engines */
@@ -1036,6 +1091,9 @@ void EnginesMonthlyLoop()
/* Do not introduce new rail wagons */
if (IsWagon(e->index)) continue;
/* Engine has no preview */
if ((e->info.extra_flags & ExtraEngineFlags::NoPreview) != ExtraEngineFlags::None) continue;
/* Show preview dialog to one of the companies. */
e->flags |= ENGINE_EXCLUSIVE_PREVIEW;
e->preview_company = INVALID_COMPANY;
@@ -1044,6 +1102,11 @@ void EnginesMonthlyLoop()
}
InvalidateWindowClassesData(WC_BUILD_VEHICLE); // rebuild the purchase list (esp. when sorted by reliability)
if (refresh) {
SetWindowClassesDirty(WC_BUILD_VEHICLE);
SetWindowClassesDirty(WC_REPLACE_VEHICLE);
}
}
}
+12
View File
@@ -21,6 +21,15 @@ struct WagonOverride {
const SpriteGroup *group;
};
/** Flags used client-side in the purchase/autorenew engine list. */
enum class EngineDisplayFlags : byte {
None = 0, ///< No flag set.
HasVariants = (1U << 0), ///< Set if engine has variants.
IsFolded = (1U << 1), ///< Set if display of variants should be folded (hidden).
Shaded = (1U << 2), ///< Set if engine should be masked.
};
DECLARE_ENUM_AS_BIT_SET(EngineDisplayFlags)
typedef Pool<Engine, EngineID, 64, 64000> EnginePool;
extern EnginePool _engine_pool;
@@ -45,6 +54,9 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> {
uint8 original_image_index; ///< Original vehicle image index, thus the image index of the overridden vehicle
VehicleType type; ///< %Vehicle type, ie #VEH_ROAD, #VEH_TRAIN, etc.
EngineDisplayFlags display_flags; ///< NOSAVE client-side-only display flags for build engine list.
EngineID display_last_variant; ///< NOSAVE client-side-only last variant selected.
EngineInfo info;
union {
+2 -2
View File
@@ -24,9 +24,9 @@ extern const uint8 _engine_offsets[4];
bool IsEngineBuildable(EngineID engine, VehicleType type, CompanyID company);
bool IsEngineRefittable(EngineID engine);
void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits, CargoID cargo_type, uint cargo_capacity);
void SetYearEngineAgingStops();
void StartupOneEngine(Engine *e, Date aging_date);
void CalcEngineReliability(Engine *e, bool new_month);
void StartupOneEngine(Engine *e, Date aging_date, uint32 seed);
uint GetTotalCapacityOfArticulatedParts(EngineID engine);
+3 -2
View File
@@ -24,6 +24,7 @@
#include "ship.h"
#include "aircraft.h"
#include "engine_cmd.h"
#include "zoom_func.h"
#include "widgets/engine_widget.h"
@@ -94,7 +95,7 @@ struct EnginePreviewWindow : Window {
case VEH_SHIP: GetShipSpriteSize( engine, x, y, x_offs, y_offs, image_type); break;
case VEH_AIRCRAFT: GetAircraftSpriteSize(engine, x, y, x_offs, y_offs, image_type); break;
}
this->vehicle_space = std::max<int>(40, y - y_offs);
this->vehicle_space = std::max<int>(ScaleSpriteTrad(40), y - y_offs);
size->width = std::max(size->width, x - x_offs);
SetDParam(0, GetEngineCategoryName(engine));
@@ -336,7 +337,7 @@ void EngList_Sort(GUIEngineList *el, EngList_SortTypeFunction compare)
* @param begin start of sorting
* @param num_items count of items to be sorted
*/
void EngList_SortPartial(GUIEngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items)
void EngList_SortPartial(GUIEngineList *el, EngList_SortTypeFunction compare, size_t begin, size_t num_items)
{
if (num_items < 2) return;
assert(begin < el->size());
+16 -3
View File
@@ -14,12 +14,25 @@
#include "sortlist_type.h"
#include "gfx_type.h"
#include "vehicle_type.h"
#include "engine_base.h"
typedef GUIList<EngineID, CargoID> GUIEngineList;
struct GUIEngineListItem {
EngineID engine_id; ///< Engine to display in build purchase list
EngineID variant_id; ///< Variant group of the engine.
EngineDisplayFlags flags; ///< Flags for toggling/drawing (un)folded status and controlling indentation.
int8 indent; ///< Display indentation level.
typedef bool EngList_SortTypeFunction(const EngineID&, const EngineID&); ///< argument type for #EngList_Sort.
GUIEngineListItem(EngineID engine_id, EngineID variant_id, EngineDisplayFlags flags, int indent) : engine_id(engine_id), variant_id(variant_id), flags(flags), indent(indent) {}
/* Used when searching list only by engine_id. */
bool operator == (const EngineID &other) const { return this->engine_id == other; }
};
typedef GUIList<GUIEngineListItem, CargoID> GUIEngineList;
typedef bool EngList_SortTypeFunction(const GUIEngineListItem&, const GUIEngineListItem&); ///< argument type for #EngList_Sort.
void EngList_Sort(GUIEngineList *el, EngList_SortTypeFunction compare);
void EngList_SortPartial(GUIEngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items);
void EngList_SortPartial(GUIEngineList *el, EngList_SortTypeFunction compare, size_t begin, size_t num_items);
StringID GetEngineCategoryName(EngineID engine);
StringID GetEngineInfoString(EngineID engine);
+14 -2
View File
@@ -43,7 +43,8 @@ struct RailVehicleInfo {
byte image_index;
RailVehicleTypes railveh_type;
byte cost_factor; ///< Purchase cost factor; For multiheaded engines the sum of both engine prices.
RailType railtype;
RailType railtype; ///< Railtype, mangled if elrail is disabled.
RailType intended_railtype; ///< Intended railtype, regardless of elrail being enabled or disabled.
uint16 max_speed; ///< Maximum speed (1 unit = 1/1.6 mph = 1 km-ish/h)
uint16 power; ///< Power of engine (hp); For multiheaded engines the sum of both engine powers.
uint16 weight; ///< Weight of vehicle (tons); For multiheaded engines the weight of each single engine.
@@ -126,6 +127,15 @@ struct RoadVehicleInfo {
RoadType roadtype; ///< Road type
};
enum class ExtraEngineFlags : uint32 {
None = 0,
NoNews = (1U << 0), ///< No 'new vehicle' news will be generated.
NoPreview = (1U << 1), ///< No exclusive preview will be offered.
JoinPreview = (1U << 2), ///< Engine will join exclusive preview with variant parent.
SyncReliability = (1U << 3), ///< Engine reliability will be synced with variant parent.
};
DECLARE_ENUM_AS_BIT_SET(ExtraEngineFlags);
/**
* Information about a vehicle
* @see table/engines.h
@@ -145,6 +155,8 @@ struct EngineInfo {
int8 retire_early; ///< Number of years early to retire vehicle
StringID string_id; ///< Default name of engine
uint16 cargo_age_period; ///< Number of ticks before carried cargo is aged.
EngineID variant_id; ///< Engine variant ID. If set, will be treated specially in purchase lists.
ExtraEngineFlags extra_flags;
};
/**
@@ -155,7 +167,7 @@ enum EngineMiscFlags {
EF_ROAD_TRAM = 0, ///< Road vehicle is a tram/light rail vehicle
EF_USES_2CC = 1, ///< Vehicle uses two company colours
EF_RAIL_IS_MU = 2, ///< Rail vehicle is a multiple-unit (DMU/EMU)
EF_RAIL_FLIPS = 3, ///< Rail vehicle can be flipped in the depot
EF_RAIL_FLIPS = 3, ///< Rail vehicle has old depot-flip handling
EF_AUTO_REFIT = 4, ///< Automatic refitting is allowed
EF_NO_DEFAULT_CARGO_MULTIPLIER = 5, ///< Use the new capacity algorithm. The default cargotype of the vehicle does not affect capacity multipliers. CB 15 is also called in purchase list.
EF_NO_BREAKDOWN_SMOKE = 6, ///< Do not show black smoke during a breakdown.
+10 -10
View File
@@ -418,7 +418,7 @@ uint TarScanner::DoScan(Subdirectory sd)
/* static */ uint TarScanner::DoScan(TarScanner::Mode mode)
{
Debug(misc, 1, "Scanning for tars");
Debug(misc, 2, "Scanning for tars");
TarScanner fs;
uint num = 0;
if (mode & TarScanner::BASESET) {
@@ -439,7 +439,7 @@ uint TarScanner::DoScan(Subdirectory sd)
num += fs.DoScan(SCENARIO_DIR);
num += fs.DoScan(HEIGHTMAP_DIR);
}
Debug(misc, 1, "Scan complete, found {} files", num);
Debug(misc, 2, "Scan complete, found {} files", num);
return num;
}
@@ -571,7 +571,7 @@ bool TarScanner::AddFile(const std::string &filename, size_t basepath_length, co
/* Only allow relative links */
if (link[0] == PATHSEPCHAR) {
Debug(misc, 1, "Ignoring absolute link in tar: {} -> {}", name, link);
Debug(misc, 5, "Ignoring absolute link in tar: {} -> {}", name, link);
break;
}
@@ -597,7 +597,7 @@ bool TarScanner::AddFile(const std::string &filename, size_t basepath_length, co
} else if (strcmp(pos, "..") == 0) {
/* level up */
if (dest[0] == '\0') {
Debug(misc, 1, "Ignoring link pointing outside of data directory: {} -> {}", name, link);
Debug(misc, 5, "Ignoring link pointing outside of data directory: {} -> {}", name, link);
break;
}
@@ -652,7 +652,7 @@ bool TarScanner::AddFile(const std::string &filename, size_t basepath_length, co
pos += skip;
}
Debug(misc, 1, "Found tar '{}' with {} new files", filename, num);
Debug(misc, 4, "Found tar '{}' with {} new files", filename, num);
fclose(f);
/* Resolve file links and store directory links.
@@ -690,7 +690,7 @@ bool ExtractTar(const std::string &tar_filename, Subdirectory subdir)
/* The file doesn't have a sub directory! */
if (dirname.empty()) {
Debug(misc, 1, "Extracting {} failed; archive rejected, the contents must be in a sub directory", tar_filename);
Debug(misc, 3, "Extracting {} failed; archive rejected, the contents must be in a sub directory", tar_filename);
return false;
}
@@ -987,7 +987,7 @@ void DeterminePaths(const char *exe, bool only_local_path)
for (Searchpath sp : _valid_searchpaths) {
if (sp == SP_WORKING_DIR && !_do_scan_working_directory) continue;
Debug(misc, 4, "{} added as search path", _searchpaths[sp]);
Debug(misc, 3, "{} added as search path", _searchpaths[sp]);
}
std::string config_dir;
@@ -1020,7 +1020,7 @@ void DeterminePaths(const char *exe, bool only_local_path)
_config_file = config_dir + "openttd.cfg";
}
Debug(misc, 3, "{} found as config directory", config_dir);
Debug(misc, 1, "{} found as config directory", config_dir);
_highscore_file = config_dir + "hs.dat";
extern std::string _hotkeys_file;
@@ -1056,7 +1056,7 @@ void DeterminePaths(const char *exe, bool only_local_path)
FioCreateDirectory(_personal_dir);
#endif
Debug(misc, 3, "{} found as personal directory", _personal_dir);
Debug(misc, 1, "{} found as personal directory", _personal_dir);
static const Subdirectory default_subdirs[] = {
SAVE_DIR, AUTOSAVE_DIR, SCENARIO_DIR, HEIGHTMAP_DIR, BASESET_DIR, NEWGRF_DIR, AI_DIR, AI_LIBRARY_DIR, GAME_DIR, GAME_LIBRARY_DIR, SCREENSHOT_DIR
@@ -1068,7 +1068,7 @@ void DeterminePaths(const char *exe, bool only_local_path)
/* If we have network we make a directory for the autodownloading of content */
_searchpaths[SP_AUTODOWNLOAD_DIR] = _personal_dir + "content_download" PATHSEP;
Debug(misc, 4, "{} added as search path", _searchpaths[SP_AUTODOWNLOAD_DIR]);
Debug(misc, 3, "{} added as search path", _searchpaths[SP_AUTODOWNLOAD_DIR]);
FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR]);
FillValidSearchPaths(only_local_path);
+48 -7
View File
@@ -13,6 +13,11 @@
#include "blitter/factory.hpp"
#include "gfx_layout.h"
#include "fontcache/spritefontcache.h"
#include "openttd.h"
#include "settings_func.h"
#include "strings_func.h"
#include "viewport_func.h"
#include "window_func.h"
#include "safeguards.h"
@@ -70,15 +75,51 @@ bool GetFontAAState(FontSize size, bool check_blitter)
/* AA is only supported for 32 bpp */
if (check_blitter && BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 32) return false;
switch (size) {
default: NOT_REACHED();
case FS_NORMAL: return _fcsettings.medium.aa;
case FS_SMALL: return _fcsettings.small.aa;
case FS_LARGE: return _fcsettings.large.aa;
case FS_MONO: return _fcsettings.mono.aa;
}
return GetFontCacheSubSetting(size)->aa;
}
void SetFont(FontSize fontsize, const std::string& font, uint size, bool aa)
{
FontCacheSubSetting *setting = GetFontCacheSubSetting(fontsize);
bool changed = false;
if (setting->font != font) {
setting->font = font;
changed = true;
}
if (setting->size != size) {
setting->size = size;
changed = true;
}
if (setting->aa != aa) {
setting->aa = aa;
changed = true;
}
if (!changed) return;
if (fontsize != FS_MONO) {
/* Try to reload only the modified font. */
FontCacheSettings backup = _fcsettings;
for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
if (fs == fontsize) continue;
FontCache *fc = FontCache::Get(fs);
GetFontCacheSubSetting(fs)->font = fc->HasParent() ? fc->GetFontName() : "";
}
CheckForMissingGlyphs();
_fcsettings = backup;
} else {
InitFontCache(true);
}
LoadStringWidthTable();
UpdateAllVirtCoords();
ReInitAllWindows(true);
if (_save_config) SaveToConfig();
}
/**
* (Re)initialize the font cache related things, i.e. load the non-sprite fonts.
+19 -2
View File
@@ -29,12 +29,12 @@ protected:
int descender; ///< The descender value of the font.
int units_per_em; ///< The units per EM value of the font.
static int GetDefaultFontHeight(FontSize fs);
public:
FontCache(FontSize fs);
virtual ~FontCache();
static int GetDefaultFontHeight(FontSize fs);
/**
* Get the FontSize of the font.
* @return The FontSize.
@@ -218,10 +218,27 @@ struct FontCacheSettings {
extern FontCacheSettings _fcsettings;
/**
* Get the settings of a given font size.
* @param fs The font size to look up.
* @return The settings.
*/
static inline FontCacheSubSetting *GetFontCacheSubSetting(FontSize fs)
{
switch (fs) {
default: NOT_REACHED();
case FS_SMALL: return &_fcsettings.small;
case FS_NORMAL: return &_fcsettings.medium;
case FS_LARGE: return &_fcsettings.large;
case FS_MONO: return &_fcsettings.mono;
}
}
void InitFontCache(bool monospace);
void UninitFontCache();
bool HasAntialiasedFonts();
bool GetFontAAState(FontSize size, bool check_blitter = true);
void SetFont(FontSize fontsize, const std::string &font, uint size, bool aa);
#endif /* FONTCACHE_H */
+4 -12
View File
@@ -65,14 +65,14 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels)
{
if (pixels == 0) {
/* Try to determine a good height based on the minimal height recommended by the font. */
int scaled_height = ScaleGUITrad(this->GetDefaultFontHeight(this->fs));
int scaled_height = ScaleGUITrad(FontCache::GetDefaultFontHeight(this->fs));
pixels = scaled_height;
TT_Header *head = (TT_Header *)FT_Get_Sfnt_Table(this->face, ft_sfnt_head);
if (head != nullptr) {
/* Font height is minimum height plus the difference between the default
* height for this font size and the small size. */
int diff = scaled_height - ScaleGUITrad(this->GetDefaultFontHeight(FS_SMALL));
int diff = scaled_height - ScaleGUITrad(FontCache::GetDefaultFontHeight(FS_SMALL));
/* Clamp() is not used as scaled_height could be greater than MAX_FONT_SIZE, which is not permitted in Clamp(). */
pixels = std::min(std::max(std::min<int>(head->Lowest_Rec_PPEM, MAX_FONT_MIN_REC_SIZE) + diff, scaled_height), MAX_FONT_SIZE);
}
@@ -122,14 +122,7 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels)
*/
void LoadFreeTypeFont(FontSize fs)
{
FontCacheSubSetting *settings = nullptr;
switch (fs) {
default: NOT_REACHED();
case FS_SMALL: settings = &_fcsettings.small; break;
case FS_NORMAL: settings = &_fcsettings.medium; break;
case FS_LARGE: settings = &_fcsettings.large; break;
case FS_MONO: settings = &_fcsettings.mono; break;
}
FontCacheSubSetting *settings = GetFontCacheSubSetting(fs);
if (settings->font.empty()) return;
@@ -197,8 +190,7 @@ void LoadFreeTypeFont(FontSize fs)
FT_Done_Face(face);
static const char *SIZE_TO_NAME[] = { "medium", "small", "large", "mono" };
ShowInfoF("Unable to use '%s' for %s font, FreeType reported error 0x%X, using sprite font instead", font_name, SIZE_TO_NAME[fs], error);
ShowInfoF("Unable to use '%s' for %s font, FreeType reported error 0x%X, using sprite font instead", font_name, FontSizeToName(fs), error);
return;
found_face:
+4 -4
View File
@@ -28,8 +28,8 @@ static const int ASCII_LETTERSTART = 32; ///< First printable ASCII letter.
SpriteFontCache::SpriteFontCache(FontSize fs) : FontCache(fs), glyph_to_spriteid_map(nullptr)
{
this->InitializeUnicodeGlyphMap();
this->height = ScaleGUITrad(this->GetDefaultFontHeight(this->fs));
this->ascender = (this->height - ScaleSpriteTrad(this->GetDefaultFontHeight(this->fs))) / 2;
this->height = ScaleGUITrad(FontCache::GetDefaultFontHeight(this->fs));
this->ascender = (this->height - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(this->fs))) / 2;
}
/**
@@ -105,8 +105,8 @@ void SpriteFontCache::ClearGlyphToSpriteMap()
void SpriteFontCache::ClearFontCache()
{
Layouter::ResetFontCache(this->fs);
this->height = ScaleGUITrad(this->GetDefaultFontHeight(this->fs));
this->ascender = (this->height - ScaleSpriteTrad(this->GetDefaultFontHeight(this->fs))) / 2;
this->height = ScaleGUITrad(FontCache::GetDefaultFontHeight(this->fs));
this->ascender = (this->height - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(this->fs))) / 2;
}
const Sprite *SpriteFontCache::GetGlyph(GlyphID key)
-5
View File
@@ -87,11 +87,6 @@ public:
*/
static void Save();
/**
* Load data for a GameScript from a savegame.
*/
static void Load(int version);
/** Wrapper function for GameScanner::GetConsoleList */
static std::string GetConsoleList(bool newest_only = false);
/** Wrapper function for GameScanner::GetConsoleLibraryList */
+6 -12
View File
@@ -73,6 +73,9 @@
{
if (Game::instance != nullptr) return;
/* Don't start GameScripts in intro */
if (_game_mode == GM_MENU) return;
/* Clients shouldn't start GameScripts */
if (_networking && !_network_server) return;
@@ -88,6 +91,8 @@
Game::info = info;
Game::instance = new GameInstance();
Game::instance->Initialize(info);
Game::instance->LoadOnStack(config->GetToLoadData());
config->SetToLoadData(nullptr);
cur_company.Restore();
@@ -199,6 +204,7 @@
InvalidateWindowData(WC_AI_LIST, 0, 1);
SetWindowClassesDirty(WC_AI_DEBUG);
InvalidateWindowClassesData(WC_AI_SETTINGS);
InvalidateWindowClassesData(WC_GAME_OPTIONS);
}
@@ -213,18 +219,6 @@
}
}
/* static */ void Game::Load(int version)
{
if (Game::instance != nullptr && (!_networking || _network_server)) {
Backup<CompanyID> cur_company(_current_company, OWNER_DEITY, FILE_LINE);
Game::instance->Load(version);
cur_company.Restore();
} else {
/* Read, but ignore, the load data */
GameInstance::LoadEmpty();
}
}
/* static */ std::string Game::GetConsoleList(bool newest_only)
{
return Game::scanner_info->GetConsoleList(newest_only);
+34 -4
View File
@@ -32,6 +32,7 @@
#include "video/video_driver.hpp"
#include "ai/ai_gui.hpp"
#include "game/game_gui.hpp"
#include "industry.h"
#include "widgets/genworld_widget.h"
@@ -399,7 +400,7 @@ static const StringID _smoothness[] = {STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_
static const StringID _rotation[] = {STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE, STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE, INVALID_STRING_ID};
static const StringID _landscape[] = {STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL, STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS, INVALID_STRING_ID};
static const StringID _num_towns[] = {STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM, INVALID_STRING_ID};
static const StringID _num_inds[] = {STR_FUNDING_ONLY, STR_MINIMAL, STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, INVALID_STRING_ID};
static const StringID _num_inds[] = {STR_FUNDING_ONLY, STR_MINIMAL, STR_NUM_VERY_LOW, STR_NUM_LOW, STR_NUM_NORMAL, STR_NUM_HIGH, STR_NUM_CUSTOM, INVALID_STRING_ID};
static const StringID _variety[] = {STR_VARIETY_NONE, STR_VARIETY_VERY_LOW, STR_VARIETY_LOW, STR_VARIETY_MEDIUM, STR_VARIETY_HIGH, STR_VARIETY_VERY_HIGH, INVALID_STRING_ID};
static_assert(lengthof(_num_inds) == ID_END + 1);
@@ -461,8 +462,19 @@ struct GenerateLandscapeWindow : public Window {
break;
}
case WID_GL_INDUSTRY_PULLDOWN: SetDParam(0, _game_mode == GM_EDITOR ? STR_CONFIG_SETTING_OFF : _num_inds[_settings_newgame.difficulty.industry_density]); break;
case WID_GL_INDUSTRY_PULLDOWN:
if (_game_mode == GM_EDITOR) {
SetDParam(0, STR_CONFIG_SETTING_OFF);
} else if (_settings_newgame.difficulty.industry_density == ID_CUSTOM) {
SetDParam(0, STR_NUM_CUSTOM_NUMBER);
SetDParam(1, _settings_newgame.game_creation.custom_industry_number);
} else {
SetDParam(0, _num_inds[_settings_newgame.difficulty.industry_density]);
}
break;
case WID_GL_LANDSCAPE_PULLDOWN: SetDParam(0, _landscape[_settings_newgame.game_creation.land_generator]); break;
case WID_GL_TERRAIN_PULLDOWN:
if (_settings_newgame.difficulty.terrain_type == CUSTOM_TERRAIN_TYPE_NUMBER_DIFFICULTY) {
SetDParam(0, STR_TERRAIN_TYPE_CUSTOM_VALUE);
@@ -619,7 +631,12 @@ struct GenerateLandscapeWindow : public Window {
*size = maxdim(*size, GetStringBoundingBox(STR_NUM_CUSTOM_NUMBER));
break;
case WID_GL_INDUSTRY_PULLDOWN: strs = _num_inds; break;
case WID_GL_INDUSTRY_PULLDOWN:
strs = _num_inds;
SetDParamMaxValue(0, IndustryPool::MAX_SIZE);
*size = maxdim(*size, GetStringBoundingBox(STR_NUM_CUSTOM_NUMBER));
break;
case WID_GL_LANDSCAPE_PULLDOWN: strs = _landscape; break;
case WID_GL_TERRAIN_PULLDOWN:
@@ -919,7 +936,15 @@ struct GenerateLandscapeWindow : public Window {
}
break;
case WID_GL_INDUSTRY_PULLDOWN: _settings_newgame.difficulty.industry_density = index; break;
case WID_GL_INDUSTRY_PULLDOWN:
if ((uint)index == ID_CUSTOM) {
this->widget_id = widget;
SetDParam(0, _settings_newgame.game_creation.custom_industry_number);
ShowQueryString(STR_JUST_INT, STR_MAPGEN_NUMBER_OF_INDUSTRIES, 5, this, CS_NUMERAL, QSF_NONE);
}
_settings_newgame.difficulty.industry_density = index;
break;
case WID_GL_TERRAIN_PULLDOWN: {
if ((uint)index == CUSTOM_TERRAIN_TYPE_NUMBER_DIFFICULTY) {
this->widget_id = widget;
@@ -959,6 +984,7 @@ struct GenerateLandscapeWindow : public Window {
case WID_GL_SNOW_COVERAGE_TEXT: value = DEF_SNOW_COVERAGE; break;
case WID_GL_DESERT_COVERAGE_TEXT: value = DEF_DESERT_COVERAGE; break;
case WID_GL_TOWN_PULLDOWN: value = 1; break;
case WID_GL_INDUSTRY_PULLDOWN: value = 1; break;
case WID_GL_TERRAIN_PULLDOWN: value = MIN_MAP_HEIGHT_LIMIT; break;
case WID_GL_WATER_PULLDOWN: value = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE; break;
default: NOT_REACHED();
@@ -990,6 +1016,10 @@ struct GenerateLandscapeWindow : public Window {
_settings_newgame.game_creation.custom_town_number = Clamp(value, 1, CUSTOM_TOWN_MAX_NUMBER);
break;
case WID_GL_INDUSTRY_PULLDOWN:
_settings_newgame.game_creation.custom_industry_number = Clamp(value, 1, IndustryPool::MAX_SIZE);
break;
case WID_GL_TERRAIN_PULLDOWN:
_settings_newgame.game_creation.custom_terrain_type = Clamp(value, MIN_CUSTOM_TERRAIN_TYPE, GetMapHeightLimit());
break;
+15
View File
@@ -922,6 +922,21 @@ Dimension GetStringBoundingBox(StringID strid, FontSize start_fontsize)
return GetStringBoundingBox(buffer, start_fontsize);
}
/**
* Get maximum width of a list of strings.
* @param list List of strings, terminated with INVALID_STRING_ID.
* @param fontsize Font size to use.
* @return Width of longest string within the list.
*/
uint GetStringListWidth(const StringID *list, FontSize fontsize)
{
uint width = 0;
for (const StringID *str = list; *str != INVALID_STRING_ID; str++) {
width = std::max(width, GetStringBoundingBox(*str, fontsize).width);
}
return width;
}
/**
* Get the leading corner of a character in a single-line string relative
* to the start of the string.
+1
View File
@@ -148,6 +148,7 @@ static inline void GfxFillRect(const Rect &r, int colour, FillRectMode mode = FI
Dimension GetStringBoundingBox(const char *str, FontSize start_fontsize = FS_NORMAL);
Dimension GetStringBoundingBox(const std::string &str, FontSize start_fontsize = FS_NORMAL);
Dimension GetStringBoundingBox(StringID strid, FontSize start_fontsize = FS_NORMAL);
uint GetStringListWidth(const StringID *list, FontSize fontsize = FS_NORMAL);
int GetStringHeight(const char *str, int maxw, FontSize fontsize = FS_NORMAL);
int GetStringHeight(StringID str, int maxw);
int GetStringLineCount(StringID str, int maxw);
+5 -6
View File
@@ -11,6 +11,7 @@
#include "gfx_layout.h"
#include "string_func.h"
#include "strings_func.h"
#include "zoom_func.h"
#include "debug.h"
#include "table/control_codes.h"
@@ -345,11 +346,11 @@ FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(Font *font, const
for (int i = 0; i < this->glyph_count; i++) {
this->glyphs[i] = font->fc->MapCharToGlyph(chars[i]);
if (isbuiltin) {
this->positions[2 * i + 1] = font->fc->GetAscender(); // Apply sprite font's ascender.
this->positions[2 * i + 1] = font->fc->GetAscender(); // Apply sprite font's ascender.
} else if (chars[i] >= SCC_SPRITE_START && chars[i] <= SCC_SPRITE_END) {
this->positions[2 * i + 1] = font->fc->GetAscender() - font->fc->GetGlyph(this->glyphs[i])->height - 1; // Align sprite glyphs to font baseline.
this->positions[2 * i + 1] = (font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(font->fc->GetSize()))) / 2; // Align sprite font to centre
} else {
this->positions[2 * i + 1] = 0; // No ascender adjustment.
this->positions[2 * i + 1] = 0; // No ascender adjustment.
}
this->positions[2 * i + 2] = this->positions[2 * i] + font->fc->GetGlyphWidth(this->glyphs[i]);
this->glyph_to_char[i] = i;
@@ -551,8 +552,6 @@ std::unique_ptr<const ParagraphLayouter::Line> FallbackParagraphLayout::NextLine
next_run = this->buffer_begin + iter->first;
begin = this->buffer;
last_space = nullptr;
}
if (IsWhitespace(c)) last_space = this->buffer;
@@ -590,7 +589,7 @@ std::unique_ptr<const ParagraphLayouter::Line> FallbackParagraphLayout::NextLine
this->buffer++;
}
if (l->size() == 0 || last_char - begin != 0) {
if (l->size() == 0 || last_char - begin > 0) {
int w = l->GetWidth();
l->emplace_back(iter->second, begin, last_char - begin, w);
}
+7
View File
@@ -214,6 +214,13 @@ enum FontSize {
};
DECLARE_POSTFIX_INCREMENT(FontSize)
static inline const char *FontSizeToName(FontSize fs)
{
static const char *SIZE_TO_NAME[] = { "medium", "small", "large", "mono" };
assert(fs < FS_END);
return SIZE_TO_NAME[fs];
}
/**
* Used to only draw a part of the sprite.
* Draw the subsprite in the rect (sprite_x_offset + left, sprite_y_offset + top) to (sprite_x_offset + right, sprite_y_offset + bottom).
+11 -9
View File
@@ -23,15 +23,14 @@ extern GroupPool _group_pool; ///< Pool of groups.
/** Statistics and caches on the vehicles in a group. */
struct GroupStatistics {
uint16 num_vehicle; ///< Number of vehicles.
Money profit_last_year; ///< Sum of profits for all vehicles.
Money profit_last_year_min_age; ///< Sum of profits for vehicles considered for profit statistics.
uint16 *num_engines; ///< Caches the number of engines of each type the company owns.
uint16 num_vehicle; ///< Number of vehicles.
uint16 num_vehicle_min_age; ///< Number of vehicles considered for profit statistics;
bool autoreplace_defined; ///< Are any autoreplace rules set?
bool autoreplace_finished; ///< Have all autoreplacement finished?
uint16 num_profit_vehicle; ///< Number of vehicles considered for profit statistics;
Money profit_last_year; ///< Sum of profits for all vehicles.
GroupStatistics();
~GroupStatistics();
@@ -39,8 +38,10 @@ struct GroupStatistics {
void ClearProfits()
{
this->num_profit_vehicle = 0;
this->profit_last_year = 0;
this->num_vehicle_min_age = 0;
this->profit_last_year_min_age = 0;
}
void ClearAutoreplace()
@@ -55,7 +56,8 @@ struct GroupStatistics {
static void CountVehicle(const Vehicle *v, int delta);
static void CountEngine(const Vehicle *v, int delta);
static void VehicleReachedProfitAge(const Vehicle *v);
static void AddProfitLastYear(const Vehicle *v);
static void VehicleReachedMinAge(const Vehicle *v);
static void UpdateProfits();
static void UpdateAfterLoad();
@@ -104,8 +106,8 @@ static inline bool IsAllGroupID(GroupID id_g)
uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e);
uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type);
uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type);
Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type);
uint GetGroupNumVehicleMinAge(CompanyID company, GroupID id_g, VehicleType type);
Money GetGroupProfitLastYearMinAge(CompanyID company, GroupID id_g, VehicleType type);
void SetTrainGroupID(Train *v, GroupID grp);
void UpdateTrainGroupID(Train *v);
+37 -19
View File
@@ -43,8 +43,9 @@ GroupStatistics::~GroupStatistics()
void GroupStatistics::Clear()
{
this->num_vehicle = 0;
this->num_profit_vehicle = 0;
this->profit_last_year = 0;
this->num_vehicle_min_age = 0;
this->profit_last_year_min_age = 0;
/* This is also called when NewGRF change. So the number of engines might have changed. Reallocate. */
free(this->num_engines);
@@ -136,13 +137,15 @@ void GroupStatistics::Clear()
GroupStatistics &stats = GroupStatistics::Get(v);
stats_all.num_vehicle += delta;
stats_all.profit_last_year += v->GetDisplayProfitLastYear() * delta;
stats.num_vehicle += delta;
stats.profit_last_year += v->GetDisplayProfitLastYear() * delta;
if (v->age > VEHICLE_PROFIT_MIN_AGE) {
stats_all.num_profit_vehicle += delta;
stats_all.profit_last_year += v->GetDisplayProfitLastYear() * delta;
stats.num_profit_vehicle += delta;
stats.profit_last_year += v->GetDisplayProfitLastYear() * delta;
stats_all.num_vehicle_min_age += delta;
stats_all.profit_last_year_min_age += v->GetDisplayProfitLastYear() * delta;
stats.num_vehicle_min_age += delta;
stats.profit_last_year_min_age += v->GetDisplayProfitLastYear() * delta;
}
}
@@ -159,19 +162,31 @@ void GroupStatistics::Clear()
}
/**
* Add a vehicle to the profit sum of its group.
* Add a vehicle's last year profit to the profit sum of its group.
*/
/* static */ void GroupStatistics::VehicleReachedProfitAge(const Vehicle *v)
/* static */ void GroupStatistics::AddProfitLastYear(const Vehicle *v)
{
GroupStatistics &stats_all = GroupStatistics::GetAllGroup(v);
GroupStatistics &stats = GroupStatistics::Get(v);
stats_all.num_profit_vehicle++;
stats_all.profit_last_year += v->GetDisplayProfitLastYear();
stats.num_profit_vehicle++;
stats.profit_last_year += v->GetDisplayProfitLastYear();
}
/**
* Add a vehicle to the profit sum of its group.
*/
/* static */ void GroupStatistics::VehicleReachedMinAge(const Vehicle *v)
{
GroupStatistics &stats_all = GroupStatistics::GetAllGroup(v);
GroupStatistics &stats = GroupStatistics::Get(v);
stats_all.num_vehicle_min_age++;
stats_all.profit_last_year_min_age += v->GetDisplayProfitLastYear();
stats.num_vehicle_min_age++;
stats.profit_last_year_min_age += v->GetDisplayProfitLastYear();
}
/**
* Recompute the profits for all groups.
*/
@@ -191,7 +206,10 @@ void GroupStatistics::Clear()
}
for (const Vehicle *v : Vehicle::Iterate()) {
if (v->IsPrimaryVehicle() && v->age > VEHICLE_PROFIT_MIN_AGE) GroupStatistics::VehicleReachedProfitAge(v);
if (v->IsPrimaryVehicle()) {
GroupStatistics::AddProfitLastYear(v);
if (v->age > VEHICLE_PROFIT_MIN_AGE) GroupStatistics::VehicleReachedMinAge(v);
}
}
}
@@ -789,30 +807,30 @@ uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type)
* @param type The vehicle type of the group
* @return The number of vehicles above profit minimum age in the group
*/
uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type)
uint GetGroupNumVehicleMinAge(CompanyID company, GroupID id_g, VehicleType type)
{
uint count = 0;
for (const Group *g : Group::Iterate()) {
if (g->parent == id_g) count += GetGroupNumProfitVehicle(company, g->index, type);
if (g->parent == id_g) count += GetGroupNumVehicleMinAge(company, g->index, type);
}
return count + GroupStatistics::Get(company, id_g, type).num_profit_vehicle;
return count + GroupStatistics::Get(company, id_g, type).num_vehicle_min_age;
}
/**
* Get last year's profit for the group with GroupID
* id_g and its sub-groups.
* Get last year's profit of vehicles above minimum age
* for the group with GroupID id_g and its sub-groups.
* @param company The company the group belongs to
* @param id_g The GroupID of the group used
* @param type The vehicle type of the group
* @return Last year's profit for the group
* @return Last year's profit of vehicles above minimum age for the group
*/
Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type)
Money GetGroupProfitLastYearMinAge(CompanyID company, GroupID id_g, VehicleType type)
{
Money sum = 0;
for (const Group *g : Group::Iterate()) {
if (g->parent == id_g) sum += GetGroupProfitLastYear(company, g->index, type);
if (g->parent == id_g) sum += GetGroupProfitLastYearMinAge(company, g->index, type);
}
return sum + GroupStatistics::Get(company, id_g, type).profit_last_year;
return sum + GroupStatistics::Get(company, id_g, type).profit_last_year_min_age;
}
void RemoveAllGroupsForCompany(const CompanyID company)
+35 -14
View File
@@ -27,6 +27,7 @@
#include "gui.h"
#include "group_cmd.h"
#include "vehicle_cmd.h"
#include "gfx_func.h"
#include "widgets/group_widget.h"
@@ -72,15 +73,21 @@ static const NWidgetPart _nested_group_widgets[] = {
/* right part */
NWidget(NWID_VERTICAL),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GL_GROUP_BY_ORDER), SetMinimalSize(81, 12), SetDataTip(STR_STATION_VIEW_GROUP, STR_TOOLTIP_GROUP_ORDER),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_GROUP_BY_DROPDOWN), SetMinimalSize(167, 12), SetDataTip(0x0, STR_TOOLTIP_GROUP_ORDER),
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 12), SetResize(1, 0), EndContainer(),
EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_SORT_BY_ORDER), SetMinimalSize(81, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_SORT_BY_DROPDOWN), SetMinimalSize(167, 12), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_FILTER_BY_CARGO), SetMinimalSize(167, 12), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_FILTER_CRITERIA),
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(12, 12), SetResize(1, 0), EndContainer(),
NWidget(NWID_VERTICAL),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GL_GROUP_BY_ORDER), SetFill(1, 0), SetMinimalSize(0, 12), SetDataTip(STR_STATION_VIEW_GROUP, STR_TOOLTIP_GROUP_ORDER),
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_GL_SORT_BY_ORDER), SetFill(1, 0), SetMinimalSize(0, 12), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER),
EndContainer(),
NWidget(NWID_VERTICAL),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_GROUP_BY_DROPDOWN), SetFill(1, 0), SetMinimalSize(0, 12), SetDataTip(0x0, STR_TOOLTIP_GROUP_ORDER),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_SORT_BY_DROPDOWN), SetFill(1, 0), SetMinimalSize(0, 12), SetDataTip(0x0, STR_TOOLTIP_SORT_CRITERIA),
EndContainer(),
NWidget(NWID_VERTICAL),
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetResize(1, 0), EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GL_FILTER_BY_CARGO), SetMinimalSize(0, 12), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_FILTER_CRITERIA),
NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(0, 12), SetResize(1, 0), EndContainer(),
EndContainer(),
EndContainer(),
EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_MATRIX, COLOUR_GREY, WID_GL_LIST_VEHICLE), SetMinimalSize(248, 0), SetMatrixDataTip(1, 0, STR_NULL), SetResize(1, 1), SetFill(1, 0), SetScrollbar(WID_GL_LIST_VEHICLE_SCROLLBAR),
@@ -295,13 +302,13 @@ private:
/* draw the profit icon */
x = rtl ? x - WidgetDimensions::scaled.hsep_normal - this->column_size[VGC_PROFIT].width : x + WidgetDimensions::scaled.hsep_normal + this->column_size[VGC_AUTOREPLACE].width;
SpriteID spr;
uint num_profit_vehicle = GetGroupNumProfitVehicle(this->vli.company, g_id, this->vli.vtype);
Money profit_last_year = GetGroupProfitLastYear(this->vli.company, g_id, this->vli.vtype);
if (num_profit_vehicle == 0) {
uint num_vehicle_min_age = GetGroupNumVehicleMinAge(this->vli.company, g_id, this->vli.vtype);
Money profit_last_year_min_age = GetGroupProfitLastYearMinAge(this->vli.company, g_id, this->vli.vtype);
if (num_vehicle_min_age == 0) {
spr = SPR_PROFIT_NA;
} else if (profit_last_year < 0) {
} else if (profit_last_year_min_age < 0) {
spr = SPR_PROFIT_NEGATIVE;
} else if (profit_last_year < VEHICLE_PROFIT_THRESHOLD * num_profit_vehicle) {
} else if (profit_last_year_min_age < VEHICLE_PROFIT_THRESHOLD * num_vehicle_min_age) {
spr = SPR_PROFIT_SOME;
} else {
spr = SPR_PROFIT_LOT;
@@ -406,6 +413,20 @@ public:
size->height = 4 * resize->height;
break;
case WID_GL_GROUP_BY_DROPDOWN:
size->width = GetStringListWidth(this->vehicle_group_by_names) + padding.width;
break;
case WID_GL_SORT_BY_DROPDOWN:
size->width = GetStringListWidth(this->vehicle_group_none_sorter_names);
size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names));
size->width += padding.width;
break;
case WID_GL_FILTER_BY_CARGO:
size->width = GetStringListWidth(this->cargo_filter_texts) + padding.width;
break;
case WID_GL_MANAGE_VEHICLES_DROPDOWN: {
Dimension d = this->GetActionDropdownSize(true, true);
d.height += padding.height;
+1 -1
View File
@@ -126,7 +126,7 @@ struct EndGameWindow : EndGameHighScoreBaseWindow {
void Close() override
{
if (!_networking) Command<CMD_PAUSE>::Post(PM_PAUSED_NORMAL, false); // unpause
ShowHighscoreTable(this->window_number, this->rank);
if (_game_mode != GM_MENU) ShowHighscoreTable(this->window_number, this->rank);
this->EndGameHighScoreBaseWindow::Close();
}
+18 -5
View File
@@ -2040,12 +2040,14 @@ CommandCost CmdBuildIndustry(DoCommandFlag flags, TileIndex tile, IndustryType i
Industry *ind = nullptr;
if (deity_prospect || (_game_mode != GM_EDITOR && _current_company != OWNER_DEITY && _settings_game.construction.raw_industry_construction == 2 && indspec->IsRawIndustry())) {
if (flags & DC_EXEC) {
/* Prospected industries are build as OWNER_TOWN to not e.g. be build on owned land of the founder */
Backup<CompanyID> cur_company(_current_company, OWNER_TOWN, FILE_LINE);
/* Prospecting has a chance to fail, however we cannot guarantee that something can
* be built on the map, so the chance gets lower when the map is fuller, but there
* is nothing we can really do about that. */
if (deity_prospect || Random() <= indspec->prospecting_chance) {
bool prospect_success = deity_prospect || Random() <= indspec->prospecting_chance;
if (prospect_success) {
/* Prospected industries are build as OWNER_TOWN to not e.g. be build on owned land of the founder */
IndustryAvailabilityCallType calltype = _current_company == OWNER_DEITY ? IACT_RANDOMCREATION : IACT_PROSPECTCREATION;
Backup<CompanyID> cur_company(_current_company, OWNER_TOWN, FILE_LINE);
for (int i = 0; i < 5000; i++) {
/* We should not have more than one Random() in a function call
* because parameter evaluation order is not guaranteed in the c++ standard
@@ -2056,13 +2058,20 @@ CommandCost CmdBuildIndustry(DoCommandFlag flags, TileIndex tile, IndustryType i
/* Check now each layout, starting with the random one */
for (size_t j = 0; j < num_layouts; j++) {
layout = (layout + 1) % num_layouts;
ret = CreateNewIndustryHelper(tile, it, flags, indspec, layout, random_var8f, random_initial_bits, cur_company.GetOriginalValue(), _current_company == OWNER_DEITY ? IACT_RANDOMCREATION : IACT_PROSPECTCREATION, &ind);
ret = CreateNewIndustryHelper(tile, it, flags, indspec, layout, random_var8f, random_initial_bits, cur_company.GetOriginalValue(), calltype, &ind);
if (ret.Succeeded()) break;
}
if (ret.Succeeded()) break;
}
cur_company.Restore();
}
if (ret.Failed() && IsLocalCompany()) {
if (prospect_success) {
ShowErrorMessage(STR_ERROR_CAN_T_PROSPECT_INDUSTRY, STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING, WL_INFO);
} else {
ShowErrorMessage(STR_ERROR_CAN_T_PROSPECT_INDUSTRY, STR_ERROR_PROSPECTING_WAS_UNLUCKY, WL_INFO);
}
}
cur_company.Restore();
}
} else {
size_t layout = first_layout;
@@ -2228,10 +2237,14 @@ static uint GetNumberOfIndustries()
25, // low
55, // normal
80, // high
0, // custom
};
assert(lengthof(numof_industry_table) == ID_END);
uint difficulty = (_game_mode != GM_EDITOR) ? _settings_game.difficulty.industry_density : (uint)ID_VERY_LOW;
if (difficulty == ID_CUSTOM) return std::min<uint>(IndustryPool::MAX_SIZE, _settings_game.game_creation.custom_industry_number);
return std::min<uint>(IndustryPool::MAX_SIZE, ScaleByMapSize(numof_industry_table[difficulty]));
}
+23 -17
View File
@@ -380,7 +380,7 @@ static const NWidgetPart _nested_select_game_widgets[] = {
NWidget(WWT_PANEL, COLOUR_BROWN),
NWidget(NWID_SPACER), SetMinimalSize(0, 8),
/* 'generate game' and 'load game' buttons */
/* 'New Game' and 'Load Game' buttons */
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GENERATE_GAME), SetMinimalSize(158, 12),
SetDataTip(STR_INTRO_NEW_GAME, STR_INTRO_TOOLTIP_NEW_GAME), SetPadding(0, 0, 0, 10), SetFill(1, 0),
@@ -390,7 +390,7 @@ static const NWidgetPart _nested_select_game_widgets[] = {
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
/* 'play scenario' and 'play heightmap' buttons */
/* 'Play Scenario' and 'Play Heightmap' buttons */
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_PLAY_SCENARIO), SetMinimalSize(158, 12),
SetDataTip(STR_INTRO_PLAY_SCENARIO, STR_INTRO_TOOLTIP_PLAY_SCENARIO), SetPadding(0, 0, 0, 10), SetFill(1, 0),
@@ -400,7 +400,7 @@ static const NWidgetPart _nested_select_game_widgets[] = {
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
/* 'edit scenario' and 'play multiplayer' buttons */
/* 'Scenario Editor' and 'Multiplayer' buttons */
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_EDIT_SCENARIO), SetMinimalSize(158, 12),
SetDataTip(STR_INTRO_SCENARIO_EDITOR, STR_INTRO_TOOLTIP_SCENARIO_EDITOR), SetPadding(0, 0, 0, 10), SetFill(1, 0),
@@ -410,7 +410,7 @@ static const NWidgetPart _nested_select_game_widgets[] = {
NWidget(NWID_SPACER), SetMinimalSize(0, 7),
/* climate selection buttons */
/* Climate selection buttons */
NWidget(NWID_HORIZONTAL),
NWidget(NWID_SPACER), SetMinimalSize(10, 0), SetFill(1, 0),
NWidget(WWT_IMGBTN_2, COLOUR_ORANGE, WID_SGI_TEMPERATE_LANDSCAPE), SetMinimalSize(77, 55),
@@ -439,7 +439,7 @@ static const NWidgetPart _nested_select_game_widgets[] = {
EndContainer(),
EndContainer(),
/* 'game options' and 'advanced settings' buttons */
/* 'Game Options' and 'Settings' buttons */
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_OPTIONS), SetMinimalSize(158, 12),
SetDataTip(STR_INTRO_GAME_OPTIONS, STR_INTRO_TOOLTIP_GAME_OPTIONS), SetPadding(0, 0, 0, 10), SetFill(1, 0),
@@ -449,29 +449,35 @@ static const NWidgetPart _nested_select_game_widgets[] = {
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
/* 'AO settings', 'Game Script settings', and 'newgrf settings' buttons */
/* 'AI Settings' and 'Game Script Settings' buttons */
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_AI_SETTINGS), SetMinimalSize(105, 12),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_AI_SETTINGS), SetMinimalSize(158, 12),
SetDataTip(STR_INTRO_AI_SETTINGS, STR_INTRO_TOOLTIP_AI_SETTINGS), SetPadding(0, 0, 0, 10), SetFill(1, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GS_SETTINGS), SetMinimalSize(106, 12),
SetDataTip(STR_INTRO_GAMESCRIPT_SETTINGS, STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS), SetPadding(0, 0, 0, 0), SetFill(1, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GRF_SETTINGS), SetMinimalSize(105, 12),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GS_SETTINGS), SetMinimalSize(158, 12),
SetDataTip(STR_INTRO_GAMESCRIPT_SETTINGS, STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS), SetPadding(0, 10, 0, 0), SetFill(1, 0),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
/* 'Check Online Content' and 'NewGRF Settings' buttons */
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_CONTENT_DOWNLOAD), SetMinimalSize(158, 12),
SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), SetPadding(0, 0, 0, 10), SetFill(1, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GRF_SETTINGS), SetMinimalSize(158, 12),
SetDataTip(STR_INTRO_NEWGRF_SETTINGS, STR_INTRO_TOOLTIP_NEWGRF_SETTINGS), SetPadding(0, 10, 0, 0), SetFill(1, 0),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
/* 'online content' and 'highscore' buttons */
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_CONTENT_DOWNLOAD), SetMinimalSize(158, 12),
SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), SetPadding(0, 0, 0, 10), SetFill(1, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_HIGHSCORE), SetMinimalSize(158, 12),
SetDataTip(STR_INTRO_HIGHSCORE, STR_INTRO_TOOLTIP_HIGHSCORE), SetPadding(0, 10, 0, 0), SetFill(1, 0),
/* 'Highscore Table' button */
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_HIGHSCORE), SetMinimalSize(316, 12),
SetDataTip(STR_INTRO_HIGHSCORE, STR_INTRO_TOOLTIP_HIGHSCORE), SetPadding(0, 10, 0, 10), SetFill(1, 0),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 6),
/* 'exit program' button */
/* 'Exit' button */
NWidget(NWID_HORIZONTAL),
NWidget(NWID_SPACER), SetFill(1, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_EXIT), SetMinimalSize(128, 12),
+77 -28
View File
@@ -500,7 +500,7 @@ void DrawFoundation(TileInfo *ti, Foundation f)
if (!IsNonContinuousFoundation(f)) {
/* Lower part of foundation */
AddSortableSpriteToDraw(
leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z
leveled_base + (ti->tileh & ~SLOPE_STEEP), PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z
);
}
@@ -512,38 +512,44 @@ void DrawFoundation(TileInfo *ti, Foundation f)
byte inclined = highest_corner * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y,
f == FOUNDATION_INCLINED_X ? 16 : 1,
f == FOUNDATION_INCLINED_Y ? 16 : 1,
f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1,
f == FOUNDATION_INCLINED_Y ? TILE_SIZE : 1,
TILE_HEIGHT, ti->z
);
OffsetGroundSprite(31, 9);
OffsetGroundSprite(0, 0);
} else if (IsLeveledFoundation(f)) {
AddSortableSpriteToDraw(leveled_base + SlopeWithOneCornerRaised(highest_corner), PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z - TILE_HEIGHT);
OffsetGroundSprite(31, 1);
AddSortableSpriteToDraw(leveled_base + SlopeWithOneCornerRaised(highest_corner), PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z - TILE_HEIGHT);
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
} else if (f == FOUNDATION_STEEP_LOWER) {
/* one corner raised */
OffsetGroundSprite(31, 1);
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
} else {
/* halftile foundation */
int x_bb = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? 8 : 0);
int y_bb = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? 8 : 0);
int x_bb = (((highest_corner == CORNER_W) || (highest_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
int y_bb = (((highest_corner == CORNER_S) || (highest_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
AddSortableSpriteToDraw(halftile_base + highest_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, 8, 8, 7, ti->z + TILE_HEIGHT);
OffsetGroundSprite(31, 9);
AddSortableSpriteToDraw(halftile_base + highest_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1, ti->z + TILE_HEIGHT);
/* Reposition ground sprite back to original position after bounding box change above. This is similar to
* RemapCoords() but without zoom scaling. */
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
OffsetGroundSprite(-pt.x, -pt.y);
}
} else {
if (IsLeveledFoundation(f)) {
/* leveled foundation */
AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z);
OffsetGroundSprite(31, 1);
AddSortableSpriteToDraw(leveled_base + ti->tileh, PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z);
OffsetGroundSprite(0, -(int)TILE_HEIGHT);
} else if (IsNonContinuousFoundation(f)) {
/* halftile foundation */
Corner halftile_corner = GetHalftileFoundationCorner(f);
int x_bb = (((halftile_corner == CORNER_W) || (halftile_corner == CORNER_S)) ? 8 : 0);
int y_bb = (((halftile_corner == CORNER_S) || (halftile_corner == CORNER_E)) ? 8 : 0);
int x_bb = (((halftile_corner == CORNER_W) || (halftile_corner == CORNER_S)) ? TILE_SIZE / 2 : 0);
int y_bb = (((halftile_corner == CORNER_S) || (halftile_corner == CORNER_E)) ? TILE_SIZE / 2 : 0);
AddSortableSpriteToDraw(halftile_base + halftile_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, 8, 8, 7, ti->z);
OffsetGroundSprite(31, 9);
AddSortableSpriteToDraw(halftile_base + halftile_corner, PAL_NONE, ti->x + x_bb, ti->y + y_bb, TILE_SIZE / 2, TILE_SIZE / 2, TILE_HEIGHT - 1, ti->z);
/* Reposition ground sprite back to original position after bounding box change above. This is similar to
* RemapCoords() but without zoom scaling. */
Point pt = {(y_bb - x_bb) * 2, y_bb + x_bb};
OffsetGroundSprite(-pt.x, -pt.y);
} else if (IsSpecialRailFoundation(f)) {
/* anti-zig-zag foundation */
SpriteID spr;
@@ -554,18 +560,18 @@ void DrawFoundation(TileInfo *ti, Foundation f)
/* tile-slope = sloped along X/Y, foundation-slope = three corners raised */
spr = inclined_base + 2 * GetRailFoundationCorner(f) + ((ti->tileh == SLOPE_SW || ti->tileh == SLOPE_NE) ? 1 : 0);
}
AddSortableSpriteToDraw(spr, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z);
OffsetGroundSprite(31, 9);
AddSortableSpriteToDraw(spr, PAL_NONE, ti->x, ti->y, TILE_SIZE, TILE_SIZE, TILE_HEIGHT - 1, ti->z);
OffsetGroundSprite(0, 0);
} else {
/* inclined foundation */
byte inclined = GetHighestSlopeCorner(ti->tileh) * 2 + (f == FOUNDATION_INCLINED_Y ? 1 : 0);
AddSortableSpriteToDraw(inclined_base + inclined, PAL_NONE, ti->x, ti->y,
f == FOUNDATION_INCLINED_X ? 16 : 1,
f == FOUNDATION_INCLINED_Y ? 16 : 1,
f == FOUNDATION_INCLINED_X ? TILE_SIZE : 1,
f == FOUNDATION_INCLINED_Y ? TILE_SIZE : 1,
TILE_HEIGHT, ti->z
);
OffsetGroundSprite(31, 9);
OffsetGroundSprite(0, 0);
}
ti->z += ApplyPixelFoundationToSlope(f, &ti->tileh);
}
@@ -1089,7 +1095,7 @@ static bool RiverMakeWider(TileIndex tile, void *data)
/* If the tile is at height 0 after terraforming but the ocean hasn't flooded yet, don't build river. */
if (GetTileMaxZ(tile) == 0) return false;
TileIndex origin_tile = *(TileIndex *)data;;
TileIndex origin_tile = *(TileIndex *)data;
Slope cur_slope = GetTileSlope(tile);
Slope desired_slope = GetTileSlope(origin_tile); // Initialize matching the origin tile as a shortcut if no terraforming is needed.
@@ -1127,7 +1133,7 @@ static bool RiverMakeWider(TileIndex tile, void *data)
}
}
/* If we find an adjacent river tile, remember it. We'll terraform to match it later if we don't find a slope. */
if (IsTileFlat(tile)) flat_river_found = true;
if (IsTileFlat(other_tile)) flat_river_found = true;
}
}
/* We didn't find either an inclined or flat river, so we're climbing the wrong slope. Bail out. */
@@ -1176,17 +1182,57 @@ static bool RiverMakeWider(TileIndex tile, void *data)
Command<CMD_TERRAFORM_LAND>::Do(DC_EXEC | DC_AUTO, tile, to_change, true);
}
}
/* Update cur_slope after possibly terraforming. */
cur_slope = GetTileSlope(tile);
}
/* Sloped rivers need water both upstream and downstream. */
if (IsInclinedSlope(cur_slope)) {
DiagDirection slope_direction = GetInclinedSlopeDirection(cur_slope);
TileIndex upstream_tile = TileAddByDiagDir(tile, slope_direction);
TileIndex downstream_tile = TileAddByDiagDir(tile, ReverseDiagDir(slope_direction));
/* Don't look outside the map. */
if (!IsValidTile(upstream_tile) || !IsValidTile(downstream_tile)) return false;
/* Downstream might be new ocean created by our terraforming, and it hasn't flooded yet. */
bool downstream_is_ocean = GetTileZ(downstream_tile) == 0 && (GetTileSlope(downstream_tile) == SLOPE_FLAT || IsSlopeWithOneCornerRaised(GetTileSlope(downstream_tile)));
/* If downstream is dry, flat, and not ocean, try making it a river tile. */
if (!IsWaterTile(downstream_tile) && !downstream_is_ocean) {
/* If the tile upstream isn't flat, don't bother. */
if (GetTileSlope(downstream_tile) != SLOPE_FLAT) return false;
MakeRiver(downstream_tile, Random());
MarkTileDirtyByTile(downstream_tile);
/* Remove desert directly around the river tile. */
TileIndex cur_tile = downstream_tile;
CircularTileSearch(&cur_tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr);
}
/* If upstream is dry and flat, try making it a river tile. */
if (!IsWaterTile(upstream_tile)) {
/* If the tile upstream isn't flat, don't bother. */
if (GetTileSlope(upstream_tile) != SLOPE_FLAT) return false;
MakeRiver(upstream_tile, Random());
MarkTileDirtyByTile(upstream_tile);
/* Remove desert directly around the river tile. */
TileIndex cur_tile = upstream_tile;
CircularTileSearch(&cur_tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr);
}
}
/* Update cur_slope after possibly terraforming. */
cur_slope = GetTileSlope(tile);
/* If the tile slope matches the desired slope, add a river tile. */
if (cur_slope == desired_slope) {
MakeRiver(tile, Random());
MarkTileDirtyByTile(tile);
/* Remove desert directly around the river tile. */
TileIndex cur_tile = tile;
MarkTileDirtyByTile(cur_tile);
CircularTileSearch(&cur_tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr);
}
@@ -1289,7 +1335,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current)
current_river_length = DistanceManhattan(data->spring, tile);
radius = std::min(3u, (current_river_length / (long_river_length / 3u)) + 1u);
if (radius > 1) CircularTileSearch(&tile, radius + RandomRange(1), RiverMakeWider, (void *)&path->node.tile);
if (radius > 1) CircularTileSearch(&tile, radius, RiverMakeWider, (void *)&path->node.tile);
}
}
}
@@ -1460,6 +1506,9 @@ static void CreateRivers()
}
}
/* Widening rivers may have left some tiles requiring to be watered. */
ConvertGroundTilesIntoWaterTiles();
/* Run tile loop to update the ground density. */
for (uint i = 0; i != 256; i++) {
if (i % 64 == 0) IncreaseGeneratingWorldProgress(GWP_RIVER);
+5 -2
View File
@@ -1145,6 +1145,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Regs
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum aanvanklike lening: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimum bedrag wat 'n maatskappy kan leen (sonder die inagneming van inflasie)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Rentekoers: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lening rentekoers: beheer ook inflasie indien aangeskakel
@@ -2482,8 +2483,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Verhoog
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Kies Spoor Brug
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selekteer Pad Brug
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brugkeuring - klik op jou verkose brug om dit te bou
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Kabelstut, Staal
STR_BRIDGE_NAME_GIRDER_STEEL :Balk, Staal
STR_BRIDGE_NAME_CANTILEVER_STEEL :Vrydraer, Staal
@@ -3054,6 +3053,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorige s
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Gaan na vorige normale sprite, en ignoreer enige pseudo/her-kleur/font sprite en spring terug na die einde
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Voorstelling van geselekteerde sprite. Die belyning word geignoreer waneer sprite geteken word
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Beweeg die sprite rond, verander die X en Y afwyking. Ctrl-klik om die sprite agt lengtes rond te beweeg op 'n slag
###length 2
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Relatiewe herstel
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Herstel die huidige relatiewe verplasing
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X verplasing: {NUM}, Y verplasing: {NUM} (Werklik)
+47 -6
View File
@@ -199,6 +199,7 @@ STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}ح
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}حصان
STR_UNITS_POWER_SI :{COMMA}{NBSP}ك واط
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP} طن
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}طن
@@ -956,11 +957,14 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}اختر
STR_GAME_OPTIONS_RESOLUTION_OTHER :اخرى
STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}تسريع الأجهزة
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}حدد هذا المربع للسماح لـ OpenTTD بمحاولة استخدام تسريع الأجهزة. سيتم تطبيق الإعداد الذي تم تغييره فقط عند إعادة تشغيل اللعبة
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}اخترهذا المربع للسماح لـ OpenTTD بمحاولة استخدام تسريع الأجهزة. سيتم تطبيق الإعداد الذي تم تغييره فقط عند إعادة تشغيل اللعبة
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}لن يعمل الإعداد إلا بعد إعادة تشغيل اللعبة
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}حدد هذا المربع لمزامنة الشاشة (v-sync). سيتم تطبيق الإعداد الذي تم تغييره فقط عند إعادة تشغيل اللعبة. يعمل فقط مع تمكين تسريع الأجهزة (hardware acceleration)
STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}الكشف التلقائي عن الحجم
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}اختر هذا المربع لكشف حجم الواجهة تلقائيا
@@ -1129,6 +1133,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :يسار
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :متوسط
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :يمين
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :سعر الفائدة على القرض يتحكم أيضًا في التضخم ، إذا تم تمكينه
@@ -1146,6 +1151,7 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} سنة
STR_CONFIG_SETTING_RECESSIONS :حالات الركود: {STRING}
STR_CONFIG_SETTING_TRAIN_REVERSING :عدم السماح بعودة القطار إلى الخلف في المحطات: {STRING}
STR_CONFIG_SETTING_DISASTERS :الكوارث: {STRING}
@@ -1183,6 +1189,7 @@ STR_CONFIG_SETTING_INFLATION_HELPTEXT :تمكين ال
STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :الارتفاع الأقصى لبناء الجسور
STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :الطول الأقصى لبناء الأنفاق
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :طريقة بناء المصانع الأولية يدوية : {STRING}
###length 3
@@ -1269,6 +1276,7 @@ STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} ثان
###setting-zero-is-special
STR_CONFIG_SETTING_POPULATION_IN_LABEL :أعرض عدد السكان مع الاسم على العلامة: {STRING}
STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :اعرض عدد سكان البلدات في علماتها على الخريطة
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :سمك الخطوط في العرض: {STRING}
@@ -1347,6 +1355,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :اخضر غام
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :بنفسجي
###length 4
STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :رمادي إلى أحمر
###length 4
@@ -1391,7 +1400,7 @@ STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :اختر الو
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :استخدم {STRING} نمط التاريخ لاسم اللعبة المحفوظة
###length 3
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :طويل - 31 ديسمبر 2008
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :قصير - 31 - 12 - 2008
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :قصير (31-12-2008)
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ايزو 31-12-2008
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :إيقاف اللعبة تلقائيا عند بدأ لعبة جديدة: {STRING}
@@ -1477,6 +1486,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :السماح ب
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :السماح بلاعبين كمبيوترالذكاء الصناعي بالمشاركة في الالعاب الجماعية.
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes قبل تعليق الاسكربت: {STRING}
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB
STR_CONFIG_SETTING_SERVINT_ISPERCENT :فترات الصيانة بالنسبة المئوية : {STRING}
@@ -1490,6 +1500,7 @@ STR_CONFIG_SETTING_WAGONSPEEDLIMITS :السماح ب
STR_CONFIG_SETTING_DISABLE_ELRAILS :تعطيل سكة القطار الكهربائي: {STRING}
STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :وصول اول مركبة لمحطة اللاعب: {STRING}
STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :عرض جريدة عندما تصل السيارة الأولى إلى محطة اللاعب الجديد
STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :وصول اول مركبة لمحطة الخصوم: {STRING}
@@ -1543,6 +1554,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_ZERO :لا تنتهي
STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :مجمد
STR_CONFIG_SETTING_ALLOW_SHARES :السماح بشراء حصص من الشركات الاخرى: {STRING}
STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :عند التمكين ، السماح بشراء وبيع أسهم الشركة. ستكون الأسهم متاحة فقط للشركات التي بلغت سنًا معينة
@@ -1551,11 +1563,13 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :عند السح
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :اتاحة استخدام الأشارات بالأعلام قبل :{STRING}
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :الدوران خلال الاشارات: {STRING}
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :حدد أنواع الإشارات التي تريد التنقل خلالها عند النقر (Ctrl+Click) فوق إشارة مبنية باستخدام أداة الإشارة
###length 2
STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :اشارات الطريق فقط
STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :الكل واضح
###length 2
STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :اشارات الطريق فقط
STR_CONFIG_SETTING_TOWN_LAYOUT :تصميم الطرق للمدن الجديدة : {STRING}
###length 5
@@ -1577,6 +1591,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :محذور
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :مسموح
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :مسموح - نمط مدينة قابل للتعديل
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :توليد البضائع في المدينة: {STRING}
###length 2
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :تربيعي (أصلي)
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :خطي
@@ -1587,9 +1602,11 @@ STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :تنموا ول
STR_CONFIG_SETTING_TOOLBAR_POS :موقع شريط الأدوات الرئيسي: {STRING}
STR_CONFIG_SETTING_STATUSBAR_POS :موقع شريط المعلومات: {STRING}
STR_CONFIG_SETTING_SNAP_RADIUS :دائرة تثبيت النافذة: {STRING}
###setting-zero-is-special
STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :غير مفعل
STR_CONFIG_SETTING_SOFT_LIMIT :حدود نعومة النوافذ - غير ملتصقة - :{STRING}
STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :عدد النوافذ المفتوحة غير اللاصقة قبل أن يتم إغلاق النوافذ القديمة تلقائيًا لإفساح المجال للنوافذ الجديدة
###setting-zero-is-special
STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :غير مفعل
@@ -1615,6 +1632,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_FAST :سريع
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :سريع جدا
STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :عدد المدن التي ستصبح مدينة كبيرة، وبالتالي اي مدينة تبدء اكبر وتنمو بطريقة سريعة.
STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 في {COMMA}
###setting-zero-is-special
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :مضاعف المدن المبدئي: {STRING}
@@ -1626,6 +1644,7 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :كلما قمت
STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :ضبط هذا إلى أقل من 100٪ يؤدي إلى جعل التوزيع المتماثل يتصرف مثل التوزيع غير المتماثل. سيتم إعادة شحنات أقل غصبا إذا تم إرسال مبلغ معين إلى المحطة. إذا قمت بتعيينه على 0٪ ، فإن التوزيع المتماثل يتصرف تمامًا مثل التوزيع غير المتماثل
STR_CONFIG_SETTING_SHORT_PATH_SATURATION :تشبع المسارات القصيرة قبل استخدام المسارات عالية القدرة: {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :وحدات السرعة: {STRING}
###length 4
@@ -1669,11 +1688,13 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE} مصا
STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :توزيع البضائع{ORANGE}
STR_CONFIG_SETTING_AI :{ORANGE}المتنافسين
STR_CONFIG_SETTING_AI_NPC :{ORANGE} لاعبين الحاسوب
STR_CONFIG_SETTING_NETWORK :{ORANGE}شبكة الاتصال
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :موجد الطريق- قصاص الطريق - للقطارات:{STRING}
STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :موجد الطريق (قصاص الأثر) للعربات: {STRING}
STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :مكتشف المسار لاستخدامه لعربات الطرق
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :موجد طريق العبور للسفن: {STRING}
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :مكتشف المسار لاستخدامه للسفن
STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :العكس عند الإشارات: {STRING}
###length 2
STR_CONFIG_SETTING_PATHFINDER_NPF :NPF
@@ -1951,6 +1972,8 @@ STR_NETWORK_COMPANY_LIST_SPECTATE :شاهد
# Network client list
STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}اللاعبون عبر الإنترنت
STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}الاسم
STR_NETWORK_CLIENT_LIST_SPECTATORS :المشاهدين
STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(شركة جديدة)
# Matches ConnectionType
@@ -1961,6 +1984,7 @@ STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :منع
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}هل أنت متأكد أنك تريد طرد اللاعب '{STRING}'؟
STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}هل أنت متأكد أنك تريد حظر اللاعب '{STRING}'؟
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}هل أنت متأكد أنك تريد حذف شركة '{COMPANY}'؟
STR_NETWORK_ASK_RELAY_NO :{BLACK}لا
@@ -2251,8 +2275,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}زياد
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}اختر جسر السكة
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}اختر الجسر المناسب
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}بناء الجسور - اختر الجسر المفضل لديك لبنائة
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :تعليق, حديدي
STR_BRIDGE_NAME_GIRDER_STEEL :العارضة, حديدية
STR_BRIDGE_NAME_CANTILEVER_STEEL :الحامل, حديدي
@@ -2594,6 +2616,8 @@ STR_FRAMERATE_GAMESCRIPT :{BLACK} مخط
STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING}
###length 15
STR_FRAMETIME_CAPTION_GL_TRAINS : تكتكة القطار
STR_FRAMETIME_CAPTION_GL_LINKGRAPH :تأخر ارتباط الرسم البياني
STR_FRAMETIME_CAPTION_SOUND :اختلاط الصوت
STR_FRAMETIME_CAPTION_GAMESCRIPT :كتابة اللعبة
@@ -2638,7 +2662,9 @@ STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}عدد
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}قم بزيادة أقصى ارتفاع لأعلى قمة على الخريطة بواحد
STR_MAPGEN_SNOW_COVERAGE :{BLACK}تغطية الثلج:
STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}تقليل تغطية الثلوج بنسبة عشرة بالمائة
STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}%
STR_MAPGEN_DESERT_COVERAGE :{BLACK}مدى تغطيت السحراء:
STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}تقليل التغطية الصحراوية بنسبة عشرة بالمائة
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
STR_MAPGEN_LAND_GENERATOR :{BLACK}مولد الخريطة:
STR_MAPGEN_TERRAIN_TYPE :{BLACK} نوع التضاريس
@@ -2804,7 +2830,12 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}اذهب
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}العفريتة السابقة.
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}نابع للعفريتة الطبيعية التالية، تجاوز اي عفريتة موقوفة/ مصبوغة/مخطوطة و انهي في البداية.
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}عرض العفريتة المختارة حاليا. يتم تجاهل الموائمة عند رسم هذا العفريت.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}حرك العفريتة في الجوار، غير الاحداثيات س ، ص.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}حرك الرسمة، وقم بتغيير إزاحة X وY. قم ب Ctrl+Click لتحريك الكائن ثماني وحدات في المرة الواحدة
###length 2
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}الازاحة (X): {NUM}، الازاحة (Y): {NUM} (نسبي)
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}اختر عفريتة
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}اختر عفريتة من اي مكان في الشاشة.
@@ -3022,8 +3053,10 @@ STR_STATION_VIEW_GROUP :{BLACK}جمع
STR_STATION_VIEW_WAITING_AMOUNT :الكمية: في الانتظار
STR_STATION_VIEW_PLANNED_AMOUNT :المبلغ: تم تخطيطه
STR_STATION_VIEW_FROM :{YELLOW}{CARGO_SHORT} من {STATION}
STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT} من خلال {STATION}
STR_STATION_VIEW_TO :{YELLOW}{CARGO_SHORT} إلى {STATION}
STR_STATION_VIEW_TO_ANY :{RED}{CARGO_SHORT} إلى أي محطة
STR_STATION_VIEW_NONSTOP :{YELLOW}{CARGO_SHORT} بدون توقف
STR_STATION_VIEW_GROUP_V_S_D :عبر-المصدر-الوجهة
@@ -3276,6 +3309,7 @@ STR_PURCHASE_INFO_COST :{BLACK}التك
STR_PURCHASE_INFO_COST_REFIT :{BLACK}التكلفة: {GOLD}{CURRENCY_LONG}{BLACK} (تكلفة التغيير: {GOLD}{CURRENCY_LONG}{BLACK})
STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}الوزن: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT})
STR_PURCHASE_INFO_COST_SPEED :{BLACK}التكلفة: {GOLD}{CURRENCY_LONG}{BLACK} السرعة : {GOLD}{VELOCITY}
STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}التكلفة: {GOLD}{CURRENCY_LONG}{BLACK} (تكلفة التغير: {GOLD}{CURRENCY_LONG}{BLACK}) السرعة: {GOLD}{VELOCITY}
STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK} السعة {GOLD}{CARGO_LONG}, {CARGO_LONG}
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK} العربات ذات الطاقة: {GOLD}+{POWER}{BLACK} الوزن: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}يمكن تعديلها الى: {GOLD}{STRING}
@@ -3301,6 +3335,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}شراء
###length VEHICLE_TYPES
STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}شراء العربة وتجديد بضائعها
STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}شراء وإعادة تجهيز السفينة
###length VEHICLE_TYPES
STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}شراء العربة الموضحة
@@ -3818,13 +3853,14 @@ STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}حول
STR_TIMETABLE_TOOLTIP :{BLACK}جدولة الأوامر - اضغط على الامر لاظهارة
STR_TIMETABLE_NO_TRAVEL :لا رحيل
STR_TIMETABLE_NOT_TIMETABLEABLE :المغادرة (ذاتي: بواسطة الامر اليدوي التالي)
STR_TIMETABLE_NOT_TIMETABLEABLE :المغادرة (ذاتي: مجدول بواسطة الامر اليدوي التالي)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :مسافر (غير مجدوله)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :سافر(بدون جدول زمني) مع تقريبا {2:VELOCITY}
STR_TIMETABLE_TRAVEL_FOR :مسافر لـ {STRING}
STR_TIMETABLE_TRAVEL_FOR_SPEED :سافر لي {STRING} بمعدل {VELOCITY}
STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :سافر(إلى {STRING}, بدون جدول زمني)
STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :سافر (إلى {STRING}, بدون الجدول الزمني) مع تقريبا {VELOCITY}
STR_TIMETABLE_STAY_FOR_ESTIMATED :(البقاء ل{STRING}، ليس مجدول)
STR_TIMETABLE_STAY_FOR :ويبقى لـ {STRING}
STR_TIMETABLE_AND_TRAVEL_FOR :ويسافر لـ {STRING}
STR_TIMETABLE_DAYS :{COMMA}يوم
@@ -3900,7 +3936,10 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}واحد
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW} شاشة اخطاء الذكاء الصناعي متوفرة فقط للخادم (سرڤر)
# AI configuration window
STR_AI_CONFIG_CAPTION_AI :{WHITE}اعدادات االذكاء الاصطناعي
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}تكوين مخطوط اللعبة
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}مخطوطات اللعبة الذي سيتم تحميله في اللعبة التالية
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}الذكاء الاصطناعي الذي سيتم تحميله في اللعبة التالية
STR_AI_CONFIG_HUMAN_PLAYER :لاعب انساني
STR_AI_CONFIG_RANDOM_AI :ذكاء صناعي عشوائي
STR_AI_CONFIG_NONE :(لا شيء)
@@ -4185,6 +4224,7 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :مستودع خ
STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} طويل للغايه بعد اﻹستبدال
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}لا يوجد نظام مطبق للتبديل/ التجديد
STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(حدود التكلفة للتبديل)
STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}العربة الجديدة لا تستطيع حمل {STRING}
# Rail construction errors
STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}تركيبة سكك غير صالحة
@@ -4213,6 +4253,7 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}تعذر
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}تعذر إزاله سكه الترام من هنا...
STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... لا يوجد طريق
STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... لا يوجد سكه ترام هنا
STR_ERROR_NO_SUITABLE_ROAD :{WHITE}لا يوجد طريق مناسب
STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}لا يوجد ترام مناسب
# Waterway construction errors
+5 -2
View File
@@ -1108,6 +1108,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Eskuina
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Gehienezko mailegua joko hasieran: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Konpainiek eskatu dezaketen gehienezko mailegua(inflazioa kontua hartu gabe)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Interes tasa: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Maileguen interes tasa; inflazioa ere kontrolatuko du, gaitzen bada
@@ -2354,8 +2355,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Seinale
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Trenbide zubia aukeratu
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Errepide zubia aukeratu
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Zubi aukerak - eraiki nahi duzun zubian klik egin
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Altzairuzko zubi esekia
STR_BRIDGE_NAME_GIRDER_STEEL :Altzairuzko habe zubia
STR_BRIDGE_NAME_CANTILEVER_STEEL :Altzairuzko mentsula zubia
@@ -2876,6 +2875,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Aldez au
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Aurreko grafiko arruntera joan, pseudo/birkoloretu/grafiko tipoak desgaituz
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Orain aukeratutako grafikoaren aurkezpena. Alineazioa ez da kontua hartzen grafiko hau egiterakoan
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Sprite-a mugitu ingurunean, X eta Y-ren desplazamenduak aldatuz. Ctrl+Klik sprite-a zortzi unitatero mugitzeko
###length 2
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Erlatiboa berezarri
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Momentuan dauden desplazamendu erlatiboak erreseteatu
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X desplazamendua: {NUM}, Y desplazamendua: {NUM} (Absolutua)
+5 -2
View File
@@ -1456,6 +1456,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :правару
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максымальная сума пазыкі: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максымальная сума пазыкі для кампаніі (без уліку інфляцыі)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Адсоткавая стаўка: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Адсоткавая стаўка па пазыках; таксама кантралюе інфляцыю, калі тая ўключана
@@ -2830,8 +2831,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Павя
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Выберыце чыгуначны мост
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Выберыце аўтамабiльны мост
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Выбар моста — пстрыкніце па малюнку моста, які Вы хочаце пабудаваць
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Падвесны сталёвы
STR_BRIDGE_NAME_GIRDER_STEEL :Бэлечны сталёвы
STR_BRIDGE_NAME_CANTILEVER_STEEL :Кансольны сталёвы
@@ -3404,6 +3403,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Папя
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Перайсьці да папярэдняга звычайнага спрайта, прапускаючы змяняючыя колер, шрыфтавыя, псэўдаспрайты. Пераход з пачатку сьпісу да апошняга спрайта.
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Прадстаўленьне выбранага спрайта. Выраўноўваньне не ўлічваецца пры прарысоўцы гэтага спрайта.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Рухайце спрайт, зьмяняючы зрушэньне па X і па Y. Ctrl+пстрычка, каб зрушыць спрайт на восем адзінак за раз
###length 2
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Скід зрушэння
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Скінуць значэнні адноснага зрушэння
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Зрушэнне X: {NUM}; зрушэнне Y: {NUM} (абсалютнае)
+125 -55
View File
@@ -201,6 +201,15 @@ STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}cv
STR_UNITS_POWER_SI :{COMMA}{NBSP}kW
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP}T
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}t
@@ -228,8 +237,8 @@ STR_UNITS_HEIGHT_SI :{COMMA}{NBSP}m
# Common window strings
STR_LIST_FILTER_TITLE :{BLACK}Filtro:
STR_LIST_FILTER_OSKTITLE :{BLACK}Digite o filtro de série
STR_LIST_FILTER_TOOLTIP :{BLACK}Digite uma palavra-chave para filtrar a lista
STR_LIST_FILTER_OSKTITLE :{BLACK}Insira uma ou mais palavras-chave para filtrar a lista
STR_LIST_FILTER_TOOLTIP :{BLACK}Insira uma ou mais palavras-chave para filtrar a lista
STR_TOOLTIP_GROUP_ORDER :{BLACK}Selecionar ordem de agrupamento
STR_TOOLTIP_SORT_ORDER :{BLACK}Selecione ordem de classificação (descendente/ascendente)
@@ -378,9 +387,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Geraçã
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Geração de indústria
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Contrução de rodovias
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construção de trilho de bonde
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Shift alterna construção/exibição de preço estimado
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Ctrl seleciona a área na diagonal. Shift alterna construir/mostrar estimativa de custo
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Colocar placa
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Shift alterna construção/preço estimado
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl seleciona a área na diagonal. Shift alterna construir/mostrar estimativa de custo
# Scenario editor file menu
###length 7
@@ -396,6 +405,8 @@ STR_SCENEDIT_FILE_MENU_QUIT :Sair
###length 15
STR_SETTINGS_MENU_GAME_OPTIONS :Opções do jogo
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Configurações
STR_SETTINGS_MENU_AI_SETTINGS :Definições de IA
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Definições de script do jogo
STR_SETTINGS_MENU_NEWGRF_SETTINGS :Definições do NewGRF
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opções de Transparência
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Nomes de cidades exibidos
@@ -735,7 +746,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Exibir i
STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Exibir fluxo de carga no mapa
STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Exibir rotas de transporte no mapa
STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Exibir vegetação no mapa
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Exibir proprietários de terreno no mapa
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Exibir proprietários de terrenos no mapa
STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clique em um tipo de indústria para alternar sua exibição. Ctrl+Clique desabilita todos os tipos exceto a selecionada. Ctrl+Clique nela novamente para habilitar todos os tipos de indústrias
STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clique em uma compania para alternar a exibição de suas propriedades. Ctrl+Clique desabilita todas as companias exceto a selecionada. Ctrl+Clique nela novamente para habilitar todas as companias
STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clique numa carga para alternar a exibição de sua propriedade. Ctrl+Clique desativa todas as cargas exceto a selecionada. Ctrl+Clique novamente para exibir todas
@@ -996,10 +1007,21 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A config
STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync
STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Marque esta caixa para habilitar o v-sync na tela. Qualquer mudança nesta configuração só será aplicada após reiniciar o jogo. Só funciona com a aceleração de hardware habilitada
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Motorista atual: {STRING}
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Driver de vídeo atual: {STRING}
STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Tamanho da interface
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arraste o controle deslizante para definir o tamanho do interface. Mantenha pressionada a tecla Ctrl para um ajuste contínuo
STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Detectar tamanho automaticamente
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Marque esta caixa para detectar o tamanho da interface automaticamente
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Escalar de chanfros
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marque esta caixa para dimensionar os chanfros por tamanho de interface
STR_GAME_OPTIONS_GUI_SCALE_1X :1x
STR_GAME_OPTIONS_GUI_SCALE_2X :2x
STR_GAME_OPTIONS_GUI_SCALE_3X :3x
STR_GAME_OPTIONS_GUI_SCALE_4X :4x
STR_GAME_OPTIONS_GUI_SCALE_5X :5x
STR_GAME_OPTIONS_GRAPHICS :{BLACK}Gráficos
@@ -1185,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Empréstimo Inicial Máximo: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantia máxima a ser emprestada para uma companhia (sem levar em conta a inflação)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Taxa de Juros: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Juros de empréstimo; também controla inflação, se ativado
@@ -1411,6 +1434,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Espessura da li
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar o nome do NewGRF na janela de comprar veículos: {STRING}
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Adicione uma linha à janela de construção do veículo, mostrando de qual NewGRF o veículo selecionado vem.
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostrar as cargas que os veículos podem transportar nas janelas de listagem {STRING}
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Quando ativado, a carga transportável do veículo aparecerá acima dela nas listas de veículos
STR_CONFIG_SETTING_LANDSCAPE :Terreno: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :O terreno define a jogabilidade básica com diferentes cargas e requerimentos para o crescimento das cidades. NewGRF's e Scripts de Jogo permitem um controle mais fino
@@ -1902,13 +1927,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Demore {STRING}
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Tempo tomado para cada recálculo de um componente de um gráfico. Quando um recálculo começa, um processo é criado e é executado por esse número de dias. Quanto menos dias você define, maior a chance do processo não terminar quando era para ter terminado. Nesse caso, o jogo irá parar até ele terminar ("lag"). Quanto maior você definir isso, mais tempo leva para a distribuição ser atualizada quando as rotas mudarem.
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribuição para passageiros: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"simétrico" significa que aproximadamente a mesma quantidade de passageiros seenviada da estação A para a estação B assim como de B para A. "assimétrico" significa que a quantidade de passageiros enviada em ambas as direções será arbitrária. "manual" significa que não haverá distribuição automática.
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo número de passageiros ide uma estação A para uma estação B como de B para A. "Assimétrico" significa que um número arbitrário de passageiros pode ir em qualquer direção. "Manual" significa que não haverá distribuição automática para os passageiros.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribuição para correios: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"simétrico" significa que aproximadamente a mesma quantidade de correio será enviada da estação A para a estação B assim como de B para A. "assimétrico" significa que a quantidade de correio enviada em ambas as direções será arbitrária. "manual" significa que não haverá distribuição automática.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correspondência será enviada de uma estação A para uma estação B como de B para A. "Assimétrica" significa que quantidades arbitrárias de correspondência podem ser enviadas em qualquer direção. "Manual" significa que nenhuma distribuição automática ocorrerá por correio.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribuição para classe BLINDADOS de carga: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe BLINDADO indica objetos de valor no clima temperado, diamantes no subtropical ou ouro no subártico. NewGRF's podem mudar isso. "simétrico" significa que aproximadamente a mesma quantidade de carga será enviada da estação A para a estação B assim como de B para A. "assimétrico" significa que quantidades de carga arbitrárias serão enviadas em ambas as direções. "manual" significa que não haverá distribuição automática. Para objetos de valor, sugere-se usar "assimétrico" ou "manual" para subártico, já que bancos não enviam ouro de volta a minas. Para temperado e subtropical você pode selecionar "simétrico", já que bancos trocam objetos de valor entre si.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRFs podem mudar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribuição para outras classes de carga: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"assimétrico" significa que quantidades de carga arbitrárias serão enviadas em ambas as direções. "manual" significa que não haverá distribuição automática. Você provavelmente irá querer usar "assimétrico" ou "manual".
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Assimétrico" significa que quantidades arbitrárias de carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática dessas cargas.
###length 3
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :assimétrico
@@ -2046,6 +2071,8 @@ STR_INTRO_HIGHSCORE :{BLACK}Pontuaç
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Configurações
STR_INTRO_NEWGRF_SETTINGS :{BLACK}Configurar NewGRF
STR_INTRO_ONLINE_CONTENT :{BLACK}Checar conteúdo on-line
STR_INTRO_AI_SETTINGS :{BLACK}Definições de IA
STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Definições de Script do Jogo
STR_INTRO_QUIT :{BLACK}Sair
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Iniciar um novo jogo. Ctrl+Clique para pular a configuração do mapa
@@ -2065,6 +2092,8 @@ STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Exibe as
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Config. de exibição
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Exibir configs. dos NewGRF
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Checar por conteúdo novo e atualizado para baixar
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Mostrar definições de IA
STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Mostrar definições de Script do Jogo
STR_INTRO_TOOLTIP_QUIT :{BLACK}Sair do 'OpenTTD'
STR_INTRO_BASESET :{BLACK}Faltam {NUM} "sprite{P "" s}" no conjunto de gráficos base selecionado. Por favor verifique se há atualizações para ele.
@@ -2455,13 +2484,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :aguardando atua
STR_NETWORK_MESSAGE_CLIENT_LEAVING :saindo
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} entrou no jogo
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} entrou no jogo (Client #{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} entrou na companhia #{2:NUM}
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} entrou no jogo (Client #{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} entrou na empresa #{2:NUM}
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} está assistindo ao jogo
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} abriu uma nova companhia (#{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} saiu do jogo ({2:STRING})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} iniciou uma nova empresa (#{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} saiu do jogo ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} mudou seu nome para {STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} deu {2:CURRENCY_LONG} a {1:STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} deu {2:CURRENCY_LONG} a {1:STRING}
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}O servidor fechou a sessão
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}O servidor está reiniciando...{}Aguarde...
STR_NETWORK_MESSAGE_KICKED :*** {STRING} foi kickado. Motivo: ({STRING})
@@ -2472,7 +2501,7 @@ STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Seu serv
STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Outros jogadores não poderão se conectar ao seu servidor
# Content downloading window
STR_CONTENT_TITLE :{WHITE}Baixando conteúdo
STR_CONTENT_TITLE :{WHITE}Download de conteúdo
STR_CONTENT_TYPE_CAPTION :{BLACK}Tipo
STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Tipo do conteúdo
STR_CONTENT_NAME_CAPTION :{BLACK}Nome
@@ -2494,7 +2523,7 @@ STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Visitar
STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Baixar
STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Baixa o conteúdo selecionado
STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Tamanho total do download: {WHITE}{BYTES}
STR_CONTENT_DETAIL_TITLE :{SILVER}INFO DO CONT.
STR_CONTENT_DETAIL_TITLE :{SILVER}INFORMAÇÕES DO CONTEÚDO
###length 5
STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED :{SILVER}Você não selecionou para ser baixado
@@ -2576,6 +2605,9 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}sobrecarregado
# Linkgraph tooltip
STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} a ser transportado mensalmente de {STATION} para {STATION} ({COMMA}% da capacidade){STRING}
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} para ser transportado de volta ({COMMA}% da capacidade)
STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Tempo médio de viagem: {NUM}{NBSP}dia{P "" s}
# Base for station construction window(s)
STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Destacar cobertura
@@ -2585,6 +2617,7 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Não des
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Destacar área de cobertura da construção proposta
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Aceita: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Suprimentos: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_INFRASTRUCTURE_COST :{BLACK}Custo de manutenção: {GOLD}{CURRENCY_SHORT}/ano
# Join station window
STR_JOIN_STATION_CAPTION :{WHITE}Unir estação
@@ -2667,8 +2700,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selecionar Ponte Ferroviária
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selecionar Ponte Rodoviária
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Seleção de ponte - clique na ponte desejada para construir
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspensa, Aço
STR_BRIDGE_NAME_GIRDER_STEEL :Vigas, Aço
STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Aço
@@ -2772,11 +2807,11 @@ STR_LANDSCAPING_TOOLBAR :{WHITE}Terreno
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Baixar um canto do terreno. Arrastar abaixa o primeiro canto selecionado e nivela a área selecionada à altura do novo canto. CTRL seleciona a área diagonalmente. Shift alterna construção/preço estimado
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK} Elevar um canto do terreno. Arrastar eleva o primeiro canto selecionado e nivela a área selecionada à nova altura do canto. Ctrl seleciona a área diagonalmente. Shift alterna contrução/preço estimado
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivelar uma área do terreno à altura do primeiro canto selecionado. Ctrl seleciona uma área diagonalmente. Shift alterna contrução/preço estimado
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Shift altera construção/preço estimado
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Ctrl seleciona a área na diagonal. Shift alterna construir/mostrar estimativa de custo
# Object construction window
STR_OBJECT_BUILD_CAPTION :{WHITE}Seleção de Objeto
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecione o objeto a ser construído. Shift alterna construção/preço estimado
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Selecione o objeto para construir. Ctrl seleciona a área na diagonal. Shift alterna construir/mostrar estimativa de custo
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Selecione uma categoria de objeto para construir
STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Pré-visualização do objeto
STR_OBJECT_BUILD_SIZE :{BLACK}Tamanho: {GOLD}{NUM} x {NUM} quadrados
@@ -2788,15 +2823,15 @@ STR_OBJECT_CLASS_TRNS :Transmissores
STR_PLANT_TREE_CAPTION :{WHITE}Árvores
STR_PLANT_TREE_TOOLTIP :{BLACK}Selecionar um tipo de árvore para plantar. Se o local já tiver uma árvore, isso irá adicionar mais árvores do tipo misto indepentendemente do tipo selecionado
STR_TREES_RANDOM_TYPE :{BLACK}Árvores de tipo aleatório
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar árvores de tipo aleatório, Shift alterna entre construção/preço estimado
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Coloque árvores de tipo aleatório. Ctrl seleciona a área na diagonal. Shift alterna construir/mostrar estimativa de custo
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Planta árvores aleatoriamente pelo terreno
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árvores aleatoriamente pelo terreno
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Planta árvores isoladas ao arrastar pelo terreno.
STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Bosque
STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Planta pequenas florestas ao arrastar pelo terreno.
STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar pequenas florestas ao arrastar sobre o terreno.
STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Floresta
STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Planta florestas grandes ao arrastar pelo terreno.
STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes ao arrastar pelo terreno.
# Land generation window (SE)
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Gerar Terreno
@@ -2820,6 +2855,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Cidade A
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Constrói cidade num local aleatório
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Várias cidades aleatórias
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cobrir o mapa com cidades colocadas aleatoriamente
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expandir todas as cidades
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Fazer com que todas as cidades cresçam ligeiramente
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nome da cidade:
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Coloque o nome da cidade
@@ -3120,6 +3157,12 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rios:
STR_MAPGEN_SMOOTHNESS :{BLACK}Regularidade
STR_MAPGEN_VARIETY :{BLACK}Distribuição da variedade
STR_MAPGEN_GENERATE :{WHITE}Gerar
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Definições de NewGRF
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Mostrar definições de NewGRF
STR_MAPGEN_AI_SETTINGS :{BLACK}Definições de IA
STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Mostrar definições de IA
STR_MAPGEN_GS_SETTINGS :{BLACK}Definições de Script do Jogo
STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Mostrar definições de script do jogo
###length 21
STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Inglês (Original)
@@ -3288,6 +3331,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}"Sprite"
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Retorna ao "sprite" normal anterior, pulando quaisquer "sprites" falsos, recoloridos ou de fontes, e junta tudo do primeiro ao último
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representação do "sprite" atualmente selecionado. O alinhamento é ignorado ao desenhar esse "sprite"
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move o "sprite", alterando os offsets X e Y. Ctrl+Clique para mover o sprite 8 unidades por vez
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Deslocamento centralizado
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centralizado
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Mira
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Resetar relativo
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reseta os offsets relativos atuais
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absoluto)
@@ -3306,14 +3356,14 @@ STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Um erro
STR_NEWGRF_ERROR_POPUP :{WHITE}Um erro NewGRF ocorreu:{}{STRING}
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} não irá funcionar com a versão do TTDPatch encontrada pelo OpenTTD
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} funciona na versão {STRING} de TTD
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} é projetado para ser usado com {STRING}
STR_NEWGRF_ERROR_INVALID_PARAMETER :parâmetro inválido para {1:STRING}: parâmetro {STRING} ({NUM})
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} deve ser carregado antes de {STRING}
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} deve ser carregado depois de {STRING}
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} requer versão {STRING} ou maior do OpenTTD
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} é projetado para ser usado com {2:STRING}
STR_NEWGRF_ERROR_INVALID_PARAMETER :Parâmetro inválido para {1:STRING}: parâmetro {2:STRING} ({3:NUM})
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} deve ser carregado antes de {2:STRING}
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} deve ser carregado depois de {2:STRING}
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} requer versão {STRING} ou superior do OpenTTD
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :o arquivo GRF foi designado para tradução
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Muitas NewGRFs estão carregadas
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como um NewGRF estático em conjunto com {STRING} pode causar desincronias
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregar {1:STRING} como NewGRF estático com {2:STRING} pode causar dessincronizações
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :"Sprite" inesperado (sprite {3:NUM})
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade de Ação Desconhecida 0 {4:HEX} (sprite {3:NUM})
STR_NEWGRF_ERROR_INVALID_ID :Tentativa de uso de ID inválido (sprite {3:NUM})
@@ -3445,14 +3495,14 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Comprar exclusi
STR_LOCAL_AUTHORITY_ACTION_BRIBE :Subornar a prefeitura
###length 8
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Iniciar uma pequena campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um pequeno raio ao redor do centro da cidade.{}Preço: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Iniciar uma campanha publicitária média, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um raio médio ao redor do centro da cidade.{}Preço: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Iniciar uma grande campanha publicitária, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um grande raio ao redor do centro da cidade.{}Preço: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financiar a reconstrução da malha rodoviária urbana.{}Causa engarrafamentos consideráveis ao tráfego por até 6 meses.{}Preço: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Fornece um aumento permanente na avaliação da estação nesta cidade.{}Preço: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financiar a construção de edifícios comerciais novos na cidade.{}Fornece um aumento temporário do crescimento da cidade nesta cidade.{}Preço: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Comprar a exclusividade dos serviços durante 1 ano na cidade.{}A prefeitura da cidade não permitirá que passageiros e cargas usem as estações de seus concorrentes.{}Preço: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Subornar a prefeitura para aumentar a sua avaliação, correndo o risco de uma penalidade severa se apanhado.{}Preço: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Iniciar uma pequena campanha publicitária local, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um pequeno raio ao redor do centro da cidade.{}Custo: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Iniciar uma campanha publicitária média, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um raio médio ao redor do centro da cidade.{}Custo: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Iniciar uma grande campanha publicitária, para atrair mais passageiros e cargas para seus serviços de transporte.{}Fornece um aumento temporário na avaliação da estação em um grande raio ao redor do centro da cidade{}{POP_COLOUR}Custo: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Financiar obras de reconstrução da malha rodoviária urbana.{}Causa engarrafamentos consideráveis ao tráfego por até 6 meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construir uma estátua em homenagem à sua empresa.{}Fornece um aumento permanente na classificação da estação nesta cidade..{}{POP_COLOUR}Custo: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Financiar a construção de novos edifícios na cidade.{}Providencia um aumento temporário no crescimento desta cidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Comprar a exclusividade dos serviços durante 1 ano na cidade.{}A prefeitura da cidade não permitirá que passageiros e cargas utilizem as estações de seus concorrentes..{}{POP_COLOUR}Custo: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Subornar a autoridade local para aumentar a sua avaliação, correndo o risco de uma penalidade severa se for pego.{}{POP_COLOUR}Custo: {CURRENCY_LONG}
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} Objetivos
@@ -3625,14 +3675,18 @@ STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Navios
STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Juros do Empréstimo
STR_FINANCES_SECTION_OTHER :{GOLD}Outros
STR_FINANCES_TOTAL_CAPTION :{WHITE}Total
STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG}
STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG}
STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG}
STR_FINANCES_PROFIT :{WHITE}Lucro
STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balanço Bancário
STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Fundos Próprios
STR_FINANCES_LOAN_TITLE :{WHITE}Empréstimo
STR_FINANCES_INTEREST_RATE :{WHITE}Juro do Empréstimo: {BLACK}{NUM}%
STR_FINANCES_MAX_LOAN :{WHITE}Empréstimo Máximo: {BLACK}{CURRENCY_LONG}
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG}
STR_FINANCES_BORROW_BUTTON :{BLACK}Pedir {CURRENCY_LONG}
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Pedir empréstimo. Ctrl+Clique pede o máximo possível
STR_FINANCES_REPAY_BUTTON :{BLACK}Pagar {CURRENCY_LONG}
@@ -3733,7 +3787,7 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produz:
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} aguardando{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Modificar produção (múltiplo de 8, até 2040)
@@ -3763,6 +3817,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envia in
STR_VEHICLE_LIST_REPLACE_VEHICLES :Substituir veículos
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Enviar para Manutenção
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Lucro anual: {CURRENCY_LONG} (último ano: {CURRENCY_LONG})
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Enviar para Depósito
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Enviar para Garagem
@@ -3855,6 +3911,9 @@ STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance:
STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de aeronave: {GOLD}{STRING}
###length 3
STR_CARGO_TYPE_FILTER_ALL :Todos os tipos de carga
STR_CARGO_TYPE_FILTER_FREIGHT :Frete
STR_CARGO_TYPE_FILTER_NONE :Nenhum
###length VEHICLE_TYPES
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de trens - clique num trem para informações. Cltr+Clique para alterar a visibilidade do tipo de trem
@@ -4024,7 +4083,7 @@ STR_ENGINE_PREVIEW_AIRCRAFT :aeronave
STR_ENGINE_PREVIEW_SHIP :embarcação
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Preço: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Velocidade: {VELOCITY} Potência: {POWER}{}Custo de manutenção: {CURRENCY_LONG}/ano{}Capacidade: {CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Preço: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Vel.: {VELOCITY} Potência: {POWER} Tração Máx: {6:FORCE}{}Custo de manutenção: {4:CURRENCY_LONG}/yr{}Capacidade: {5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Custo: {0:CURRENCY_LONG} Peso: {1:WEIGHT_SHORT}{}Velocidade: {2:VELOCITY} Potência: {3:POWER} Tração Máx: {6:FORCE}{}Custo de Operação: {4:CURRENCY_LONG}/ano{}Capacidade: {5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Preço: {CURRENCY_LONG} Vel. Max.: {VELOCITY}{}Capacidade: {CARGO_LONG}{}Custo de manuteção: {CURRENCY_LONG}/ano
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Vel Máx.: {VELOCITY}{}Tipo de aeronave: {STRING}{}Capacidade: {CARGO_LONG}, {CARGO_LONG}{}Custo de oper.: {CURRENCY_LONG}/ano
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Custo: {CURRENCY_LONG} Vel Máx.: {VELOCITY}{}Tipo de aeronave: {STRING}{}Capacidade: {CARGO_LONG}{}Custo de oper.: {CURRENCY_LONG}/ano
@@ -4183,11 +4242,12 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {L
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Força: {LTBLUE}{POWER}{BLACK} Velocidade Max: {LTBLUE}{VELOCITY} {BLACK}Max. T.E.: {LTBLUE}{FORCE}
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros desse ano: {LTBLUE}{CURRENCY_LONG} (ano passado: {CURRENCY_LONG})
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Lucro deste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) {BLACK}Performance min.: {LTBLUE}{POWER_TO_WEIGHT}
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY_LONG}
STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Capacidade: {LTBLUE}Nenhuma{STRING}
STR_VEHICLE_INFO_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO_LONG}{3:STRING}
STR_VEHICLE_INFO_CAPACITY :{BLACK}Capacidade: {LTBLUE}{0:CARGO_LONG}{3:STRING}
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Capacidade: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM})
STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING}
@@ -4454,25 +4514,25 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Este hor
STR_TIMETABLE_STATUS_START_AT :{BLACK}Este horário começará em{STRING}
STR_TIMETABLE_STARTING_DATE :{BLACK}Data de início
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Seleciona uma data como ponto de partida para esse horário. Ctrl+Clique define o ponto de partida desse horário, e distribui todos os veículos que compartilham essa ordem igualmente, baseados na sua ordem relativa, mesmo que a ordem esteja totalmente tabelada
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Seleciona uma data como ponto de partida para esse horário. Ctrl+Clique define o ponto de partida desse horário e distribui todos os veículos que compartilham essa ordem igualmente, baseados na sua ordem relativa, mesmo que a ordem esteja totalmente tabelada
STR_TIMETABLE_CHANGE_TIME :{BLACK}Mudar horário
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mudar a quantidade de tempo que a ordem destacada deverá levar
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mudar a duração do tempo que a ordem em destaque deve durar. Ctrl+Clique define o tempo para todas as ordens
STR_TIMETABLE_CLEAR_TIME :{BLACK}Limpar Horário
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Limpar a quantidade de tempo para a ordem destacada
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Limpar a duração do tempo da ordem destacada. Ctrl+Clique limpa os tempos para todas as ordens
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Alterar Limite de Vel.
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Altera a velocidade máxima de viagem para a ordem selecionada
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Altera a velocidade máxima de viagem para a ordem selecionada. Ctrl+Clique define a velocidade para todas as ordens
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Limpa Limite de Vel.
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Limpar a velocidade máxima de viagem para a ordem selecionada
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Limpar a velocidade máxima de viagem da ordem em destaque. Ctrl+Clique limpa as velocidades para todas as ordens
STR_TIMETABLE_RESET_LATENESS :{BLACK}Restabelecer Contador de Atraso
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Restabelecer o contador de atraso,então o veículo estará pontual
STR_TIMETABLE_AUTOFILL :{BLACK}Autopreencher
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preencher o horário automaticamente com os valores da próxima jornada. (CTRL+Clique para tentar manter os tempos de espera)
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preencher o horário automaticamente com os valores da próxima viagem. Ctrl+Clique para tentar manter os tempos de espera
STR_TIMETABLE_EXPECTED :{BLACK}Esperado
STR_TIMETABLE_SCHEDULED :{BLACK}Agendado
@@ -4516,8 +4576,10 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Um dos s
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Depuração de I.A./Script do jogo só é acessível pelo servidor
# AI configuration window
STR_AI_CONFIG_CAPTION_AI :{WHITE}Configuração de IA
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Configuração de Script de Jogo
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}O script do jogo que será carregado no próximo jogo
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}IAs que serão carregadas no próximo jogo
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}As IAs que serão carregadas no próximo jogo
STR_AI_CONFIG_HUMAN_PLAYER :Jogador humano
STR_AI_CONFIG_RANDOM_AI :IA aleatória
STR_AI_CONFIG_NONE :{G=m}(nenhum)
@@ -4529,10 +4591,11 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Descer
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Mover a IA selecionada para baixo na lista
STR_AI_CONFIG_GAMESCRIPT :{SILVER}Script do jogo
STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parâmetros
STR_AI_CONFIG_AI :{G=f}{SILVER}IAs
STR_AI_CONFIG_CHANGE_AI :{G=f}IA
STR_AI_CONFIG_CHANGE_GAMESCRIPT :Script do jogo
STR_AI_CONFIG_CHANGE_AI :{BLACK}Selecionar IA
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Selecionar Script do Jogo
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Carregar outro script
STR_AI_CONFIG_CONFIGURE :{BLACK}Configurar
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configurar os parâmetros do Script
@@ -4561,7 +4624,7 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de tela do minimapa
# AI Parameters
STR_AI_SETTINGS_CAPTION_AI :{G=f}IA
STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parâmetros de IA
STR_AI_SETTINGS_CLOSE :{BLACK}Fechar
STR_AI_SETTINGS_RESET :{BLACK}Resetar
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
@@ -4571,11 +4634,11 @@ STR_AI_SETTINGS_START_DELAY :Número de dias
# Textfile window
STR_TEXTFILE_WRAP_TEXT :{WHITE}Quebra de linha
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :[BLACK}Quebra linhas automaticamente para que o texto caiba na janela
STR_TEXTFILE_VIEW_README :{BLACK}Ler o Leiame
STR_TEXTFILE_VIEW_README :{BLACK}Ver o leia-me
STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Log de mudanças
STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licença
###length 3
STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} Leiame de {STRING}
STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} Leia-me de {STRING}
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} log de mudanças de {STRING}
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} licença de {STRING}
@@ -4725,6 +4788,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... exis
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Impossível gerar indústrias...
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Impossível construir {STRING} aqui...
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Impossível construir este tipo de indústria aqui...
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Não é possível prospectar indústria...
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... muito perto de outra indústria
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... deve construir uma cidade antes
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... só é permitido uma por cidade
@@ -4739,6 +4803,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... a fl
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... só pode ser construído acima do nível da neve
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... só pode ser construída abaixo do nível da neve
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}O financiamento falhou em prospectar devido ao azar; tente novamente
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Não havia locais adequados para prospectar esta indústria
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Não existe locais aceitáveis para '{STRING}' indústrias
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Mude os parâmetros de geração do mapa para obter um mapa melhor
@@ -4884,7 +4950,7 @@ STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Remova a
STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Impossível iniciar e terminar no mesmo ponto
STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Extremidades da ponte não estão no mesmo nível
STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Ponte é muito baixa para o terreno
STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}A ponte está muito alta para esse terreno.
STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}A ponte está muito alta para este terreno.
STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Inicio e fim devem estar alinhados
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... os extremos da ponte devem estar sobre a terra
STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... ponte muito longa
@@ -4906,6 +4972,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Objeto n
STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... sede de empresa no caminho
STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Impossível comprar esta área...
STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... já a possui!
STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... limite de construção de objetos atingido
# Group related errors
STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Impossível criar grupo...
@@ -4978,6 +5045,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Impossí
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... veículo está destruído
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... nem todos os veículos são idênticos
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Não haverá nenhum veículo disponível
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Altere sua configuração de NewGRF
@@ -5005,6 +5073,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Impossí
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... o veículo não pode chegar a todas as estações
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... o veículo não chega àquela estação
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... um veículo com essa mesma ordem não chega àquela estação
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... nem todos os veículos possuem as mesmas ordens
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... nem todos os veículos estão compartilhando ordens
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Impossível compartilhar a lista de ordens...
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Impossível compartilhar lista de ordens...
+5 -2
View File
@@ -1128,6 +1128,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :дясно
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимален начален заем: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимално количество заем за компания (без отчитане на инфлацията)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Лихвен процент: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Лихвен процент на заемите; също така контролира инфлацията ако е разрешена
@@ -2402,8 +2403,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Увел
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Избери ЖП мост
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Избор на асфалтов мост
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Избиране на мост - натисни върху избрания от теб мост, за да се построи
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Висящ, Стоманен
STR_BRIDGE_NAME_GIRDER_STEEL :Гредоред, Стоманен
STR_BRIDGE_NAME_CANTILEVER_STEEL :Конзолен, Стоманен
@@ -2937,6 +2936,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Пред
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Продължи към предишен нормален sprite, Пропускайки всички псевдо/прерисувани/текстови sprite и ги облечи в края
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Показване на избрания sprite. Подредбата се пренебрегва при рисуването му.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Преместване на sprite, променяйки X и Y координатите
###length 2
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Избери sprite
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Избери sprite от целия екран
+107 -40
View File
@@ -201,6 +201,15 @@ STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}cv
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}cv
STR_UNITS_POWER_SI :{COMMA}{NBSP}kW
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}CV/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}CV/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}CV/Mg
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}CV/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}CV/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}CV/Mg
STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP}t
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}t
@@ -378,7 +387,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generaci
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generació d'indústries
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construcció de carreteres
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construcció de vies de tramvia
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Planta arbres. Shift per sols mostrar el cost estimat.
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Planta arbres. Amb Ctrl, es selecciona una àrea diagonal. Amb Maj, no es realitza l'acció però es mostra el seu cost estimat.
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Situa un senyal
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Crea un objecte. Amb Ctrl, es selecciona una àrea diagonal. Amb Maj, es commuta entre construir o mostrar el cost estimat.
@@ -396,6 +405,8 @@ STR_SCENEDIT_FILE_MENU_QUIT :Surt
###length 15
STR_SETTINGS_MENU_GAME_OPTIONS :Opcions de la partida
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Configuració
STR_SETTINGS_MENU_AI_SETTINGS :Configuració de la IA
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Configuració de l'script de partida
STR_SETTINGS_MENU_NEWGRF_SETTINGS :Extensions NewGRF
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opcions de transparència
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostra els noms de les poblacions
@@ -998,8 +1009,19 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Seleccio
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Controlador actual: {STRING}
STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Mida de la interfície
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Arrossegueu el botó lliscant per a triar la mida de la interfície. Mantingueu premut Ctrl per a un ajustament contigu.
STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Detecta la mida automàticament
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Marqueu aquesta opció si voleu que s'ajusti la mida de la interfície automàticament.
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Escala els bisells
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Marqueu aquesta opció si voleu que s'escalin els bisells segons la mida de la interfície.
STR_GAME_OPTIONS_GUI_SCALE_1X :x1
STR_GAME_OPTIONS_GUI_SCALE_2X :x2
STR_GAME_OPTIONS_GUI_SCALE_3X :x3
STR_GAME_OPTIONS_GUI_SCALE_4X :x4
STR_GAME_OPTIONS_GUI_SCALE_5X :x5
STR_GAME_OPTIONS_GRAPHICS :{BLACK}Gràfics
@@ -1185,6 +1207,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dreta
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Préstec inicial màxim: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantitat màxima del préstec que pot demanar una companyia (sense tenir en compte la inflació)
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
###setting-zero-is-special
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sense préstec {RED}Fa falta un script de partida que doni els fons inicials
STR_CONFIG_SETTING_INTEREST_RATE :Taxa d'interès: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Tipus d'interès dels préstecs; també controla la inflació, si està activada
@@ -1411,6 +1436,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Gruix de la lí
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostra el nom del NewGRF a la finestra de construcció de vehicles: {STRING}
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Afegeix una línia a la finestra de construcció de vehicles que mostri de quin NewGRF és el vehicle seleccionat.
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mostra les càrregues que poden portar els vehicles a les finestres de llistes {STRING}
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Si s'activa, la càrrega transportable del vehicle apareixerà al damunt de les llistes dels vehicles.
STR_CONFIG_SETTING_LANDSCAPE :Paisatge: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :El tipus de paisatge defineix escenaris amb diferents tipus de càrrega i requisits per al creixement de les poblacions. Els NewGRF i l'script de partida poden modificar-ne l'aparença i el comportament.
@@ -1902,13 +1929,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Empra {STRING}{
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Temps dedicat a cada recàlcul d'un component del graf de connexions. Quan un recàlcul s'inicia, el programa crea un fil que pot executar-se durant aquest nombre de dies. Com més curt el valor, més probable que el fil no hagi acabat quan s'espera. Aleshores el programa s'atura fins que el fil acaba ("ralentització"). Com més llarg el valor, més temps requereix l'actualització de la distribució quan les rutes canvien.
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Mode de distribució per passatgers: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"simètric" vol dir que aproximadament el mateix nombre de passatgers aniran des de l'estació A a la B que de B a A. "asimètric" significa que un nombre arbitrari de passatgers poden anar en qualsevol dels dos sentits. "manual" vol dir que no s'aplicarà una distribució automàtica pels passatgers.
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simètric" vol dir que aproximadament el mateix nombre de passatgers aniran des de l'estació A a la B que de B a A. "Asimètric" significa que un nombre arbitrari de passatgers poden anar en qualsevol dels dos sentits. "Manual" vol dir que no s'aplicarà una distribució automàtica pels passatgers.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Mode de distribució pel correu: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"simètric" vol dir que aproximadament la mateixa quantitat de correu serà enviada des de l'estació A a la B que de B a A. "asimètric" significa que una quantitat arbitrària de correu pot ser enviada en qualsevol dels dos sentits. "manual" vol dir que no s'aplicarà una distribució automàtica pel correu.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simètric" vol dir que aproximadament la mateixa quantitat de correu serà enviada des de l'estació A a la B que de B a A. "Asimètric" significa que una quantitat arbitrària de correu pot ser enviada en qualsevol dels dos sentits. "Manual" vol dir que no s'aplicarà una distribució automàtica pel correu.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Mode de distribució per la classe de càrrega BLINDADA: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe de càrrega BLINDADA conté objectes de valor a la zona temperada, diamants a la subtropical o or al clima subàrtic. Els NewGRF poden canviar això. "simètric" significa que aproximadament la mateixa quantitat d'aquesta càrrega s'enviarà de l'estació A a la B que de B a A. "asimètric" vol dir que quantitats arbitràries d'aquesta càrrega poden ser enviades en qualsevol sentit. "manual" significa que no s'aplicarà cap distribució automàtica a aquesta càrrega. Es recomana indicar asimètric o manual en clima subàrtic, doncs els bancs no enviaran or de tornada a les mines. Pels climes temperat i subtropical podeu també seleccionar simètric, doncs els bancs enviaran objectes de valor de tornada al banc d'origen.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe de càrrega BLINDADA conté objectes de valor a la zona temperada, diamants a la subtropical o or al clima subàrtic. Els NewGRF poden canviar això. "Simètric" significa que aproximadament la mateixa quantitat d'aquesta càrrega s'enviarà de l'estació A a la B que de B a A. "Asimètric" vol dir que quantitats arbitràries d'aquesta càrrega poden ser enviades en qualsevol sentit. "Manual" significa que no s'aplicarà cap distribució automàtica a aquesta càrrega. Es recomana indicar asimètric o manual en clima subàrtic, doncs els bancs no enviaran or de tornada a les mines. Pels climes temperat i subtropical també podeu seleccionar simètric, doncs els bancs enviaran objectes de valor de tornada al banc d'origen.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Mode de distribució per altres classes de càrrega: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asimètric" vol dir que quantitats arbitràries de càrrega poden ser enviades en qualsevol sentit. "manual" significa que no s'aplicarà cap distribució automàtica a aquestes càrregues.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimètric" vol dir que quantitats arbitràries de càrrega poden ser enviades en qualsevol sentit. "Manual" significa que no s'aplicarà cap distribució automàtica a aquestes càrregues.
###length 3
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimètric
@@ -2046,6 +2073,8 @@ STR_INTRO_HIGHSCORE :{BLACK}Taula de
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Configuració
STR_INTRO_NEWGRF_SETTINGS :{BLACK}Extensions NewGRF
STR_INTRO_ONLINE_CONTENT :{BLACK}Contingut en línia
STR_INTRO_AI_SETTINGS :{BLACK}Configuració de la IA
STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Configuració de l'script de partida
STR_INTRO_QUIT :{BLACK}Surt
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Comença una partida nova. Ctrl+Clic salta la configuració del mapa
@@ -2065,6 +2094,8 @@ STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Mostra l
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Mostra la finestra de configuració
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Mostra la configuració de les extensions NewGRF
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Comprova si hi ha continguts nous i actualitzats per a descarregar
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Mostra les opcions d'IA
STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Mostra la configuració de l'script de partida
STR_INTRO_TOOLTIP_QUIT :{BLACK}Surt de l'OpenTTD.
STR_INTRO_BASESET :{WHITE}Al joc de gràfics base seleccionat li falten {NUM} sprite{P "" s}.{}Si us plau, comproveu si hi ha actualitzacions disponibles.
@@ -2455,13 +2486,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :s'espera que s'
STR_NETWORK_MESSAGE_CLIENT_LEAVING :deixant
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} s'ha unit a la partida
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} s'ha unit a la partida (Client #{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} s'ha unit a la companyia #{2:NUM}
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} s'ha unit a la partida (Client #{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} s'ha unit a la companyia #{2:NUM}
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} s'ha unit als espectadors
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} ha començat una nova companyia (#{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} ha deixat la partida ({2:STRING})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} ha començat una nova companyia (#{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} ha deixat la partida ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} ha canviat el seu nom a {STRING}.
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} ha donat {2:CURRENCY_LONG} a {1:STRING}.
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} ha donat {2:CURRENCY_LONG} a {1:STRING}.
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}El servidor ha tancat la sessió
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}El servidor està reiniciant...{}Espera un moment...
STR_NETWORK_MESSAGE_KICKED :*** S'ha expulsat {STRING}. Motiu: {STRING}
@@ -2588,6 +2619,7 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}No marca
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Marcar l'àrea de cobertura del lloc proposat
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Accepta: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Provisions: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_INFRASTRUCTURE_COST :{BLACK}Cost de manteniment: {GOLD}{CURRENCY_SHORT}/any
# Join station window
STR_JOIN_STATION_CAPTION :{WHITE}Ajuntar estació
@@ -2670,8 +2702,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augmenta
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selecciona Pont de Tren
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selecciona Pont de Carretera
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Selecció de pont - clica sobre el pont triat per construir-lo
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Pont penjant d'acer
STR_BRIDGE_NAME_GIRDER_STEEL :Pont biga d'acer
STR_BRIDGE_NAME_CANTILEVER_STEEL :Pont en mènsula d'acer
@@ -2791,7 +2825,7 @@ STR_OBJECT_CLASS_TRNS :Transmissors
STR_PLANT_TREE_CAPTION :{WHITE}Arbres
STR_PLANT_TREE_TOOLTIP :{BLACK}Selecciona el tipus d'arbre a plantar. Si la casella ja conté un arbre, s'afegiran més arbres d'altres espècies independentment de quin estigui seleccionat
STR_TREES_RANDOM_TYPE :{BLACK}Arbres de tipus aleatori
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Situar arbres de tipus aleatori. Shift commuta construeix/mostra el cost estimat
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Situa arbres de tipus aleatori. Amb Ctrl, es selecciona una àrea diagonal. Amb Maj., es commuta entre construir i mostrar el cost estimat.
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Planta arbres
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Planta arbres aleatòriament al paisatge
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
@@ -2823,6 +2857,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Crea una
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Funda una població en un lloc aleatori
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Crea moltes poblacions aleatòries
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Omple el mapa amb poblacions situades aleatòriament
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expandeix totes les poblacions
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Fes que totes les poblacions creixin una mica.
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nom de la població nova:
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introdueix el nom de la població
@@ -3123,6 +3159,12 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Quantita
STR_MAPGEN_SMOOTHNESS :{BLACK}Suavitat:
STR_MAPGEN_VARIETY :{BLACK}Varietat:
STR_MAPGEN_GENERATE :{WHITE}Genera
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Configuració del NewGRF
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Mostra la configuració de NewGRF
STR_MAPGEN_AI_SETTINGS :{BLACK}Configuració d'IA
STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Mostra la configuració de la IA
STR_MAPGEN_GS_SETTINGS :{BLACK}Configuració de l'script de partida
STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Mostra la configuració de l'script de partida.
###length 21
STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Anglès
@@ -3291,6 +3333,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite a
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Procedeix cap a l'sprite normal anterior, saltant qualsevol sprite pseudo/recolor/font i passant del primer sprite a l'últim
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representació de l'sprite seleccionat actualment. L'alineació s'ignora quan es dibuixa aquest sprite
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Desplaça l'sprite un píxel en el sentit indicat. Amb Ctrl+Clic el desplaça 8 píxels.
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Modificador centrat
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centrat
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Punt de mira
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Restableix relatius
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Restableix els desplaçaments relatius actuals
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Desplaçament X: {NUM}, Desplaçament Y: {NUM} (Absolut)
@@ -3308,15 +3357,15 @@ STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SI
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}S'ha produït un error fatal de NewGRF:{}{STRING}
STR_NEWGRF_ERROR_POPUP :{WHITE}S'ha produït un error relacionat amb els NewGRF:{}{STRING}
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} no funcionarà amb la versió TTDPatch informada per l'OpenTTD
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} és per la versió {STRING} de TTD
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} està dissenyat per ser utilitzat amb {STRING}
STR_NEWGRF_ERROR_INVALID_PARAMETER :Paràmetre invàlid per {1:STRING}: paràmetre {STRING} ({NUM})
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} ha de ser carregat abans de {STRING}
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} ha de ser carregat després de {STRING}
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} necessita l'OpenTTD versió {STRING} o superior
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} és per a la versió {2:STRING} del TTD
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} està dissenyat per a fer-se servir amb {2:STRING}
STR_NEWGRF_ERROR_INVALID_PARAMETER :Paràmetre no vàlid per a {1:STRING}: paràmetre {2:STRING} ({3:NUM})
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} s'ha de carregar abans de {2:STRING}
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} s'ha de carregar després de {2:STRING}
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} necessita la versió {2:STRING} de l'OpenTTD o posterior
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :l'arxiu GRF dissenyat està pendent de traduir
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Hi ha massa arxius NewGRF carregats
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Carregant {1:STRING} com a NewGRF estàtic amb {STRING} podria causar desincronitzacions
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Si es carrega {1:STRING} com a NewGRF estàtic amb {2:STRING}, pot provocar desincronitzacions
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Sprite inesperat (sprite {3:NUM})
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propietat d'acció 0 desconeguda {4:HEX} (sprite {3:NUM})
STR_NEWGRF_ERROR_INVALID_ID :Intent d'utilitzar una ID invàlid (sprite {3:NUM})
@@ -3448,14 +3497,14 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Compra els dret
STR_LOCAL_AUTHORITY_ACTION_BRIBE :Suborna les autoritats locals
###length 8
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Inicia una petita campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins d'un radi petit al voltant del centre de la població.{}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Inicia una mitjana campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins un radi mitjà al voltant del centre de la població.{}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Inicia una gran campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins d'un radi gran al voltant del centre de la població.{}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Finança la reconstrucció de la xarxa local de carrers. Dificulta notablement el trànsit durant 6 mesos.{}Causa molèsties considerables al trànsit de vehicles de carretera durant 6 mesos.{}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Construeix una estàtua en honor a la teva companyia.{}Proporciona una millora permanent dels ratis d'estació de la població.{}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Finança la construcció de nous edificis comercials a la població.{}Proporciona una millora temporal del creixement d'aquesta població.{}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Compra per 1 any els drets exclusius de transport en la població. L'autoritat local només permetrà utilitzar les instal·lacions de la teva companyia de transports als passatgers i les mercaderies.{}L'autoritat local no permetrà que els passatgers i càrregues locals usin les estacions dels oponents.{}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Suborna les autoritats locals per incrementar el teu rati, a risc de greus penalitzacions si et pesquen.{}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Inicia una petita campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins d'un radi petit al voltant del centre de la població.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Inicia una mitjana campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins un radi mitjà al voltant del centre de la població.{}{PUSH_COLOUR}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Inicia una gran campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{}Proporciona una millora temporal dels ratis de les estacions dins d'un radi gran al voltant del centre de la població.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Finança la reconstrucció de la xarxa local de carrers. Dificulta notablement el trànsit durant 6 mesos.{}Causa molèsties considerables al trànsit de vehicles de carretera durant 6 mesos.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construeix una estàtua en honor a la teva companyia.{}Proporciona una millora permanent dels ratis d'estació de la població.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Finança la construcció de nous edificis comercials a la població.{}Proporciona una millora temporal del creixement d'aquesta població.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Compra per 1 any els drets exclusius de transport en la població. L'autoritat local només permetrà utilitzar les instal·lacions de la teva companyia de transports als passatgers i les mercaderies.{}L'autoritat local no permetrà que els passatgers i càrregues locals usin les estacions dels oponents.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Suborna les autoritats locals per incrementar el teu rati, a risc de greus penalitzacions si et pesquen.{}{POP_COLOUR}Cost: {CURRENCY_LONG}
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} Objectius
@@ -3628,15 +3677,18 @@ STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Vaixells
STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Interessos del préstec
STR_FINANCES_SECTION_OTHER :{GOLD}Altres
STR_FINANCES_TOTAL_CAPTION :{WHITE}Total
STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG}
STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG}
STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG}
STR_FINANCES_PROFIT :{WHITE}Benefici
STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balanç bancari
STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Fons propis
STR_FINANCES_LOAN_TITLE :{WHITE}Préstec
STR_FINANCES_INTEREST_RATE :{WHITE}Interès del préstec: {BLACK}{NUM}{NBSP}%
STR_FINANCES_MAX_LOAN :{WHITE}Préstec màxim: {BLACK}{CURRENCY_LONG}
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG}
STR_FINANCES_BORROW_BUTTON :{BLACK}Demana {CURRENCY_LONG}
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Augmenta l'import del préstec Ctrl+Clic per demanar tants diners com sigui possible
STR_FINANCES_REPAY_BUTTON :{BLACK}Amortitza {CURRENCY_LONG}
@@ -3737,7 +3789,7 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produeix
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperant{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Canvia la producció (múltiple de 8, fins a 2040)
@@ -3767,6 +3819,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envia in
STR_VEHICLE_LIST_REPLACE_VEHICLES :Substitueix vehicles
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Envia a fer revisió
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Benefici enguany: {CURRENCY_LONG} (darrer any: {CURRENCY_LONG})
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Envia a la cotxera
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Envia a la cotxera
@@ -3859,6 +3913,9 @@ STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Abast: {
STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipus d'aeronau: {GOLD}{STRING}
###length 3
STR_CARGO_TYPE_FILTER_ALL :Tots els tipus de càrrega
STR_CARGO_TYPE_FILTER_FREIGHT :Càrrega
STR_CARGO_TYPE_FILTER_NONE :Cap
###length VEHICLE_TYPES
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Llista de selecció de trens i vagons. Clica al vehicle per més informació. Ctrl+Click per a alternar entre mostrar/ocultar el vehicle ferroviari
@@ -4028,7 +4085,7 @@ STR_ENGINE_PREVIEW_AIRCRAFT :{G=Masculin}avi
STR_ENGINE_PREVIEW_SHIP :{G=Masculin}vaixell
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Cost: {CURRENCY_LONG} Pes: {WEIGHT_SHORT}{}Velocitat: {VELOCITY} Potència: {POWER}{}Cost de circulació: {CURRENCY_LONG}/any{}Capacitat: {CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cost: {CURRENCY_LONG} Pes: {WEIGHT_SHORT}{}Velocitat: {VELOCITY} Potència: {POWER} Màx. E.T.: {6:FORCE}{}Cost d'utilització: {4:CURRENCY_LONG}/any{}Capacitat: {5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cost: {0:CURRENCY_LONG} Pes: {1:WEIGHT_SHORT}{}Velocitat: {2:VELOCITY} Potència: {3:POWER} Màx. E.T.: {6:FORCE}{}Cost d'utilització: {4:CURRENCY_LONG}/any{}Capacitat: {5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Vel. Màx: {VELOCITY}{}Capacitat: {CARGO_LONG}{}Cost d'utilització: {CURRENCY_LONG}/any
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Velocitat màx.: {VELOCITY}{}Tipus d'aeronau: {STRING}{}Capacitat: {CARGO_LONG}, {CARGO_LONG}{}Cost de circulació: {CURRENCY_LONG} per any
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Velocitat màx.: {VELOCITY}{}Tipus d'aeronau: {STRING}{}Capacitat: {CARGO_LONG}{}Cost de circulació: {CURRENCY_LONG} per any
@@ -4187,12 +4244,13 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Pes: {LT
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Pes: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potència: {LTBLUE}{POWER}{BLACK} Vel. màx: {LTBLUE}{VELOCITY} {BLACK}E.T. màx.: {LTBLUE}{FORCE}
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Benefici d'aquest any: {LTBLUE}{CURRENCY_LONG} (darrer any: {CURRENCY_LONG})
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Benefici aquest any: {LTBLUE}{CURRENCY_LONG} (l'any passat: {CURRENCY_LONG}) {BLACK}Rendiment mínim: {LTBLUE}{POWER_TO_WEIGHT}
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilitat: {LTBLUE}{COMMA}% {BLACK}Avaries des de la darrera revisió: {LTBLUE}{COMMA}
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Fabricat: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY_LONG}
STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Capacitat: {LTBLUE}Cap{STRING}
STR_VEHICLE_INFO_CAPACITY :{BLACK}Capacitat: {LTBLUE}{CARGO_LONG}{3:STRING}
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Capacitat: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM})
STR_VEHICLE_INFO_CAPACITY :{BLACK}Capacitat: {LTBLUE}{0:CARGO_LONG}{3:STRING}
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Capacitat: {LTBLUE}{0:CARGO_LONG}{3:STRING} (x{4:NUM})
STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacitat: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING}
STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transferir crèdits: {LTBLUE}{CURRENCY_LONG}
@@ -4461,22 +4519,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Data de
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Seleccioneu una data com a punt de partida d'aquest horari. Amb Ctrl+Clic, distribueix els vehicles que comparteixen aquesta ruta a partir de la data establerta i la seva ordre relativa, sempre que la ruta tingui l'horari complet.
STR_TIMETABLE_CHANGE_TIME :{BLACK}Canvia Temps
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Canvia la quantitat de temps que l'ordre marcada hauria de prendre
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Canvia el emps que l'ordre marcada hauria de prendre. Amb Ctrl+clic estableix el temps per a totes les ordres.
STR_TIMETABLE_CLEAR_TIME :{BLACK}Esborra Temps
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Esborra la quantitat de temps de l'ordre marcada
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Esborra la quantitat de temps de l'ordre marcada. Amb Ctrl+clic, s'esborra el temps per a totes les ordres.
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Canvia el límit de velocitat
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Canvia la velocitat de viatge màxima de l'ordre seleccionada
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Canvia la velocitat de viatge màxima de l'ordre seleccionada. Amb Ctrl+clic s'estableix la velocitat per a totes les ordres.
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Esborra el límit de velocitat
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Esborra la velocitat de viatge màxima de l'ordre seleccionada
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Esborra la velocitat de viatge màxima de l'ordre seleccionada. Amb Ctrl+clic s'esborra la velocitat per a totes les ordres.
STR_TIMETABLE_RESET_LATENESS :{BLACK}Restablir Retard
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Restableix el comptador de retards, de manera que el vehicle serà puntual
STR_TIMETABLE_AUTOFILL :{BLACK}Autoomple
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Omple automàticament l'horari amb valors del proper viatge (CTRL+clic per intentar mantenir els temps d'espera)
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Omple automàticament l'horari amb valors del proper viatge. CTRL+clic per a intentar mantenir els temps d'espera.
STR_TIMETABLE_EXPECTED :{BLACK}Esperat
STR_TIMETABLE_SCHEDULED :{BLACK}Planificat
@@ -4520,6 +4578,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Un dels
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La finestra de depuració dels scripts d'IA/partida només està disponible al servidor.
# AI configuration window
STR_AI_CONFIG_CAPTION_AI :{WHITE}Configuració de la IA
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Configuració de l'script de partida
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Aquest és l'script que s'usarà a la propera partida.
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Aquesta llista conté les IA que es carregaran a la propera partida.
STR_AI_CONFIG_HUMAN_PLAYER :Jugador humà
@@ -4533,10 +4593,11 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Mou aval
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Desplaça la IA seleccionada una posició cap avall.
STR_AI_CONFIG_GAMESCRIPT :{SILVER}Script de partida
STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Paràmetres
STR_AI_CONFIG_AI :{SILVER}IA
STR_AI_CONFIG_CHANGE_AI :una IA
STR_AI_CONFIG_CHANGE_GAMESCRIPT :un script de partida
STR_AI_CONFIG_CHANGE_AI :{BLACK}Trieu una IA
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Tria un script de partida
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Carrega un altre script
STR_AI_CONFIG_CONFIGURE :{BLACK}Configura
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configura els paràmetres de l'script
@@ -4565,7 +4626,7 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de pantalla del minimapa
# AI Parameters
STR_AI_SETTINGS_CAPTION_AI :de la IA
STR_AI_SETTINGS_CAPTION_AI :{WHITE}Paràmetres de la IA
STR_AI_SETTINGS_CLOSE :{BLACK}Tanca
STR_AI_SETTINGS_RESET :{BLACK}Restableix
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
@@ -4729,6 +4790,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... mass
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}No es poden generar indústries...
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Aquí no es pot construir {STRING}...
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Aquí no es pot construir aquest tipus d'indústria...
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}No es pot fer la prospecció per a la indústria...
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... massa prop d'altres indústries
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}...abans s'ha de fundar una població.
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... només un permès per població
@@ -4743,6 +4805,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... el b
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... només es pot construir en estatges amb neu
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... només es pot construir en estatges sense neu
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}La fundació ha fallat la prospecció per mala sort. Proveu-ho de nou.
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}No hi havia llocs apropiats per a fer la prospecció per a aquesta indústria.
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}No hi havia llocs adequats per a indústries '{STRING}'
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Canvia els paràmetres de generació de mapa per a obtenir-ne un de millor
@@ -4983,6 +5047,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}No es po
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... vehicle està destruït
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... no tots els vehicles són idèntics.
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}No hi haurà cap vehicle disponible
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Canvia la teva configuració dels NewGRF
@@ -5010,6 +5075,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Impossib
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... el vehicle no pot anar a totes les estacions
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... el vehicle no pot anar a aquesta estació
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... un vehicle que comparteix aquesta ordre no pot anar a aquesta estació
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... no tots els vehicles tenen les mateixes ordres.
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... no tots els vehicles comparteixen ordres.
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}No es pot compartir la llista d'ordres...
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}No es pot deixar de compartir la llista d'ordres...
+5
View File
@@ -578,6 +578,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Сулахай
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Варринче
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Сылтӑмра
###setting-zero-is-special
@@ -1239,6 +1240,10 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Объект
# Sprite aligner window
###length 2
# NewGRF (self) generated warnings/errors
STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING}
+5 -2
View File
@@ -1248,6 +1248,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Desno
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Najveći početni zajam: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Najveći iznos koji tvrtka može pozajmiti (ne uzimajući inflaciju u obzir)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Kamatna stopa: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Kamatna stopa zajmova; također kontrolira i inflaciju ako je uključena
@@ -2625,8 +2626,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Povećaj
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Odaberi željeznički most
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Odaberi cestovni most
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Izbor mosta - klikni na most koji želiš izgraditi
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Viseći, čelični
STR_BRIDGE_NAME_GIRDER_STEEL :Noseći, čelični
STR_BRIDGE_NAME_CANTILEVER_STEEL :Konzolni, čelični
@@ -3224,6 +3223,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Prethodn
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Otiđi na prethodni normalni sprite, preskačući svaki pseudo/prebojani/font sprite i {BLACK}Otiđi na sljedeći normalni sprite, preskačući svaki pseudo/prebojani/font sprite i nakon dolaska na prvi prebaci na zadnjeg
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Prikaz trenutno odabranog spritea. Poravnjanje se ignorira kod crtanja ovog spritea.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pomakni sprite mijenjajući X i Y pomake. Ctrl+Click za micanje po 8 jedinica odjednom.
###length 2
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Poništi relativne
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Poništi trenutne relativne pomake
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X pomak: {NUM}, Y pomak: {NUM} (Apsolutni)
+119 -49
View File
@@ -275,6 +275,15 @@ STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hp
STR_UNITS_POWER_SI :{COMMA}{NBSP}kW
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP}t
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}t
@@ -302,8 +311,8 @@ STR_UNITS_HEIGHT_SI :{COMMA}{NBSP}m
# Common window strings
STR_LIST_FILTER_TITLE :{BLACK}Filtrovat řetězec:
STR_LIST_FILTER_OSKTITLE :{BLACK}Vložte filtr
STR_LIST_FILTER_TOOLTIP :{BLACK}Vložte klíčové slovo pro filtr seznamu
STR_LIST_FILTER_OSKTITLE :{BLACK}Vložte jedno nebo více klíčových slov pro filtr seznamu
STR_LIST_FILTER_TOOLTIP :{BLACK}Vložte jedno nebo více klíčových slov pro filtr seznamu
STR_TOOLTIP_GROUP_ORDER :{BLACK}Vyber pořadí seskupení
STR_TOOLTIP_SORT_ORDER :{BLACK}Vyber způsob řazeni (sestupně/vzestupně)
@@ -452,9 +461,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generov
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generování průmyslu
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Výstavba silniční sítě
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Výstavba tramvajové tratě
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Vysadit stromy. Shift zobrazí odhad ceny
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Vysadit stromy. Ctrl vybírá území úhlopříčně. Shift zobrazí odhad ceny
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Umístit popisek
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umisťte objekt. Shift zobrazí odhad ceny
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umisťte objekt. Pro zobrazení odhadu ceny podrž Shift. Ctrl vybírá oblast diagonálně
# Scenario editor file menu
###length 7
@@ -470,6 +479,8 @@ STR_SCENEDIT_FILE_MENU_QUIT :Ukončit
###length 15
STR_SETTINGS_MENU_GAME_OPTIONS :Možnosti hry
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Nastavení
STR_SETTINGS_MENU_AI_SETTINGS :Nastavení AI
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Nastavení herních skriptů
STR_SETTINGS_MENU_NEWGRF_SETTINGS :Nastavení grafik
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Nastavení průhlednosti
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Zobrazení jmen měst
@@ -988,8 +999,8 @@ STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLAC
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Nabídka dotace:{}{}Doprava {STRING} z {STRING} do {STRING} bude {NUM} rok dotována místní správou!
###length 4
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Dotace přidělena společnosti {STRING}!{}{}Doprava {STRING.gen} z{NBSP}{STRING.gen} do {STRING.gen} bude po {NUM} rok{P “” ů ů} vynášet 150{NBSP}% normální ceny
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Dotace přidělena společnosti {STRING}!{}{} Doprava {STRING} z{NBSP}{STRING} do {STRING} bude po {NUM} rok{P “” “” ů} vynášet dvojnásobek normální ceny!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Dotace přidělena společnosti {STRING}.{}{}Doprava {STRING.gen} z{NBSP}{STRING.gen} do {STRING.gen} bude po {NUM} rok{P “” ů ů} vynášet trojnásobek normální ceny!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Dotace přidělena společnosti {STRING}!{}{} Doprava {STRING} z{NBSP}{STRING} do {STRING} bude po {NUM} rok{P "" "" ů} vynášet dvojnásobek normální ceny!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Dotace na přepravu přidělena společnosti {STRING}!{}{}Přeprava {STRING.gen} z {STRING.gen} do {STRING.gen} bude po {NUM} rok{P “” y ů} vynášet trojnásobek normální sazby!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Dotace přidělena společnosti {STRING}.{}{}Doprava {STRING.gen} z{STRING.gen} do {STRING.gen} bude po {NUM} rok{P “” ů ů} vynášet čtyřnásobek normální ceny!
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}{TOWN} zažívá dopravní chaos!{}{}Program přestavby ulic sponzorovaný {STRING} přináší motoristům 6 měsíců utrpení!
@@ -1084,8 +1095,19 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Zaškrtn
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Aktuální ovladač: {STRING}
STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Velikost uživatelského rozhraní
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Přetažením posuvníku změníš velikost rozhraní. Drž Ctrl pro plynulé přizpůsobení
STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Automaticky detekovat velikost
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Zaškrtni pro automatické nastavení velikosti uživatelského rozhraní
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Škálovat úkosy
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Zaškrtni toto políčko pro škálování úkosů dle velikosti uživatelského rozhraní
STR_GAME_OPTIONS_GUI_SCALE_1X :1x
STR_GAME_OPTIONS_GUI_SCALE_2X :2x
STR_GAME_OPTIONS_GUI_SCALE_3X :3x
STR_GAME_OPTIONS_GUI_SCALE_4X :4x
STR_GAME_OPTIONS_GUI_SCALE_5X :5x
STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafiky
@@ -1205,13 +1227,13 @@ STR_TERRAIN_TYPE_CUSTOM_VALUE :Vlastní výšk
STR_CITY_APPROVAL_LENIENT :Shovívavý
STR_CITY_APPROVAL_TOLERANT :tolerantní
STR_CITY_APPROVAL_HOSTILE :zaujatý
STR_CITY_APPROVAL_PERMISSIVE :nezaujatý
STR_CITY_APPROVAL_PERMISSIVE :Nezaujatý (bez vlivu na počínání společnosti)
STR_WARNING_NO_SUITABLE_AI :{WHITE}Žádná vhodná AI není k dispozici...{}Některé AI lze stáhnout pomocí služby "Stahovat součásti"
# Settings tree window
STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Nastavení
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrovat podle:
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrovat:
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Rozbalit vše
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Sbalit vše
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Vymazat všechny hodnoty
@@ -1271,6 +1293,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :vpravo
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximální půjčka: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Jak moc si může společnost půjčit (bez ohledu na inflaci)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Výše úroků: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Výše úroků z půjček; rovněž ovlivňuje inflaci, pokud je zapnuta
@@ -1306,7 +1329,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Pokud je zapnut
STR_CONFIG_SETTING_DISASTERS :Katastrofy: {STRING}
STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Katastrofy, které mohou občas zablokovat či zničit vozidla nebo infrastrukturu
STR_CONFIG_SETTING_CITY_APPROVAL :Postoj městské rady k úpravám v oblasti: {STRING}
STR_CONFIG_SETTING_CITY_APPROVAL :Postoj městské správy k úpravám v oblasti: {STRING}
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Vyber jak moc hluku a změn prostředí poškozuje hodnocení společnosti u města a tak dále komplikuje budoucí stavbu na jeho území
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Maximální výška mapy: {STRING}
@@ -1497,6 +1520,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Tloušťka čá
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Zobrazovat název NewGRF v okně nákupu vozidel: {STRING}
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Přidá řádek do okna nákupu vozidel informující, ze které NewGRF vybrané vozidlo pochází.
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Zobrazit druhy nákladu, které vozidlo může přepravovat, v oknech seznamů {STRING}
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Pokud je povoleno, zobrazí se nad ním v seznamech vozidel přepravitelný náklad vozidla
STR_CONFIG_SETTING_LANDSCAPE :Klima: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Klima určuje základy herního scénáře s rozdílnými druhy nákladu a požadavky na růst měst. Nové GRaFiky a Herní Skripty umožní ještě jemnější kontrolu
@@ -1988,13 +2013,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Zaber si {STRIN
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Čas vyhrazený pro každý přepočet části grafu spojení. Pokud přepočet začne, je vytvořeno nové vlákno, které má dovoleno běžet po zvolený počet dnů. Čím nižší hodnotu nastavíš tím je pravděpodobnější, že vlákno nebude dokončeno kdy má. Pokud se tak stane, hra se zastaví ("lagne") dokud dokončeno nebude. Čím vyšší hodnotu nastavíš, tím déle bude trvat aktualizace grafu pokud se trasy změní.
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Mód distribuce pro cestující: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Rovnoměrný" znamená, že téměř stejné množství cestujících chce cestovat ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný znamená", že libovolné množství cestujících může cestovat v jakýchkoliv směrech. "manuální" znamená, že zde nebude žádná automatická distribuce pro cestující.
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Rovnoměrný" znamená, že téměř stejné množství cestujících chce cestovat ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný" znamená, že libovolné množství cestujících může cestovat v jakémkoliv směru. "Manuální" znamená, že zde nebude žádná automatická distribuce pro cestující.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Mód distribuce pro poštu: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Rovnoměrný" znamená, že téměř stejné množství pošty bude odesláno ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný znamená", že libovolné množství pošty může být odesláno v jakýchkoliv směrech. "manuální" znamená, že zde nebude žádná automatická distribuce pro poštu.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Rovnoměrný" znamená, že téměř stejné množství pošty bude odesláno ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný" znamená, že libovolné množství pošty může být odesláno v jakémkoli směru. "Manuální" znamená, že zde nebude žádná automatická distribuce pro poštu.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Mód distribuce pro náklady pancéřových vozů: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Pancéřované vozy převážejí ceniny v mírném, diamanty v subtropickém nebo zlato v subarktickém klimatu. Nové grafiky však toho mohou změnit. "Rovnoměrný" znamená, že téměř stejné množství nákladu bude odesláno ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný znamená", že libovolná množství nákladu mohou být odeslána v jakýchkoliv směrech. "manuální" znamená, že zde nebude žádná automatická distribuce pro tyto druhy nákladu. Je doporučeno nastavit "nerovnoměrný" nebo "manuální" při hraní v subarktickém klimatu, neboť banky neposílají do dolů žádné zlato. Pro mírné a subtropické klima můžeš nastavit "rovnoměrné", neboť banky odesílají zpět do původní banky nějaký náklad cenin.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Pancéřované vozy převážejí ceniny v mírném, diamanty v subtropickém nebo zlato v subarktickém klimatu. Nové grafiky však toho mohou změnit. "Rovnoměrný" znamená, že téměř stejné množství nákladu bude odesláno ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný" znamená, že libovolná množství nákladu mohou být odeslána v jakémkoliv směru. "Manuální" znamená, že zde nebude žádná automatická distribuce pro tyto druhy nákladu. Je doporučeno nastavit "nerovnoměrný" nebo "manuální" při hraní v subarktickém klimatu, neboť banky neposílají do dolů žádné zlato. Pro mírné a subtropické klima můžeš nastavit "rovnoměrné", neboť banky odesílají zpět do původní banky nějaký náklad cenin.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Módy distribuce pro ostatní třídy nákladu: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Rovnoměrný" znamená, že téměř stejné množství nákladu bude odesláno ze stanice A do stanice B, jako ze stanice B do A. "Nerovnoměrný znamená", že libovolná množství nákladu mohou být odeslána v jakýchkoliv směrech. "manuální" znamená, že zde nebude žádná automatická distribuce pro tyto druhy nákladu. Pravděpodobně chceš nastavit "nerovnoměrná" nebo "manuální"."
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Nerovnoměrný" znamená, že libovolná množství nákladu mohou být odeslána v jakémkoli směru. "manuální" znamená, že zde nebude žádná automatická distribuce pro tyto druhy nákladu.
###length 3
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuální
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :nerovnoměrný
@@ -2132,6 +2157,8 @@ STR_INTRO_HIGHSCORE :{BLACK}Nejlepš
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Nastavení
STR_INTRO_NEWGRF_SETTINGS :{BLACK}Nastavení grafik
STR_INTRO_ONLINE_CONTENT :{BLACK}Stahovat součásti
STR_INTRO_AI_SETTINGS :{BLACK}Nastavení AI
STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Nastavení herních skriptů
STR_INTRO_QUIT :{BLACK}Ukončit
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Hrát novou hru. Pomocí Ctrl přeskočíš nastavení mapy
@@ -2149,8 +2176,10 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Země hr
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Zobrazit možnosti hry
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Zobrazit tabulku nejlepších výsledků
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Nastavení zobrazení
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Ukázat nastavení NewGRF
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Zobrazit nastavení NewGRF
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Ukázat, jaký nový nebo upravený obsah se dá stáhnout
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Zobrazit nastavení AI
STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Zobrazit nastavení herních skriptů
STR_INTRO_TOOLTIP_QUIT :{BLACK}Ukončit 'OpenTTD'
STR_INTRO_BASESET :{BLACK}V aktuálně zvolené základní sadě grafiky chybí {NUM} sprit{P "" y ů}. Zkuste, prosím, vyhledat aktualizovanou základní sadu.
@@ -2542,12 +2571,12 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :čekám na aktu
STR_NETWORK_MESSAGE_CLIENT_LEAVING :odpojování
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} se připojil do hry
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} se připojil do hry (klient č. {2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} se přidává ke společnosti č. {2:NUM}
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} se přidal ke společnosti č. {2:NUM}
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} se stává pozorovatelem
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} zakládá novou společnost (č. {2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} opouští hru ({2:STRING})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} zakládá novou společnost (č. {2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} opouští hru ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} si změnil jméno na {STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} poslal(a) {2:CURRENCY_LONG} společnosti {1:STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} poslal(a) {2:CURRENCY_LONG} společnosti {1:STRING}
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server ukončil relaci
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server se restartuje...{}Počkejte prosím...
STR_NETWORK_MESSAGE_KICKED :*** {STRING} byl vyhozen. Důvod: ({STRING})
@@ -2662,6 +2691,9 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}přetížení
# Linkgraph tooltip
STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} nákladu měsíčně k přepravě z {STATION} do {STATION} ({COMMA}% z kapacity){STRING}
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} má být přepraveno zpět ({COMMA}% z kapacity)
STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Průměrná doba cesty: {NUM}{NBSP}{P "den" "dny" "dnů"}
# Base for station construction window(s)
STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Zvýraznění oblasti pokrytí
@@ -2671,6 +2703,7 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Nezvýra
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Zvýraznit oblast pokrytí
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Přijímá: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Poskytuje: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_INFRASTRUCTURE_COST :{BLACK}Náklady na údržbu: {GOLD}{CURRENCY_SHORT}/rok
# Join station window
STR_JOIN_STATION_CAPTION :{WHITE}Spojování stanic
@@ -2753,8 +2786,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Zvýšit
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Zvolit železniční most
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Zvolit silniční most
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Výběr mostů - staví se kliknutím na obrázek mostu
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Zavěšený, ocelový
STR_BRIDGE_NAME_GIRDER_STEEL :Trámový, ocelový
STR_BRIDGE_NAME_CANTILEVER_STEEL :Konzolový, ocelový
@@ -2858,11 +2893,11 @@ STR_LANDSCAPING_TOOLBAR :{WHITE}Úpravy
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Snížit roh země. Tažení sníží první vybraný roh a vybranou oblast na jeho novou výšku. Ctrl vybírá diagonální oblast. Stisknutý Shift pro zobrazení odhadu ceny
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Zvýšit roh země. Tažení zvyšuje první vybraný roh a vybranou oblast na jeho novou výšku. Ctrl vybírá diagonální oblast. Stisknutý Shift pro zobrazení odhadu ceny
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Srovnat terén na výšku prvního vybraného rohu. Ctrl vybírá diagonální oblast. Stisknutý Shift pro zobrazení odhadu ceny
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakoupit pozemek pro budoucí užití. Stisknutý Shift pro zobrazení odhadu ceny
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Zakoupit pozemek pro budoucí užití. Držet Shift pro zobrazení odhadu ceny
# Object construction window
STR_OBJECT_BUILD_CAPTION :{WHITE}Výběr objektu
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vyberte objekt, který se má postavit. Stisknutý Shift pro zobrazení odhadu ceny
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vyberte objekt, který se má postavit. Ctrl vybírá diagonální oblast. Shift zobrazí odhad ceny
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vyberte třídu objektu, který chcete postavit
STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Náhled objektu
STR_OBJECT_BUILD_SIZE :{BLACK}Velikost: {GOLD}{NUM}{NBSP}x{NBSP}{NUM}
@@ -2874,7 +2909,7 @@ STR_OBJECT_CLASS_TRNS :Vysílače
STR_PLANT_TREE_CAPTION :{WHITE}Stromy
STR_PLANT_TREE_TOOLTIP :{BLACK}Zvol druh stromu na vysazení. Pokud se na políčku už nějaký strom nachází, přidá se k němu několik různých druhů bez ohledu na výběr druhu
STR_TREES_RANDOM_TYPE :{BLACK}Různé stromy
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umístit nahodné stromy. Stisknutý Shift pro zobrazení odhadu ceny
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umístit nahodné stromy. Ctrl vybírá území úhlopříčně. Stisknutý Shift pro zobrazení odhadu ceny
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Náhodné stromy
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Umístit stromy náhodně po krajině
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normální
@@ -2906,6 +2941,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Náhodn
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Vybuduj město na náhodné pozici
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Hodně náhodných měst
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Pokryje krajinu mnoha náhodnými městy
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Rozbalit všechna města
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Nechte všechna města mírně růst
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Název města:
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Zadej název města
@@ -3212,6 +3249,12 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Řeky:
STR_MAPGEN_SMOOTHNESS :{BLACK}Členitost krajiny:
STR_MAPGEN_VARIETY :{BLACK}Rozmanitost terénu:
STR_MAPGEN_GENERATE :{WHITE}Vytvořit
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}Nastavení NewGRF
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Zobrazit nastavení NewGRF
STR_MAPGEN_AI_SETTINGS :{BLACK}Nastavení AI
STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Zobrazit nastavení AI
STR_MAPGEN_GS_SETTINGS :{BLACK}Nastavení herních skriptů
STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Zobrazit nastavení herních skriptů
###length 21
STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Anglická (původní)
@@ -3380,6 +3423,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Předcho
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Jít na předchozí normální sprite (s grafikou), přičemž se přeskakují pseudo-/barvící/znakové sprity a při dosažení začátku se jde na konec
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Zobrazení vybraného spritu. Posun se při jeho vykreslení neuvažoval
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Posouvání spritu změnou souřadnic X a Y. Ctrl+kliknutí posouvá o osm jednotek najednou.
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Posunutí vystředění
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprit vycentrován
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Zaměřovač
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Resetovat
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Resetovat aktuání relativní posunutí
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Posunutí v ose X: {NUM}, Posunutí v ose Y: {NUM} (Absolutní)
@@ -3397,12 +3447,12 @@ STR_NEWGRF_ERROR_MSG_FATAL :{RED}Závažná
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Vyskytla se kritická chyba v NewGRF:{}{STRING}
STR_NEWGRF_ERROR_POPUP :{WHITE}Došlo k chybě v NewGRF:{}{STRING}
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nebude fungovat s verzí TTDPatche, kterou OpenTTD hlásí
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} je pro TTD verzi {STRING}
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} je pro TTD verzi {2:STRING}
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} je navržen pro práci s {STRING}
STR_NEWGRF_ERROR_INVALID_PARAMETER :Neplatný parametr pro {1:STRING}: parametr {STRING} ({NUM})
STR_NEWGRF_ERROR_INVALID_PARAMETER :Neplatný parametr pro {1:STRING}: parametr {2:STRING} ({3:NUM})
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} musí být nahráván před {STRING}
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} musí být nahráván po {STRING}
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} potřebuje verzi OpenTTD {STRING} nebo vyšší
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} musí být nahráván po {2:STRING}
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} potřebuje verzi OpenTTD {2:STRING} nebo vyšší
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :grafika, která se měla přeložit
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Je nahráno příliš mnoho grafik
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Nahrání {1:STRING} jako statické grafiky spolu s {STRING} může způsobit chybu synchronizace
@@ -3537,14 +3587,14 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Koupit výhradn
STR_LOCAL_AUTHORITY_ACTION_BRIBE :Podplatit místní správu
###length 8
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Zahájit malou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy v blízkém okolí městského centra.{}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Zahájit středně velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy ve středně širokém okolí městského centra.{}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Zahájit velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy v širokém okolí městského centra.{}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Dotovat rekonstrukci sítě místních ulic.{}Způsobí problémy v dopravě po dobu až 6ti měsíců.{}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Postavit sochu jako poctu tvé společnosti.{}Poskytuje trvalý bonus k hodnocení stanic v tomto městě.{}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Dotovat stavbu nových obchodních budov ve městě.{}Poskytuje dočasné zvýšení rychlosti růstu města.{}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Koupit 1 roční výhradní přepravní práva z tohoto města. Místní správa nedovolí dovolí cestujícím ani nákladu používat stanice tvých konkurentů.{}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Podplatit místní správu pro zvýšení hodnocení společnosti. Riziko trestu v případě přistižení.{}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Zahájit malou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy v blízkém okolí městského centra.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Zahájit středně velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy ve středně širokém okolí městského centra.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Zahájit velkou reklamní kampaň, která přiláká více cestujících a nákladu.{}Poskytuje dočasné zvýšení hodnocení přepravy v širokém okolí městského centra.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Dotovat rekonstrukci sítě místních ulic.{}Způsobí problémy v dopravě po dobu až 6 měsíců.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Postavit sochu jako poctu tvé společnosti.{}Poskytuje permanentní bonus k hodnocení stanic v tomto městě.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Dotovat stavbu nových obchodních budov ve městě.{}Poskytuje dočasné zvýšení rychlosti růstu města.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Koupit roční výhradní přepravní práva pro toto město. Místní správa nedovolí dovolí cestujícím ani nákladu používat stanice konkurentů.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Podplatit místní správu pro zvýšení hodnocení společnosti. Riziko trestu v případě přistižení.{}{POP_COLOUR}Cena: {CURRENCY_LONG}
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} Cíle
@@ -3706,7 +3756,7 @@ STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Kapitál
STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Výstavba
STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Nové dopravní prostředky
STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Vlaky
STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Provoz silničních vozidel
STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Silniční vozidla
STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Provoz letadel
STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Provoz lodí
STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Infrastruktura
@@ -3717,14 +3767,18 @@ STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Lodě
STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Úroky z půjček
STR_FINANCES_SECTION_OTHER :{GOLD}Další
STR_FINANCES_TOTAL_CAPTION :{WHITE}Celkem
STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG}
STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG}
STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG}
STR_FINANCES_PROFIT :{WHITE}Zisk
STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Stav na účtu
STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Vlastní Prostředky
STR_FINANCES_LOAN_TITLE :{WHITE}Půjčka
STR_FINANCES_INTEREST_RATE :{WHITE}Úrok z půjčky: {BLACK}{NUM}%
STR_FINANCES_MAX_LOAN :{WHITE}Maximální půjčka: {BLACK}{CURRENCY_LONG}
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG}
STR_FINANCES_BORROW_BUTTON :{BLACK}Půjčit {CURRENCY_LONG}
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Půjčit si více
STR_FINANCES_REPAY_BUTTON :{BLACK}Vrátit {CURRENCY_LONG}
@@ -3825,7 +3879,7 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produkuj
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vyžaduje:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ček{P á ají á}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Změnit produkci (násobky 8, až do 2040)
@@ -3854,7 +3908,9 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Upravit
STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Poslat příkazy všem vozidlům v tomto seznamu
STR_VEHICLE_LIST_REPLACE_VEHICLES :Vyměňování vozidel
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Provést údržbu
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Zisk tento rok: {CURRENCY_LONG} (minulý rok: {CURRENCY_LONG})
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Letošní zisk: {CURRENCY_LONG} (vloni: {CURRENCY_LONG})
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Poslat do depa
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Poslat do depa
@@ -3947,6 +4003,9 @@ STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Dosah: {
STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Typ letadla: {GOLD}{STRING}
###length 3
STR_CARGO_TYPE_FILTER_ALL :Všechny druhy nákladu
STR_CARGO_TYPE_FILTER_FREIGHT :Náklad
STR_CARGO_TYPE_FILTER_NONE :Žádný
###length VEHICLE_TYPES
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Seznam vlaků - pro informace klikni na vlak. Ctrl+kliknutí způsobí přepínání skrytí typů lokomotiv a vagónů.
@@ -4278,12 +4337,13 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Hmotnost
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Hmotnost: {LTBLUE}{WEIGHT_SHORT} {BLACK}Výkon: {LTBLUE}{POWER}{BLACK} Max. rychlost: {LTBLUE}{VELOCITY} {BLACK}Max. tažná síla: {LTBLUE}{FORCE}
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Letošní zisk: {LTBLUE}{CURRENCY_LONG} (vloni: {CURRENCY_LONG})
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Letošní zisk: {LTBLUE}{CURRENCY_LONG} (vloni: {CURRENCY_LONG}) {BLACK}Min. výkon: {LTBLUE}{POWER_TO_WEIGHT}
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Spolehlivost: {LTBLUE}{COMMA}% {BLACK}Poruch od posledního servisu: {LTBLUE}{COMMA}
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Koupeno: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY_LONG}
STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Kapacita: {LTBLUE}nic{STRING}
STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapacita: {LTBLUE}{CARGO_LONG}{3:STRING}
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapacita: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM})
STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapacita: {LTBLUE}{0:CARGO_LONG}{3:STRING}
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapacita: {LTBLUE}{0:CARGO_LONG}{3:STRING} (x{4:NUM})
STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapacita: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING}
STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Podíl za převoz: {LTBLUE}{CURRENCY_LONG}
@@ -4549,25 +4609,25 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Tento j
STR_TIMETABLE_STATUS_START_AT :{BLACK}Tento jízdní řád začne v {STRING}
STR_TIMETABLE_STARTING_DATE :{BLACK}Datum začátku
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vyber počáteční datum tohoto jízdního řádu. Ctrl+Klik nastaví počáteční datum jízdního řádu všem vozidlům sdílejícím příkazy vzhledem k jejich pořadí
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vyber počáteční datum tohoto jízdního řádu. Ctrl+Klik rovnoměrně rozloží odjezdy jednotlivých vozidel sdílejích příkazy s ohledem na současný jízdní řád.
STR_TIMETABLE_CHANGE_TIME :{BLACK}Změnit čas
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Změnit čas pro splnění jízdního příkazu
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Změnit čas pro splnění jízdního příkazu. Ctrl+klik změní čas pro všechny příkazy.
STR_TIMETABLE_CLEAR_TIME :{BLACK}Smazat čas
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Zrušit čas pro splnění jízdního příkazu
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Zrušit čas pro splnění jízdního příkazu. Ctrl+klik zruší čas pro všechny příkazy
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Změnit rychlostní limit
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Změnit maximální cestovní rychlost u vybraného příkazu
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Změnit maximální cestovní rychlost u vybraného příkazu. Ctrl+klik nastaví rychlost pro všechny příkazy
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Odstranit rychlostní limit
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Odstranit maximální cestovní rychlost u vybraného příkazu
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Odstranit maximální cestovní rychlost u vybraného příkazu. Ctrl+klik odstraní maximální rychlosti u všech příkazů
STR_TIMETABLE_RESET_LATENESS :{BLACK}Zapomenout zpoždění
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Smazat zpoždění, takže vozidlo pojede na čas
STR_TIMETABLE_AUTOFILL :{BLACK}Automaticky
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Automaticky vyplň rozvrh hodnotami z následující cesty (Ctrl+klik pro zachování vyčkávací doby)
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Automaticky vyplň rozvrh hodnotami z následující cesty. Ctrl+klik pro zachování vyčkávací doby.
STR_TIMETABLE_EXPECTED :{BLACK}Očekávaný
STR_TIMETABLE_SCHEDULED :{BLACK}Plánovaný
@@ -4611,6 +4671,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Někter
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Okno na ladění AI / herních skriptů je dostupné pouze na serveru
# AI configuration window
STR_AI_CONFIG_CAPTION_AI :{WHITE}Nastavení AI
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Možnosti herních skriptů
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Herní skripty, které budou načteny v příští hře
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI, které budou načteny v příští hře
STR_AI_CONFIG_HUMAN_PLAYER :Lidský hráč
@@ -4624,10 +4686,11 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Přesuno
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Přesunout vybranou AI v seznamu níže
STR_AI_CONFIG_GAMESCRIPT :{SILVER}Herní skript
STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parametry
STR_AI_CONFIG_AI :{SILVER}AI
STR_AI_CONFIG_CHANGE_AI :AI
STR_AI_CONFIG_CHANGE_GAMESCRIPT :Herní skript
STR_AI_CONFIG_CHANGE_AI :{BLACK}Vybrat AI
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Vybrat herní skript
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Načíst další skript
STR_AI_CONFIG_CONFIGURE :{BLACK}Nastavit
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Nastavit parametry skriptu
@@ -4656,7 +4719,7 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Snímek
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Snímek (náhledové) mapy světa
# AI Parameters
STR_AI_SETTINGS_CAPTION_AI :AI
STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametry AI
STR_AI_SETTINGS_CLOSE :{BLACK}Zavřít
STR_AI_SETTINGS_RESET :{BLACK}Obnovit nastavení
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
@@ -4820,6 +4883,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... př
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Nelze vygenerovat žádný průmysl...
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Zde nelze postavit {STRING} ...
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Zde nelze postavit tento druh průmyslu...
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Není možné založit průmysl ...
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... příliš blízko k jinému průmyslu
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... je nutné nejprve vystavět město
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... je povolena jen jedna na město
@@ -4834,6 +4898,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... les
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... může být postaven pouze nad sněžnou čarou
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... může být postaven pouze pod sněžnou čarou
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Smůla, financování průzkumu se nezdařilo; zkus to znovu
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Na mapě nebyla žádná vhodná místa pro založení tohoto typu průmyslu
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Na mapě nebyla žádná vhodná místa pro '{STRING}'
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Pro získání lepší mapy změňte parametry jejího generování
@@ -5008,6 +5074,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}V cestě
STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... v cestě je ředitelství společnosti
STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Nelze zakoupit tento pozemek...
STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... již vlastníš!
STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... dosažen limit pro výstavbu objektů
# Group related errors
STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Nelze vytvořit skupinu...
@@ -5080,6 +5147,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Nelze zm
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... vozidlo bylo zničeno
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... všechna vozidla nejsou identická
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Žádná vozidla nejsou dostupná
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Zmeň nastavení NewGRF
@@ -5107,6 +5175,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Nelze p
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... prostředek se nedostane do všech stanic
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... do této stanice se prostředek nedostane
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... do této stanice se prostředek sdílející tento příkaz nedostane
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... ne všechna vozidla mají stejné příkazy
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... ne všechna vozidla sdílí příkazy
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Nelze sdílet seznam příkazů...
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Nelze zastavit sdílení seznamu příkazů...
+5 -2
View File
@@ -1182,6 +1182,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Højre
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum startlån: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimumbeløb et selskab kan låne (uden at tage inflation i betragtning)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Lånerente: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lånerente; kontrollerer også inflationen hvis aktiveret
@@ -2658,8 +2659,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Forøg t
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Vælg jernbanebro
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Vælg vejbro
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Valg af bro - klik på din foretrukne brotype for at bygge den
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Hængebro, stål
STR_BRIDGE_NAME_GIRDER_STEEL :Bjælkebro, stål
STR_BRIDGE_NAME_CANTILEVER_STEEL :Gerberbro, stål
@@ -3279,6 +3278,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Forrige
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsæt til den forrige normal sprite, spring pseudo/omfarvning/font-sprites over og omløb fra starten til slutningen
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Repræsentation af den markerede sprite. Justeringen ignoreres når denne sprite tegnes.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flyt spriten rundt for at ændre X- og Y-forskydningen. Ctrl+Klik for at flytte spriten otte enheder af gangen
###length 2
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Nulstil relativ
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Nulstil den nuværende relative forskydning
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-forskydning: {NUM}, Y-forskydning: {NUM} (Absolut)
+35 -11
View File
@@ -386,7 +386,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Stadsont
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrieontwikkeling
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Wegenbouw
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramsporen bouwen
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Bomen planten. Shift schakelt tussen planten/inschatting van de kosten
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Bomen planten. Ctrl selecteert het gebied diagonaal. Shift schakelt tussen planten/inschatting van de kosten
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Bord plaatsen
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Object plaatsen. Ctrl selecteert een diagonaal gebied. Shift+klik wisselt tussen bouwen/verwachte kosten weergeven.
@@ -1206,6 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Rechts
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximale beginlening: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaal bedrag dat een bedrijf kan lenen (zonder rekening te houden met de inflatie)
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
###setting-zero-is-special
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Geen lening {RED}Spelscript vereist voor aanvankelijk saldo
STR_CONFIG_SETTING_INTEREST_RATE :Rente van lening: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Percentage rente op lening; bepaald ook het inflatiecijfer wanneer ingeschakeld
@@ -1432,6 +1435,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Breedte van de
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Naam van NewGRF weergeven in venster voor voertuigen bouwen: {STRING}
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Voeg een regel toe aan het venster voor voertuigen bouwen die aangeeft uit welke NewGRF het geselecteerde voertuig komt.
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Mogelijke lading van voertuigen weergeven in lijstvensters {STRING}
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Wanneer ingeschakeld, verschijnt de mogelijke lading van het voertuig erboven in voertuiglijsten
STR_CONFIG_SETTING_LANDSCAPE :Landschap: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landschappen definiëren standaard spelscenario's met verschillende vracht- en stadsgroei-eisen. NewGRF en spelscripts kunnen daarentegen fijnere controle bieden.
@@ -1927,9 +1932,9 @@ STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :'Symmetrisch' b
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distributiemodus voor post: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :'Symmetrisch' betekent dat ongeveer dezelfde hoeveelheid post wordt verzonden van station A naar station B als van B naar A. 'Asymmetrisch' betekent dat willekeurige hoeveelheden post in beide richtingen worden verzonden. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor post.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distributiemodus voor de GEPANTSERDE ladingsklasse: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :De GEPANTSERDE ladingsklasse bevat waardevolle spullen in het gematigde klimaat, diamanten in het subtropische klimaat of goud in het subarctische klimaat. NewGRF's kunnen dat veranderen. 'Symmetrisch' betekent dat ongeveer dezelfde hoeveelheid lading wordt verzonden van een station A naar station B als van B naar A. 'Asymmetrisch' betekent dat deze vracht willekeurig in beide richtingen kan worden verzonden. 'Handmatig' betekent dat er geen automatische distributie zal plaatsvinden voor die lading. Het wordt aanbevolen om dit op 'Asymmetrisch' of 'Handmatig' te zetten bij het spelen in subarctisch klimaat omdat banken geen goud terugsturen naar goudmijnen. Voor gematigd en subtropisch klimaat kun je ook 'Symmetrisch' kiezen omdat banken waardevolle spullen terug kunnen sturen naar de oorspronkelijke bank.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :De GEPANTSERDE ladingsklasse bevat waardevolle spullen in het gematigde klimaat, diamanten in het subtropische klimaat of goud in het subarctische klimaat. NewGRF's kunnen dat veranderen. 'Symmetrisch' betekent dat ongeveer dezelfde hoeveelheid lading wordt verzonden van een station A naar station B als van B naar A. 'Asymmetrisch' betekent dat deze vracht willekeurig in beide richtingen kan worden verzonden. 'Handmatig' betekent dat er geen automatische distributie zal plaatsvinden voor die lading. Het wordt aanbevolen om dit op 'Asymmetrisch' of 'Handmatig' te zetten bij het spelen in subarctisch of subtropisch klimaat omdat banken daar alleen vracht kunnen accepteren, niet versturen. Voor gematigd klimaat kun je ook 'Symmetrisch' kiezen omdat banken kostbaarheden terug kunnen sturen naar de oorspronkelijke bank.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distributiemodus voor andere vrachtsoorten: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :'Symmetrisch' betekent dat willekeurige hoeveelheden lading in beide richtingen kunnen worden gestuurd. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor die lading.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :'Asymmetrisch' betekent dat willekeurige hoeveelheden lading in beide richtingen kunnen worden gestuurd. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor die lading.
###length 3
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Handmatig
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Asymmetrisch
@@ -2696,8 +2701,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Dichthei
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selecteer type spoorbrug
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selecteer type wegbrug
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brugkeuze - klik op de gewenste brug om die te bouwen
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Hangend, staal
STR_BRIDGE_NAME_GIRDER_STEEL :Ligger, staal
STR_BRIDGE_NAME_CANTILEVER_STEEL :Vrijdragend, staal
@@ -2817,7 +2824,7 @@ STR_OBJECT_CLASS_TRNS :Zendmasten
STR_PLANT_TREE_CAPTION :{WHITE}Bomen
STR_PLANT_TREE_TOOLTIP :{BLACK}Selecteer een soort boom om te planten. Als de tegel al bomen bevat, komen er meer bomen van verschillende typen bij, onafhankelijk van het geselecteerde type
STR_TREES_RANDOM_TYPE :{BLACK}Willekeurige soorten bomen
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Willekeurig bomen planten. Shift+klik wisselt tussen bouwen/verwachte kosten.
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Willekeurig bomen planten. Ctrl selecteert het gebied diagonaal. Shift+klik wisselt tussen bouwen/verwachte kosten.
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Willekeurige bomen
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Hiermee plant je bomen willekeurig over het landschap
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normaal
@@ -2849,6 +2856,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Willekeu
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Hiermee sticht je een stad op een willekeurige locatie
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Veel willekeurige steden
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Verspreid willekeurig geplaatste steden over de kaart
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Alle steden uitbreiden
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Laat alle steden een klein beetje groeien
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Plaatsnaam:
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Plaatsnaam invoeren
@@ -3323,6 +3332,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorige s
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Doorgaan met de vorige normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Voorbeeld van de huidige sprite. De uitlijning wordt genegeerd bij het weergeven van deze sprite.
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Sprite verplaatsen, dit verandert X en Y offsets. Ctr+klik om de sprite 8 eenheden per keer te verplaatsen.
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Op offset gecentreerd
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Op sprite gecentreerd
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Richtkruis
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Relatief herstellen
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Herstel de huidige relatieve offsets
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-offset: {NUM}, Y-offset: {NUM} (absoluut)
@@ -3802,6 +3818,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Stuur in
STR_VEHICLE_LIST_REPLACE_VEHICLES :Vervang voertuigen
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Stuur voor onderhoud
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Winst dit jaar: {CURRENCY_LONG} (vorig jaar: {CURRENCY_LONG})
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Stuur naar depot
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Stuur naar garage
@@ -4500,22 +4518,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Startdat
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecteer een datum als startpunt voor deze dienstregeling. Ctrl+klik verdeelt alle voertuigen die deze orders delen gelijkmatig vanaf deze datum op basis van hun relatieve volgorde, als de order volledig is ingeroosterd
STR_TIMETABLE_CHANGE_TIME :{BLACK}Tijd wijzigen
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Verander de tijdsduur die de geselecteerde order mag duren
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Verander de tijdsduur die de geselecteerde order mag duren. Met Ctrl+klik stel je de tijd voor alle orders in
STR_TIMETABLE_CLEAR_TIME :{BLACK}Tijd wissen
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Verwijder de tijdsduur die de geselecteerde order mag duren
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Verwijder de tijdsduur die de geselecteerde order mag duren. Met Ctrl+klik wis je de tijd voor alle orders
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Maximumsnelheid wijzigen
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Wijzig de maximumsnelheid voor de gekozen order
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Wijzig de maximumsnelheid voor de gekozen order. Met Ctrl+klik stel je de snelheid voor alle orders in
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Snelheidslimiet wissen
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Verwijder de maximumsnelheid van de gekozen order
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Verwijder de maximumsnelheid van de gekozen order. Met Ctrl+klik wis je de snelheid voor alle orders
STR_TIMETABLE_RESET_LATENESS :{BLACK}Vertragingsteller terugstellen
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Stel de vertragingsteller terug zodat het voertuig op tijd is
STR_TIMETABLE_AUTOFILL :{BLACK}Automatisch vullen
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Vul de dienstregeling automatisch in aan de hand van de volgende reis (Ctrl+klik om te proberen om wachttijden te bewaren)
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Vul de dienstregeling automatisch in aan de hand van de volgende reis. Ctrl+klik om te proberen om wachttijden te bewaren
STR_TIMETABLE_EXPECTED :{BLACK}Verwacht
STR_TIMETABLE_SCHEDULED :{BLACK}Volgens dienstregeling
@@ -4771,6 +4789,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... te v
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kan geen industrieën genereren...
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Kan {STRING} hier niet bouwen...
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Kan dit type industrie hier niet bouwen...
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Kan industrie niet onderzoeken...
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... te dicht bij een andere industrie
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... moet eerst dorp bouwen
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... slechts één per stad toegestaan
@@ -4785,6 +4804,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... boss
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... kan alleen boven de sneeuwlijn gebouwd worden
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... kan alleen onder de sneeuwlijn gebouwd worden
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}De financiering is mislukt vanwege domme pech. Probeer het opnieuw.
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Er was geen geschikte plek voor onderzoek voor deze industrie
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Er waren geen geschikte locaties voor {STRING}-industrieën
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Wijzig de instellingen van wereldontwikkeling om een betere kaart te krijgen
@@ -5025,6 +5046,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Kan onde
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... voertuig is vernietigd
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... niet alle voertuigen zijn identiek
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Er zullen geen voertuigen beschikbaar zijn
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Pas je NewGRF-configuratie aan
@@ -5052,6 +5074,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Kan gese
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... voertuig kan niet naar alle stations
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... voertuig kan niet naar dat station
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... een voertuig die deze order deelt kan niet naar dat station
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... niet alle voertuigen hebben dezelfde orders
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... niet alle voertuigen delen hun orders
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Kan orderlijst niet delen...
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Kan niet stoppen met delen van orderlijst...
+30 -13
View File
@@ -386,7 +386,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Town gen
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industry generation
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Road construction
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramway construction
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Shift toggles building/showing cost estimate
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Place sign
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Place object. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
@@ -1206,6 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING2}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account)
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
###setting-zero-is-special
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan {RED}Requires Game Script to provide initial funds
STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING2}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled
@@ -1925,13 +1928,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Take {STRING2}{
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of days. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change.
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING2}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "asymmetric" means that arbitrary numbers of passengers can go in either direction. "manual" means that no automatic distribution will take place for passengers.
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribution mode for mail: {STRING2}
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary amounts of mail can be sent in either direction. "manual" means that no automatic distribution will take place for mail.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribution mode for the ARMOURED cargo class: {STRING2}
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical or gold in subarctic climate. NewGRFs may change that. "symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic, as banks won't send any gold back to gold mines. For temperate and subtropical you can also choose symmetric as banks will send valuables back to the origin bank of some load of valuables.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribution mode for other cargo classes: {STRING2}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "manual" means that no automatic distribution will take place for those cargoes.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes.
###length 3
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetric
@@ -2698,8 +2701,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Increase
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Select Rail Bridge
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Select Road Bridge
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Bridge selection - click on your preferred bridge to build it
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspension, Steel
STR_BRIDGE_NAME_GIRDER_STEEL :Girder, Steel
STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Steel
@@ -2819,7 +2824,7 @@ STR_OBJECT_CLASS_TRNS :Transmitters
STR_PLANT_TREE_CAPTION :{WHITE}Trees
STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type
STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Shift toggles building/showing cost estimate
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
@@ -2851,6 +2856,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Random T
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Found town in random location
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Many random towns
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cover the map with randomly placed towns
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expand all towns
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Make all towns grow slightly
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Town name:
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Enter town name
@@ -3325,6 +3332,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Previous
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around from the first sprite to the last
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets. Ctrl+Click to move the sprite eight units at a time
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset centred
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centred
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Crosshair
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reset relative
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reset the current relative offsets
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absolute)
@@ -4504,22 +4518,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Start da
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Select a date as starting point of this timetable. Ctrl+Click distributes all vehicles sharing this order evenly from the given date based on their relative order, if the order is completely timetabled
STR_TIMETABLE_CHANGE_TIME :{BLACK}Change Time
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take. Ctrl+Click sets the time for all orders
STR_TIMETABLE_CLEAR_TIME :{BLACK}Clear Time
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order. Ctrl+Click clears the time for all orders
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Change Speed Limit
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order. Ctrl+Click sets the speed for all orders
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Clear Speed Limit
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order. Ctrl+Click clears the speed for all orders
STR_TIMETABLE_RESET_LATENESS :{BLACK}Reset Late Counter
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time
STR_TIMETABLE_AUTOFILL :{BLACK}Autofill
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey (Ctrl+Click to try to keep waiting times)
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey. Ctrl+Click to try to keep waiting times
STR_TIMETABLE_EXPECTED :{BLACK}Expected
STR_TIMETABLE_SCHEDULED :{BLACK}Scheduled
@@ -4775,6 +4789,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... too
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Can't generate industries...
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Can't build {STRING} here...
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Can't construct this industry type here...
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Can't prospect industry...
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... too close to another industry
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... must found town first
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... only one allowed per town
@@ -4789,6 +4804,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... fore
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... can only be built above the snow-line
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... can only be built below the snow-line
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}The funding failed to prospect due to bad luck; try again
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}There were no suitable places to prospect for this industry
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}There were no suitable places for '{STRING}' industries
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Change the map generation parameters to get a better map
+31 -13
View File
@@ -386,7 +386,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Town gen
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industry generation
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Road construction
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramway construction
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Shift toggles building/showing cost estimate
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Place sign
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Place object. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
@@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled
@@ -1925,13 +1926,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Take {STRING}{N
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of days. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change.
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "asymmetric" means that arbitrary numbers of passengers can go in either direction. "manual" means that no automatic distribution will take place for passengers.
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribution mode for mail: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary amounts of mail can be sent in either direction. "manual" means that no automatic distribution will take place for mail.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribution mode for the ARMOURED cargo class: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical or gold in subarctic climate. NewGRFs may change that. "symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary of that cargo can be sent in either direction. "manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic, as banks won't send any gold back to gold mines. For temperate and subtropical you can also choose symmetric as banks will send valuables back to the origin bank of some load of valuables.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMOURED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribution mode for other cargo classes: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "manual" means that no automatic distribution will take place for those cargoes.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes.
###length 3
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetric
@@ -2698,8 +2699,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Increase
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Select Rail Bridge
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Select Road Bridge
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Bridge selection - click on your preferred bridge to build it
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspension, Steel
STR_BRIDGE_NAME_GIRDER_STEEL :Girder, Steel
STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Steel
@@ -2819,7 +2822,7 @@ STR_OBJECT_CLASS_TRNS :Transmitters
STR_PLANT_TREE_CAPTION :{WHITE}Trees
STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type
STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Shift toggles building/showing cost estimate
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
@@ -2851,6 +2854,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Random T
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Found town in random location
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Many random towns
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cover the map with randomly placed towns
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expand all towns
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Make all towns grow slightly
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Town name:
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Enter town name
@@ -3325,6 +3330,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Previous
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around at the begin
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset centred
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centred
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Crosshair
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reset relative
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reset the current relative offsets
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absolute)
@@ -4504,22 +4516,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Start da
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Select a date as starting point of this timetable. Ctrl+Click distributes all vehicles sharing this order evenly from the given date based on their relative order, if the order is completely timetabled
STR_TIMETABLE_CHANGE_TIME :{BLACK}Change Time
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take. Ctrl+Click sets the time for all orders
STR_TIMETABLE_CLEAR_TIME :{BLACK}Clear Time
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order. Ctrl+Click clears the time for all orders
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Change Speed Limit
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order. Ctrl+Click sets the speed for all orders
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Clear Speed Limit
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order. Ctrl+Click clears the speed for all orders
STR_TIMETABLE_RESET_LATENESS :{BLACK}Reset Late Counter
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time
STR_TIMETABLE_AUTOFILL :{BLACK}Autofill
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey (Ctrl+Click to try to keep waiting times)
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey. Ctrl+Click to try to keep waiting times
STR_TIMETABLE_EXPECTED :{BLACK}Expected
STR_TIMETABLE_SCHEDULED :{BLACK}Scheduled
@@ -4775,6 +4787,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... too
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Can't generate industries...
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Can't build {STRING} here...
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Can't construct this industry type here...
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Can't prospect industry...
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... too close to another industry
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... must found town first
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... only one allowed per town
@@ -4789,6 +4802,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... fore
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... can only be built above the snow-line
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... can only be built below the snow-line
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}The funding failed to prospect due to bad luck; try again
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}There were no suitable places to prospect for this industry
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}There were no suitable places for '{STRING}' industries
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Change the map generation parameters to get a better map
@@ -5029,6 +5044,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Can't ch
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... vehicle is destroyed
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... not all vehicles are identical
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}No vehicles will be available at all
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change your NewGRF configuration
@@ -5056,6 +5072,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Can't sk
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... vehicle can't go to all stations
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... vehicle can't go to that station
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... a vehicle sharing this order can't go to that station
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... not all vehicles have the same orders
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... not all vehicles are sharing orders
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Can't share order list...
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Can't stop sharing order list...
+37 -13
View File
@@ -386,7 +386,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Town gen
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industry generation
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Road construction
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Streetcar line construction
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Shift toggles building/showing cost estimate
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant trees. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Place sign
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Place object. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
@@ -1206,6 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account)
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
###setting-zero-is-special
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan {RED}Requires Game Script to provide initial funds
STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled
@@ -1432,6 +1435,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Width of the li
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Show the NewGRF's name in the build vehicle window: {STRING}
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from.
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Show the cargos the vehicles can carry in the list windows {STRING}
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :If enabled, the vehicle's transportable load will appear above it in the vehicle lists
STR_CONFIG_SETTING_LANDSCAPE :Landscape: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landscapes define basic gameplay scenarios with different cargos and town growth requirements. NewGRF and Game Scripts allow finer control though
@@ -1923,13 +1928,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Take {STRING}{N
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of days. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change.
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "asymmetric" means that arbitrary numbers of passengers can go in either direction. "manual" means that no automatic distribution will take place for passengers.
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetric" means that roughly the same number of passengers will go from a station A to a station B as from B to A. "Asymmetric" means that arbitrary numbers of passengers can go in either direction. "Manual" means that no automatic distribution will take place for passengers.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distribution mode for mail: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary amounts of mail can be sent in either direction. "manual" means that no automatic distribution will take place for mail.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetric" means that roughly the same amount of mail will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of mail can be sent in either direction. "Manual" means that no automatic distribution will take place for mail.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distribution mode for the ARMORED cargo class: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMORED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic, as banks won't send any gold back to gold mines. For temperate and subtropical you can also choose symmetric as banks will send valuables back to the origin bank of some load of valuables.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :The ARMORED cargo class contains valuables in the temperate, diamonds in the subtropical, or gold in the subarctic climate. NewGRFs may change that. "Symmetric" means that roughly the same amount of that cargo will be sent from a station A to a station B as from B to A. "Asymmetric" means that arbitrary amounts of that cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for that cargo. It is recommended to set this to asymmetric or manual when playing subarctic or subtropic, as banks only receive cargo in these climates. For temperate you can also choose symmetric as banks will send valuables back to the origin bank.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distribution mode for other cargo classes: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "manual" means that no automatic distribution will take place for those cargos.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetric" means that arbitrary amounts of cargo can be sent in either direction. "Manual" means that no automatic distribution will take place for those cargoes.
###length 3
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetric
@@ -2696,8 +2701,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Increase
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Select Rail Bridge
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Select Road Bridge
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Bridge selection - click on your preferred bridge to build it
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspension, Steel
STR_BRIDGE_NAME_GIRDER_STEEL :Girder, Steel
STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Steel
@@ -2817,7 +2824,7 @@ STR_OBJECT_CLASS_TRNS :Transmitters
STR_PLANT_TREE_CAPTION :{WHITE}Trees
STR_PLANT_TREE_TOOLTIP :{BLACK}Select tree type to plant. If the tile already has a tree, this will add more trees of mixed types independent of the selected type
STR_TREES_RANDOM_TYPE :{BLACK}Trees of random type
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Shift toggles building/showing cost estimate
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Place trees of random type. Ctrl selects the area diagonally. Shift toggles building/showing cost estimate
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Random Trees
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant trees randomly throughout the landscape
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
@@ -2849,6 +2856,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Random T
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Found town in random location
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Many random towns
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cover the map with randomly placed towns
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expand all towns
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Make all towns grow slightly
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Town name:
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Enter town name
@@ -3323,6 +3332,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Previous
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolor/font sprites and wrapping around from the first sprite to the last
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets. Ctrl+Click to move the sprite eight units at a time
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset centered
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centered
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Crosshair
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reset relative
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Reset the current relative offsets
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absolute)
@@ -3802,6 +3818,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Send ins
STR_VEHICLE_LIST_REPLACE_VEHICLES :Replace vehicles
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send for Maintenance
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit this year: {CURRENCY_LONG} (last year: {CURRENCY_LONG})
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send to Depot
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send to Depot
@@ -4500,22 +4518,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Start Da
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Select a date as starting point of this timetable. Ctrl+Click distributes all vehicles sharing this order evenly from the given date based on their relative order, if the order is completely timetabled
STR_TIMETABLE_CHANGE_TIME :{BLACK}Change Time
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take. Ctrl+Click sets the time for all orders
STR_TIMETABLE_CLEAR_TIME :{BLACK}Clear Time
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order. Ctrl+Click clears the time for all orders
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Change Speed Limit
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Change the maximum travel speed of the highlighted order. Ctrl+Click sets the speed for all orders
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Clear Speed Limit
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order. Ctrl+Click clears the speed for all orders
STR_TIMETABLE_RESET_LATENESS :{BLACK}Reset Late Counter
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time
STR_TIMETABLE_AUTOFILL :{BLACK}Autofill
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey (Ctrl+Click to try to keep waiting times)
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey. Ctrl+Click to try to keep waiting times
STR_TIMETABLE_EXPECTED :{BLACK}Expected
STR_TIMETABLE_SCHEDULED :{BLACK}Scheduled
@@ -4771,6 +4789,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... too
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Can't generate industries...
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Can't build {STRING} here...
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Can't construct this industry type here...
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Can't prospect industry...
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... too close to another industry
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... must found town first
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... only one allowed per town
@@ -4785,6 +4804,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... fore
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... can only be built above the snow-line
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... can only be built below the snow-line
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}The funding failed to prospect due to bad luck; try again
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}There were no suitable places to prospect for this industry
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}There were no suitable places for '{STRING}' industries
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Change the map generation parameters to get a better map
@@ -5025,6 +5046,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Can't ch
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... vehicle is destroyed
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... not all vehicles are identical
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}No vehicles will be available at all
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Change your NewGRF configuration
@@ -5052,6 +5074,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Can't sk
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... vehicle can't go to all stations
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... vehicle can't go to that station
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... a vehicle sharing this order can't go to that station
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... not all vehicles have the same orders
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... not all vehicles are sharing orders
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Can't share order list...
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Can't stop sharing order list...
+5 -2
View File
@@ -1090,6 +1090,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centre
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dekstre
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimuma komenca prunto: {STRING}
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Rentumtarifoj: {STRING}
@@ -2062,8 +2063,6 @@ STR_BUILD_SIGNAL_CAPTION :{WHITE}Elekto d
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Elektu Relan Ponton
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Elektu Vojan Ponton
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Pontelekto - klaku vian preferatan ponton por konstrui ĝin
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Ŝtala pendanta
STR_BRIDGE_NAME_GIRDER_STEEL :Ŝtala ebena
STR_BRIDGE_NAME_CANTILEVER_STEEL :Ŝtala luksa
@@ -2539,6 +2538,10 @@ STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sekvanta
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Iru al bildeto
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Antaŭa bildeto
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Movadi la bildeton, ŝanĝante la X kaj Y distancojn. Stir-klako por movi la bildeton je 8 unuoj samtempe
###length 2
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Elektu bildeto
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Elektu bildeton ie el la ekrano
+5 -2
View File
@@ -1231,6 +1231,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Paremal
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Stardilaenu ülempiirang: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurim summa, mida ettevõte saab laenata (arvestamata inflatsiooni)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Intressimäär: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Laenu intressimäär; ühtlasi juhib inflatsiooni, kui inflatsioon on aktiveeritud
@@ -2663,8 +2664,6 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Suurenda
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Vali raudteesild
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Vali sillatüüp
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Silla valik - ehitamiseks klõpsi sobival sillal
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Rippsild, terasest
STR_BRIDGE_NAME_GIRDER_STEEL :Raamistikuga, terasest
STR_BRIDGE_NAME_CANTILEVER_STEEL :Konsool, terasest
@@ -3284,6 +3283,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Eelmine
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around at the begin
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Liiguta spraiti, muutes X ja Y tasakaalu. Ctrl+klõps, et liigutada kaheksa ühiku võrra korraga
###length 2
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Lähtesta suhteline
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Lähtesta praegused suhtelised kõrvalekalded
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X kõrvalekalle: {NUM}, Y kõrvalekalle: {NUM} (Absoluutne)
+5 -2
View File
@@ -1087,6 +1087,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Høgra
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Hægst loyvda byrjunar lán: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Mest loyvda upphæddin ein fyritøka kann lána (uttan at taka virðisminkan til eftirtektar)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Rentu stigi: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Rentustigi á láni, stýrir eisini virðisminkan um hon er sligin til
@@ -2233,8 +2234,6 @@ STR_BUILD_SIGNAL_CAPTION :{WHITE}Úrval a
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Vel jarnbreyta brúgv
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Vel vega brúgv
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brúgva úrval - trýst á ta brúnna tær dámar fyri at byggja hana
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Heingibrúgv, stál
STR_BRIDGE_NAME_GIRDER_STEEL :Bjálkabrúgv, stál
STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, stál
@@ -2697,6 +2696,10 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF v
STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING})
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite
###length 2
# NewGRF (self) generated warnings/errors
STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING}
+153 -81
View File
@@ -200,6 +200,15 @@ STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hv
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hv
STR_UNITS_POWER_SI :{COMMA}{NBSP}kW
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hv/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hv/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hv/Mg
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hv/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hv/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hv/Mg
STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}{NBSP}t
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}{NBSP}t
@@ -226,9 +235,9 @@ STR_UNITS_HEIGHT_METRIC :{COMMA}{NBSP}m
STR_UNITS_HEIGHT_SI :{COMMA}{NBSP}m
# Common window strings
STR_LIST_FILTER_TITLE :{BLACK}Suodatinteksti:
STR_LIST_FILTER_OSKTITLE :{BLACK}Syötä suodatinteksti
STR_LIST_FILTER_TOOLTIP :{BLACK}Syötä avainsana suodattaaksesi listan
STR_LIST_FILTER_TITLE :{BLACK}Suodatin:
STR_LIST_FILTER_OSKTITLE :{BLACK}Syötä yksi tai useampi avainsana listan suodattamiseksi
STR_LIST_FILTER_TOOLTIP :{BLACK}Syötä yksi tai useampi avainsana listan suodattamiseksi
STR_TOOLTIP_GROUP_ORDER :{BLACK}Valitse ryhmittelytapa
STR_TOOLTIP_SORT_ORDER :{BLACK}Valitse järjestys (laskeva/nouseva)
@@ -377,9 +386,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Kuntien
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Teollisuuden luonti
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Tienrakennus
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Raitiotien rakentaminen
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puita. Shift vaihtaa istutustilan ja kustannusarvion välillä
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puita. Ctrl valitsee alueen vinottain. Shift vaihtaa istutustilan ja kustannusarvion välillä
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Sijoita kyltti
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Sijoita objekti. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Sijoita objekti. Ctrl valitsee alueen vinottain. Shift vaihtaa rakennustilan ja kustannusarvion välillä
# Scenario editor file menu
###length 7
@@ -395,6 +404,8 @@ STR_SCENEDIT_FILE_MENU_QUIT :Lopeta
###length 15
STR_SETTINGS_MENU_GAME_OPTIONS :Pelin valinnat
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Asetukset
STR_SETTINGS_MENU_AI_SETTINGS :Tekoälyasetukset
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Peliskriptiasetukset
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-asetukset
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läpinäkyvyysasetukset
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Kuntien nimet näkyvissä
@@ -498,8 +509,8 @@ STR_ABOUT_MENU_SCREENSHOT :Kuvakaappaus
STR_ABOUT_MENU_SHOW_FRAMERATE :Näytä kuvataajuus
STR_ABOUT_MENU_ABOUT_OPENTTD :Tietoja OpenTTD:stä
STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-kohdistaja
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Reunat päälle/pois
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Likaisten ruutujen värjäys päälle/pois
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Rajakehikot päälle/pois
STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Likaisten lohkojen värjäys päälle/pois
# Place in highscore window
###length 15
@@ -669,7 +680,7 @@ STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKG
STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM}
STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------
STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Musiikkia ei ole saatavilla
STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}"
STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}{STRING}
STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Raita
STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Nimi
STR_MUSIC_SHUFFLE :{TINY_FONT}{BLACK}Sekoita
@@ -690,7 +701,7 @@ STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Näytä
# Playlist window
STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Soittolista ”{STRING}”
STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}"
STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} {STRING}
STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Raita
STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Soittolista ”{STRING}”
STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Tyhjennä
@@ -997,8 +1008,19 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Valitse
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Nykyinen ajuri: {STRING}
STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Käyttöliittymän koko
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Vedä liukusäädintä asettaaksesi käyttöliittymän koon. Pidä Ctrl-näppäintä painettuna säätääksesi portaattomasti
STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Tunnista koko automaattisesti
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Valitse tämä ruutu käyttöliittymän koon tunnistamiseksi automaattisesti
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skaalaa viisteet
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Valitse tämä ruutu reunusten skaalaamiseksi käyttöliittymän koon mukaan
STR_GAME_OPTIONS_GUI_SCALE_1X :1×
STR_GAME_OPTIONS_GUI_SCALE_2X :2×
STR_GAME_OPTIONS_GUI_SCALE_3X :3×
STR_GAME_OPTIONS_GUI_SCALE_4X :4×
STR_GAME_OPTIONS_GUI_SCALE_5X :5×
STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafiikka
@@ -1124,7 +1146,7 @@ STR_WARNING_NO_SUITABLE_AI :{WHITE}Ei sovel
# Settings tree window
STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Asetukset
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Suodatinteksti:
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Suodatin:
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Avaa kaikki
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Sulje kaikki
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Palauta oletukset
@@ -1184,6 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :oikealla
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Suurin mahdollinen laina alussa: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurin mahdollinen yhtiön ottama laina (ottamatta huomioon inflaatiota)
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG}
###setting-zero-is-special
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Ei lainaa {RED}Vaatii peliskriptin, joka tarjoaa alkupääoman
STR_CONFIG_SETTING_INTEREST_RATE :Korko: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lainan korko; ohjaa myös inflaatiota mikäli käytössä
@@ -1249,10 +1274,10 @@ STR_CONFIG_SETTING_SMOKE_AMOUNT :Kulkuneuvon sav
STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Määrittää kuinka paljon savua tai kipinöitä kulkuneuvot saavat aikaan
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Junien kiihdytysmalli: {STRING}
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Valitsee junien käyttämän fysiikkamallin. "Alkuperäinen" malli hidastaa junia mäissä tasapuolisesti. "Realistinen" malli hidastaa junia mäissä ja mutkissa junan ominaisuuksista riippuen
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Valitsee junien kiihtyvyyden fysiikkamallin. Alkuperäisessä” mallissa mäet vaikuttavat kaikkiin juniin samalla tavalla. Realistinen malli hidastaa junia mäissä ja kaarteissa riippuen kokoonpanon ominaisuuksista, kuten pituudesta ja vetovoimasta
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Ajoneuvojen kiihdytysmalli: {STRING}
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Valitsee ajoneuvojen käyttämän fysiikkamallin. "Alkuperäinen" malli hidastaa ajoneuvoja mäissä tasapuolisesta. "Realistinen" malli hidastaa ajoneuvoja mäissä niiden ominaisuuksista riippuen
STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Valitsee ajoneuvojen kiihtyvyyden fysiikkamallin. Alkuperäisessä” mallissa mäet vaikuttavat kaikkiin ajoneuvoihin samalla tavalla. Realistinen malli ottaa huomioon ajoneuvon ominaisuudet, kuten esimerkiksi vetovoiman
STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Mäkien jyrkkyys junille: {STRING}
STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Mäkien jyrkkyys junille. Korkeammat arvot tekevät mäkien nousemisesta vaikeampaa
@@ -1306,7 +1331,7 @@ STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Uudet käskyt o
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normaalisti kulkuneuvo pysähtyy jokaisella läpikulkemallaan asemalla. Mikäli tämä asetus on käytössä kulkuneuvot eivät pysähdy ajaessaan asemien läpi. Huomioi, että tämä asetus määrittää oletusarvoisen toiminnon uusille kulkuneuvoille. Asetusta voidaan muuttaa erikseen kunkin kulkuneuvon kohdalla
STR_CONFIG_SETTING_STOP_LOCATION :Uudet junien käskyt pysäyttävät junan aseman {STRING}
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Paikka, johon juna pysähtyy oletuksena asemalla. ”Alkuun” tarkoittaa, että junan viimeinen vaunu pysähtyy laiturin alkuun; ”keskelle” tarkoittaa junan pysähtymistä keskelle laituria; ja ”loppuun” tarkoittaa, että veturi pysähtyy laiturin päähän. Huomaa, että tämä asetus määrittää vain oletusarvon uusille määräyksille. Yksittäisten määräysten kohdalla käyttäytymistä voi muuttaa tästä asetuksesta huolimatta
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Paikka, johon juna pysähtyy oletuksena asemalla. ”Alkuun” tarkoittaa, että junan viimeinen vaunu pysähtyy laiturin alkuun; ”keskelle” tarkoittaa junan pysähtymistä keskelle laituria; ja ”loppuun” tarkoittaa, että veturi pysähtyy laiturin päähän. Huomaa, että tämä asetus määrittää vain oletusarvon uusille käskyille. Yksittäisten käskyjen kohdalla käyttäytymistä voi muuttaa tästä asetuksesta huolimatta
###length 3
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :alkuun
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :keskelle
@@ -1368,7 +1393,7 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Varoita, jos ku
STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Lähetä viesti, jos kulkuneuvo ei löydä reittiä määränpäähänsä
STR_CONFIG_SETTING_ORDER_REVIEW :Tarkista kulkuneuvojen pysähdykset: {STRING}
STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Mikäli käytössä, kulkuneuvojen määräykset tarkistetaan väliajoin ja havaituista ongelmista ilmoitetaan uutisviestillä
STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Mikäli käytössä, kulkuneuvojen käskyjä tarkastetaan väliajoin, ja havaituista ongelmista ilmoitetaan uutisviestillä
###length 3
STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Ei
STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Kyllä, mutta ei pysäytetyille
@@ -1410,6 +1435,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Viivan leveys k
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Näytä NewGRF:n nimi kulkuneuvoikkunassa: {STRING}
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lisää kulkuneuvovalikoimaikkunaan rivin, joka kertoo mistä NewGRF:stä valittu kulkuneuvo on peräisin.
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Näytä kulkuneuvojen kuljetettavissa olevat rahdit listaikkunoissa {STRING}
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Mikäli käytössä, kuljetettavissa oleva rahti näytetään kulkuneuvolistoissa kulkuneuvon yllä
STR_CONFIG_SETTING_LANDSCAPE :Maasto: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maasto vaikuttaa useisiin pelin peruselementteihin, kuten rahtiin ja kuntien kasvuedellytyksiin. NewGRF:t ja peliskriptit voivat kuitenkin vaikuttaa tarkemmin pelin kulkuun.
@@ -1874,9 +1901,9 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x
STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Korkein käytettävä sprite-resoluutio: {STRING}
STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Rajoita suurinta spriteille käytettävää resoluutiota. Resoluution rajoittaminen estää korkean tarkkuuden grafiikoiden käyttämisen vaikka niitä olisi saatavilla. Tämä voi auttaa pitämään pelin ulkoasun yhtenäisenä käytettäessä sekaisin GRF-tiedostoja, joista osalla on ja osalla ei ole korkean tarkkuuden grafiikoita.
###length 3
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4×
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2×
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1×
STR_CONFIG_SETTING_TOWN_GROWTH :Kuntien kasvunopeus: {STRING}
STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Kunnan kasvunopeus
@@ -1901,13 +1928,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Käytä {STRING
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Jokaisen yhteyskuvaajan komponentin uudelleenlaskemiseen käytettävä aika. Uudelleenlaskun alkaessa käynnistetään uusi säie, jonka annetaan toimia näin monta päivää. Mitä lyhyemmäksi määrität tämän, sitä todennäköisempää on, että säie ei ole valmis ajoissa. Tällöin peli pysähtyy kunnes lasku on suoritettu loppuun (peli pätkii). Mitä pidemmäksi määrität asetuksen, sitä pitempään rahdin jakauman päivittämiseen kuluu aikaa reittien muuttuessa.
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Matkustajien jakautuminen: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä matkustajia kulkee asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että eri suuntiin voi kulkea eriävä määrä matkustajia. ”Manuaalinen” tarkoittaa, että automaattinen rahdin jakautuminen on pois käytöstä matkustajilla.
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä matkustajia kulkee asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että matkustajia voi kulkea mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta matkustajiin.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Postin jakautuminen: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä postia lähetetään asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että eri suuntiin voidaan lähettää eriävä määrä postia. ”Manuaalinen” tarkoittaa, että automaattinen rahdin jakautuminen on pois käytöstä postilla.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :”Symmetrinen” tarkoittaa, että suunnilleen sama määrä postia kulkee asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että postia voi kulkea mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta postiin.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Arvokuljetusten jakautuminen: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Arvokuljetuksiin kuuluvat arvotavarat lauhkeassa ilmastossa, timantit subtrooppisessa ilmastossa ja kulta pohjoisessa ilmastossa. NewGRF:t voivat kuitenkin muuttaa näitä rahteja. ”Symmetrinen” tarkoittaa, että suunnilleen sama määrä rahtia lähetetään asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että eri suuntiin voidaan lähettää eriävä määrä rahtia. ”Manuaalinen” tarkoittaa, että automaattinen rahdin jakautuminen on poistettu käytöstä rahdilta. Suositeltavia asetuksia ovat ”epäsymmetrinen” tai ”manuaalinen” pelattaessa pohjoisessa ilmastossa, sillä pankit eivät lähetä kultaa takaisin kaivoksille. Lauhkeassa ja subtrooppisessa ilmastossa pelatessa voidaan myös valita ”symmetrinen”, sillä pankit lähettävät arvotavaroita takaisin alkuperäiselle pankille.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Arvokuljetuksiin kuuluvat arvotavarat lauhkeassa ilmastossa, timantit subtrooppisessa ilmastossa ja kulta pohjoisessa ilmastossa. NewGRF:t voivat kuitenkin muuttaa näitä rahteja. ”Symmetrinen” tarkoittaa, että suunnilleen sama määrä rahtia lähetetään asemalta A asemalle B kuin asemalta B asemalle A. ”Epäsymmetrinen” tarkoittaa, että tätä rahtia lähetetään mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta tähän rahtiin. Suositeltavia asetuksia ovat ”epäsymmetrinen” tai ”manuaalinen” pelattaessa pohjoisessa tai subtrooppisessa ilmastossa, sillä näissä pankit ottavat ainoastaan vastaan rahtia. Lauhkeassa ilmastossa pelatessa voidaan myös valita ”symmetrinen”, sillä pankit myös lähettävät arvotavaroita takaisin lähtöpankille.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Muiden rahtityyppien jakautuminen: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :”Epäsymmetrinen” tarkoittaa, että eri suuntiin voidaan lähettää eriäviä määriä rahtia. ”Manuaalinen” tarkoittaa, että automaattinen jakautuminen ei ole käytössä rahdille.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :”Epäsymmetrinen” tarkoittaa, että rahtia lähetetään mielivaltainen määrä kumpaankin suuntaan. ”Manuaalinen” tarkoittaa, että automaattista jakautumista ei sovelleta näihin rahteihin.
###length 3
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuaalinen
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :epäsymmetrinen
@@ -2024,7 +2051,7 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ohit
STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ohitetaan äänipaketti ”{STRING}”: ei löydetty
STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ohitetaan musiikkipaketti ”{STRING}”: ei löydetty
STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Muisti lopussa
STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES} sprite-välimuistin varaaminen epäonnistui. Sprite-välimuistin kooksi valittiin {BYTES}. Tämä heikentää OpenTTD:n suorituskykyä. Vähentääksesi muistivaatimuksia voit kokeilla poistaa käytöstä 32bpp-grafiikat ja/tai lähennystasoja
STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES} sprite-välimuistin varaaminen epäonnistui. Sprite-välimuistin kooksi valittiin {BYTES}. Tämä heikentää OpenTTD:n suorituskykyä. Vähentääksesi muistivaatimuksia voit kokeilla poistaa käytöstä 32 bpp -grafiikat ja/tai lähennystasoja
# Video initalization errors
STR_VIDEO_DRIVER_ERROR :{WHITE}Virhe näyttöasetuksissa…
@@ -2045,6 +2072,8 @@ STR_INTRO_HIGHSCORE :{BLACK}Pistetau
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Asetukset
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-asetukset
STR_INTRO_ONLINE_CONTENT :{BLACK}Tarkista online-sisältö
STR_INTRO_AI_SETTINGS :{BLACK}Tekoälyasetukset
STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Peliskriptiasetukset
STR_INTRO_QUIT :{BLACK}Sulje
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Aloita uusi peli. Ctrl+napsautus ohittaa kartan asetusten valinnan.
@@ -2064,6 +2093,8 @@ STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Näytä
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Näytä asetukset
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Näytä NewGRF-asetukset
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Tarkista uutta ja päivitettyä sisältöä ladattavaksi
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Näytä tekoälyasetukset
STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Näytä peliskriptiasetukset
STR_INTRO_TOOLTIP_QUIT :{BLACK}Lopeta OpenTTD
STR_INTRO_BASESET :{BLACK}Valitusta perusgrafiikkapaketista puuttuu {NUM} sprite{P "" ä}. Tarkista, onko sille päivityksiä.
@@ -2454,13 +2485,13 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :odotetaan yhtey
STR_NETWORK_MESSAGE_CLIENT_LEAVING :poistutaan
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} on liittynyt peliin
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} liittyi peliin (asiakas nro {2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} on liittynyt yhtiöön nro {2:NUM}
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} liittyi peliin (asiakas nro{NBSP}{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} on liittynyt yhtiöön nro {2:NUM}
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} on liittynyt katselijoihin
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} on aloittanut uuden yhtiön (nro {2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} on poistunut pelistä ({2:STRING})
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} on aloittanut uuden yhtiön (nro{NBSP}{2:NUM})
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} on poistunut pelistä ({2:STRING})
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} on muuttanut nimekseen {STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} antoi {2:CURRENCY_LONG} yhtiölle {1:STRING}
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} antoi {2:CURRENCY_LONG} yhtiölle {1:STRING}
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Palvelin sulki istunnon
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Palvelin käynnistyy uudelleen...{}Odota, ole hyvä...
STR_NETWORK_MESSAGE_KICKED :{STRING} potkaistiin ulos. Syy: ({STRING})
@@ -2512,7 +2543,7 @@ STR_CONTENT_DETAIL_FILESIZE :{SILVER}Latauks
STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER}Valittu seuraavan takia: {WHITE}{STRING}
STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER}Vaatimukset: {WHITE}{STRING}
STR_CONTENT_DETAIL_TAGS :{SILVER}Avainsanat: {WHITE}{STRING}
STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD on käännetty ilman "zlib"-tukea...
STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD on käännetty ilman zlib-tukea
STR_CONTENT_NO_ZLIB_SUB :{WHITE}... sisällön lataus ei ole mahdollista!
# Order of these is important!
@@ -2575,6 +2606,9 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}kuormittunut
# Linkgraph tooltip
STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} kuljetettavana kuukausittain asemalta {STATION} asemalle {STATION} ({COMMA}%{NBSP} kapasiteetista){STRING}
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} kuljetettavana takaisin ({COMMA}{NBSP}% kapasiteetista)
STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Keskimääräinen matka-aika: {NUM}{NBSP}vrk
# Base for station construction window(s)
STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Vaikutusalueen korostus
@@ -2584,6 +2618,7 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Älä ko
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Korosta ehdotetun tontin vaikutusalue
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Vastaanottaa: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Tuottaa: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_INFRASTRUCTURE_COST :{BLACK}Maintenance cost: {GOLD}{CURRENCY_SHORT}/v
# Join station window
STR_JOIN_STATION_CAPTION :{WHITE}Liitä asema
@@ -2648,13 +2683,13 @@ STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Edistyne
STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Suojastusopastin (siipiopastin){}Kaikkein alkeellisin opastin, joka sallii vain yhden junan samalla osuudella kerrallaan
STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Tulo-opastin (siipiopastin){}Näyttää vihreää aina, kun yksi tai useampi seuraavista poistumisopastimista näyttää vihreää. Muutoin se näyttää punaista
STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Poistumisopastin (siipiopastin){}Käyttäytyy samalla tavalla kuin suojastusopastin, mutta on välttämätön oikean valon näyttämiseen tulo- ja yhdistelmäopastimissa
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Yhdistelmäopastin (siipiopastin){}Yhdistelmäopastin toimii yhtä aikaa tulo- ja poistumisopastimena. Tämän avulla on mahdollista luoda suuria "opastinpuita"
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Yhdistelmäopastin (siipiopastin){}Yhdistelmäopastin toimii yhtä aikaa tulo- ja poistumisopastimena. Tämän avulla on mahdollista luoda suuria opastinpuita
STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Reittiopastin (siipiopastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Tavalliset reittiopastimet voi ohittaa takakautta
STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Yksisuuntainen reittiopastin (siipiopastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Yksisuuntaisia opastimia ei voi ohittaa takakautta
STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Suojastusopastin (valo-opastin){}Kaikkein alkeellisin opastin, joka sallii vain yhden junan osuudella kerrallaan
STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Tulo-opastin (valo-opastin){}Näyttää vihreää aina, kun yksi tai useampi seuraavista poistumisopastimista näyttää vihreää. Muutoin se näyttää punaista
STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Poistumisopastin (valo-opastin){}Käyttäytyy samalla tavalla kuin suojastusopastin, mutta on välttämätön oikean valon näyttämiseen tulo- ja yhdistelmäopastimissa
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Yhdistelmäopastin (valo-opastin){}Yhdistelmäopastin toimii yhtä aikaa tulo- ja poistumisopastimena. Tämän avulla on mahdollista luoda suuria "opastinpuita"
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Yhdistelmäopastin (valo-opastin){}Yhdistelmäopastin toimii yhtä aikaa tulo- ja poistumisopastimena. Tämän avulla on mahdollista luoda suuria opastinpuita
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Reittiopastin (valo-opastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Tavalliset reittiopastimet voi ohittaa takakautta
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Yksisuuntainen reittiopastin (valo-opastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Yksisuuntaisia opastimia ei voi ohittaa takakautta
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Opastinten muuntaminen{}Kun tämä on valittu, olemassaolevan opastimen napsauttaminen muuntaa sen valituntyyppiseksi ja -muotoiseksi. Ctrl+napsautus vaihtaa nykyistä opastimen muotoa. Vaihto+napsautus näyttää muuntamisen kustannusarvion.
@@ -2666,8 +2701,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Suurenna
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Valitse rautatiesilta
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Valitse maantiesilta
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Sillan valinta napsauta valittua siltaa rakentaaksesi sen
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Riippusilta, terästä
STR_BRIDGE_NAME_GIRDER_STEEL :Palkki, terästä
STR_BRIDGE_NAME_CANTILEVER_STEEL :Ulokepalkki, terästä
@@ -2771,11 +2808,11 @@ STR_LANDSCAPING_TOOLBAR :{WHITE}Maastonm
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Laske ruudun kulmaa. Vetäminen laskee ensimmäistä valittua kulmaa ja tasoittaa valitun alueen kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannusarvion välillä
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Nosta ruudun kulmaa. Vetäminen nostaa ensimmäistä valittua kulmaa ja tasoittaa valitun alueen kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannusarvion välillä
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Tasoita maata ensimmäisen valitun kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannusarvion välillä
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Osta maata tulevaa käyttöä varten. Shift vaihtaa ostotilan ja kustannusarvion välillä
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Osta maata tulevaa käyttöä varten. Ctrl valitsee alueen vinottain. Shift vaihtaa ostotilan ja kustannusarvion välillä
# Object construction window
STR_OBJECT_BUILD_CAPTION :{WHITE}Objektin valinta
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Ctrl valitsee alueen vinottain. Shift vaihtaa rakennustilan ja kustannusarvion välillä
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Valitse rakennettavan objektin luokka
STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objektin esikatselu
STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {GOLD}{NUM}×{NUM} ruutua
@@ -2787,7 +2824,7 @@ STR_OBJECT_CLASS_TRNS :Lähettimet
STR_PLANT_TREE_CAPTION :{WHITE}Puita
STR_PLANT_TREE_TOOLTIP :{BLACK}Valitse istutettava puutyyppi. Jos ruudussa on jo puu, tämä lisää uusia puita riippumatta valitun puun tyypistä
STR_TREES_RANDOM_TYPE :{BLACK}Sattumanvaraisia puita
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Aseta sattumanvaraisia puita. Shift vaihtaa istutustilan ja kustannusarvion välillä
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Istuta sattumanvaraisia puulajeja. Ctrl valitsee alueen vinottain. Shift vaihtaa istutustilan ja kustannusarvion välillä
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Satunnaisia puita.
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Istuta puita satunnaisesti maastoon
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Tavallinen
@@ -2819,6 +2856,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Satunnai
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Perusta kunta satunnaiseen paikkaan
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Monta satunnaista kuntaa
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Täytä kartta satunnaisesti sijoitetuilla kunnilla
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Laajenna kaikkia kuntia
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Kasvata kaikkia kuntia hieman
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Kunnan nimi:
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Syötä kunnan nimi
@@ -3083,7 +3122,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Tietoja
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Tietoja ei ole saatavilla
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
STR_SAVELOAD_FILTER_TITLE :{BLACK}Suodatinteksti:
STR_SAVELOAD_FILTER_TITLE :{BLACK}Suodatin:
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Tiedosto on jo olemassa
STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Haluatko varmasti korvata olemassaolevan tiedoston?
STR_SAVELOAD_DIRECTORY :{STRING} (hakemisto)
@@ -3119,6 +3158,12 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Joet:
STR_MAPGEN_SMOOTHNESS :{BLACK}Tasaisuus:
STR_MAPGEN_VARIETY :{BLACK}Vaihtelu:
STR_MAPGEN_GENERATE :{WHITE}Generoi
STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF-asetukset
STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Näytä NewGRF-asetukset
STR_MAPGEN_AI_SETTINGS :{BLACK}Tekoälyasetukset
STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Näytä tekoälyasetukset
STR_MAPGEN_GS_SETTINGS :{BLACK}Peliskriptiasetukset
STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Näytä peliskriptiasetukset
###length 21
STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Englantilainen
@@ -3200,7 +3245,7 @@ STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Tarkat N
STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Käytössä olevat NewGRF-tiedostot
STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Pois käytöstä olevat NewGRF-tiedostot
STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Valitse valmislista:
STR_NEWGRF_FILTER_TITLE :{ORANGE}Suodatinteksti:
STR_NEWGRF_FILTER_TITLE :{ORANGE}Suodatin:
STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Lataa valittu valmislista
STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Tallenna valmislistaksi
STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Tallenna nykyinen lista valmislistaksi
@@ -3280,17 +3325,24 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF m
# Sprite aligner window
STR_SPRITE_ALIGNER_CAPTION :{WHITE}Kohdistetaan spriteä {COMMA} ({STRING})
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Seuraava sprite
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Mene seuraavaan tavalliseen spriteen ja hyppää yli pseudo-/uudelleenväritetyt/fontti- spritet ja mene alkuun kun päästään viimeiseen
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Siirry seuraavaan tavalliseen spriteen; mahdolliset pseudo-, uudelleenväritys- ja fonttispritet ohitetaan; viimeisen spriten jälkeen siirrytään ensimmäiseen
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mene spriteen
STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Mene valittuun spriteen. Jos sprite ei ole tavallinen, jatka seuraavaan tavalliseen spriteen
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Edelinen sprite
STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Siirry valittuun spriteen. Jos sprite ei ole tavallinen, jatka seuraavaan tavalliseen spriteen
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Edellinen sprite
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Jatka edelliseen tavalliseen spriteen ja hyppää yli kaikki pseudo-/uudelleenväritetyt/fontti- spritet ja mene loppuun kun päästään ensimmäiseen
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Valitun spriten näyttö. Sijaintia ei huomioida spriteä piirrettäessä
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Valitun spriten esitys. Siirrosta ei huomioida tätä spriteä piirrettäessä
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Liikuta spriteä ympäriinsä, muuttaen X- ja Y-sijainteja. Ctrl+napsautus siirtää spriteä kahdeksan yksikköä kerralla.
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Siirros keskitetty
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite keskitetty
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Hiusristikko
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Nollaa suhteelliset
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Nollaa suhteelliset erotukset
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-erotus: {NUM}, Y-erotus: {NUM} (absoluuttinen)
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X-erotus: {NUM}, Y-erotus: {NUM} (suhteellinen)
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Nollaa tämänhetkiset suhteelliset siirrokset
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-siirros: {NUM}, Y-siirros: {NUM} (absoluuttinen)
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X-siirros: {NUM}, Y-siirros: {NUM} (suhteellinen)
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Valitse sprite
STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Valitse sprite ruudulta
@@ -3304,15 +3356,15 @@ STR_NEWGRF_ERROR_MSG_FATAL :{RED}Virhe: {SI
STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Vakava NewGRF-virhe on tapahtunut:{}{STRING}
STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF-virhe on tapahtunut:{}{STRING}
STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ei toimi OpenTTD:n ilmoittaman TTDPatch-version kanssa
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} on TTD:n {STRING}-versiota varten
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} ja {STRING} on suunniteltu toimimaan yhdessä
STR_NEWGRF_ERROR_INVALID_PARAMETER :Virheellinen parametri: {1:STRING}: {STRING} ({NUM})
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} tulee ladata ennen kuin {STRING}
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} tulee ladata {STRING} jälkeen
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} vaatii OpenTTD:n version {STRING} tai uudemman
STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} on TTD:n {2:STRING}-versiota varten
STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} on suunniteltu toimimaan lisäosan {2:STRING} kanssa
STR_NEWGRF_ERROR_INVALID_PARAMETER :Virheellinen parametri lisäosalle {1:STRING}: {2:STRING} ({3:NUM})
STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} on ladattava ennen kuin {2:STRING} voidaan ladata
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} tulee ladata lisäosan {2:STRING} jälkeen
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} vaatii OpenTTD:n version {2:STRING} tai uudemman
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF-tiedosto, jonka se muuntaa
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Liian monta NewGRF:ää on ladattu
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :NewGRF:n {1:STRING} lataaminen staattisena NewGRF:nä {STRING}:n kanssa saattaa aiheuttaa nykimistä
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Lisäosan {1:STRING} lataaminen staattisena NewGRF:nä lisäosan {2:STRING} kanssa voi johtaa tahdistusvirheisiin
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Odottamaton sprite (sprite {3:NUM})
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Tuntematon Action 0-ominaisuus {4:HEX} (sprite {3:NUM})
STR_NEWGRF_ERROR_INVALID_ID :Yritys käyttää virheellistä ID:tä (sprite {3:NUM})
@@ -3323,7 +3375,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Pyydetyt GRF-re
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING} poisti käytöstä NewGRF:n {1:STRING}
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Virheellinen/tuntematon spriten asettelumuoto (sprite {3:NUM})
STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Liian monta elementtiä ominaisuusarvolistassa (sprite {3:NUM}, ominaisuus {4:HEX})
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Virhe teollisuuden tuotannon takaisinkutsussa (sprite {3:NUM}, "{2:STRING}")
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Virheellinen teollisuuslaitoksen tuotannon takaisinkutsu (sprite {3:NUM}, {2:STRING})
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Varoitus!
@@ -3444,14 +3496,14 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Osta yksinoikeu
STR_LOCAL_AUTHORITY_ACTION_BRIBE :Lahjo viranomaisia
###length 8
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Käynnistä pieni mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita pienellä säteellä kunnan keskustan ympärillä.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Käynnistä keskikokoinen mainoskampanja houkutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita keskikokoisella säteellä kunnan keskustan ympärillä.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Käynnistä suuri mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita suurella säteellä kunnan keskustan ympärillä.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Rahoita tieverkon uudelleenrakentamista.{}Aiheuttaa huomattavaa häiriötä tieliikenteessä jopa kuuden kuukauden ajan.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Rakenna patsas yhtiösi kunniaksi.{}Parantaa asemien arvioita pysyvästi tässä kunnassa.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Rahoita uusien liikerakennusten rakentamista kunnassa.{}Tämä kiihdyttää tämän kunnan kasvua tilapäisesti.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Osta vuoden yksinoikeudet kunnan liikennöintiin.{}Tällöin paikallisviranomaiset eivät salli matkustajien ja rahdin käyttää kilpailijoittesi asemia.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Lahjo viranomaisia lisätäksesi arviotasi; rangaistus voi olla kuitenkin suuri, jos jäät kiinni.{}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Käynnistä pieni mainoskampanja houkutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita pienellä säteellä kunnan keskustan ympärillä.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Käynnistä keskikokoinen mainoskampanja houkutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita keskikokoisella säteellä kunnan keskustan ympärillä.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Käynnistä suuri mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Tämä kasvattaa tilapäisesti asemien arvioita suurella säteellä kunnan keskustan ympärillä.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Rahoita tieverkon uudelleenrakentamista.{}Aiheuttaa huomattavaa häiriötä tieliikenteessä jopa kuuden kuukauden ajan.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Rakenna patsas yhtiösi kunniaksi.{}Parantaa asemien arvioita pysyvästi tässä kunnassa.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Rahoita uusien rakennusten rakentamista kunnassa.{}Tämä kiihdyttää tämän kunnan kasvua tilapäisesti.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Osta vuodeksi yksinoikeudet kunnan liikennöintiin.{}Tällöin paikallisviranomaiset eivät salli matkustajien ja rahdin käyttää kilpailijoittesi asemia.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Lahjo viranomaisia lisätäksesi arviotasi; rangaistus voi kuitenkin olla ankara, jos jäät kiinni.{}{POP_COLOUR}Kustannus: {CURRENCY_LONG}
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} Tavoitteet
@@ -3624,14 +3676,18 @@ STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Laivat
STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Lainan korko
STR_FINANCES_SECTION_OTHER :{GOLD}Muut
STR_FINANCES_TOTAL_CAPTION :{WHITE}Yhteensä
STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG}
STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG}
STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG}
STR_FINANCES_PROFIT :{WHITE}Tuotto
STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Tilin saldo
STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Omat varat
STR_FINANCES_LOAN_TITLE :{WHITE}Laina
STR_FINANCES_INTEREST_RATE :{WHITE}Lainan korko: {BLACK}{NUM}{NBSP}%
STR_FINANCES_MAX_LOAN :{WHITE}Laina enintään: {BLACK}{CURRENCY_LONG}
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG}
STR_FINANCES_BORROW_BUTTON :{BLACK}Nosta lainaa {CURRENCY_LONG}
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Ota lisää lainaa. Ctrl+napsautus nostaa lainaa niin paljon kuin mahdollista.
STR_FINANCES_REPAY_BUTTON :{BLACK}Lyhennä lainaa {CURRENCY_LONG}
@@ -3732,7 +3788,7 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Tuottaa:
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Tarvitsee:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} odottamassa{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Muokkaa tuotantoa (8:n kerroin, 2040:een asti)
@@ -3762,6 +3818,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Ohjaa ka
STR_VEHICLE_LIST_REPLACE_VEHICLES :Korvaa kulkuneuvoja
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Lähetä huoltoon
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Tuotto tänä vuonna: {CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG})
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Lähetä varikolle
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Lähetä varikolle
@@ -3849,11 +3907,14 @@ STR_PURCHASE_INFO_ALL_TYPES :Kaikki rahtityy
STR_PURCHASE_INFO_NONE :Ei mitään
STR_PURCHASE_INFO_ENGINES_ONLY :Vain veturit
STR_PURCHASE_INFO_ALL_BUT :Kaikki paitsi {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Suurin vetovoima: {GOLD}{FORCE}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Maksimivetovoima: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Toimintasäde: {GOLD}{COMMA} ruutua
STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Ilma-alustyyppi: {GOLD}{STRING}
###length 3
STR_CARGO_TYPE_FILTER_ALL :Kaikki rahtityypit
STR_CARGO_TYPE_FILTER_FREIGHT :Rahti
STR_CARGO_TYPE_FILTER_NONE :Ei mikään
###length VEHICLE_TYPES
STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Raideliikennevälineiden valintaluettelo. Napsauta kulkuneuvoa saadaksesi lisää tietoa. Ctrl+napsautus näyttää tai piilottaa kulkuneuvon tyypin.
@@ -3933,7 +3994,7 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} ku
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
###length VEHICLE_TYPES
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Junat - vedä kulkuneuvoa vasemmalla hiiren painikkella lisätäksesi/poistaaksesi junasta, oikealla painikkeella lisätietoja. Pidä pohjassa Ctrl-näppäintä toteuttaaksesi molemmat toiminnot seuraavaan ketjuun
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Junat vedä kulkuneuvoa vasemmalla hiiren painikkella lisätäksesi/poistaaksesi junasta, oikealla painikkeella lisätietoja. Pidä pohjassa Ctrl-näppäintä toteuttaaksesi molemmat toiminnot seuraavaan ketjuun
STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Ajoneuvot napsauta ajoneuvoa oikealla hiiren painikkeella saadaksesi tietoja
STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Laivat napsauta laivaa oikealla hiiren painikkeella saadaksesi tietoja.
STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lentokoneet napsauta lentokonetta oikealla hiiren painikkeella saadaksesi tietoja
@@ -4023,12 +4084,12 @@ STR_ENGINE_PREVIEW_AIRCRAFT :ilma-alus
STR_ENGINE_PREVIEW_SHIP :laiva
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Hinta: {CURRENCY_LONG} Paino: {WEIGHT_SHORT}{}Nopeus: {VELOCITY} Teho: {POWER}{}Käyttökustannukset: {CURRENCY_LONG}/vuosi{}Kapasiteetti: {CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Hinta: {CURRENCY_LONG} Paino: {WEIGHT_SHORT}{}Nopeus: {VELOCITY} Teho: {POWER} Maks. vetovoima: {6:FORCE}{}Käyttökustannukset: {4:CURRENCY_LONG}/v{}Kapasiteetti: {5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING}{}Kapasiteetti: {CARGO_LONG}, {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING}{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING} Toimintamatka: {COMMA} ruutua{}Kapasiteetti: {CARGO_LONG}, {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING} Toimintamatka: {COMMA} ruutua{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Hinta: {0:CURRENCY_LONG} Paino: {1:WEIGHT_SHORT}{}Nopeus: {2:VELOCITY} Teho: {3:POWER} Maksimivetovoima: {6:FORCE}{}Käyttökustannukset: {4:CURRENCY_LONG}/yr{}Kapasiteetti: {5:CARGO_LONG}
STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Huippunopeus: {VELOCITY}{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Huippunopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING}{}Kapasiteetti: {CARGO_LONG}, {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Huippunopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING}{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Huippunopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING} Toimintamatka: {COMMA} ruutua{}Kapasiteetti: {CARGO_LONG}, {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Huippunopeus: {VELOCITY}{}Ilma-alustyyppi: {STRING} Toimintamatka: {COMMA} ruutua{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v
# Autoreplace window
STR_REPLACE_VEHICLES_WHITE :{WHITE}Korvaa {STRING} {STRING}
@@ -4178,16 +4239,17 @@ STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} vu
STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY} {BLACK}Ilma-alustyyppi: {LTBLUE}{STRING}
STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY} {BLACK}Ilma-alustyyppi: {LTBLUE}{STRING} {BLACK}Toimintamatka: {LTBLUE}{COMMA} ruutua
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Maks. nopeus: {LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Maks. nopeus: {LTBLUE}{VELOCITY} {BLACK}Maks. vetovoima: {LTBLUE}{FORCE}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Huippunopeus: {LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Huippunopeus: {LTBLUE}{VELOCITY} {BLACK}Maksimivetovoima: {LTBLUE}{FORCE}
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG})
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG}) {BLACK}Vähimmäissuorituskyky: {LTBLUE}{POWER_TO_WEIGHT}
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Luotettavuus: {LTBLUE}{COMMA}{NBSP}% {BLACK}Hajoamiset viime huollon jälkeen: {LTBLUE}{COMMA}
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY_LONG}
STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}-{STRING}
STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}{CARGO_LONG}{3:STRING}
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapasiteetti: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM})
STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}{0:CARGO_LONG}{3:STRING}
STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapasiteetti: {LTBLUE}{0:CARGO_LONG}{3:STRING} (×{4:NUM})
STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING}
STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Siirron arvo: {LTBLUE}{CURRENCY_LONG}
@@ -4456,22 +4518,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Aloitusp
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Valitse päivämäärä aikataulun aloitusajankohdaksi. Ctrl+napsautus levittää kaikki tämän käskyjoukon jakavat kulkuneuvot tasaisesti niiden keskinäisen järjestyksen mukaan, mikäli käskyjoukko on kokonaan aikataulutettu
STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuta aikaa
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Aseta kuinka kauan käskyn tulisi kestää
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuta aikaa, jonka valitun käskyn tulisi kestää. Ctrl+napsautus asettaa keston kaikille käskyille
STR_TIMETABLE_CLEAR_TIME :{BLACK}Nollaa aika
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Nollaa tämän rivin aika
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Nollaa valitun käskyn keston. Ctrl+napsautus nollaa kaikkien käskyjen kestot
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Muuta nopeusrajoitusta
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Muuta valitun määräyksen suurinta sallittua nopeutta
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Muuta suurinta sallittua nopeutta valitulle käskylle. Ctrl+napsautus asettaa nopeusrajoituksen kaikille käskyille
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Tyhjennä nopeusrajoitus
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Tyhjennä valitun määräyksen suurin sallittu nopeus
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Poista suurin sallittu nopeus valitulta käskyltä. Ctrl+napsautus poistaa kaikkien käskyjen nopeusrajoitukset
STR_TIMETABLE_RESET_LATENESS :{BLACK}Nollaa myöhästymislaskuri
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nollaa myöhästymislaskuri, jotta vaunu olisi taas aikataulussa
STR_TIMETABLE_AUTOFILL :{BLACK}Automaattinen
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Täytä aikataulu automaattisesti seuraavan matkan arvoilla (Ctrl+napsautus: yritä säilyttää odotusajat)
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Täytä aikataulu automaattisesti seuraavan matkan arvoilla. Ctrl+napsautus: yritä säilyttää odotusajat
STR_TIMETABLE_EXPECTED :{BLACK}Odotettu
STR_TIMETABLE_SCHEDULED :{BLACK}Aikataulu
@@ -4515,6 +4577,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Yksi kä
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Tekoälyn/peliskriptin virheenjäljitysikkuna on vain palvelimen käytettävissä
# AI configuration window
STR_AI_CONFIG_CAPTION_AI :{WHITE}Tekoälyasetukset
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Peliskriptiasetukset
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Seuraavassa pelissä ladattava peliskripti
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Seuraavassa pelissä ladattavat tekoälyt
STR_AI_CONFIG_HUMAN_PLAYER :Ihmispelaaja
@@ -4528,10 +4592,11 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Siirrä
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Siirrä valittua tekoälyä alaspäin listalla
STR_AI_CONFIG_GAMESCRIPT :{SILVER}Peliskripti
STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parametrit
STR_AI_CONFIG_AI :{SILVER}Tekoälyt
STR_AI_CONFIG_CHANGE_AI :Tekoäly
STR_AI_CONFIG_CHANGE_GAMESCRIPT :Peliskripti
STR_AI_CONFIG_CHANGE_AI :{BLACK}Valitse tekoäly
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Valitse peliskripti
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Lataa toinen skripti
STR_AI_CONFIG_CONFIGURE :{BLACK}Määritä
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Määritä skriptin parametrit
@@ -4560,7 +4625,7 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Korkeusk
STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Pienoiskartan kuvakaappaus
# AI Parameters
STR_AI_SETTINGS_CAPTION_AI :Tekoäly
STR_AI_SETTINGS_CAPTION_AI :{WHITE}Tekoälyn parametrit
STR_AI_SETTINGS_CLOSE :{BLACK}Sulje
STR_AI_SETTINGS_RESET :{BLACK}Palauta
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
@@ -4724,6 +4789,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... liik
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Teollisuuslaitoksia ei voi luoda...
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}{STRING}: tähän ei voi rakentaa...
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Teollisuustyyppiä ei voi rakentaa tähän...
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Ei voida koekaivaa…
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... liian lähellä toista teollisuuslaitosta
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... kunta pitää perustaa ensin
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... vain yksi on sallittu kuntaa kohden
@@ -4738,6 +4804,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... mets
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... voidaan rakentaa vain lumirajan yläpuolelle
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... voidaan rakentaa vain lumirajan alapuolelle
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Rahoittamasi koekaivaus epäonnistui; yritä uudelleen
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Ei ollut sopivia paikkoja tämän teollisuuslaitoksen koekaivauksille
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Ei ollut sopivia paikkoja ”{STRING}”-teollisuuslaitoksille
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Muuta kartan parametreja saadaksesi paremman kartan
@@ -4905,6 +4973,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Objekti
STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... yhtiön päärakennus on tiellä.
STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Maa-aluetta ei voi hankkia...
STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... omistat sen jo!
STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}… objektien rakentamisen raja saavutettu
# Group related errors
STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Ei voi luoda ryhmää.
@@ -4977,6 +5046,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Huoltov
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... kulkuneuvo on tuhoutunut
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}… kaikki kulkuneuvot eivät ole identtisiä
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Yhtään kulkuneuvoa ei ole saatavilla
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muuta NewGRF-asetuksiasi
@@ -5004,6 +5074,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Tähän
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... kulkuneuvo ei pääse kaikille asemille
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... kulkuneuvo ei pääse tälle asemalle
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... kulkuneuvo, jonka kanssa käskyt on jaettu, ei pääse tälle asemalle
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}… kaikkien kulkuneuvojen käskyt eivät ole samat
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}… kaikki kulkuneuvot eivät jaa käskyjä
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Käskyjä ei voida jakaa...
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Käskyjen jakamista ei voida lopettaa...
+35 -13
View File
@@ -387,7 +387,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Créatio
STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Création des industries
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construction routière
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construction de tramway
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Planter des arbres.{}Shift pour afficher seulement le coût estimé.
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Planter des arbres.{}Ctrl pour sélectionner en diagonale.{}Shift pour afficher seulement le coût estimé.
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Placer un panneau
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Placer un objet.{}Ctrl pour sélectionner en diagonale.{}Shift pour afficher seulement le coût estimé.
@@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :À droite
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Emprunt initial maximum{NBSP}: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Montant maximum qu'une compagnie peut emprunter (sans tenir compte de l'inflation)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Taux d'intérêt{NBSP}: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Taux dintérêt de l'emprunt{NBSP}; contrôle également l'inflation si activé
@@ -1433,6 +1434,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Épaisseur de l
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Afficher le nom du NewGRF dans la fenêtre d'achat des véhicules{NBSP}: {STRING}
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Ajoute une ligne à la fenêtre d'achat des véhicules, montrant de quel NewGRF provient le véhicule sélectionné.
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Afficher les cargaisons que peuvent transporter les véhicules dans les fenêtres de liste {STRING}
STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Quand il est actif, ce qu'un véhicule peut transporter est affiché au dessus de lui dans les listes de véhicules
STR_CONFIG_SETTING_LANDSCAPE :Paysage{NBSP}: {STRING}
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Les paysages définissent les scénarios de jouabilité classique avec différentes marchandises et exigences pour la croissance des villes. Les NewGRFs et les scripts de jeux autorisent cependant un contrôle plus fin
@@ -1924,13 +1927,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Prendre {STRING
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Durée maximale (en jours) du recalcul d'une composante du graphe. À chaque itération, un thread est initié, qui a une durée maximale définie par ce réglage. Plus celui-ci est court, plus la probabilité que le thread ne termine pas sa tâche à temps est élevée. Le jeu s'interrompt alors jusqu'à la fin du recalcul ("lag"). Plus le réglage est long, et moins rapidement la distribution sera réactualisée en cas de changement de routes.
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Type de distribution pour les passagers{NBSP}: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symétrique" signifie qu'autant de passagers iront d'une station A vers une station B, que de la station B vers la station A. "asymétrique" signifie qu'un nombre arbitraire de passagers peut être envoyé dans les deux directions. "manuel" signifie qu'aucune distribution n'est mise en place pour les passagers.
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symétrique" signifie qu'autant de passagers iront d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'un nombre arbitraire de passagers peut être envoyé dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour les passagers.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Type de distribution pour le courrier{NBSP}: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symétrique" signifie qu'autant de courrier ira d'une station A vers une station B, que de la station B vers la station A. "asymétrique" signifie qu'une quantité arbitraire de courrier peut être envoyée dans les deux directions. "manuel" signifie qu'aucune distribution n'est mise en place pour le courrier.
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symétrique" signifie qu'autant de courrier ira d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'une quantité arbitraire de courrier peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour le courrier.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Type de distribution pour les cargaisons de classe ARMOURED{NBSP}: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe de cargaison ARMOURED contient des biens de valeur dans les climats tempéré, des diamants dans le climat subtropical, et de l'or dans le climat subarctique. Les NewGRFs peuvent changer ça. "symétrique" signifie qu'autant de ces cargaisons iront d'une station A vers une station B, que de la station B vers la station A. "asymétrique" signifie qu'une quantité arbitraire de ces cargaisons peut être envoyée dans les deux directions. "manuel" signifie qu'aucune distribution n'est mise en place pour ces cargaisons. Il est conseillé de choisir "asymétrique" ou "manuel" dans le climat subarctique, car les banques n'enverront pas d'or en retour vers les mines d'or. Dans les climats tempéré et subtropical, on peut choisir aussi "symétrique", car les banques peuvent renvoyer en retour des biens de valeurs aux banques qui en envoient à l'origine.
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La classe de cargaison ARMOURED contient des biens de valeur dans les climats tempéré, des diamants dans le climat subtropical, et de l'or dans le climat subarctique. Les NewGRFs peuvent changer ça. "Symétrique" signifie qu'autant de ces cargaisons iront d'une station A vers une station B, que de la station B vers la station A. "Asymétrique" signifie qu'une quantité arbitraire de ces cargaisons peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour ces cargaisons. Il est conseillé de choisir "asymétrique" ou "manuel" dans les climats subarctique ou subtropical, car les banques ne font que recevoir des marchandises dans ces climats. Dans le climat tempéré, on peut choisir aussi "symétrique", car les banques peuvent renvoyer en retour des biens de valeurs aux banques qui en envoient à l'origine.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Type de distribution pour les autres classes de cargaison{NBSP}: {STRING}
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymétrique" signifie qu'une quantité arbitraire de cargaison peut être envoyée dans les deux directions. "manuel" signifie qu'aucune distribution n'est mise en place pour la cargaison.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymétrique" signifie qu'une quantité arbitraire de cargaison peut être envoyée dans les deux directions. "Manuel" signifie qu'aucune distribution n'est mise en place pour la cargaison.
###length 3
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuel
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymétrique
@@ -2697,8 +2700,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augmente
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Choisir un pont ferroviaire
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Choisir un pont routier
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Sélection de pont - Cliquer sur le type de pont désiré pour le construire.
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspendu en acier
STR_BRIDGE_NAME_GIRDER_STEEL :À poutres en acier
STR_BRIDGE_NAME_CANTILEVER_STEEL :Porte-à-faux en acier
@@ -2818,7 +2823,7 @@ STR_OBJECT_CLASS_TRNS :Transmetteurs
STR_PLANT_TREE_CAPTION :{WHITE}Arbres
STR_PLANT_TREE_TOOLTIP :{BLACK}Choix du type d'arbre. S'il y a déjà un arbre dans la case, plusieurs arbres de types différents y seront ajoutés, indépendamment du type sélectionné.
STR_TREES_RANDOM_TYPE :{BLACK}Au hasard
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Planter des arbres provenant d'espèces choisies au hasard.{}Shift pour afficher seulement le coût estimé.
STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Planter des arbres provenant d'espèces choisies au hasard.{}Ctrl pour sélectionner en diagonale.{}Shift pour afficher seulement le coût estimé.
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Ajouter des arbres au hasard
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Semer des arbres au hasard sur l'ensemble du terrain
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
@@ -2850,6 +2855,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Créer u
STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fonder une ville à un emplacement choisi au hasard
STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Beaucoup de villes au hasard
STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Couvrir la carte de villes placées au hasard
STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Étendre toutes les villes
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Faire croître toutes les villes légèrement
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nom de la ville{NBSP}:
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Entrer un nom de ville
@@ -3324,6 +3331,13 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite p
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Se rendre au précédent sprite normal, en ignorant les pseudo-sprites et les sprites de recoloration et de police, et en bouclant du premier vers le dernier
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation du sprite actuellement séléctionné. L'alignement est ignoré lors de l'affichage de ce sprite
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Déplacer le sprite, en modifiant les décalages X et Y. Ctrl-clic pour déplacer le sprite de 8 unités à la fois.
###length 2
STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Décalage centré
STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centré
STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Croix
STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Réinitialiser les relatifs
STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Réinitialiser les décalages relatifs courants
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}Décalage X{NBSP}: {NUM}, décalage Y{NBSP}: {NUM} (Absolu)
@@ -3803,6 +3817,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envoyer
STR_VEHICLE_LIST_REPLACE_VEHICLES :Remplacer des véhicules
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Envoyer à l'entretien
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit cette année{NBSP}: {CURRENCY_LONG} (année précédente{NBSP}: {CURRENCY_LONG})
STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}]
STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING}
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Envoyer au dépôt
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Envoyer au dépôt
@@ -4501,22 +4517,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Date de
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Choisir une date comme point de départ de cet horaire. Ctrl-clic pour répartir tous les véhicules partageant cet ordre uniformément à partir de la date donnée selon leur ordre relatif, si l'ordre est complètement planifié
STR_TIMETABLE_CHANGE_TIME :{BLACK}Modifier la durée
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modifier la durée de l'ordre sélectionné
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modifier la durée de l'ordre sélectionné. Ctrl-clic pour définir la durée pour tous les ordres
STR_TIMETABLE_CLEAR_TIME :{BLACK}Annuler la durée
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Annuler la durée de l'ordre sélectionné
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Annuler la durée de l'ordre sélectionné. Ctrl-clic pour annuler la durée de tous les ordres
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Modifier la vitesse limite
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Modifier la vitesse maximale de déplacement de l'ordre sélectionné
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Modifier la vitesse maximale de déplacement de l'ordre sélectionné. Ctrl-Clic pour définir la vitesse pour tous les ordres
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Annuler la vitesse limite
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Annuler la vitesse maximale de déplacement de l'ordre sélectionné
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Annuler la vitesse maximale de déplacement de l'ordre sélectionné. Ctrl-clic pour annuler la vitesse de tous les ordres
STR_TIMETABLE_RESET_LATENESS :{BLACK}RAZ compteur de retard
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Remettre à zéro le compteur de retard (le véhicule sera donc à l'heure)
STR_TIMETABLE_AUTOFILL :{BLACK}Autoremplir
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Remplir l'horaire automatiquement avec les valeurs du prochain trajet (Ctrl-clic pour essayer de préserver les temps d'attente)
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Remplir l'horaire automatiquement avec les valeurs du prochain trajet. Ctrl-clic pour essayer de préserver les temps d'attente
STR_TIMETABLE_EXPECTED :{BLACK}Attendu
STR_TIMETABLE_SCHEDULED :{BLACK}Planifié
@@ -4772,6 +4788,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... trop
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Ne peut pas générer les industries...
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Impossible de construire {STRING} ici...
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Impossible de construire cette industrie ici...
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Impossible de prospecter l'industrie...
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... trop proche d'une autre industrie
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... une ville doit d'abord être construite
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... droit à un seul par ville
@@ -4786,6 +4803,8 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... les
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... peut seulement être construit au dessus de l'altitude d'enneigement
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... peut seulement être construit en dessous de l'altitude d'enneigement
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}La prospection a échoué par manque de chance; essayez à nouveau
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Il n'y avait pas d'emplacements appropriés pour la prospection de cette industrie
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Il n'y avait pas d'emplacements appropriés pour les industries '{STRING}'
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Modifier les paramètres de la génération de la carte pour obtenir une meilleure carte
@@ -5026,6 +5045,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Impossib
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... véhicule détruit
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... les véhicules ne sont pas tous identiques
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Aucun véhicule ne sera disponible
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Modifier votre configuration NewGRF
@@ -5053,6 +5073,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Impossib
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... le véhicule ne peut pas aller dans toutes les stations
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... le véhicule ne peut pas aller dans cette station
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... un véhicule partageant cet ordre ne peut pas aller dans cette station
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... les véhicules n'ont pas tous les même ordres
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... les véhicules ne partagent pas tous les ordres
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Impossible de partager les ordres...
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Impossible d'arrêter le partage des ordres...
+5 -2
View File
@@ -1145,6 +1145,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Rjochts
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimale startersliening: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimale bedrach hokker troch in bedriuw lient wurde kin (sûnder acht te slaan op de ynflaasje)
###setting-zero-is-special
STR_CONFIG_SETTING_INTEREST_RATE :Rinte: {STRING}
STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Rinte op liening; behearsket ek ynflaasje at dizze oan stiet
@@ -2340,8 +2341,6 @@ STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Bloksein
STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selektear Spoarbrêge
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selektear brêge
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brêge seleksje - klik op de brêge dyst boue wolst
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Hingbrêge, Stiel
STR_BRIDGE_NAME_GIRDER_STEEL :Brêge mei balken, Stiel
STR_BRIDGE_NAME_CANTILEVER_STEEL :Fakwurkbrêge, Stiel
@@ -2857,6 +2856,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Foarig f
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Gean tebek nei de foarige ôfbylding, sla pseudo/werkleure/lettertype ôfbyldings oer en begjin wer oernei at it begjin berikke is
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Represintaasje fan de no selektearre ôfbylding. Dizze wurdt net rjochte by it tekenjen
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Ferweech de ôfbylding, feroarje de X en Y útslach
###length 2
STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X útslach: {NUM}, Y útslach: {NUM} (Absolút)
STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X útslach: {NUM}, Y útslach: {NUM} (Relatyf)
STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Kies ôfbylding

Some files were not shown because too many files have changed in this diff Show More