Compare commits

...

198 Commits

Author SHA1 Message Date
Niels Martin Hansen
f6643952ce Update: Changelog for 1.9.3 and prepare for release 2019-09-16 21:09:23 +02:00
Owen Rudge
8808c6d033 Fix: Avoid using stat to retrieve file modification times on Windows (#7731) 2019-09-16 21:09:23 +02:00
glx22
c7ace459a7 Fix: inconsistent description for 32bpp-sse4-anim blitter (#7740) 2019-09-16 21:09:23 +02:00
Juriy Petrochenkov
acb63cb4d4 Fix: Use natural sort when sorting the file list. 2019-09-16 21:09:23 +02:00
Michael Lutz
fb8f4119f3 Change: [OSX] Recreate backing store if the colour profile of the screen (or the screen) the game window is one changes.
This will result in changing colours if moving OpenTTD from one screen to another, but should avoid performance problems if the window is moved.
2019-09-16 21:09:23 +02:00
Michael Lutz
7653def300 Fix #7644: [OSX] Try to use system colour space to avoid video output performance degradation. 2019-09-16 21:09:23 +02:00
Niels Martin Hansen
224bb105bc Fix #7479: Don't close construction windows when changing client name 2019-09-16 21:09:23 +02:00
Charles Pigott
e5021a0587 Update: Translations 2019-09-07 23:22:58 +01:00
Niels Martin Hansen
fb51a18357 Update: Changelog for 1.9.3-RC1 and prepare for release 2019-09-07 23:22:58 +01:00
Andy
9f1d80e93b Fix: change Quartz driver colorSpace handling to address certain macOS performance issues (#7644) 2019-09-07 23:22:58 +01:00
glx22
6369e0693d Fix #7188: check the validity of command callback for scripts (#7701) 2019-09-07 23:22:58 +01:00
Daniel Lee
da086a3fde Fix #7626: Allow building drive-through stops over one-way/blocked roads owned by towns (instead of crashing). 2019-09-07 23:22:58 +01:00
Niels Martin Hansen
83f1839e71 Fix #7702: Scaling for highscore screen 2019-09-07 23:22:58 +01:00
JMcKiern
8afc1a7253 Fix #7692: Added industry tile to GetOrderCmdFromTile() (#7709)
Sending order command to an industry tile now checks if a neutral_station is available and sends the order to that station
2019-09-07 23:22:58 +01:00
uvealonso
c70d12ee38 Fix #7704: [OSX] Handle malformed UTF8 strings 2019-09-07 23:22:58 +01:00
TTrebron
ee7ca008c9 Fix #7655: Decrease buttons in cheat window do not work properly 2019-09-07 23:22:58 +01:00
Juriy Petrochenkov
b18c2d140c Fix: RemoveAirport function now returns with 'Aircraft in the way' error message as it should be. 2019-09-07 23:22:58 +01:00
nikolas
a76e5e1970 Fix: Typo in running costs help text 2019-09-07 23:22:58 +01:00
Niels Martin Hansen
59e4ccd7dc Fix: Narrowing cast in one storybook command
CompanyID is 8 bit wide, so this incorrect cast would make it impossible to create story page elements for pages past 255.
2019-09-07 23:22:58 +01:00
Michael Lutz
a82f21f24d Update: Changelog for 1.9.2 and prepare for release 2019-07-07 22:54:44 +02:00
Niels Martin Hansen
46908fb63a Fix: Various reliability and correctness improvements to MIDI on Windows. (#7620) 2019-07-07 22:54:44 +02:00
pnda
8efa99f445 Fix #6666: Mismatched parentheses in RTL languages. (#7480) 2019-07-07 22:54:44 +02:00
dP
c6251426d9 Fix: Make GSGoal.QuestionClient work correctly at least for clients with ID < 2**16 (#7560) 2019-07-07 22:54:44 +02:00
unknown
9026736cc1 Fix #5685: Check for free wagons in ScriptVehicleList (#7617) 2019-07-07 22:54:44 +02:00
Niels Martin Hansen
b7a2166962 Fix #7633: Allow zero-cost track conversion to succeed. (#7634) 2019-07-07 22:54:44 +02:00
Michael Lutz
8ea68421b1 Fix #7463: Promote scroll mode setting to basic category. 2019-07-07 22:54:44 +02:00
PeterN
afc5962881 Fix #7577: Check if linkgraph station index is valid before dereferencing. (#7583) 2019-07-07 22:54:44 +02:00
stormcone
9239381d56 Fix #7224: Drag and drop vehicle group creation does not work correctly.
When drag and drop a vehicle into an empty slot in the vehicle group window it tries to create the new group as the subgroup of the first group (GroupID = 0). This is failing if the dragged vehicle's type is different than the first group's vehicle type.
2019-07-07 22:54:44 +02:00
peter1138
9dded61af9 Cleanup: Remove unused string. 2019-07-07 22:54:44 +02:00
peter1138
8fbc5c090b Change: Allow building road stops over self-owned one-way/blocked road. (#7547) 2019-07-07 22:54:44 +02:00
Transportman
00bdd316d7 Fix #7570: Show Github URL in the crashlog window 2019-07-07 22:54:44 +02:00
Corns McGowan
f34284f1a0 Change: Set default setting in server browser of "Advertised" to "Yes". (#7568) 2019-07-07 22:54:44 +02:00
peter1138
c77659c995 Fix: Clicking on scrollbar 'thumb' moved position up instantly. (#7549) 2019-07-07 22:54:44 +02:00
Charles Pigott
e6877d0823 Fix #7255: Prevent crashlog corruption by only printing the 32 most recent news messages. (#7542) 2019-07-07 22:54:44 +02:00
glx22
beba12f9d6 Fix: vcpkg used to patch lzma.h to define LZMA_API_STATIC for static builds (#7614) 2019-07-07 22:54:44 +02:00
glx22
95fd4ec649 Fix 8fc2b48db: [AzurePipeline] copy/paste error (#7557) 2019-05-28 10:20:32 +01:00
peter1138
0fa41c7493 Fix #7491: Send company update admin message when bankruptcy counter changes. 2019-05-28 10:20:32 +01:00
PeterN
60cbcf0742 Fix: Bounds check access to railtype_map. (#7529) 2019-05-28 10:20:32 +01:00
Niels Martin Hansen
e38a4e1e57 Change: Zoom title game by UI zoom level 2019-05-28 10:20:32 +01:00
Niels Martin Hansen
5965f184c2 Fix: Manager name in company news was being clipped 2019-05-28 10:20:32 +01:00
Niels Martin Hansen
db20c7f461 Fix: Scale news ticker scroll speed by UI scale 2019-05-28 10:20:32 +01:00
Niels Martin Hansen
e2e8872e82 Fix: Scale all min size and padding by UI scale 2019-05-28 10:20:32 +01:00
SamuXarick
4750d2836c Fix 50e08f333a: Creating a cargo subsidy with town as source did not consider min population. (#7493) 2019-05-28 10:20:32 +01:00
stormcone
b1c31f9500 Fix: Typos. (#7517) 2019-05-28 10:20:32 +01:00
Charles Pigott
a6879e9180 Fix 5db883f: Railtype bits were moved too late, leading to rails under bridges losing their type 2019-05-28 10:20:32 +01:00
Charles Pigott
5eb7d49024 Fix #6507: Don't try to load invalid depots from older savegames 2019-05-28 10:20:32 +01:00
Charles Pigott
69c0332813 Cleanup: Delete GetSavegameType function since it's been commented out since 2005 2019-05-28 10:20:32 +01:00
Charles Pigott
b11942cf44 Fix: Crash when attempting to load old save game with GRFs set
GroupStatistics pool was not initialised before trying to delete vehicles (specifically, trams with no tram track)
2019-05-28 10:20:32 +01:00
glx22
ef6995e8d4 Fix 2bb80d2: really increase the maximum number of GameScript texts to 64k (#7555) 2019-05-28 10:20:32 +01:00
glx22
c0fd2b969b Fix #7553: check bounds when loading strings (#7554) 2019-05-28 10:20:32 +01:00
peter1138
683778fd7a Codechange: Use std::underlying_type for DECLARE_POSTFIX_INCREMENT. 2019-05-28 10:20:32 +01:00
peter1138
63eeadef17 Fix: Replace int with std::underlying_type in DECLARE_ENUM_AS_BIT_SET.
This fixes 64 bit uses of this macro.
2019-05-28 10:20:32 +01:00
glx22
e526b2ccd3 Fix: [AzurePipeline] ${Agent.JobName} content changed (#7556)
* Fix: [AzurePipeline] ${Agent.JobName} content changed

* Fix: [AzurePipeline] also update commit-checker condition
2019-05-28 10:20:32 +01:00
peter1138
b61ef7e0d2 Update: Changelog for 1.9.1 and prepare for release 2019-04-08 20:37:59 +01:00
PeterN
120d76c5c1 Fix #7478: Don't remove NewGRF objects on company take-over. (#7483) 2019-04-08 20:06:02 +01:00
Patric Stout
316ecb07ee Fix: update AI/Game changelog to indicate 1.9.0 is released 2019-04-08 20:06:02 +01:00
Patric Stout
2c21f52e1d Update: translations backported from master 2019-04-08 20:06:02 +01:00
kiwitreekor
0a8e9e9757 Fix #6222: Advanced sprite layout sometimes showed incorrect railtype ground tile 2019-04-08 20:06:02 +01:00
glx22
6bfec89fcf Fix #6564: enforce types of arguments for station name strings (#7419) 2019-04-08 20:06:02 +01:00
glx22
1f39a31eb7 Fix: [Windows] OpenTTD window may be inactive when an error happens (#7482) 2019-04-08 20:06:02 +01:00
glx22
abc0325ef1 Fix #7439: don't overwrite CompanyRemoveReason with ClientID (#7465) 2019-04-08 20:06:02 +01:00
frosch
54451a18c6 Fix #7447, 3357cac847: Action 4 has feature 48 'original strings'. (#7449) 2019-04-08 20:06:02 +01:00
glx22
d3e9e8c2ce Fix #7433: don't use AirportSpec substitute if it's not set (#7435) 2019-04-08 20:06:02 +01:00
Patric Stout
0b340fd376 Update: prepare for stable release (disable assert) 2019-04-01 19:26:10 +02:00
Patric Stout
05b3467021 Update: Changelog for 1.9.0 and prepare for release 2019-04-01 19:26:10 +02:00
Patric Stout
88f2084646 Update: translations backported from master 2019-04-01 19:26:10 +02:00
Patric Stout
1303aba5ea Update: translations backported from master 2019-03-30 10:55:29 +01:00
PeterN
124650c554 Fix #7411: Use industry production callback (if used) on initial industry cargo generation. (#7412) 2019-03-30 10:55:29 +01:00
Ingo von Borstel
685af3629e Add: Titlegame for 1.9 branch. Savegame by JGR (#7443) 2019-03-30 10:21:08 +01:00
Patric Stout
9ae1726eed Update: Changelog for 1.9.0-RC2 and prepare for release 2019-03-24 17:16:15 +01:00
Patric Stout
3f0268b4b3 Update: translations backported from master 2019-03-24 17:16:15 +01:00
Patric Stout
cf7a1fc8c6 Revert: "Change: Allow AI companies to start immediately."
This reverts commit 011257dc88.

This commit was not working properly. Attempts are made to fix it,
but so close to 1.9, it sounds a lot better to revert it from the
1.9 branch, and keep developing it further in 1.10.
2019-03-24 17:16:15 +01:00
Patric Stout
7a9782e6f4 Revert: "Fix #7151: Hang when concurrently starting AIs in multiplayer, or with shift pressed."
This reverts commit b1e40b6b56.

This is a fix for a patch that will be reverted in the next commit.
2019-03-24 17:16:15 +01:00
Peter Nelson
6a1f217d30 Fix #7400: Water class for tree tiles was not converted for old saves preventing industry creation.
As the information is always available from the tree ground type, unconditionally
update the map array for tree tiles.
2019-03-24 17:16:15 +01:00
PeterN
174b0da90f Fix: Filtered file list did not scroll properly. (#7402) 2019-03-24 15:24:21 +01:00
Patric Stout
a2c4f9314d Update: translations backported from master 2019-03-24 15:24:21 +01:00
Patric Stout
652289972e Codechange: fix Intel C++ Compiler linking issues.
GetAircraftFlightLevel<Aircraft> is only used in static functions
inside aircraft_cmd.cpp. With GCC, Clang and MSVC this is not an
issue, but on ICC fails linking, because it doesn't find this
version of this template. Possibly these two pieces of information
are linked.
Explicit defining the function fixes the issue.
2019-03-24 15:24:21 +01:00
Patric Stout
0a5b3b955c Fix: [AzurePipelines] vcpkg is now preinstalled on Windows images
So instead of integrating our own, we only copy our precompiled
binaries into the right folder.
2019-03-24 15:24:21 +01:00
peter1138
79d2acff24 Fix 4da83d2f66: Remove measurement tooltips when completed. 2019-03-24 15:24:21 +01:00
Michael Lutz
e3a082ce7c Fix #7391, 9b99b95: Don't invalidate go to depot orders of non-aircraft when invalidating hangar orders that happen to share IDs.
This was caused because hangars are referred to by station ID, which is not unique with respect to depot IDs.
2019-03-24 15:24:21 +01:00
peter1138
213c490e73 Fix #7384: Industry Chain tooltips did not display on right-click.
This is fixed by handling the new Window::OnTooltip() event instead of OnHover()
2019-03-24 15:24:21 +01:00
peter1138
4e17e2bc6e Codechange: Implement OnTooltip event for custom window tooltips.
This avoids windows from needing to know or care about tooltip delay settings.
2019-03-24 15:24:21 +01:00
peter1138
56a69f1de7 Fix #7386: Measurement tooltip for tunnels, aqueducts & docks did not display or flickered.
Measurement tooltip was auto-closed as the hover/right-click test for tooltips was not
satisfied in this case. This is fixed by keeping the tooltip visible and instead explicitly
closing the tooltip when the PlaceObject is cancelled/completed.
2019-03-24 15:24:21 +01:00
Peter Nelson
64726d5213 Fix: Bounds check NewGRF feature. 2019-03-24 15:24:21 +01:00
Peter Nelson
712936745a Codechange: NewGRF features are documented in hex, so display as hex. 2019-03-24 15:24:21 +01:00
stormcone
2fb4575f5f Fix f58fa80e: Wrong company performance rating when money exceeds INT_MAX. (#7382)
Company performance rating calculation does not take into account the companies' money when those exceeds INT_MAX.
2019-03-24 15:24:21 +01:00
Jonathan G Rennison
5e9d39e8bc Change: Include _current_company in crashlog AI config line
_current_company is not currently logged anywhere in the crashlog.
_local_company is logged, despite being much less useful than
_current_company.
This change logs _current_company alongside _local_company.
2019-03-24 15:24:21 +01:00
peter1138
490d6ad51f Cleanup: Update changed string in language files. 2019-03-24 15:24:21 +01:00
peter1138
38e93182c5 Fix e66cec8f86: Permit loading of industry production callback with invalid cargo type.
It is only an error if the invalid result is actually used. This will be silently ignored at the moment.
It is still an error if a duplicate cargo type is returned.
2019-03-24 15:24:21 +01:00
glx
3a97b541af Fix: [AzurePipelines] run commit checker only for PRs 2019-03-24 15:24:21 +01:00
nikolas
80dd397ce4 Fix: spelling for a few real town names (#7338)
Added special characters to mostly Slovak towns, a few Spanish, and one Turkish.
2019-03-24 15:24:21 +01:00
PeterN
47596d3eda Fix: Runway too short for large aircraft message should not depend on plane crashes setting. (#7325) 2019-03-24 15:24:21 +01:00
glx22
f7f1efc84f Fix: [AzurePipelines] Run commit checker only for PRs and pass it the target branch (#7356) 2019-03-10 13:44:45 +01:00
glx
383e2d1082 Fix e4cc06f67: [AzurePipelines] rebase only for PRs 2019-03-10 13:44:45 +01:00
glx
aefe44e67e Fix: [AzurePipelines] don't assume master as target branch when rebasing PRs 2019-03-10 13:44:45 +01:00
glx22
1de8e1b801 Fix 13962a847, 00d28a500: forgotten squirrel_export run (#7345) 2019-03-10 13:44:45 +01:00
peter1138
54c5bac8f7 Fix #7334: Ship lost after crossing bridge due to path cache not being consumed while on final bridge end. 2019-03-10 13:44:45 +01:00
SamuXarick
948de16255 Cleanup: Remove repeated network error message on connection timeout. (#7327) 2019-03-10 13:44:45 +01:00
Patric Stout
88c5122b39 Update: Changelog for 1.9.0-RC1 and prepare for release 2019-03-03 20:53:40 +01:00
Patric Stout
eb46a89855 Fix: [AzurePipelines] also trigger CI on release branches 2019-03-03 20:26:58 +01:00
frosch
39cda89e85 Add: Detect stable tags automatically, and set the 'stable' flag in '_openttd_newgrf_version' accordingly. (#7317) 2019-03-03 20:08:28 +01:00
translators
8016b8b3e9 Update: Translations from eints
catalan: 62 changes by juanjo
french: 11 changes by glx
2019-03-03 19:45:43 +01:00
Charles Pigott
4ac81b3ebb Fix #7308: SDL linker flags were not added on MinGW 2019-03-03 18:04:36 +00:00
Charles Pigott
d9b4ada7e9 Fix 95ccddd6: SDL static library flags was not updated to use pkg-config format 2019-03-03 18:04:36 +00:00
Charles Pigott
1a663d9efc Fix: Wrong variable was used in zlib detection 2019-03-03 18:04:36 +00:00
peter1138
93a6fd42d1 Fix 23960d0f2c: Company livery window shows incorrect groups when opened from group window in multiplayer. 2019-03-03 13:13:35 +01:00
Niels Martin Hansen
c61acc7fc1 Fix #7280: Save in the right location on desync and server timeout 2019-03-03 12:12:32 +01:00
Peter Nelson
c91e0058c2 Change: Allow vehicle group names to be non-unique.
Group names are visual identifiers, and do not need to be unique.
Group sorting already falls back to group ID if names are the same, so that sorted
list position is stable.
2019-03-03 12:04:29 +01:00
Peter Nelson
5a5944867d Add: Add parent_group_id parameter to CreateGroup() 2019-03-03 09:15:39 +01:00
Peter Nelson
5d3ccae6c5 Add: AI function to get current usage of a group. 2019-03-03 09:15:39 +01:00
Peter Nelson
e0c2ad1b65 Add: AI functions to get/set company colours. 2019-03-03 09:15:39 +01:00
Peter Nelson
3c047b124e Add: AI functions to get current and last year profit of a group. 2019-03-03 09:15:39 +01:00
Peter Nelson
b62452903a Add: AI functions to set/get vehicle group parent. 2019-03-03 09:15:39 +01:00
Eddi-z
8139b14e9c Change: Synchronize introduction date and reliability randomness across vehicles with the same base introduction date (#7147) 2019-03-02 21:28:22 +00:00
Johannes E. Krause
5e40338543 Doc: table alignment when viewing README.md as a monospace textfile 2019-03-02 20:53:50 +01:00
translators
90a4737bf6 Update: Translations from eints
croatian: 6 changes by VoyagerOne
2019-03-02 19:45:43 +01:00
Eddi-z
b242a04c7d Fix #7307: Add WaterClass to MP_TREES, set when trees are on coast tiles (#7309)
This allows allows NewGRF object/industry placement rules to treat trees on coast tiles the same as regular bare coast.
2019-03-02 17:33:16 +00:00
Samu
780593ae60 Fix #6633: Cargo monitor industry delivery now accounts for which IndustryID the cargo was delivered to 2019-03-02 18:14:45 +01:00
PeterN
cbaf52fbe1 Codechange: Sort and filter sign names directly rather than through string system. (#7304)
This provides a notable performance benefit in the Sign List window when there are many signs.
2019-03-02 17:08:45 +00:00
Charles Pigott
c3bc7d657e Codechange: Remove ability for SDL to be dynamically loaded on Windows 2019-03-02 17:13:05 +01:00
PeterN
63fe6c6598 Codechange: Make std::stack use std::vector container in string formatting/drawing. (#7305)
This is a very minor performance increase which can add up during operations such
as sorting. Performance impact my be platform/compiler dependent.
2019-03-02 08:06:02 +00:00
translators
7ecfae8f7f Update: Translations from eints
turkish: 4 changes by DarkSapling
danish: 10 changes by Deb622
norwegian (bokmal): 11 changes by Leifbk
portuguese: 11 changes by vesgo
2019-03-01 19:45:42 +01:00
Eddi-z
1447661d20 Cleanup: spurious TODOs in newgrf.cpp (#7297) 2019-02-28 23:00:50 +00:00
PeterN
9ad5112628 Change: [AzurePipelines] Add freetype dependency for OSX. (#7299) 2019-02-28 19:33:31 +00:00
translators
76f983a8e7 Update: Translations from eints
dutch: 80 changes by JanWillem
2019-02-28 19:45:43 +01:00
SamuXarick
50a0cf1915 Change: Allow towns to build bridges over rails and one-way roads. (#7291) 2019-02-28 17:45:17 +00:00
SamuXarick
03264059e4 Change: Decrease minimum permitted value for script_max_opcode_till_suspend setting (#7243) 2019-02-28 17:37:50 +00:00
translators
adb50cebcc Update: Translations from eints
romanian: 7 changes by alexmerlin1985
2019-02-27 19:45:42 +01:00
Samu
9b99b95955 Fix #6574: Remove go to hangar orders when rebuilding airport
When replacing an airport with another, cancel current orders of type 'go to depot' from aircraft still heading to it if the rebuilt airport doesn't have a hangar (helicopter vs heliport), or if the airplane can't land on the rebuilt airport (airplane vs helistation).

Removes 'go to hangar' orders from all aircraft when replacing an airport with hangar with another without hangar (heliport).
2019-02-27 00:06:57 +01:00
peter1138
7ac17f5ae4 Fix #7281: Unable to select last group in open livery window on group creation. 2019-02-26 11:20:23 +01:00
peter1138
c2e4a8c9bf Fix 195fd0dc60: Sprite cache must still be cleared when using bitmap fonts. 2019-02-25 19:46:03 +00:00
translators
93c6398810 Update: Translations from eints
dutch: 68 changes by JanWillem
danish: 17 changes by nielsmh
hungarian: 3 changes by Brumi
2019-02-25 19:45:43 +01:00
glx22
6ff02f0615 Fix: [Windows] make the installer DPI aware (#7277) 2019-02-25 01:47:00 +01:00
Michael Lutz
919d7accd7 Update: Changelog for 1.9.0-beta3 and prepare for release. 2019-02-24 23:30:28 +01:00
Michael Lutz
fa2bea7394 Change: [AzurePipelines] Use a minimum OSX version of 10.9 during building.
OpenTTD sources are still written in a way to work down to OSX 10.4 or so, as long as you can obtain a C++11 capable compiler. 10.9 is the minimal useful C++11 target using only Apple stuff out-of-the-box.
2019-02-24 22:18:10 +01:00
translators
d24a9dfe98 Update: Translations from eints
italian: 11 changes by lorenzodv
dutch: 46 changes by JanWillem
russian: 5 changes by Lone_Wolf
2019-02-24 19:45:43 +01:00
Alexander Weiss
77ab6f8ec7 Change: [OSX] Prevent 2D scrolling for traditional scroll wheel mice 2019-02-24 17:54:59 +01:00
Alexander Weiss
0bb395b21d Change #6800: [OSX] Use high-precision scrolling deltas for 2D scrolling 2019-02-24 17:54:59 +01:00
PeterN
195fd0dc60 Fix #7266: Reorder reinitialization of caches when changing font zoom level. (#7273) 2019-02-24 16:27:44 +00:00
Patric Stout
91eee793e1 Fix c3dbe836b4: also compile without ENABLE_NETWORK defined again 2019-02-24 01:11:08 +01:00
PeterN
87ebfe1227 Fix #7004: Mark linkgraph dirty to be rebuilt on next draw call. (#7265)
Previously the linkgraph was rebuilt before the viewport extents were finalized.
2019-02-23 19:19:41 +00:00
translators
f240f61fb2 Update: Translations from eints
danish: 11 changes by nielsmh
spanish (mexican): 11 changes by Absay
hungarian: 100 changes by Brumi
russian: 6 changes by Lone_Wolf
croatian: 9 changes by VoyagerOne
2019-02-23 19:45:45 +01:00
PeterN
eeae4512ae Fix #7003: Freetype fonts were scaled by both GUI and Font zoom levels. (#7267) 2019-02-23 16:07:25 +00:00
Niels Martin Hansen
13962a8475 Change: Framerate window can now scroll and resize 2019-02-23 14:29:07 +01:00
Niels Martin Hansen
7e1e2756d4 Add: Show performance of AI and GS in framerate window 2019-02-23 14:29:07 +01:00
SamuXarick
4adb91202d Fix: Remove desert around lakes upon generation 2019-02-23 13:16:12 +01:00
Peter Nelson
fde5bd0ccf Change: Add scrollbar to cargo legend in cargo payment rates window. 2019-02-23 11:46:00 +01:00
Greg Carlin
00d28a500d Feature: Add option to adjust font size separately from GUI size. (#7003)
Adds an option in the "Game Options" next to "Interface Size" called "Font Size". Available options are normal, double, and quad.
2019-02-23 08:27:46 +00:00
peter1138
56a6d7aec8 Fix #7227: Don't apply mouse-hasn't-moved test to scrollbars. 2019-02-22 21:32:12 +00:00
peter1138
69928df3f0 Fix: Resorting file list did not update filtered rows. 2019-02-22 21:31:46 +00:00
translators
fb1b6fa47a Update: Translations from eints
italian: 9 changes by lorenzodv
norwegian (bokmal): 4 changes by Leifbk
2019-02-22 19:45:44 +01:00
Michael Lutz
690d1dd6a4 Fix #7159, e934f09: Waiting time at red one-way signals was too short.
This is not an exact fix as previously, the wait time was speed/acceleration dependant. This simple fix ignores that and just makes the 'days' from the settings comment to be actually days.
2019-02-21 23:19:03 +00:00
SamuXarick
456e67ac1c Change: Owner of vehicle with exclusive transport rights may now load cargo from neutral stations (#7256) 2019-02-21 21:23:37 +00:00
translators
673f6753e9 Update: Translations from eints
dutch: 76 changes by JanWillem
scottish gaelic: 44 changes by GunChleoc
2019-02-21 19:45:46 +01:00
peter1138
5ab1a73a8a Codechange: Remove never-used StationIDList. 2019-02-21 17:45:47 +01:00
Nikolas Nyby
8a6e03c4d2 Fix #7189: Fluidsynth volume gain too high 2019-02-21 10:08:07 +01:00
Peter Nelson
6733b71300 Change: Make mini-map widget capture mouse when left-click dragging.
This allows the mini-map to be dragged when the cursor has left the widget.
2019-02-21 08:11:35 +00:00
Peter Nelson
6dfe36b5cd Change: Make volume slider widget capture mouse when clicked.
This makes the slider continue to respond even when mouse cursor
is no longer over the widget.
2019-02-21 08:11:35 +00:00
Peter Nelson
de9f54ccc1 Codechange: Change scrolling_scrollbar to mouse_capture_widget, and dispatch OnClick() event if widget is not a scrollbar.
This allows any widget to support mouse capture.
2019-02-21 08:11:35 +00:00
Samu
66d23e3e86 Fix #7090: Close Query String window after rebuilding AI/GS settings 2019-02-21 01:40:34 +01:00
Samu
19fa960d83 Fix #7091: Close dropdown menu windows after rebuilding AI/GS settings 2019-02-21 00:35:56 +01:00
translators
21f009dc78 Update: Translations from eints
english (us): 11 changes by njn
dutch: 244 changes by JanWillem
turkish: 102 changes by wakeup
2019-02-20 19:45:42 +01:00
translators
21d8636722 Update: Translations from eints
dutch: 100 changes by JanWillem
2019-02-19 19:45:43 +01:00
Samu
ba55f93f41 Doc: [AI] UnshareOrders empties the orders list of the vehicle. 2019-02-19 15:25:53 +01:00
J0an Josep
c4fe46a475 Fix #7244, 6ca637b8c1: OPF doesn't take 90 deg turns into account. 2019-02-19 01:06:10 +01:00
Juanjo
45ce517105 Codechange: Move some common code after adding/removing tiles to a station to its own function. 2019-02-18 22:57:43 +01:00
J0an Josep
6ca637b8c1 Fix #7226: Don't call ship pathfinders if there is no available track due to "forbid 90 deg turns". 2019-02-18 22:57:19 +01:00
translators
349cbee6e9 Update: Translations from eints
ukrainian: 6 changes by nsergiy
dutch: 210 changes by JanWillem
french: 1 change by glx
portuguese: 4 changes by vesgo
2019-02-18 19:45:44 +01:00
PeterN
84961034e4 Change: Increase maximum number of orders from 64000 to ~16.7m. (#7220) 2019-02-18 07:37:25 +00:00
translators
ef7e47a53a Update: Translations from eints
danish: 5 changes by nielsmh
french: 3 changes by glx
spanish (mexican): 4 changes by Absay
russian: 4 changes by Lone_Wolf
2019-02-17 19:45:44 +01:00
glx
aadcf40b9b Fix 1585eb1a3: wrong default selection for goals and story book 2019-02-17 16:04:52 +01:00
Joan Josep
548ec05a48 Add: News menu entry and shortcut for deleting all messages. (#7240) 2019-02-16 23:15:58 +00:00
glx
ebe84b9d4c Cleanup: update modified and removed strings in languages 2019-02-16 22:19:16 +01:00
glx
1585eb1a3e Fix: use more descriptive "spectator" strings for story book and goal dropdown menus 2019-02-16 22:19:16 +01:00
glx
7c31a32c2b Fix: colour of network specific strings in company dropdown menus 2019-02-16 22:19:16 +01:00
Joan Josep
4919c8db13 Codechange: Re-arrange VehicleEnter_Track in rail_cmd. (#7239) 2019-02-16 21:52:49 +01:00
PeterN
5dc377244d Fix #7224: AI could no longer create groups. (#7233) 2019-02-15 19:15:53 +00:00
PeterN
3a4b6b476b Change: Use selected group as parent when creating a new group. (#7224) 2019-02-15 18:43:33 +00:00
Peter Nelson
57734fd85d Fix #6599: Disable build and rename button in build vehicle window when no vehicle is selected. 2019-02-14 19:35:48 +01:00
MrMamen
1f182c44c9 Fix: year for 1.9.0 betas in changelog 2019-02-14 19:24:58 +01:00
translators
045503e728 Update: Translations from eints
english (us): 1 change by njn
2019-02-13 19:45:43 +01:00
PeterN
c0c8fb25fb Change: Use SlErrorCorrupt() on pool index error when loading a savegame, instead of terminating. (#7219) 2019-02-13 09:01:49 +00:00
Niels Martin Hansen
830ed6be61 Fix: Do not mangle tagged revision strings for network revision strings 2019-02-12 21:32:43 +00:00
Niels Martin Hansen
46d97239c4 Codechange: Include flag for whether a build is of a tagged revision 2019-02-12 21:32:43 +00:00
Thomas den Hollander
412e6132b6 Fix: CompanyEconomy documentation
Company income was described as an unsigned integer, but it should be signed.
2019-02-12 19:26:21 +00:00
translators
6b5ebe2b09 Update: Translations from eints
english (us): 64 changes by njn
polish: 2 changes by McZapkie
danish: 1 change by njn
french: 2 changes by glx
2019-02-12 19:45:44 +01:00
PeterN
aa737715dd Fix #7151: AI start date deviation was still applied when not set to a random AI. (#7223) 2019-02-11 18:59:55 +00:00
translators
75d3054ae4 Update: Translations from eints
faroese: 1 change by JayPee
german: 1 change by ShadowCop
norwegian (bokmal): 96 changes by Leifbk
2019-02-11 19:45:43 +01:00
Peter Nelson
cac2f6226c Codechange: In CmdCompanyCtrl, move client_id assignment to where it is used, and document bit usage better. 2019-02-10 22:48:23 +00:00
PeterN
22f33fdd08 Fix 148e5b41d6: Uninitialized variable usage. (#7216) 2019-02-10 21:06:09 +00:00
translators
13af2b88b4 Update: Translations from eints
russian: 3 changes by Lone_Wolf
2019-02-10 19:45:45 +01:00
Patric Stout
4d5d21be76 Fix: [AzurePipelines] always list the full changelog since last stable 2019-02-10 18:46:54 +01:00
Eddi-z
148e5b41d6 Change: Skip reliability decay if servicing is disabled 2019-02-10 18:45:48 +01:00
glx
2ff10327d7 Fix: projects/generate now keeps the line ending 2019-02-10 12:44:10 +01:00
glx
748d72202a Fix: generate and generate.vbs were sorting differently 2019-02-10 12:44:10 +01:00
glx
0df95811ce Fix: generate.vbs used wrong data for basesets_vs142 2019-02-10 12:44:10 +01:00
glx
70e1c57f81 Fix: line ending issues with MSYS2 2019-02-10 12:44:10 +01:00
PeterN
d242875d27 Fix #7197: Invalidate depot buttons when necessary. (#7212) 2019-02-10 08:43:54 +00:00
274 changed files with 6117 additions and 3808 deletions

View File

@@ -91,6 +91,8 @@ MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ')
VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ')
GITHASH := $(shell echo "$(VERSIONS)" | cut -f 4 -d' ')
ISTAG := $(shell echo "$(VERSIONS)" | cut -f 5 -d' ')
ISSTABLETAG := $(shell echo "$(VERSIONS)" | cut -f 6 -d' ')
# Make sure we have something in VERSION and ISODATE
ifeq ($(VERSION),)
@@ -276,10 +278,10 @@ endif
# Revision files
$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g" > $(SRC_DIR)/rev.cpp
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/rev.cpp
$(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in
$(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g" > $(SRC_DIR)/os/windows/ottdres.rc
$(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/os/windows/ottdres.rc
FORCE:

View File

@@ -310,22 +310,22 @@ your operating system:
Different types of data or extensions go into different subdirectories of the
chosen main OpenTTD directory:
| data type | directory | additional info |
| --- | --- | --- |
| Config File | (no subdirectory) | |
| Screenshots | screenshot | |
| Base Graphics | baseset | (or a subdirectory thereof) |
| Sound Sets | baseset | (or a subdirectory thereof) |
| NewGRFs | newgrf | (or a subdirectory thereof) |
| 32bpp Sets | newgrf | (or a subdirectory thereof) |
| Music Sets | baseset | (or a subdirectory thereof) |
| AIs | ai | (or a subdirectory thereof) |
| AI Libraries | ai/library | (or a subdirectory thereof) |
| Game Scripts (GS) | game | (or a subdirectory thereof) |
| GS Libraries | game/library | (or a subdirectory thereof) |
| Savegames | save | |
| Automatic Savegames | save/autosave | |
| Scenarios | scenario | |
| data type | directory | additional info |
| ------------------- | ----------------- | --------------------------- |
| Config File | (no subdirectory) | |
| Screenshots | screenshot | |
| Base Graphics | baseset | (or a subdirectory thereof) |
| Sound Sets | baseset | (or a subdirectory thereof) |
| NewGRFs | newgrf | (or a subdirectory thereof) |
| 32bpp Sets | newgrf | (or a subdirectory thereof) |
| Music Sets | baseset | (or a subdirectory thereof) |
| AIs | ai | (or a subdirectory thereof) |
| AI Libraries | ai/library | (or a subdirectory thereof) |
| Game Scripts (GS) | game | (or a subdirectory thereof) |
| GS Libraries | game/library | (or a subdirectory thereof) |
| Savegames | save | |
| Automatic Savegames | save/autosave | |
| Scenarios | scenario | |
The (automatically created) directory content_download is for OpenTTD's internal
use and no files should be added to it or its subdirectories manually.
@@ -476,6 +476,12 @@ The following is an explanation of the different statistics:
- *World ticks* - Time spent on other world/landscape processing. This
includes towns growing, building animations, updates of farmland and trees,
and station rating updates.
- *GS/AI total*, *Game script*, and *AI players* - Time spent running logic
for game scripts and AI players. The total may show as less than the current
sum of the individual scripts, this is because AI players at lower
difficulty settings do not run every game tick, and hence contribute less
to the average across all ticks. Keep in mind that the "Current" figure is
also an average, just only over short term.
- *Link graph delay* - Time overruns of the cargo distribution link graph
update thread. Usually the link graph is updated in a background thread,
but these updates need to synchronise with the main game loop occasionally,

View File

@@ -1,7 +1,9 @@
trigger:
- master
- release/*
pr:
- master
- release/*
jobs:
- job: windows
@@ -36,10 +38,14 @@ jobs:
strategy:
matrix:
commit-checker: {}
linux-amd64-clang-3.8: {}
linux-amd64-gcc-6: {}
linux-i386-gcc-6: {}
commit-checker:
Tag: 'commit-checker'
linux-amd64-clang-3.8:
Tag: 'linux-amd64-clang-3.8'
linux-amd64-gcc-6:
Tag: 'linux-amd64-gcc-6'
linux-i386-gcc-6:
Tag: 'linux-i386-gcc-6'
steps:
- template: azure-pipelines/templates/ci-git-rebase.yml
@@ -48,13 +54,16 @@ jobs:
- template: azure-pipelines/templates/linux-build.yml
parameters:
Image: compile-farm-ci
Tag: $(Agent.JobName)
Tag: $(Tag)
- job: macos
displayName: 'MacOS'
pool:
vmImage: 'macOS-10.13'
variables:
MACOSX_DEPLOYMENT_TARGET: 10.9
steps:
- template: azure-pipelines/templates/ci-git-rebase.yml
- template: azure-pipelines/templates/osx-dependencies.yml

View File

@@ -2,13 +2,9 @@
tag=$(git describe --tags 2>/dev/null)
# If we are a tag, show the part of the changelog that matches the tag.
# In case of a stable, also show all betas and RCs.
# If we are a tag, show the part of the changelog till (but excluding) the last stable
if [ -n "$tag" ]; then
grep="."
if [ "$(echo $tag | grep '-')" = "" ]; then
grep='^[0-9]\.[0-9]\.[0-9][^-]'
fi
grep='^[0-9]\.[0-9]\.[0-9][^-]'
next=$(cat changelog.txt | grep '^[0-9]' | awk 'BEGIN { show="false" } // { if (show=="true") print $0; if ($1=="'$tag'") show="true"} ' | grep "$grep" | head -n1 | sed 's/ .*//')
cat changelog.txt | awk 'BEGIN { show="false" } /^[0-9].[0-9].[0-9]/ { if ($1=="'$next'") show="false"; if ($1=="'$tag'") show="true";} // { if (show=="true") print $0 }'
exit 0

View File

@@ -1,9 +1,10 @@
steps:
# Rebase to origin/master for every PR. This means users don't have to
# rebase every time master changes. As long as the PR applies cleanly, we
# Rebase to target branch for every PR. This means users don't have to
# rebase every time target branch changes. As long as the PR applies cleanly, we
# will validate it.
- script: |
- bash: |
git config user.email 'info@openttd.org'
git config user.name 'OpenTTD CI'
git rebase origin/master
displayName: 'Rebase to master'
git rebase origin/${SYSTEM_PULLREQUEST_TARGETBRANCH}
displayName: 'Rebase to target branch'
condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))

View File

@@ -4,11 +4,27 @@ parameters:
ContainerCommand: ''
steps:
# 'envVars' in the 'Docker@1' task is a bit funky. When you want to use a
# variable, you have to quote it. But the quote is also sent directly to
# Docker and ends up in the variable, which you don't want. To work around
# this, we set the correct variable first (which becomes an env-variable), and
# pass that env-variable through to Docker. We cannot use the normal
# 'variables' entry, as we are a template. So that results in this bit of
# Bash code. Not because it is pretty, but it is the only way we found that
# works.
- bash: |
echo "##vso[task.setvariable variable=TARGET_BRANCH]${SYSTEM_PULLREQUEST_TARGETBRANCH}"
echo "Target branch is ${SYSTEM_PULLREQUEST_TARGETBRANCH}"
displayName: "Set target branch"
condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
- task: Docker@1
${{ if eq(parameters.Image, 'compile-farm') }}:
displayName: 'Build'
${{ if eq(parameters.Image, 'compile-farm-ci') }}:
displayName: 'Build and test'
# Run the commit-checker only if it is a Pull Request
condition: and(succeeded(), or(not(contains(variables['Agent.JobName'], 'commit-checker')), eq(variables['Build.Reason'], 'PullRequest')))
inputs:
command: 'Run an image'
imageName: openttd/${{ parameters.Image }}:${{ parameters.Tag }}
@@ -16,3 +32,5 @@ steps:
workingDirectory: '$(Build.SourcesDirectory)'
containerCommand: ${{ parameters.ContainerCommand }}
runInBackground: false
envVars: |
TARGET_BRANCH

View File

@@ -1,11 +1,12 @@
steps:
- script: |
set -ex
HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng
HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng freetype
# Remove the dynamic libraries of these libraries, to ensure we use
# the static versions. That is important, as it is unlikely any
# end-user has these brew libraries installed.
rm /usr/local/Cellar/lzo/*/lib/*.dylib
rm /usr/local/Cellar/xz/*/lib/*.dylib
rm /usr/local/Cellar/libpng/*/lib/*.dylib
rm /usr/local/Cellar/freetype/*/lib/*.dylib
displayName: 'Install dependencies'

View File

@@ -110,14 +110,22 @@ jobs:
strategy:
matrix:
linux-ubuntu-xenial-i386-gcc: {}
linux-ubuntu-xenial-amd64-gcc: {}
linux-ubuntu-bionic-i386-gcc: {}
linux-ubuntu-bionic-amd64-gcc: {}
linux-debian-jessie-i386-gcc: {}
linux-debian-jessie-amd64-gcc: {}
linux-debian-stretch-i386-gcc: {}
linux-debian-stretch-amd64-gcc: {}
linux-ubuntu-xenial-i386-gcc:
Tag: 'linux-ubuntu-xenial-i386-gcc'
linux-ubuntu-xenial-amd64-gcc:
Tag: 'linux-ubuntu-xenial-amd64-gcc'
linux-ubuntu-bionic-i386-gcc:
Tag: 'linux-ubuntu-bionic-i386-gcc'
linux-ubuntu-bionic-amd64-gcc:
Tag: 'linux-ubuntu-bionic-amd64-gcc'
linux-debian-jessie-i386-gcc:
Tag: 'linux-debian-jessie-i386-gcc'
linux-debian-jessie-amd64-gcc:
Tag: 'linux-debian-jessie-amd64-gcc'
linux-debian-stretch-i386-gcc:
Tag: 'linux-debian-stretch-i386-gcc'
linux-debian-stretch-amd64-gcc:
Tag: 'linux-debian-stretch-amd64-gcc'
steps:
- template: release-fetch-source.yml
@@ -125,7 +133,7 @@ jobs:
parameters:
Image: compile-farm
ContainerCommand: '$(Build.BuildNumber)'
Tag: $(Agent.JobName)
Tag: $(Tag)
- template: linux-claim-bundles.yml
- template: release-bundles.yml
@@ -135,6 +143,9 @@ jobs:
vmImage: 'macOS-10.13'
dependsOn: source
variables:
MACOSX_DEPLOYMENT_TARGET: 10.9
steps:
- template: release-fetch-source.yml
- template: osx-dependencies.yml

View File

@@ -1,10 +1,14 @@
steps:
- bash: |
set -ex
curl -L https://github.com/OpenTTD/CompileFarm/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip
unzip windows-dependencies.zip
rm -f windows-dependencies.zip
displayName: 'Download dependencies'
workingDirectory: $(Build.ArtifactStagingDirectory)
- script: $(Build.ArtifactStagingDirectory)\windows-dependencies\vcpkg.exe integrate install
mv windows-dependencies/installed /c/vcpkg/
rm -rf windows-dependencies
displayName: 'Install dependencies'
workingDirectory: $(Build.ArtifactStagingDirectory)
- script: c:\vcpkg\vcpkg.exe integrate install
displayName: 'Integrate vcpkg'

View File

@@ -374,3 +374,10 @@ AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -126,3 +126,10 @@ AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -63,3 +63,10 @@ AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id)
{
return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL);
}
/* 1.9 adds parent_group_id to CreateGroup function */
AIGroup._CreateGroup <- AIGroup.CreateGroup;
AIGroup.CreateGroup <- function(vehicle_type)
{
return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID);
}

View File

@@ -574,7 +574,7 @@ function Regression::Group()
local vehicle = AIVehicle.BuildVehicle(10000, 116);
print(" AIVehicle.BuildVehicle(): " + vehicle);
print(" GetNumEngines(): " + AIGroup.GetNumEngines(AIGroup.GROUP_ALL, 116));
local group = AIGroup.CreateGroup(AIVehicle.VT_ROAD);
local group = AIGroup.CreateGroup(AIVehicle.VT_ROAD, AIGroup.GROUP_INVALID);
print(" CreateGroup(): " + group);
print(" MoveVehicle(): " + AIGroup.MoveVehicle(group, vehicle));
print(" GetNumEngines(): " + AIGroup.GetNumEngines(group, 116));

Binary file not shown.

View File

@@ -1,8 +1,125 @@
1.9.0-beta2 (2018-02-09)
1.9.3 (2019-09-16)
------------------------------------------------------------------------
- Change: Use natural sort when sorting the file list (#7727)
- Fix #7479: Don't close construction windows when changing client name (#7728)
- Fix #7731: Files sorting by modification time on Windows XP (#7731)
- Fix #7644: [OSX] Better solution for colourspace/performance issues (#7741)
1.9.3-RC1 (2019-09-07)
------------------------------------------------------------------------
- Add: Can now click industries to make orders to their neutral station (e.g. oil rig) (#7709)
- Fix #7644: [OSX] Poor framerate on certain systems (#7721)
- Fix #7702: Highscore screen UI scaling (#7714)
- Fix #7704: [OSX] Handle malformed UTF8 strings, leading to crashes in server browser (#7705)
- Fix #7188: [AI] Possible crash when reloading an AI in multiplayer games (#7701, #7725)
- Fix: RemoveAirport function now returns 'Aircraft in the way' error message when occupied (#7690)
- Fix: Spelling in running costs setting help text (#7686)
- Fix #7655: 'Decrease' buttons in cheat window not working properly with UI scaling (#7669)
- Fix: [GS] Could not create elements on Storybook pages with ID > 255 (#7657)
- Fix #7626: Allow building road stops over town-owned one-way roads, instead of crashing (#7627)
1.9.2 (2019-07-07)
------------------------------------------------------------------------
- Change: Set default setting in server browser of "Advertised" to "Yes" (#7568)
- Change: Allow building road stops over self-owned one-way/blocked road (#7547)
- Fix #7463: Promote scroll mode setting to basic category (#7586)
- Fix: Inconsistent GUI scaling (#7539)
- Fix #7491: Send company update admin message when bankruptcy counter changes (#7492)
- Fix #7553: Check bounds when loading strings (#7554)
- Fix: Really increase the maximum number of GameScript texts to 64k (#7555)
- Fix: Crash when attempting to load old save game with GRFs set (#7546)
- Fix #6507: Don't try to load invalid depots from older savegames (#7546)
- Fix: Railtype bits were moved too late, leading to rails under bridges losing their type (#7546)
- Fix: Bounds check access to railtype_map (#7529)
- Fix: Spurious errors when using more than 32 railtypes (#7533)
- Fix #7633: Allow zero-cost track conversion to succeed (#7634)
- Fix #7577: Check if linkgraph station index is valid before dereferencing (#7583)
- Fix #7224: Drag and drop vehicle group creation does not work correctly (#7581)
- Fix #7570: Show Github URL in the crashlog window (#7571)
- Fix: Clicking on scrollbar 'thumb' moved position up instantly (#7549)
- Fix #7255: Prevent crashlog corruption by only printing the 32 most recent news messages (#7542)
- Fix #5685: Check for free wagons in ScriptVehicleList (#7617)
- Fix: Make GSGoal.QuestionClient work correctly at least for clients with ID < 2**16 (#7560)
- Fix #6666: Mismatched parentheses in RTL languages (#7480)
- Fix: [Windows] Various reliability and correctness improvements to MIDI on Windows (#7620)
1.9.1 (2019-04-08)
------------------------------------------------------------------------
- Fix #6564: Enforce types of arguments for station name strings (#7419)
- Fix #7433: Don't use AirportSpec substitute if it's not enabled (#7435)
- Fix #7447, #7466, #7476: Missing NewGRF strings due to Action 4 feature check skipping pseudo-feature 48 (#7449)
- Fix #6222: Advanced sprite layout sometimes showed incorrect railtype ground tile. (#7460)
- Fix #7439: CompanyRemoveReason overwritten by ClientID (#7465)
- Fix: [Windows] Incorrect error handling could lead to cascading error windows (#7482)
- Fix #7478: Don't remove NewGRF objects on company take-over. (#7483)
1.9.0 (2019-04-01)
------------------------------------------------------------------------
- Fix #7411: Use industry production callback (if used) on initial industry cargo generation (#7412)
1.9.0-RC2 (2019-03-24)
------------------------------------------------------------------------
- Fix #7400: WaterClass for tree tiles was not converted for old saves preventing industry creation (#7405)
- Fix: Filtered file list did not scroll properly (#7402)
- Fix #7391: Don't invalidate go to depot orders of non-aircraft when invalidating hangar orders that happen to share IDs (#7392)
- Fix #7386: Measurement tooltip for tunnels, aqueducts & docks did not display or flickered (#7389)
- Fix: Wrong company performance rating when money exceeds INT_MAX (#7382)
- Fix: Permit loading of industry production callback with invalid cargo type (#7364)
- Fix: Spelling for a few real town names (#7338)
- Fix: Runway too short for large aircraft message should not depend on plane crashes setting (#7325)
- Fix #7334: Ship lost after crossing bridge due to path cache not being consumed while on final bridge end (#7335)
1.9.0-RC1 (2019-03-03)
------------------------------------------------------------------------
- Add: Various AI/GS functions for vehicle groups (#7225)
- Change: Synchronise introduction date and reliability randomness across vehicles with the same base introduction date (#7147)
- Change: Allow towns to build bridges over rails and one-way roads (#7291)
- Fix: Detection of coast tiles with trees on them (#7309)
- Fix: Emergency netsave saved the title game instead of the broken game in question (#7298)
- Fix: Company livery window showed incorrect groups when opened in multiplayer (#7288)
- Fix: Unable to select last group in open livery window (#7283)
- Fix: Goto hangar orders were not invalidated when rebuilding airports (#7100)
1.9.0-beta3 (2019-02-24)
------------------------------------------------------------------------
- Feature: Option to adjust font size separately from GUI size (#7003)
- Feature: Increase maximum number of orders from 64000 to ~16.7m (#7220)
- Add: Show performance of AI and GS in framerate window
- Add: News menu entry and shortcut for deleting all messages (#7240)
- Change: [OSX] Improved scrolling behaviour when using touchpads
- Change: Add scrollbar to cargo legend in cargo payment rates window
- Change: Owner of vehicle with exclusive transport rights may now load cargo from neutral stations (#7256)
- Change: Improved UI behaviour when dragging sound volume sliders with the mouse (#7227)
- Change: Use selected vehicle group as parent when creating a new group (#7224)
- Change: Use SlErrorCorrupt() on pool index error when loading a savegame, instead of terminating (#7219)
- Change: Skip reliability decay if servicing is disabled
- Fix: Remove desert around lakes upon generation
- Fix: Re-sorting file list did not update filtered rows
- Fix #7159: Waiting time at red one-way signals was too short
- Fix #7189: Fluidsynth volume gain too high
- Fix #7004: Cargo flow legend was not properly refreshed after zooming (#7265)
- Fix: Possibility to modify wrong AI/GS settings when switching AI/GS scripts around (#7090, #7091)
- Fix: Use more descriptive "spectator" strings for story book and goal dropdown menus
- Fix #6599: Disable build and rename button in build vehicle window when no vehicle is selected
- Fix: Do not mangle tagged revision strings for network revision strings
- Fix #7151: AI start date deviation was still applied when not set to a random AI (#7223)
- Fix #7197: Invalidate depot buttons when necessary (#7212)
- Doc: [AI] UnshareOrders empties the orders list of the vehicle
1.9.0-beta2 (2019-02-09)
------------------------------------------------------------------------
- Fix: Non-Windows builds did not get correct git hash
1.9.0-beta1 (2018-02-09)
1.9.0-beta1 (2019-02-09)
------------------------------------------------------------------------
Note: OpenTTD was migrated to GitHub for 1.9, so SVN revision and FlySpray numbers have been replaced with Pull Requests and Issue numbers
- Feature: Group liveries, and livery window usability enhancements (#7108)

View File

@@ -57,8 +57,8 @@ set_default() {
enable_translator="0"
enable_unicode="1"
enable_console="1";
enable_assert="1"
enable_strip="0"
enable_assert="0"
enable_strip="1"
enable_universal="0"
enable_osx_g5="0"
enable_cocoa_quartz="1"
@@ -820,7 +820,7 @@ check_params() {
pre_detect_with_zlib=$with_zlib
detect_zlib
if [ "$with_zlib" = "0" ] || [ -z "$zlib-config" ]; then
if [ "$with_zlib" = "0" ] || [ -z "$zlib_config" ]; then
log 1 "WARNING: zlib was not detected or disabled"
log 1 "WARNING: OpenTTD doesn't require zlib, but it does mean that many features"
log 1 "WARNING: (like loading most old savegames/scenarios, loading heightmaps,"
@@ -1681,12 +1681,10 @@ make_cflags_and_ldflags() {
CFLAGS="$CFLAGS -DWITH_SDL"
# SDL must not add _GNU_SOURCE as it breaks many platforms
CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`"
if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then
if [ "$enable_static" != "0" ]; then
LIBS="$LIBS `$sdl_config --static-libs`"
else
LIBS="$LIBS `$sdl_config --libs`"
fi
if [ "$enable_static" != "0" ]; then
LIBS="$LIBS `$sdl_config --static --libs`"
else
LIBS="$LIBS `$sdl_config --libs`"
fi
fi

View File

@@ -759,6 +759,7 @@
<td valign=top nowrap>&nbsp;</td>
<td>
<ul>
<li>m1 bits 6..5: water class (sea or land)</li>
<li>m1 bits 4..0: <a href="#OwnershipInfo">owner</a> (normally <tt>10</tt>)</li>
<li>m2 bits 8..6: ground
<table>

View File

@@ -194,7 +194,7 @@ the array so you can quickly see what is used and what is not.
<td class="caption">trees</td>
<td class="bits">XXXX XXXX</td>
<td class="bits">XXXX XXXX</td>
<td class="bits"><span class="free">OOO</span><span class="option">~ ~~~~</span></td>
<td class="bits"><span class="free">O</span>XX<span class="option">~ ~~~~</span></td>
<td class="bits"><span class="free">OOOO OOO</span>X XXXX XXXX</td>
<td class="bits"><span class="option">~~</span>XX XXXX</td>
<td class="bits"><span class="free">OOOO OOOO</span></td>

View File

@@ -82,8 +82,16 @@ if [ -d "$ROOT_DIR/.git" ]; then
if [ -n "$TAG" ]; then
VERSION="${TAG}"
ISTAG="1"
if [ -n "`echo \"${TAG}\" | grep \"^[0-9.]*$\"`" ]; then
ISSTABLETAG="1"
else
ISSTABLETAG="0"
fi
else
VERSION="${ISODATE}-${BRANCH}${hashprefix}${SHORTHASH}"
ISTAG="0"
ISSTABLETAG="0"
fi
elif [ -f "$ROOT_DIR/.ottdrev" ]; then
@@ -99,6 +107,8 @@ else
ISODATE=""
TAG=""
VERSION=""
ISTAG="0"
ISSTABLETAG="0"
fi
echo "$VERSION $ISODATE $MODIFIED $HASH"
echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG $ISSTABLETAG"

View File

@@ -1,6 +1,6 @@
OpenTTD's known bugs
Last updated: 2019-02-09
Release version: 1.9.0-beta2
Last updated: 2019-09-16
Release version: 1.9.3
------------------------------------------------------------------------

View File

@@ -1,3 +1,51 @@
openttd (1.9.3-0) unstable; urgency=low
* New upstream release 1.9.3
-- OpenTTD <info@openttd.org> Mon, 16 Sep 2019 21:00:00 +0200
openttd (1.9.3~RC1-0) unstable; urgency=low
* New upstream release 1.9.3-RC1
-- OpenTTD <info@openttd.org> Sat, 07 Sep 2019 23:30:00 +0200
openttd (1.9.2-0) unstable; urgency=low
* New upstream release 1.9.2
-- OpenTTD <info@openttd.org> Sun, 07 Jul 2019 23:00:00 +0200
openttd (1.9.1-0) unstable; urgency=low
* New upstream release 1.9.1
-- OpenTTD <info@openttd.org> Mon, 08 Apr 2019 20:00:00 +0100
openttd (1.9.0-0) unstable; urgency=low
* New upstream release 1.9.0
-- OpenTTD <info@openttd.org> Mon, 01 Apr 2019 00:00:00 +0200
openttd (1.9.0~RC2-0) unstable; urgency=low
* New upstream release 1.9.0-RC2
-- OpenTTD <info@openttd.org> Sun, 24 Mar 2019 23:00:00 +0000
openttd (1.9.0~RC1-0) unstable; urgency=low
* New upstream release 1.9.0-RC1
-- OpenTTD <info@openttd.org> Sun, 3 Mar 2019 23:00:00 +0000
openttd (1.9.0~beta3-0) unstable; urgency=low
* New upstream release 1.9.0-beta3
-- OpenTTD <info@openttd.org> Sun, 24 Feb 2019 23:00:00 +0000
openttd (1.9.0~beta2-0) unstable; urgency=low
* New upstream release 1.9.0-beta2

View File

@@ -1,6 +1,6 @@
@echo off
set OPENTTD_VERSION=1.9.0
set OPENTTD_VERSION=1.9.3
set OPENSFX_VERSION=0.8.0
set NOSOUND_VERSION=0.8.0
set OPENGFX_VERSION=1.2.0

View File

@@ -17,9 +17,9 @@
#
Name: openttd
Version: 1.9.beta2
Version: 1.9.3
Release: 0
%define srcver 1.9.0-beta2
%define srcver 1.9.3
Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe
License: GPL-2.0
Group: Amusements/Games/Strategy/Other

View File

@@ -1,9 +1,9 @@
# Version numbers to update
!define APPV_MAJOR 1
!define APPV_MINOR 9
!define APPV_MAINT 0
!define APPV_BUILD 1
!define APPV_EXTRA "-beta2"
!define APPV_MAINT 3
!define APPV_BUILD 0
!define APPV_EXTRA ""
!define APPNAME "OpenTTD" ; Define application name
!define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version
@@ -24,6 +24,7 @@
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "top.bmp"
ManifestDPIAware true
BrandingText "OpenTTD Installer"
SetCompressor LZMA

View File

@@ -21,34 +21,44 @@ Sub FindReplaceInFile(filename, to_find, replacement)
file.Close
End Sub
Sub UpdateFile(modified, isodate, version, cur_date, githash, filename)
Sub UpdateFile(modified, isodate, version, cur_date, githash, istag, isstabletag, filename)
FSO.CopyFile filename & ".in", filename
FindReplaceInFile filename, "!!MODIFIED!!", modified
FindReplaceInFile filename, "!!ISODATE!!", isodate
FindReplaceInFile filename, "!!VERSION!!", version
FindReplaceInFile filename, "!!DATE!!", cur_date
FindReplaceInFile filename, "!!GITHASH!!", githash
FindReplaceInFile filename, "!!ISTAG!!", istag
FindReplaceInFile filename, "!!ISSTABLETAG!!", isstabletag
End Sub
Sub UpdateFiles(version)
Dim modified, isodate, cur_date, githash
Dim modified, isodate, cur_date, githash, istag, isstabletag
cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date)
If InStr(version, Chr(9)) Then
' Split string into field with tails
isodate = Mid(version, InStr(version, Chr(9)) + 1)
modified = Mid(isodate, InStr(isodate, Chr(9)) + 1)
githash = Mid(modified, InStr(modified, Chr(9)) + 1)
istag = Mid(githash, InStr(githash, Chr(9)) + 1)
isstabletag = Mid(istag, InStr(istag, Chr(9)) + 1)
' Remove tails from fields
version = Mid(version, 1, InStr(version, Chr(9)) - 1)
isodate = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1)
modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1)
version = Mid(version, 1, InStr(version, Chr(9)) - 1)
githash = Mid(githash, 1, InStr(githash, Chr(9)) - 1)
istag = Mid(istag, 1, InStr(istag, Chr(9)) - 1)
Else
isodate = 0
modified = 1
githash = ""
istag = 0
isstabletag = 0
End If
UpdateFile modified, isodate, version, cur_date, githash, "../src/rev.cpp"
UpdateFile modified, isodate, version, cur_date, githash, "../src/os/windows/ottdres.rc"
UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, "../src/rev.cpp"
UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, "../src/os/windows/ottdres.rc"
End Sub
Function DetermineVersion()
@@ -137,7 +147,7 @@ Function DetermineVersion()
DetermineVersion = "norev000"
modified = 1
Else
Dim version, hashprefix
Dim version, hashprefix, istag, isstabletag
If modified = 0 Then
hashprefix = "-g"
ElseIf modified = 2 Then
@@ -148,11 +158,22 @@ Function DetermineVersion()
If tag <> "" Then
version = tag
istag = 1
Set stable_regexp = New RegExp
stable_regexp.Pattern = "^[0-9.]*$"
If stable_regexp.Test(tag) Then
isstabletag = 1
Else
isstabletag = 0
End If
Else
version = isodate & "-" & branch & hashprefix & shorthash
istag = 0
isstabletag = 0
End If
DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash
DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash & Chr(9) & istag & Chr(9) & isstabletag
End If
End Function

View File

@@ -10,6 +10,19 @@
# This file generates all project files based on sources.list, so everyone who
# can start a bash process, can update the project files.
# Set neutral locale so sort behaves the same everywhere
LC_ALL=C
export LC_ALL
# We really need gawk for this!
AWK=gawk
${AWK} --version > /dev/null 2> /dev/null
if [ "$?" != "0" ]; then
echo "This script needs gawk to run properly"
exit 1
fi
ROOT_DIR="`pwd`/.."
if ! [ -e "$ROOT_DIR/source.list" ]
then
@@ -66,7 +79,7 @@ with_cocoa="0"
enable_directmusic="1"
enable_fluidsynth="0"
with_threads="1"
file_prefix="..\\\\src\\\\"
file_prefix="..\\\\\\\\src\\\\\\\\"
safety_check() {
li=""
@@ -97,7 +110,8 @@ rm tmp.headers.*
load_main_data() {
# Read the source.list and process it
RES="`cat $1 | tr '\r' '\n' | awk '
RES="`cat $1 | ${AWK} -v BINMODE=1 '
{ gsub("\\r", "", $0); }
/^( *)#end/ { if (deep == skip) { skip -= 1; } deep -= 1; next; }
/^( *)#else/ { if (deep == skip) { skip -= 1; } else if (deep - 1 == skip) { skip += 1; } next; }
/^( *)#if/ {
@@ -149,7 +163,7 @@ load_main_data() {
{
if (deep == skip) {
gsub(" ", "", $0);
gsub("/", "\\\\", $0);
gsub("/", "\\\\\\\\", $0);
split($0, file, ".");
cltype = "ClInclude"
if (file[2] == "cpp") cltype = "ClCompile";
@@ -177,13 +191,13 @@ load_lang_data() {
continue
fi
RES="$RES
#2 <CustomBuild Include=\"..\\src\\lang\\"$i".txt\">
#2 <CustomBuild Include=\"..\\\\src\\\\lang\\\\"$i".txt\">
#2 <Message Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">Generating "$i" language file</Message>
#2 <Command Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\objs\\strgen\\strgen.exe -s ..\\src\\lang -d ..\\bin\\lang \"%(FullPath)\"</Command>
#2 <AdditionalInputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\src\\lang\\english.txt;..\\objs\\strgen\\strgen.exe;%(AdditionalInputs)</AdditionalInputs>
#2 <Outputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\bin\\lang\\"$i".lng;%(Outputs)</Outputs>
#2 <Command Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\\\objs\\\\strgen\\\\strgen.exe -s ..\\\\src\\\\lang -d ..\\\\bin\\\\lang \"%(FullPath)\"</Command>
#2 <AdditionalInputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\\\src\\\\lang\\\\english.txt;..\\\\objs\\\\strgen\\\\strgen.exe;%(AdditionalInputs)</AdditionalInputs>
#2 <Outputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\\\bin\\\\lang\\\\"$i".lng;%(Outputs)</Outputs>
#2 </CustomBuild>
#3 <CustomBuild Include=\"..\\src\\lang\\"$i".txt\">
#3 <CustomBuild Include=\"..\\\\src\\\\lang\\\\"$i".txt\">
#3 <Filter>Translations</Filter>
#3 </CustomBuild>"
done
@@ -194,16 +208,16 @@ load_lang_data() {
load_settings_data() {
RES=""
RES2="
#3..\\objs\\settings\\settings_gen.exe -o ..\\objs\\settings\\table\\settings.h -b ..\\src\\table\\settings.h.preamble -a ..\\src\\table\\settings.h.postamble"
#3..\\\\objs\\\\settings\\\\settings_gen.exe -o ..\\\\objs\\\\settings\\\\table\\\\settings.h -b ..\\\\src\\\\table\\\\settings.h.preamble -a ..\\\\src\\\\table\\\\settings.h.postamble"
for i in `ls $1`
do
i=`basename $i`
RES="$RES
#2 <None Include=\"..\\src\\table\\"$i"\" />
#4 <None Include=\"..\\src\\table\\"$i"\">
#2 <None Include=\"..\\\\src\\\\table\\\\"$i"\" />
#4 <None Include=\"..\\\\src\\\\table\\\\"$i"\">
#4 <Filter>INI</Filter>
#4 </None>"
RES2="$RES2 ..\\src\\table\\"$i
RES2="$RES2 ..\\\\src\\\\table\\\\"$i
done
eval "$2=\"\$RES\$RES2\""
@@ -224,7 +238,7 @@ load_baseset_data() {
FIRST=1
fi
i=`basename $i`
RES2="$RES2..\\src\\lang\\$i.txt"
RES2="$RES2..\\\\src\\\\lang\\\\$i.txt"
done
RES2="$RES2</Langs>"
# Windows Folder sort and Linux Folder sort are slightly different.
@@ -233,13 +247,13 @@ load_baseset_data() {
do
i=`basename $i`
RES="$RES
#2 <CustomBuild Include=\"..\\media\\baseset\\"$i"\">
#2 <CustomBuild Include=\"..\\\\media\\\\baseset\\\\"$i"\">
#2 <Message Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">Generating "$i" baseset metadata file</Message>
#2 <Command Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">cscript //nologo ..\\media\\baseset\\translations.vbs \"%(FullPath)\" \"\$(OutputPath)$i\" ..\\src\\lang ..\\bin\\baseset\\orig_extra.grf</Command>
#2 <AdditionalInputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">\$(Langs);..\\bin\\baseset\\orig_extra.grf;%(AdditionalInputs)</AdditionalInputs>
#2 <Outputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\bin\\baseset\\"$i";%(Outputs)</Outputs>
#2 <Command Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">cscript //nologo ..\\\\media\\\\baseset\\\\translations.vbs \"%(FullPath)\" \"\$(OutputPath)$i\" ..\\\\src\\\\lang ..\\\\bin\\\\baseset\\\\orig_extra.grf</Command>
#2 <AdditionalInputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">\$(Langs);..\\\\bin\\\\baseset\\\\orig_extra.grf;%(AdditionalInputs)</AdditionalInputs>
#2 <Outputs Condition=\"'\$(Configuration)|\$(Platform)'=='Debug|Win32'\">..\\\\bin\\\\baseset\\\\"$i";%(Outputs)</Outputs>
#2 </CustomBuild>
#3 <CustomBuild Include=\"..\\media\\baseset\\"$i"\">
#3 <CustomBuild Include=\"..\\\\media\\\\baseset\\\\"$i"\">
#3 <Filter>Baseset Metadata</Filter>
#3 </CustomBuild>"
done
@@ -249,52 +263,28 @@ load_baseset_data() {
generate() {
echo "Generating $2..."
if [ $# -eq 3 ]; then
# Everything above the !!FILTERS!! marker
cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk '
/^$/ { next }
/!!FILTERS!!/ { stop = 1; }
{
if (stop == 0) { print $0 }
}
' > "$ROOT_DIR/projects/$2"
echo "$3" >> "$ROOT_DIR/projects/$2"
# Everything below the !!FILTERS!! marker and above the !!FILES!! marker
cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk '
BEGIN { stop = 1; }
/^$/ { next }
/!!FILTERS!!/ { stop = 2; }
/!!FILES!!/ { stop = 1; }
{
if (stop == 0) { print $0 }
if (stop == 2) { stop = 0 }
}
' >> "$ROOT_DIR/projects/$2"
else
# Everything above the !!FILES!! marker
cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk '
/^$/ { next }
/!!FILES!!/ { stop = 1; }
{
if (stop == 0) { print $0 }
}
' > "$ROOT_DIR/projects/$2"
fi
echo "$1" >> "$ROOT_DIR/projects/$2"
# Everything below the !!FILES!! marker
cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk '
BEGIN { stop = 1; }
# Everything above the !!FILTERS!! marker
cat "$ROOT_DIR/projects/$2".in | ${AWK} -v BINMODE=1 -v FILTERS="$3" -v FILES="$1" '
{ CR = (match($0, "\\r$") > 0 ? "\r" : "") }
/^$/ { next }
/!!FILES!!/ { stop = 2; }
{
if (stop == 0) { print $0 }
if (stop == 2) { stop = 0 }
/!!FILTERS!!/ {
split(FILTERS, filters, "\n");
for (i = 1; filters[i] != ""; i++) {
print filters[i] CR;
}
next;
}
' >> "$ROOT_DIR/projects/$2"
/!!FILES!!/ {
split(FILES, files, "\n");
for (i = 1; files[i] != ""; i++) {
print files[i] CR;
}
next;
}
{
print $0;
}
' > "$ROOT_DIR/projects/$2"
}
safety_check "$ROOT_DIR/source.list"

View File

@@ -405,5 +405,5 @@ generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs140.vcxproj", basesetl
generate basesetfiles, ROOT_DIR & "/projects/basesets_vs140.vcxproj.filters", Null
generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs141.vcxproj", basesetlangs
generate basesetfiles, ROOT_DIR & "/projects/basesets_vs141.vcxproj.filters", Null
generate settingsvcxproj, ROOT_DIR & "/projects/basesets_vs142.vcxproj", settingscommand
generate settingsfiles, ROOT_DIR & "/projects/basesets_vs142.vcxproj.filters", Null
generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs142.vcxproj", basesetlangs
generate basesetfiles, ROOT_DIR & "/projects/basesets_vs142.vcxproj.filters", Null

View File

@@ -107,7 +107,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -230,7 +230,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -410,7 +410,6 @@
<ClCompile Include="..\src\road.cpp" />
<ClCompile Include="..\src\roadstop.cpp" />
<ClCompile Include="..\src\screenshot.cpp" />
<ClCompile Include="..\src\sdl.cpp" />
<ClCompile Include="..\src\settings.cpp" />
<ClCompile Include="..\src\signal.cpp" />
<ClCompile Include="..\src\signs.cpp" />
@@ -623,7 +622,6 @@
<ClInclude Include="..\src\roadveh.h" />
<ClInclude Include="..\src\safeguards.h" />
<ClInclude Include="..\src\screenshot.h" />
<ClInclude Include="..\src\sdl.h" />
<ClInclude Include="..\src\sound\sdl_s.h" />
<ClInclude Include="..\src\video\sdl_v.h" />
<ClInclude Include="..\src\settings_func.h" />

View File

@@ -318,9 +318,6 @@
<ClCompile Include="..\src\screenshot.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\sdl.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\settings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -957,9 +954,6 @@
<ClInclude Include="..\src\screenshot.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\sdl.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\sound\sdl_s.h">
<Filter>Header Files</Filter>
</ClInclude>

View File

@@ -107,7 +107,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -230,7 +230,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>

View File

@@ -107,7 +107,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -230,7 +230,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -410,7 +410,6 @@
<ClCompile Include="..\src\road.cpp" />
<ClCompile Include="..\src\roadstop.cpp" />
<ClCompile Include="..\src\screenshot.cpp" />
<ClCompile Include="..\src\sdl.cpp" />
<ClCompile Include="..\src\settings.cpp" />
<ClCompile Include="..\src\signal.cpp" />
<ClCompile Include="..\src\signs.cpp" />
@@ -623,7 +622,6 @@
<ClInclude Include="..\src\roadveh.h" />
<ClInclude Include="..\src\safeguards.h" />
<ClInclude Include="..\src\screenshot.h" />
<ClInclude Include="..\src\sdl.h" />
<ClInclude Include="..\src\sound\sdl_s.h" />
<ClInclude Include="..\src\video\sdl_v.h" />
<ClInclude Include="..\src\settings_func.h" />

View File

@@ -318,9 +318,6 @@
<ClCompile Include="..\src\screenshot.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\sdl.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\settings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -957,9 +954,6 @@
<ClInclude Include="..\src\screenshot.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\sdl.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\sound\sdl_s.h">
<Filter>Header Files</Filter>
</ClInclude>

View File

@@ -107,7 +107,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -230,7 +230,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>

View File

@@ -107,7 +107,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -230,7 +230,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -410,7 +410,6 @@
<ClCompile Include="..\src\road.cpp" />
<ClCompile Include="..\src\roadstop.cpp" />
<ClCompile Include="..\src\screenshot.cpp" />
<ClCompile Include="..\src\sdl.cpp" />
<ClCompile Include="..\src\settings.cpp" />
<ClCompile Include="..\src\signal.cpp" />
<ClCompile Include="..\src\signs.cpp" />
@@ -623,7 +622,6 @@
<ClInclude Include="..\src\roadveh.h" />
<ClInclude Include="..\src\safeguards.h" />
<ClInclude Include="..\src\screenshot.h" />
<ClInclude Include="..\src\sdl.h" />
<ClInclude Include="..\src\sound\sdl_s.h" />
<ClInclude Include="..\src\video\sdl_v.h" />
<ClInclude Include="..\src\settings_func.h" />

View File

@@ -318,9 +318,6 @@
<ClCompile Include="..\src\screenshot.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\sdl.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\settings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -957,9 +954,6 @@
<ClInclude Include="..\src\screenshot.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\sdl.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\sound\sdl_s.h">
<Filter>Header Files</Filter>
</ClInclude>

View File

@@ -107,7 +107,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
@@ -230,7 +230,7 @@
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>

View File

@@ -71,9 +71,6 @@ rev.cpp
road.cpp
roadstop.cpp
screenshot.cpp
#if SDL
sdl.cpp
#end
settings.cpp
signal.cpp
signs.cpp
@@ -312,7 +309,6 @@ roadstop_base.h
roadveh.h
safeguards.h
screenshot.h
sdl.h
sound/sdl_s.h
video/sdl_v.h
settings_func.h

View File

@@ -32,7 +32,7 @@ public:
START_NEXT_EASY = DAYS_IN_YEAR * 2,
START_NEXT_MEDIUM = DAYS_IN_YEAR,
START_NEXT_HARD = DAYS_IN_YEAR / 2,
START_NEXT_MIN = 0,
START_NEXT_MIN = 1,
START_NEXT_MAX = 3600,
START_NEXT_DEVIATION = 60,
};

View File

@@ -35,6 +35,15 @@ ScriptConfigItem _start_date_config = {
false
};
AIConfig::AIConfig(const AIConfig *config) : ScriptConfig(config)
{
/* Override start_date as per AIConfig::AddRandomDeviation().
* This is necessary because the ScriptConfig constructor will instead call
* ScriptConfig::AddRandomDeviation(). */
int start_date = config->GetSetting("start_date");
this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0);
}
/* static */ AIConfig *AIConfig::GetConfig(CompanyID company, ScriptSettingSource source)
{
AIConfig **config;
@@ -118,14 +127,3 @@ void AIConfig::SetSetting(const char *name, int value)
ScriptConfig::SetSetting(name, value);
}
void AIConfig::AddRandomDeviation()
{
int start_date = this->GetSetting("start_date");
ScriptConfig::AddRandomDeviation();
/* start_date = 0 is a special case, where random deviation does not occur.
* If start_date was not already 0, then a minimum value of 1 must apply. */
this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0);
}

View File

@@ -26,15 +26,12 @@ public:
ScriptConfig()
{}
AIConfig(const AIConfig *config) :
ScriptConfig(config)
{}
AIConfig(const AIConfig *config);
class AIInfo *GetInfo() const;
/* virtual */ int GetSetting(const char *name) const;
/* virtual */ void SetSetting(const char *name, int value);
/* virtual */ void AddRandomDeviation();
/**
* When ever the AI Scanner is reloaded, all infos become invalid. This

View File

@@ -16,6 +16,7 @@
#include "../company_func.h"
#include "../network/network.h"
#include "../window_func.h"
#include "../framerate_type.h"
#include "ai_scanner.hpp"
#include "ai_instance.hpp"
#include "ai_config.hpp"
@@ -79,8 +80,11 @@
const Company *c;
FOR_ALL_COMPANIES(c) {
if (c->is_ai) {
PerformanceMeasurer framerate((PerformanceElement)(PFE_AI0 + c->index));
cur_company.Change(c->index);
c->ai_instance->GameLoop();
} else {
PerformanceMeasurer::SetInactive((PerformanceElement)(PFE_AI0 + c->index));
}
}
cur_company.Restore();
@@ -101,6 +105,7 @@
/* static */ void AI::Stop(CompanyID company)
{
if (_networking && !_network_server) return;
PerformanceMeasurer::SetInactive((PerformanceElement)(PFE_AI0 + company));
Backup<CompanyByte> cur_company(_current_company, company, FILE_LINE);
Company *c = Company::Get(company);

View File

@@ -585,6 +585,8 @@ struct AISettingsWindow : public Window {
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
this->RebuildVisibleSettings();
HideDropDownMenu(this);
DeleteChildWindows(WC_QUERY_STRING);
}
private:
@@ -1282,7 +1284,7 @@ struct AIDebugWindow : public Window {
case WID_AID_RELOAD_TOGGLE:
if (ai_debug_company == OWNER_DEITY) break;
/* First kill the company of the AI, then start a new one. This should start the current AI again */
DoCommandP(0, CCA_DELETE | ai_debug_company << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_DELETE | ai_debug_company << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_NEW_AI | ai_debug_company << 16, 0, CMD_COMPANY_CTRL);
break;

View File

@@ -248,8 +248,9 @@ ScriptInfo *AIInstance::FindLibrary(const char *library, int version)
* @param tile The tile on which the command was executed.
* @param p1 p1 as given to DoCommandPInternal.
* @param p2 p2 as given to DoCommandPInternal.
* @param cmd cmd as given to DoCommandPInternal.
*/
void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
{
/*
* The company might not exist anymore. Check for this.
@@ -260,8 +261,9 @@ void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
const Company *c = Company::GetIfValid(_current_company);
if (c == NULL || c->ai_instance == NULL) return;
c->ai_instance->DoCommandCallback(result, tile, p1, p2);
c->ai_instance->Continue();
if (c->ai_instance->DoCommandCallback(result, tile, p1, p2, cmd)) {
c->ai_instance->Continue();
}
}
CommandCallback *AIInstance::GetDoCommandCallback()

View File

@@ -783,6 +783,7 @@ int GetAircraftFlightLevel(T *v, bool takeoff)
}
template int GetAircraftFlightLevel(DisasterVehicle *v, bool takeoff);
template int GetAircraftFlightLevel(Aircraft *v, bool takeoff);
/**
* Find the entry point to an airport depending on direction which
@@ -2103,7 +2104,19 @@ void UpdateAirplanesOnNewStation(const Station *st)
FOR_ALL_AIRCRAFT(v) {
if (!v->IsNormalAircraft() || v->targetairport != st->index) continue;
assert(v->state == FLYING);
Order *o = &v->current_order;
/* The aircraft is heading to a hangar, but the new station doesn't have one,
* or the aircraft can't land on the new station. Cancel current order. */
if (o->IsType(OT_GOTO_DEPOT) && !(o->GetDepotOrderType() & ODTFB_PART_OF_ORDERS) && o->GetDestination() == st->index &&
(!st->airport.HasHangar() || !CanVehicleUseStation(v, st))) {
o->MakeDummy();
SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP);
}
v->pos = v->previous_pos = AircraftGetEntryPoint(v, ap, rotation);
UpdateAircraftCache(v);
}
/* Heliports don't have a hangar. Invalidate all go to hangar orders from all aircraft. */
if (!st->airport.HasHangar()) RemoveOrderFromAllVehicles(OT_GOTO_DEPOT, st->index, true);
}

View File

@@ -42,7 +42,7 @@ static void ShowBuildAirportPicker(Window *parent);
SpriteID GetCustomAirportSprite(const AirportSpec *as, byte layout);
void CcBuildAirport(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
void CcBuildAirport(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
{
if (result.Failed()) return;

View File

@@ -46,7 +46,7 @@ public:
/** Factory for the SSE4 32 bpp blitter (with palette animation). */
class FBlitter_32bppSSE4_Anim: public BlitterFactory {
public:
FBlitter_32bppSSE4_Anim() : BlitterFactory("32bpp-sse4-anim", "SSE4 Blitter (palette animation)", HasCPUIDFlag(1, 2, 19)) {}
FBlitter_32bppSSE4_Anim() : BlitterFactory("32bpp-sse4-anim", "32bpp SSE4 Blitter (palette animation)", HasCPUIDFlag(1, 2, 19)) {}
/* virtual */ Blitter *CreateInstance() { return new Blitter_32bppSSE4_Anim(); }
};

View File

@@ -57,8 +57,9 @@ typedef GUIList<BuildBridgeData> GUIBridgeList; ///< List of bridges, used in #B
* - p2 = (bit 0- 7) - bridge type (hi bh)
* - p2 = (bit 8-13) - rail type or road types.
* - p2 = (bit 15-16) - transport type.
* @param cmd unused
*/
void CcBuildBridge(const CommandCost &result, TileIndex end_tile, uint32 p1, uint32 p2)
void CcBuildBridge(const CommandCost &result, TileIndex end_tile, uint32 p1, uint32 p2, uint32 cmd)
{
if (result.Failed()) return;
if (_settings_client.sound.confirm) SndPlayTileFx(SND_27_BLACKSMITH_ANVIL, end_tile);

View File

@@ -1438,7 +1438,7 @@ struct BuildVehicleWindow : Window {
this->GenerateBuildList();
this->vscroll->SetCount(this->eng_list.Length());
this->SetWidgetDisabledState(WID_BV_SHOW_HIDE, this->sel_engine == INVALID_ENGINE);
this->SetWidgetsDisabledState(this->sel_engine == INVALID_ENGINE, WID_BV_SHOW_HIDE, WID_BV_BUILD, WID_BV_RENAME, WIDGET_LIST_END);
this->DrawWidgets();

View File

@@ -117,8 +117,9 @@ int32 GetPickupAmount(CargoMonitorID monitor, bool keep_monitoring)
* @param src_type type of \a src.
* @param src index of source.
* @param st station where the cargo is delivered to.
* @param dest industry index where the cargo is delivered to.
*/
void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st)
void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st, IndustryID dest)
{
if (amount == 0) return;
@@ -151,6 +152,7 @@ void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, Sour
/* Industry delivery. */
for (const Industry * const *ip = st->industries_near.Begin(); ip != st->industries_near.End(); ip++) {
if ((*ip)->index != dest) continue;
CargoMonitorID num = EncodeCargoIndustryMonitor(company, cargo_type, (*ip)->index);
CargoMonitorMap::iterator iter = _cargo_deliveries.find(num);
if (iter != _cargo_deliveries.end()) iter->second += amount;

View File

@@ -149,6 +149,6 @@ void ClearCargoPickupMonitoring(CompanyID company = INVALID_OWNER);
void ClearCargoDeliveryMonitoring(CompanyID company = INVALID_OWNER);
int32 GetDeliveryAmount(CargoMonitorID monitor, bool keep_monitoring);
int32 GetPickupAmount(CargoMonitorID monitor, bool keep_monitoring);
void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st);
void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st, IndustryID dest = INVALID_INDUSTRY);
#endif /* CARGOMONITOR_H */

View File

@@ -370,7 +370,7 @@ struct CheatWindow : Window {
default:
/* Take whatever the function returns */
value = ce->proc(value + ((x >= 20 + SETTING_BUTTON_WIDTH / 2) ? 1 : -1), (x >= 10 + this->box_width + SETTING_BUTTON_WIDTH / 2) ? 1 : -1);
value = ce->proc(value + ((x >= 10 + this->box_width + SETTING_BUTTON_WIDTH / 2) ? 1 : -1), (x >= 10 + this->box_width + SETTING_BUTTON_WIDTH / 2) ? 1 : -1);
/* The first cheat (money), doesn't return a different value. */
if (value != oldvalue || btn == CHT_MONEY) this->clicked = btn * 2 + 1 + ((x >= 10 + this->box_width + SETTING_BUTTON_WIDTH / 2) != rtl ? 1 : 0);

View File

@@ -283,7 +283,7 @@ static const Command _command_proc_table[] = {
DEF_CMD(CmdTurnRoadVeh, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_TURN_ROADVEH
DEF_CMD(CmdPause, CMD_SERVER | CMD_NO_EST, CMDT_SERVER_SETTING ), // CMD_PAUSE
DEF_CMD(CmdPause, CMD_SERVER, CMDT_SERVER_SETTING ), // CMD_PAUSE
DEF_CMD(CmdBuyShareInCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_BUY_SHARE_IN_COMPANY
DEF_CMD(CmdSellShareInCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_SELL_SHARE_IN_COMPANY
@@ -307,7 +307,7 @@ static const Command _command_proc_table[] = {
DEF_CMD(CmdChangeBankBalance, CMD_DEITY, CMDT_MONEY_MANAGEMENT ), // CMD_CHANGE_BANK_BALANCE
DEF_CMD(CmdBuildCanal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_CANAL
DEF_CMD(CmdCreateSubsidy, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_SUBSIDY
DEF_CMD(CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID | CMD_NO_EST, CMDT_SERVER_SETTING ), // CMD_COMPANY_CTRL
DEF_CMD(CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID, CMDT_SERVER_SETTING ), // CMD_COMPANY_CTRL
DEF_CMD(CmdCustomNewsItem, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CUSTOM_NEWS_ITEM
DEF_CMD(CmdCreateGoal, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_GOAL
DEF_CMD(CmdRemoveGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_GOAL
@@ -558,7 +558,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac
bool estimate_only = _shift_pressed && IsLocalCompany() &&
!_generating_world &&
!(cmd & CMD_NETWORK_COMMAND) &&
!(GetCommandFlags(cmd) & CMD_NO_EST);
(cmd & CMD_ID_MASK) != CMD_PAUSE;
/* We're only sending the command, so don't do
* fancy things for 'success'. */
@@ -597,7 +597,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac
}
if (!estimate_only && !only_sending && callback != NULL) {
callback(res, tile, p1, p2);
callback(res, tile, p1, p2, cmd);
}
return res.Succeeded();

View File

@@ -395,7 +395,6 @@ enum CommandFlags {
CMD_CLIENT_ID = 0x080, ///< set p2 with the ClientID of the sending client.
CMD_DEITY = 0x100, ///< the command may be executed by COMPANY_DEITY
CMD_STR_CTRL = 0x200, ///< the command's string may contain control strings
CMD_NO_EST = 0x400, ///< the command is never estimated.
};
DECLARE_ENUM_AS_BIT_SET(CommandFlags)
@@ -468,7 +467,7 @@ struct Command {
* @param p1 Additional data of the command
* @see CommandProc
*/
typedef void CommandCallback(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2);
typedef void CommandCallback(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd);
/**
* Structure for buffering the build command when selecting a station to join.

View File

@@ -104,9 +104,12 @@ void SetLocalCompany(CompanyID new_company)
/* company could also be COMPANY_SPECTATOR or OWNER_NONE */
assert(Company::IsValidID(new_company) || new_company == COMPANY_SPECTATOR || new_company == OWNER_NONE);
/* If actually changing to another company, several windows need closing */
bool switching_company = _local_company != new_company;
#ifdef ENABLE_NETWORK
/* Delete the chat window, if you were team chatting. */
InvalidateWindowData(WC_SEND_NETWORK_MSG, DESTTYPE_TEAM, _local_company);
if (switching_company) InvalidateWindowData(WC_SEND_NETWORK_MSG, DESTTYPE_TEAM, _local_company);
#endif
assert(IsLocalCompany());
@@ -114,7 +117,7 @@ void SetLocalCompany(CompanyID new_company)
_current_company = _local_company = new_company;
/* Delete any construction windows... */
DeleteConstructionWindows();
if (switching_company) DeleteConstructionWindows();
/* ... and redraw the whole screen. */
MarkWholeScreenDirty();
@@ -595,10 +598,10 @@ void StartupCompanies()
}
/** Start a new competitor company if possible. */
static bool MaybeStartNewCompany()
static void MaybeStartNewCompany()
{
#ifdef ENABLE_NETWORK
if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return false;
if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return;
#endif /* ENABLE_NETWORK */
Company *c;
@@ -612,10 +615,8 @@ static bool MaybeStartNewCompany()
if (n < (uint)_settings_game.difficulty.max_no_competitors) {
/* Send a command to all clients to start up a new AI.
* Works fine for Multiplayer and Singleplayer */
return DoCommandP(0, CCA_NEW_AI | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_NEW_AI | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL);
}
return false;
}
/** Initialize the pool of companies. */
@@ -716,19 +717,11 @@ void OnTick_Companies()
}
if (_next_competitor_start == 0) {
/* AI::GetStartNextTime() can return 0. */
_next_competitor_start = max(1, AI::GetStartNextTime() * DAY_TICKS);
_next_competitor_start = AI::GetStartNextTime() * DAY_TICKS;
}
if (_game_mode != GM_MENU && AI::CanStartNew() && --_next_competitor_start == 0) {
/* Allow multiple AIs to possibly start in the same tick. */
do {
if (!MaybeStartNewCompany()) break;
/* In networking mode, we can only send a command to start but it
* didn't execute yet, so we cannot loop. */
if (_networking) break;
} while (AI::GetStartNextTime() == 0);
if (AI::CanStartNew() && _game_mode != GM_MENU && --_next_competitor_start == 0) {
MaybeStartNewCompany();
}
_cur_company_tick_index = (_cur_company_tick_index + 1) % MAX_COMPANIES;
@@ -815,7 +808,8 @@ void CompanyAdminRemove(CompanyID company_id, CompanyRemoveReason reason)
* @param flags operation to perform
* @param p1 various functionality
* - bits 0..15: CompanyCtrlAction
* - bits 16..24: CompanyID
* - bits 16..23: CompanyID
* - bits 24..31: CompanyRemoveReason (with CCA_DELETE)
* @param p2 ClientID
* @param text unused
* @return the cost of this operation or an error
@@ -824,9 +818,6 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
{
InvalidateWindowData(WC_COMPANY_LEAGUE, 0, 0);
CompanyID company_id = (CompanyID)GB(p1, 16, 8);
#ifdef ENABLE_NETWORK
ClientID client_id = (ClientID)p2;
#endif /* ENABLE_NETWORK */
switch ((CompanyCtrlAction)GB(p1, 0, 16)) {
case CCA_NEW: { // Create a new company
@@ -836,6 +827,8 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
#ifdef ENABLE_NETWORK
/* Has the network client a correct ClientIndex? */
if (!(flags & DC_EXEC)) return CommandCost();
ClientID client_id = (ClientID)p2;
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
#ifndef DEBUG_DUMP_COMMANDS
/* When replaying the client ID is not a valid client; there
@@ -891,7 +884,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
}
case CCA_DELETE: { // Delete a company
CompanyRemoveReason reason = (CompanyRemoveReason)GB(p2, 0, 2);
CompanyRemoveReason reason = (CompanyRemoveReason)GB(p1, 24, 8);
if (reason >= CRR_END) return CMD_ERROR;
Company *c = Company::GetIfValid(company_id);

View File

@@ -707,7 +707,7 @@ public:
this->BuildGroupList(company);
this->SetRows();
} else {
this->SetSelectedGroup(group);
this->SetSelectedGroup(company, group);
}
this->FinishInitNested(company);
@@ -715,7 +715,7 @@ public:
this->InvalidateData(1);
}
void SetSelectedGroup(GroupID group)
void SetSelectedGroup(CompanyID company, GroupID group)
{
this->RaiseWidget(this->livery_class + WID_SCL_CLASS_GENERAL);
const Group *g = Group::Get(group);
@@ -730,7 +730,7 @@ public:
this->LowerWidget(this->livery_class + WID_SCL_CLASS_GENERAL);
this->groups.ForceRebuild();
this->BuildGroupList((CompanyID)this->window_number);
this->BuildGroupList(company);
this->SetRows();
/* Position scrollbar to selected group */
@@ -1025,9 +1025,15 @@ public:
if (data != -1) {
/* data contains a VehicleType, rebuild list if it displayed */
if (this->livery_class == data + LC_GROUP_RAIL) {
if (!Group::IsValidID(this->sel)) this->sel = INVALID_GROUP;
this->groups.ForceRebuild();
this->BuildGroupList((CompanyID)this->window_number);
this->SetRows();
if (!Group::IsValidID(this->sel)) {
this->sel = INVALID_GROUP;
if (this->groups.Length() > 0) this->sel = this->groups[0]->index;
}
this->SetDirty();
}
return;
@@ -1099,7 +1105,7 @@ void ShowCompanyLiveryWindow(CompanyID company, GroupID group)
if (w == NULL) {
new SelectCompanyLiveryWindow(&_select_company_livery_desc, company, group);
} else if (group != INVALID_GROUP) {
w->SetSelectedGroup(group);
w->SetSelectedGroup(company, group);
}
}

View File

@@ -836,7 +836,7 @@ DEF_CONSOLE_CMD(ConResetCompany)
}
/* It is safe to remove this company */
DoCommandP(0, CCA_DELETE | index << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_DELETE | index << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL);
IConsolePrint(CC_DEFAULT, "Company deleted.");
return true;
@@ -1213,7 +1213,7 @@ DEF_CONSOLE_CMD(ConReloadAI)
}
/* First kill the company of the AI, then start a new one. This should start the current AI again */
DoCommandP(0, CCA_DELETE | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_DELETE | company_id << 16 | CRR_MANUAL << 24, 0,CMD_COMPANY_CTRL);
DoCommandP(0, CCA_NEW_AI | company_id << 16, 0, CMD_COMPANY_CTRL);
IConsolePrint(CC_DEFAULT, "AI reloaded.");
@@ -1250,7 +1250,7 @@ DEF_CONSOLE_CMD(ConStopAI)
}
/* Now kill the company of the AI. */
DoCommandP(0, CCA_DELETE | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
DoCommandP(0, CCA_DELETE | company_id << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL);
IConsolePrint(CC_DEFAULT, "AI stopped, company deleted.");
return true;

View File

@@ -12,18 +12,20 @@
#ifndef ENUM_TYPE_HPP
#define ENUM_TYPE_HPP
#include <type_traits>
/** Some enums need to have allowed incrementing (i.e. StationClassID) */
#define DECLARE_POSTFIX_INCREMENT(type) \
inline type operator ++(type& e, int) \
#define DECLARE_POSTFIX_INCREMENT(enum_type) \
inline enum_type operator ++(enum_type& e, int) \
{ \
type e_org = e; \
e = (type)((int)e + 1); \
enum_type e_org = e; \
e = (enum_type)((std::underlying_type<enum_type>::type)e + 1); \
return e_org; \
} \
inline type operator --(type& e, int) \
inline enum_type operator --(enum_type& e, int) \
{ \
type e_org = e; \
e = (type)((int)e - 1); \
enum_type e_org = e; \
e = (enum_type)((std::underlying_type<enum_type>::type)e - 1); \
return e_org; \
}
@@ -31,13 +33,13 @@
/** Operators to allow to work with enum as with type safe bit set in C++ */
# define DECLARE_ENUM_AS_BIT_SET(mask_t) \
inline mask_t operator | (mask_t m1, mask_t m2) {return (mask_t)((int)m1 | m2);} \
inline mask_t operator & (mask_t m1, mask_t m2) {return (mask_t)((int)m1 & m2);} \
inline mask_t operator ^ (mask_t m1, mask_t m2) {return (mask_t)((int)m1 ^ m2);} \
inline mask_t operator | (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 | m2);} \
inline mask_t operator & (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 & m2);} \
inline mask_t operator ^ (mask_t m1, mask_t m2) {return (mask_t)((std::underlying_type<mask_t>::type)m1 ^ m2);} \
inline mask_t& operator |= (mask_t& m1, mask_t m2) {m1 = m1 | m2; return m1;} \
inline mask_t& operator &= (mask_t& m1, mask_t m2) {m1 = m1 & m2; return m1;} \
inline mask_t& operator ^= (mask_t& m1, mask_t m2) {m1 = m1 ^ m2; return m1;} \
inline mask_t operator ~(mask_t m) {return (mask_t)(~(int)m);}
inline mask_t operator ~(mask_t m) {return (mask_t)(~(std::underlying_type<mask_t>::type)m);}
/**

View File

@@ -152,18 +152,20 @@ DEFINE_POOL_METHOD(void *)::GetNew(size_t size)
* @param size size of item
* @param index index of item
* @return pointer to allocated item
* @note usererror() on failure! (index out of range or already used)
* @note SlErrorCorruptFmt() on failure! (index out of range or already used)
*/
DEFINE_POOL_METHOD(void *)::GetNew(size_t size, size_t index)
{
extern void NORETURN SlErrorCorruptFmt(const char *format, ...);
if (index >= Tmax_size) {
usererror("failed loading savegame: %s index " PRINTF_SIZE " out of range (" PRINTF_SIZE ")", this->name, index, Tmax_size);
SlErrorCorruptFmt("%s index " PRINTF_SIZE " out of range (" PRINTF_SIZE ")", this->name, index, Tmax_size);
}
if (index >= this->size) this->ResizeFor(index);
if (this->data[index] != NULL) {
usererror("failed loading savegame: %s index " PRINTF_SIZE " already in use", this->name, index);
SlErrorCorruptFmt("%s index " PRINTF_SIZE " already in use", this->name, index);
}
return this->AllocateItem(size, index);

View File

@@ -62,7 +62,6 @@
#include <lzo/lzo1x.h>
#endif
#ifdef WITH_SDL
# include "sdl.h"
# include <SDL.h>
#endif /* WITH_SDL */
#ifdef WITH_ZLIB
@@ -195,7 +194,7 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const
FontCache::Get(FS_MONO)->GetFontName()
);
buffer += seprintf(buffer, last, "AI Configuration (local: %i):\n", (int)_local_company);
buffer += seprintf(buffer, last, "AI Configuration (local: %i) (current: %i):\n", (int)_local_company, (int)_current_company);
const Company *c;
FOR_ALL_COMPANIES(c) {
if (c->ai_info == NULL) {
@@ -268,14 +267,8 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const
#endif /* WITH_PNG */
#ifdef WITH_SDL
#ifdef DYNAMICALLY_LOADED_SDL
if (SDL_CALL SDL_Linked_Version != NULL) {
#else
{
#endif
const SDL_version *v = SDL_CALL SDL_Linked_Version();
buffer += seprintf(buffer, last, " SDL: %d.%d.%d\n", v->major, v->minor, v->patch);
}
const SDL_version *v = SDL_Linked_Version();
buffer += seprintf(buffer, last, " SDL: %d.%d.%d\n", v->major, v->minor, v->patch);
#endif /* WITH_SDL */
#ifdef WITH_ZLIB
@@ -310,7 +303,7 @@ char *CrashLog::LogGamelog(char *buffer, const char *last) const
}
/**
* Writes any recent news messages to the buffer.
* Writes up to 32 recent news messages to the buffer, with the most recent first.
* @param buffer The begin where to write at.
* @param last The last position in the buffer to write to.
* @return the position of the \c '\0' character after the buffer.
@@ -319,7 +312,8 @@ char *CrashLog::LogRecentNews(char *buffer, const char *last) const
{
buffer += seprintf(buffer, last, "Recent news messages:\n");
for (NewsItem *news = _oldest_news; news != NULL; news = news->next) {
int i = 0;
for (NewsItem *news = _latest_news; i < 32 && news != NULL; news = news->prev, i++) {
YearMonthDay ymd;
ConvertDateToYMD(news->date, &ymd);
buffer += seprintf(buffer, last, "(%i-%02i-%02i) StringID: %u, Type: %u, Ref1: %u, %u, Ref2: %u, %u\n",

View File

@@ -117,8 +117,9 @@ extern void DepotSortList(VehicleList *list);
* @param tile unused
* @param p1 unused
* @param p2 unused
* @param cmd unused
*/
void CcCloneVehicle(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
void CcCloneVehicle(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
{
if (result.Failed()) return;

View File

@@ -40,7 +40,7 @@ static void ShowBuildDocksDepotPicker(Window *parent);
static Axis _ship_depot_direction;
void CcBuildDocks(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
void CcBuildDocks(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
{
if (result.Failed()) return;
@@ -48,7 +48,7 @@ void CcBuildDocks(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p
if (!_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
}
void CcPlaySound_SPLAT_WATER(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
void CcPlaySound_SPLAT_WATER(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
{
if (result.Succeeded() && _settings_client.sound.confirm) SndPlayTileFx(SND_02_SPLAT_WATER, tile);
}

View File

@@ -260,7 +260,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update)
/* Skip the total */
if (i == SCORE_TOTAL) continue;
/* Check the score */
s = Clamp(_score_part[owner][i], 0, _score_info[i].needed) * _score_info[i].score / _score_info[i].needed;
s = Clamp<int64>(_score_part[owner][i], 0, _score_info[i].needed) * _score_info[i].score / _score_info[i].needed;
score += s;
total_score += _score_info[i].score;
}
@@ -572,8 +572,10 @@ static void CompanyCheckBankrupt(Company *c)
{
/* If the company has money again, it does not go bankrupt */
if (c->money - c->current_loan >= -_economy.max_loan) {
int previous_months_of_bankruptcy = CeilDiv(c->months_of_bankruptcy, 3);
c->months_of_bankruptcy = 0;
c->bankrupt_asked = 0;
if (previous_months_of_bankruptcy != 0) CompanyAdminUpdate(c);
return;
}
@@ -642,10 +644,15 @@ static void CompanyCheckBankrupt(Company *c)
* that changing the current company is okay. In case of single
* player we are sure (the above check) that we are not the local
* company and thus we won't be moved. */
if (!_networking || _network_server) DoCommandP(0, CCA_DELETE | (c->index << 16), CRR_BANKRUPT, CMD_COMPANY_CTRL);
if (!_networking || _network_server) {
DoCommandP(0, CCA_DELETE | (c->index << 16) | (CRR_BANKRUPT << 24), 0, CMD_COMPANY_CTRL);
return;
}
break;
}
}
if (CeilDiv(c->months_of_bankruptcy, 3) != CeilDiv(c->months_of_bankruptcy - 1, 3)) CompanyAdminUpdate(c);
}
/**
@@ -1030,9 +1037,10 @@ static SmallIndustryList _cargo_delivery_destinations;
* @param cargo_type Type of cargo delivered
* @param num_pieces Amount of cargo delivered
* @param source The source of the cargo
* @param company The company delivering the cargo
* @return actually accepted pieces of cargo
*/
static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint num_pieces, IndustryID source)
static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint num_pieces, IndustryID source, CompanyID company)
{
/* Find the nearest industrytile to the station sign inside the catchment area, whose industry accepts the cargo.
* This fails in three cases:
@@ -1065,6 +1073,9 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n
ind->last_cargo_accepted_at[cargo_index] = _date;
num_pieces -= amount;
accepted += amount;
/* Update the cargo monitor. */
AddCargoDelivery(cargo_type, company, amount, ST_INDUSTRY, source, st, ind->index);
}
return accepted;
@@ -1090,30 +1101,30 @@ static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID dest, Ti
Station *st = Station::Get(dest);
/* Give the goods to the industry. */
uint accepted = DeliverGoodsToIndustry(st, cargo_type, num_pieces, src_type == ST_INDUSTRY ? src : INVALID_INDUSTRY);
uint accepted_ind = DeliverGoodsToIndustry(st, cargo_type, num_pieces, src_type == ST_INDUSTRY ? src : INVALID_INDUSTRY, company->index);
/* If this cargo type is always accepted, accept all */
if (HasBit(st->always_accepted, cargo_type)) accepted = num_pieces;
uint accepted_total = HasBit(st->always_accepted, cargo_type) ? num_pieces : accepted_ind;
/* Update station statistics */
if (accepted > 0) {
if (accepted_total > 0) {
SetBit(st->goods[cargo_type].status, GoodsEntry::GES_EVER_ACCEPTED);
SetBit(st->goods[cargo_type].status, GoodsEntry::GES_CURRENT_MONTH);
SetBit(st->goods[cargo_type].status, GoodsEntry::GES_ACCEPTED_BIGTICK);
}
/* Update company statistics */
company->cur_economy.delivered_cargo[cargo_type] += accepted;
company->cur_economy.delivered_cargo[cargo_type] += accepted_total;
/* Increase town's counter for town effects */
const CargoSpec *cs = CargoSpec::Get(cargo_type);
st->town->received[cs->town_effect].new_act += accepted;
st->town->received[cs->town_effect].new_act += accepted_total;
/* Determine profit */
Money profit = GetTransportedGoodsIncome(accepted, DistanceManhattan(source_tile, st->xy), days_in_transit, cargo_type);
Money profit = GetTransportedGoodsIncome(accepted_total, DistanceManhattan(source_tile, st->xy), days_in_transit, cargo_type);
/* Update the cargo monitor. */
AddCargoDelivery(cargo_type, company->index, accepted, src_type, src, st);
AddCargoDelivery(cargo_type, company->index, accepted_total - accepted_ind, src_type, src, st);
/* Modify profit if a subsidy is in effect */
if (CheckSubsidised(cargo_type, company->index, src_type, src, st)) {
@@ -1518,6 +1529,17 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station
cur_company.Restore();
}
/**
* Test whether a vehicle can load cargo at a station even if exclusive transport rights are present.
* @param st Station with cargo waiting to be loaded.
* @param v Vehicle loading the cargo.
* @return true when a vehicle can load the cargo.
*/
static bool MayLoadUnderExclusiveRights(const Station *st, const Vehicle *v)
{
return st->owner != OWNER_NONE || st->town->exclusive_counter == 0 || st->town->exclusivity == v->owner;
}
struct ReserveCargoAction {
Station *st;
StationIDStack *next_station;
@@ -1527,7 +1549,7 @@ struct ReserveCargoAction {
bool operator()(Vehicle *v)
{
if (v->cargo_cap > v->cargo.RemainingCount()) {
if (v->cargo_cap > v->cargo.RemainingCount() && MayLoadUnderExclusiveRights(st, v)) {
st->goods[v->cargo_type].cargo.Reserve(v->cargo_cap - v->cargo.RemainingCount(),
&v->cargo, st->xy, *next_station);
}
@@ -1751,7 +1773,7 @@ static void LoadUnloadVehicle(Vehicle *front)
/* If there's goods waiting at the station, and the vehicle
* has capacity for it, load it on the vehicle. */
uint cap_left = v->cargo_cap - v->cargo.StoredCount();
if (cap_left > 0 && (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0)) {
if (cap_left > 0 && (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0) && MayLoadUnderExclusiveRights(st, v)) {
if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
if (_settings_game.order.gradual_loading) cap_left = min(cap_left, GetLoadAmount(v));

View File

@@ -652,7 +652,14 @@ void StartupOneEngine(Engine *e, Date aging_date)
/* Don't randomise the start-date in the first two years after gamestart to ensure availability
* of engines in early starting games.
* Note: TTDP uses fixed 1922 */
SavedRandomSeeds saved_seeds;
SaveRandomSeeds(&saved_seeds);
SetRandomSeed(_settings_game.game_creation.generation_seed ^
ei->base_intro ^
e->type ^
e->GetGRFID());
uint32 r = Random();
e->intro_date = ei->base_intro <= ConvertYMDToDate(_settings_game.game_creation.starting_year + 2, 0, 1) ? ei->base_intro : (Date)GB(r, 0, 9) + ei->base_intro;
if (e->intro_date <= _date) {
e->age = (aging_date - e->intro_date) >> 5;
@@ -672,6 +679,7 @@ void StartupOneEngine(Engine *e, Date aging_date)
e->reliability_spd_dec = ei->decay_speed << 2;
RestoreRandomSeeds(saved_seeds);
CalcEngineReliability(e);
/* prevent certain engines from ever appearing. */

View File

@@ -56,7 +56,7 @@ int CDECL CompareFiosItems(const FiosItem *da, const FiosItem *db)
if ((_savegame_sort_order & SORT_BY_NAME) == 0 && da->mtime != db->mtime) {
r = da->mtime < db->mtime ? -1 : 1;
} else {
r = strcasecmp(da->title, db->title);
r = strnatcmp(da->title, db->title);
}
if (_savegame_sort_order & SORT_DESCENDING) r = -r;
@@ -319,13 +319,29 @@ bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, cons
FiosItem *fios = file_list.Append();
#ifdef _WIN32
struct _stat sb;
if (_tstat(OTTD2FS(filename), &sb) == 0) {
// Retrieve the file modified date using GetFileTime rather than stat to work around an obscure MSVC bug that affects Windows XP
HANDLE fh = CreateFile(OTTD2FS(filename), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
if (fh != INVALID_HANDLE_VALUE) {
FILETIME ft;
ULARGE_INTEGER ft_int64;
if (GetFileTime(fh, nullptr, nullptr, &ft) != 0) {
ft_int64.HighPart = ft.dwHighDateTime;
ft_int64.LowPart = ft.dwLowDateTime;
// Convert from hectonanoseconds since 01/01/1601 to seconds since 01/01/1970
fios->mtime = ft_int64.QuadPart / 10000000ULL - 11644473600ULL;
} else {
fios->mtime = 0;
}
CloseHandle(fh);
#else
struct stat sb;
if (stat(filename, &sb) == 0) {
#endif
fios->mtime = sb.st_mtime;
#endif
} else {
fios->mtime = 0;
}

View File

@@ -437,12 +437,15 @@ public:
GfxFillRect(r.left + 1, r.top + 1, r.right, r.bottom, PC_BLACK);
uint y = r.top + WD_FRAMERECT_TOP;
for (uint pos = this->vscroll->GetPosition(); pos < this->fios_items.Length(); pos++) {
if (!this->fios_items_shown[pos]) {
uint scroll_pos = this->vscroll->GetPosition();
for (uint row = 0; row < this->fios_items.Length(); row++) {
if (!this->fios_items_shown[row]) {
/* The current item is filtered out : we do not show it */
scroll_pos++;
continue;
}
const FiosItem *item = this->fios_items.Get(pos);
if (row < scroll_pos) continue;
const FiosItem *item = this->fios_items.Get(row);
if (item == this->selected) {
GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_DARK_BLUE);
@@ -577,6 +580,7 @@ public:
if (_savegame_sort_dirty) {
_savegame_sort_dirty = false;
SortSaveGameList(this->fios_items);
this->OnInvalidateData(SLIWD_FILTER_CHANGES);
}
this->DrawWidgets();

View File

@@ -184,12 +184,12 @@ uint SpriteFontCache::GetGlyphWidth(GlyphID key)
{
SpriteID sprite = this->GetUnicodeGlyph(key);
if (sprite == 0) sprite = this->GetUnicodeGlyph('?');
return SpriteExists(sprite) ? GetSprite(sprite, ST_FONT)->width + ScaleGUITrad(this->fs != FS_NORMAL ? 1 : 0) : 0;
return SpriteExists(sprite) ? GetSprite(sprite, ST_FONT)->width + ScaleFontTrad(this->fs != FS_NORMAL ? 1 : 0) : 0;
}
int SpriteFontCache::GetHeight() const
{
return ScaleGUITrad(this->height);
return ScaleFontTrad(this->height);
}
bool SpriteFontCache::GetDrawGlyphShadow()
@@ -282,16 +282,18 @@ 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(_default_font_height[this->fs]);
int scaled_height = ScaleFontTrad(_default_font_height[this->fs]);
pixels = scaled_height;
TT_Header *head = (TT_Header *)FT_Get_Sfnt_Table(this->face, ft_sfnt_head);
if (head != NULL) {
/* 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(_default_font_height[FS_SMALL]);
int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]);
pixels = Clamp(min(head->Lowest_Rec_PPEM, 20) + diff, scaled_height, MAX_FONT_SIZE);
}
} else {
pixels = ScaleFontTrad(pixels);
}
this->used_size = pixels;
@@ -419,6 +421,9 @@ FreeTypeFontCache::~FreeTypeFontCache()
*/
void FreeTypeFontCache::ClearFontCache()
{
/* Font scaling might have changed, determine font size anew if it was automatically selected. */
if (this->face != NULL) this->SetFontSize(this->fs, this->face, this->req_size);
if (this->glyph_to_sprite == NULL) return;
for (int i = 0; i < 256; i++) {
@@ -436,9 +441,6 @@ void FreeTypeFontCache::ClearFontCache()
this->glyph_to_sprite = NULL;
Layouter::ResetFontCache(this->fs);
/* GUI scaling might have changed, determine font size anew if it was automatically selected. */
if (this->face != NULL && this->req_size == 0) this->SetFontSize(this->fs, this->face, this->req_size);
}
FreeTypeFontCache::GlyphEntry *FreeTypeFontCache::GetGlyphPtr(GlyphID key)

View File

@@ -13,13 +13,18 @@
#include <chrono>
#include "gfx_func.h"
#include "window_gui.h"
#include "window_func.h"
#include "table/sprites.h"
#include "string_func.h"
#include "strings_func.h"
#include "console_func.h"
#include "console_type.h"
#include "guitimer_func.h"
#include "company_base.h"
#include "ai/ai_info.hpp"
#include "widgets/framerate_widget.h"
#include "safeguards.h"
/**
@@ -183,6 +188,23 @@ namespace {
PerformanceData(1), // PFE_ACC_DRAWWORLD
PerformanceData(60.0), // PFE_VIDEO
PerformanceData(1000.0 * 8192 / 44100), // PFE_SOUND
PerformanceData(1), // PFE_ALLSCRIPTS
PerformanceData(1), // PFE_GAMESCRIPT
PerformanceData(1), // PFE_AI0 ...
PerformanceData(1),
PerformanceData(1),
PerformanceData(1),
PerformanceData(1),
PerformanceData(1),
PerformanceData(1),
PerformanceData(1),
PerformanceData(1),
PerformanceData(1),
PerformanceData(1),
PerformanceData(1),
PerformanceData(1),
PerformanceData(1),
PerformanceData(1), // PFE_AI14
};
}
@@ -215,6 +237,15 @@ PerformanceMeasurer::PerformanceMeasurer(PerformanceElement elem)
/** Finish a cycle of a measured element and store the measurement taken. */
PerformanceMeasurer::~PerformanceMeasurer()
{
if (this->elem == PFE_ALLSCRIPTS) {
/* Hack to not record scripts total when no scripts are active */
bool any_active = _pf_data[PFE_GAMESCRIPT].num_valid > 0;
for (uint e = PFE_AI0; e < PFE_MAX; e++) any_active |= _pf_data[e].num_valid > 0;
if (!any_active) {
PerformanceMeasurer::SetInactive(PFE_ALLSCRIPTS);
return;
}
}
_pf_data[this->elem].Add(this->start_time, GetPerformanceTimer());
}
@@ -224,11 +255,19 @@ void PerformanceMeasurer::SetExpectedRate(double rate)
_pf_data[this->elem].expected_rate = rate;
}
/** Mark a performance element as not currently in use. */
/* static */ void PerformanceMeasurer::SetInactive(PerformanceElement elem)
{
_pf_data[elem].num_valid = 0;
_pf_data[elem].next_index = 0;
_pf_data[elem].prev_index = 0;
}
/**
* Indicate that a cycle of "pause" where no processing occurs.
* @param elem The element not currently being processed
*/
void PerformanceMeasurer::Paused(PerformanceElement elem)
/* static */ void PerformanceMeasurer::Paused(PerformanceElement elem)
{
_pf_data[elem].AddPause(GetPerformanceTimer());
}
@@ -266,6 +305,44 @@ void PerformanceAccumulator::Reset(PerformanceElement elem)
void ShowFrametimeGraphWindow(PerformanceElement elem);
static const PerformanceElement DISPLAY_ORDER_PFE[PFE_MAX] = {
PFE_GAMELOOP,
PFE_GL_ECONOMY,
PFE_GL_TRAINS,
PFE_GL_ROADVEHS,
PFE_GL_SHIPS,
PFE_GL_AIRCRAFT,
PFE_GL_LANDSCAPE,
PFE_ALLSCRIPTS,
PFE_GAMESCRIPT,
PFE_AI0,
PFE_AI1,
PFE_AI2,
PFE_AI3,
PFE_AI4,
PFE_AI5,
PFE_AI6,
PFE_AI7,
PFE_AI8,
PFE_AI9,
PFE_AI10,
PFE_AI11,
PFE_AI12,
PFE_AI13,
PFE_AI14,
PFE_GL_LINKGRAPH,
PFE_DRAWING,
PFE_DRAWWORLD,
PFE_VIDEO,
PFE_SOUND,
};
static const char * GetAIName(int ai_index)
{
if (!Company::IsValidAiID(ai_index)) return "";
return Company::Get(ai_index)->ai_info->GetName();
}
/** @hideinitializer */
static const NWidgetPart _framerate_window_widgets[] = {
NWidget(NWID_HORIZONTAL),
@@ -281,14 +358,20 @@ static const NWidgetPart _framerate_window_widgets[] = {
NWidget(WWT_TEXT, COLOUR_GREY, WID_FRW_RATE_FACTOR), SetDataTip(STR_FRAMERATE_SPEED_FACTOR, STR_FRAMERATE_SPEED_FACTOR_TOOLTIP),
EndContainer(),
EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(NWID_VERTICAL), SetPadding(6), SetPIP(0, 3, 0),
NWidget(NWID_HORIZONTAL), SetPIP(0, 6, 0),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_NAMES),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_CURRENT),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_AVERAGE),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(NWID_VERTICAL), SetPadding(6), SetPIP(0, 3, 0),
NWidget(NWID_HORIZONTAL), SetPIP(0, 6, 0),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_NAMES), SetScrollbar(WID_FRW_SCROLLBAR),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_CURRENT), SetScrollbar(WID_FRW_SCROLLBAR),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_AVERAGE), SetScrollbar(WID_FRW_SCROLLBAR),
EndContainer(),
NWidget(WWT_TEXT, COLOUR_GREY, WID_FRW_INFO_DATA_POINTS), SetDataTip(STR_FRAMERATE_DATA_POINTS, 0x0),
EndContainer(),
NWidget(WWT_TEXT, COLOUR_GREY, WID_FRW_INFO_DATA_POINTS), SetDataTip(STR_FRAMERATE_DATA_POINTS, 0x0),
EndContainer(),
NWidget(NWID_VERTICAL),
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_FRW_SCROLLBAR),
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
EndContainer(),
EndContainer(),
};
@@ -296,6 +379,8 @@ static const NWidgetPart _framerate_window_widgets[] = {
struct FramerateWindow : Window {
bool small;
GUITimer next_update;
int num_active;
int num_displayed;
struct CachedDecimal {
StringID strid;
@@ -332,14 +417,19 @@ struct FramerateWindow : Window {
CachedDecimal times_shortterm[PFE_MAX]; ///< cached short term average times
CachedDecimal times_longterm[PFE_MAX]; ///< cached long term average times
static const int VSPACING = 3; ///< space between column heading and values
static const int VSPACING = 3; ///< space between column heading and values
static const int MIN_ELEMENTS = 5; ///< smallest number of elements to display
FramerateWindow(WindowDesc *desc, WindowNumber number) : Window(desc)
{
this->InitNested(number);
this->small = this->IsShaded();
this->UpdateData();
this->num_displayed = this->num_active;
this->next_update.SetInterval(100);
/* Window is always initialised to MIN_ELEMENTS height, resize to contain num_displayed */
ResizeWindow(this, 0, (max(MIN_ELEMENTS, this->num_displayed) - MIN_ELEMENTS) * FONT_HEIGHT_NORMAL);
}
virtual void OnRealtimeTick(uint delta_ms)
@@ -369,9 +459,19 @@ struct FramerateWindow : Window {
this->rate_drawing.SetRate(_pf_data[PFE_DRAWING].GetRate(), _pf_data[PFE_DRAWING].expected_rate);
int new_active = 0;
for (PerformanceElement e = PFE_FIRST; e < PFE_MAX; e++) {
this->times_shortterm[e].SetTime(_pf_data[e].GetAverageDurationMilliseconds(8), MILLISECONDS_PER_TICK);
this->times_longterm[e].SetTime(_pf_data[e].GetAverageDurationMilliseconds(NUM_FRAMERATE_POINTS), MILLISECONDS_PER_TICK);
if (_pf_data[e].num_valid > 0) new_active++;
}
if (new_active != this->num_active) {
this->num_active = new_active;
Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
sb->SetCount(this->num_active);
sb->SetCapacity(min(this->num_displayed, this->num_active));
this->ReInit();
}
}
@@ -425,11 +525,20 @@ struct FramerateWindow : Window {
break;
case WID_FRW_TIMES_NAMES: {
int linecount = PFE_MAX - PFE_FIRST;
size->width = 0;
size->height = FONT_HEIGHT_NORMAL * (linecount + 1) + VSPACING;
for (int line = 0; line < linecount; line++) {
Dimension line_size = GetStringBoundingBox(STR_FRAMERATE_GAMELOOP + line);
size->height = FONT_HEIGHT_NORMAL + VSPACING + MIN_ELEMENTS * FONT_HEIGHT_NORMAL;
resize->width = 0;
resize->height = FONT_HEIGHT_NORMAL;
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
if (_pf_data[e].num_valid == 0) continue;
Dimension line_size;
if (e < PFE_AI0) {
line_size = GetStringBoundingBox(STR_FRAMERATE_GAMELOOP + e);
} else {
SetDParam(0, e - PFE_AI0 + 1);
SetDParamStr(1, GetAIName(e - PFE_AI0));
line_size = GetStringBoundingBox(STR_FRAMERATE_AI);
}
size->width = max(size->width, line_size.width);
}
break;
@@ -437,13 +546,14 @@ struct FramerateWindow : Window {
case WID_FRW_TIMES_CURRENT:
case WID_FRW_TIMES_AVERAGE: {
int linecount = PFE_MAX - PFE_FIRST;
*size = GetStringBoundingBox(STR_FRAMERATE_CURRENT + (widget - WID_FRW_TIMES_CURRENT));
SetDParam(0, 999999);
SetDParam(1, 2);
Dimension item_size = GetStringBoundingBox(STR_FRAMERATE_MS_GOOD);
size->width = max(size->width, item_size.width);
size->height += FONT_HEIGHT_NORMAL * linecount + VSPACING;
size->height += FONT_HEIGHT_NORMAL * MIN_ELEMENTS + VSPACING;
resize->width = 0;
resize->height = FONT_HEIGHT_NORMAL;
break;
}
}
@@ -452,14 +562,23 @@ struct FramerateWindow : Window {
/** Render a column of formatted average durations */
void DrawElementTimesColumn(const Rect &r, StringID heading_str, const CachedDecimal *values) const
{
const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
uint16 skip = sb->GetPosition();
int drawable = this->num_displayed;
int y = r.top;
DrawString(r.left, r.right, y, heading_str, TC_FROMSTRING, SA_CENTER, true);
y += FONT_HEIGHT_NORMAL + VSPACING;
for (PerformanceElement e = PFE_FIRST; e < PFE_MAX; e++) {
values[e].InsertDParams(0);
DrawString(r.left, r.right, y, values[e].strid, TC_FROMSTRING, SA_RIGHT);
y += FONT_HEIGHT_NORMAL;
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
if (_pf_data[e].num_valid == 0) continue;
if (skip > 0) {
skip--;
} else {
values[e].InsertDParams(0);
DrawString(r.left, r.right, y, values[e].strid, TC_FROMSTRING, SA_RIGHT);
y += FONT_HEIGHT_NORMAL;
drawable--;
if (drawable == 0) break;
}
}
}
@@ -468,11 +587,26 @@ struct FramerateWindow : Window {
switch (widget) {
case WID_FRW_TIMES_NAMES: {
/* Render a column of titles for performance element names */
int linecount = PFE_MAX - PFE_FIRST;
const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
uint16 skip = sb->GetPosition();
int drawable = this->num_displayed;
int y = r.top + FONT_HEIGHT_NORMAL + VSPACING; // first line contains headings in the value columns
for (int i = 0; i < linecount; i++) {
DrawString(r.left, r.right, y, STR_FRAMERATE_GAMELOOP + i, TC_FROMSTRING, SA_LEFT);
y += FONT_HEIGHT_NORMAL;
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
if (_pf_data[e].num_valid == 0) continue;
if (skip > 0) {
skip--;
} else {
if (e < PFE_AI0) {
DrawString(r.left, r.right, y, STR_FRAMERATE_GAMELOOP + e, TC_FROMSTRING, SA_LEFT);
} else {
SetDParam(0, e - PFE_AI0 + 1);
SetDParamStr(1, GetAIName(e - PFE_AI0));
DrawString(r.left, r.right, y, STR_FRAMERATE_AI, TC_FROMSTRING, SA_LEFT);
}
y += FONT_HEIGHT_NORMAL;
drawable--;
if (drawable == 0) break;
}
}
break;
}
@@ -494,19 +628,34 @@ struct FramerateWindow : Window {
case WID_FRW_TIMES_CURRENT:
case WID_FRW_TIMES_AVERAGE: {
/* Open time graph windows when clicking detail measurement lines */
int line = this->GetRowFromWidget(pt.y, widget, VSPACING, FONT_HEIGHT_NORMAL);
if (line > 0) {
line -= 1;
ShowFrametimeGraphWindow((PerformanceElement)line);
const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR);
int line = sb->GetScrolledRowFromWidget(pt.y - FONT_HEIGHT_NORMAL - VSPACING, this, widget, VSPACING, FONT_HEIGHT_NORMAL);
if (line != INT_MAX) {
line++;
/* Find the visible line that was clicked */
for (PerformanceElement e : DISPLAY_ORDER_PFE) {
if (_pf_data[e].num_valid > 0) line--;
if (line == 0) {
ShowFrametimeGraphWindow(e);
break;
}
}
}
break;
}
}
}
virtual void OnResize()
{
auto *wid = this->GetWidget<NWidgetResizeBase>(WID_FRW_TIMES_NAMES);
this->num_displayed = (wid->current_y - wid->min_y - VSPACING) / FONT_HEIGHT_NORMAL - 1; // subtract 1 for headings
this->GetScrollbar(WID_FRW_SCROLLBAR)->SetCapacity(this->num_displayed);
}
};
static WindowDesc _framerate_display_desc(
WDP_AUTO, "framerate_display", 60, 40,
WDP_AUTO, "framerate_display", 0, 0,
WC_FRAMERATE_DISPLAY, WC_NONE,
0,
_framerate_window_widgets, lengthof(_framerate_window_widgets)
@@ -549,7 +698,13 @@ struct FrametimeGraphWindow : Window {
{
switch (widget) {
case WID_FGW_CAPTION:
SetDParam(0, STR_FRAMETIME_CAPTION_GAMELOOP + this->element);
if (this->element < PFE_AI0) {
SetDParam(0, STR_FRAMETIME_CAPTION_GAMELOOP + this->element);
} else {
SetDParam(0, STR_FRAMETIME_CAPTION_AI);
SetDParam(1, this->element - PFE_AI0 + 1);
SetDParamStr(2, GetAIName(this->element - PFE_AI0));
}
break;
}
}
@@ -829,7 +984,10 @@ void ConPrintFramerate()
" Viewport drawing",
"Video output",
"Sound mixing",
"AI/GS scripts total",
"Game script",
};
char ai_name_buf[128];
static const PerformanceElement rate_elements[] = { PFE_GAMELOOP, PFE_DRAWING, PFE_VIDEO };
@@ -848,8 +1006,15 @@ void ConPrintFramerate()
for (PerformanceElement e = PFE_FIRST; e < PFE_MAX; e++) {
auto &pf = _pf_data[e];
if (pf.num_valid == 0) continue;
const char *name;
if (e < PFE_AI0) {
name = MEASUREMENT_NAMES[e];
} else {
seprintf(ai_name_buf, lastof(ai_name_buf), "AI %d %s", e - PFE_AI0 + 1, GetAIName(e - PFE_AI0)),
name = ai_name_buf;
}
IConsolePrintF(TC_LIGHT_BLUE, "%s times: %.2fms %.2fms %.2fms",
MEASUREMENT_NAMES[e],
name,
pf.GetAverageDurationMilliseconds(count1),
pf.GetAverageDurationMilliseconds(count2),
pf.GetAverageDurationMilliseconds(count3));

View File

@@ -60,6 +60,23 @@ enum PerformanceElement {
PFE_DRAWWORLD, ///< Time spent drawing world viewports in GUI
PFE_VIDEO, ///< Speed of painting drawn video buffer.
PFE_SOUND, ///< Speed of mixing audio samples
PFE_ALLSCRIPTS, ///< Sum of all GS/AI scripts
PFE_GAMESCRIPT, ///< Game script execution
PFE_AI0, ///< AI execution for player slot 1
PFE_AI1, ///< AI execution for player slot 2
PFE_AI2, ///< AI execution for player slot 3
PFE_AI3, ///< AI execution for player slot 4
PFE_AI4, ///< AI execution for player slot 5
PFE_AI5, ///< AI execution for player slot 6
PFE_AI6, ///< AI execution for player slot 7
PFE_AI7, ///< AI execution for player slot 8
PFE_AI8, ///< AI execution for player slot 9
PFE_AI9, ///< AI execution for player slot 10
PFE_AI10, ///< AI execution for player slot 11
PFE_AI11, ///< AI execution for player slot 12
PFE_AI12, ///< AI execution for player slot 13
PFE_AI13, ///< AI execution for player slot 14
PFE_AI14, ///< AI execution for player slot 15
PFE_MAX, ///< End of enum, must be last.
};
DECLARE_POSTFIX_INCREMENT(PerformanceElement)
@@ -81,6 +98,7 @@ public:
PerformanceMeasurer(PerformanceElement elem);
~PerformanceMeasurer();
void SetExpectedRate(double rate);
static void SetInactive(PerformanceElement elem);
static void Paused(PerformanceElement elem);
};

View File

@@ -15,6 +15,7 @@
#include "../company_func.h"
#include "../network/network.h"
#include "../window_func.h"
#include "../framerate_type.h"
#include "game.hpp"
#include "game_scanner.hpp"
#include "game_config.hpp"
@@ -31,8 +32,16 @@
/* static */ void Game::GameLoop()
{
if (_networking && !_network_server) return;
if (Game::instance == NULL) return;
if (_networking && !_network_server) {
PerformanceMeasurer::SetInactive(PFE_GAMESCRIPT);
return;
}
if (Game::instance == NULL) {
PerformanceMeasurer::SetInactive(PFE_GAMESCRIPT);
return;
}
PerformanceMeasurer framerate(PFE_GAMESCRIPT);
Game::frame_counter++;

View File

@@ -255,11 +255,13 @@ void GameInstance::Died()
* @param tile The tile on which the command was executed.
* @param p1 p1 as given to DoCommandPInternal.
* @param p2 p2 as given to DoCommandPInternal.
* @param cmd cmd as given to DoCommandPInternal.
*/
void CcGame(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
void CcGame(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
{
Game::GetGameInstance()->DoCommandCallback(result, tile, p1, p2);
Game::GetGameInstance()->Continue();
if (Game::GetGameInstance()->DoCommandCallback(result, tile, p1, p2, cmd)) {
Game::GetGameInstance()->Continue();
}
}
CommandCallback *GameInstance::GetDoCommandCallback()

View File

@@ -308,7 +308,7 @@ GameStrings *LoadTranslations()
/** Compile the language. */
void GameStrings::Compile()
{
StringData data(1);
StringData data(32);
StringListReader master_reader(data, this->raw_strings[0], true, false);
master_reader.ParseFile();
if (_errors != 0) throw std::exception();

View File

@@ -58,6 +58,7 @@ static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode,
static ReusableBuffer<uint8> _cursor_backup;
ZoomLevelByte _gui_zoom; ///< GUI Zoom level
ZoomLevelByte _font_zoom; ///< Font Zoom level
/**
* The rect for repaint.
@@ -1130,13 +1131,14 @@ TextColour GetContrastColour(uint8 background, uint8 threshold)
*/
void LoadStringWidthTable(bool monospace)
{
ClearFontCache();
for (FontSize fs = monospace ? FS_MONO : FS_BEGIN; fs < (monospace ? FS_END : FS_MONO); fs++) {
for (uint i = 0; i != 224; i++) {
_stringwidth_table[fs][i] = GetGlyphWidth(fs, i + 32);
}
}
ClearFontCache();
ReInitAllWindows();
}

View File

@@ -208,7 +208,7 @@ public:
LEErrorCode status = LE_NO_ERROR;
/* ParagraphLayout does not copy "buff", so it must stay valid.
* "runs" is copied according to the ICU source, but the documentation does not specify anything, so this might break somewhen. */
icu::ParagraphLayout *p = new icu::ParagraphLayout(buff, length, &runs, NULL, NULL, NULL, _current_text_dir == TD_RTL ? UBIDI_DEFAULT_RTL : UBIDI_DEFAULT_LTR, false, status);
icu::ParagraphLayout *p = new icu::ParagraphLayout(buff, length, &runs, NULL, NULL, NULL, _current_text_dir == TD_RTL ? 1 : 0, false, status);
if (status != LE_NO_ERROR) {
delete p;
return NULL;

View File

@@ -19,6 +19,7 @@
#include <map>
#include <string>
#include <stack>
#include <vector>
#ifdef WITH_ICU_LAYOUT
#include "layout/ParagraphLayout.h"
@@ -35,7 +36,7 @@ struct FontState {
FontSize fontsize; ///< Current font size.
TextColour cur_colour; ///< Current text colour.
std::stack<TextColour> colour_stack; ///< Stack of colours to assist with colour switching.
std::stack<TextColour, std::vector<TextColour>> colour_stack; ///< Stack of colours to assist with colour switching.
FontState() : fontsize(FS_END), cur_colour(TC_INVALID) {}
FontState(TextColour colour, FontSize fontsize) : fontsize(fontsize), cur_colour(colour) {}

View File

@@ -236,10 +236,11 @@ CommandCost CmdSetGoalCompleted(TileIndex tile, DoCommandFlag flags, uint32 p1,
* @param flags type of operation
* @param p1 various bitstuffed elements
* - p1 = (bit 0 - 15) - Unique ID to use for this question.
* - p1 = (bit 16 - 23) - Company or client for which this question is.
* - p1 = (bit 24 - 25) - Question type.
* - p1 = (bit 31) - Question target: 0 - company, 1 - client.
* @param p2 Buttons of the question.
* - p1 = (bit 16 - 31) - Company or client for which this question is.
* @param p2 various bitstuffed elements
* - p2 = (bit 0 - 17) - Buttons of the question.
* - p2 = (bit 29 - 30) - Question type.
* - p2 = (bit 31) - Question target: 0 - company, 1 - client.
* @param text Text of the question.
* @return the cost of this operation or an error
*/
@@ -248,36 +249,38 @@ CommandCost CmdGoalQuestion(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
uint16 uniqueid = (GoalType)GB(p1, 0, 16);
CompanyID company = (CompanyID)GB(p1, 16, 8);
#ifdef ENABLE_NETWORK
ClientIndex client = (ClientIndex)GB(p1, 16, 8);
ClientID client = (ClientID)GB(p1, 16, 16);
#endif
byte type = GB(p1, 24, 2);
bool is_client = HasBit(p1, 31);
assert_compile(GOAL_QUESTION_BUTTON_COUNT < 29);
uint32 button_mask = GB(p2, 0, GOAL_QUESTION_BUTTON_COUNT);
byte type = GB(p2, 29, 2);
bool is_client = HasBit(p2, 31);
if (_current_company != OWNER_DEITY) return CMD_ERROR;
if (StrEmpty(text)) return CMD_ERROR;
if (is_client) {
#ifdef ENABLE_NETWORK
if (!NetworkClientInfo::IsValidID(client)) return CMD_ERROR;
if (NetworkClientInfo::GetByClientID(client) == nullptr) return CMD_ERROR;
#else
return CMD_ERROR;
#endif
} else {
if (company != INVALID_COMPANY && !Company::IsValidID(company)) return CMD_ERROR;
}
if (CountBits(p2) < 1 || CountBits(p2) > 3) return CMD_ERROR;
if (p2 >= (1 << GOAL_QUESTION_BUTTON_COUNT)) return CMD_ERROR;
if (CountBits(button_mask) < 1 || CountBits(button_mask) > 3) return CMD_ERROR;
if (type >= GOAL_QUESTION_TYPE_COUNT) return CMD_ERROR;
if (flags & DC_EXEC) {
if (is_client) {
#ifdef ENABLE_NETWORK
if (NetworkClientInfo::Get(client)->client_id != _network_own_client_id) return CommandCost();
if (client != _network_own_client_id) return CommandCost();
#endif
} else {
if (company == INVALID_COMPANY && !Company::IsValidID(_local_company)) return CommandCost();
if (company != INVALID_COMPANY && company != _local_company) return CommandCost();
}
ShowGoalQuestion(uniqueid, type, p2, text);
ShowGoalQuestion(uniqueid, type, button_mask, text);
}
return CommandCost();

View File

@@ -869,35 +869,26 @@ void ShowCompanyValueGraph()
/*****************/
struct PaymentRatesGraphWindow : BaseGraphWindow {
bool first_init; ///< This value is true until the first initialization of the window has finished.
uint line_height; ///< Pixel height of each cargo type row.
Scrollbar *vscroll; ///< Cargo list scrollbar.
PaymentRatesGraphWindow(WindowDesc *desc, WindowNumber window_number) :
BaseGraphWindow(desc, WID_CPR_GRAPH, STR_JUST_CURRENCY_SHORT)
{
this->first_init = true;
this->num_on_x_axis = 20;
this->num_vert_lines = 20;
this->month = 0xFF;
this->x_values_start = 10;
this->x_values_increment = 10;
this->CreateNestedTree();
this->vscroll = this->GetScrollbar(WID_CPR_MATRIX_SCROLLBAR);
this->vscroll->SetCount(_sorted_standard_cargo_specs_size);
/* Initialise the dataset */
this->OnHundredthTick();
this->InitNested(window_number);
this->UpdateLoweredWidgets();
}
virtual void OnInit()
{
/* UpdateLoweredWidgets needs to be called after a language or NewGRF change, but it can't be called before
* InitNested is done. On the first init these functions are called in the correct order by the constructor. */
if (!this->first_init) {
/* Initialise the dataset */
this->OnHundredthTick();
this->UpdateLoweredWidgets();
}
this->first_init = false;
this->FinishInitNested(window_number);
}
void UpdateExcludedData()
@@ -912,53 +903,64 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
}
}
void UpdateLoweredWidgets()
{
for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) {
this->SetWidgetLoweredState(WID_CPR_CARGO_FIRST + i, !HasBit(this->excluded_data, i));
}
}
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
{
if (widget < WID_CPR_CARGO_FIRST) {
if (widget != WID_CPR_MATRIX) {
BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize);
return;
}
const CargoSpec *cs = _sorted_cargo_specs[widget - WID_CPR_CARGO_FIRST];
SetDParam(0, cs->name);
Dimension d = GetStringBoundingBox(STR_GRAPH_CARGO_PAYMENT_CARGO);
d.width += 14; // colour field
d.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
*size = maxdim(d, *size);
const CargoSpec *cs;
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
SetDParam(0, cs->name);
Dimension d = GetStringBoundingBox(STR_GRAPH_CARGO_PAYMENT_CARGO);
d.width += 14; // colour field
d.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
*size = maxdim(d, *size);
}
this->line_height = size->height;
size->height = this->line_height * 11; /* Default number of cargo types in most climates. */
resize->width = 0;
resize->height = this->line_height;
}
virtual void DrawWidget(const Rect &r, int widget) const
{
if (widget < WID_CPR_CARGO_FIRST) {
if (widget != WID_CPR_MATRIX) {
BaseGraphWindow::DrawWidget(r, widget);
return;
}
const CargoSpec *cs = _sorted_cargo_specs[widget - WID_CPR_CARGO_FIRST];
bool rtl = _current_text_dir == TD_RTL;
/* Since the buttons have no text, no images,
* both the text and the coloured box have to be manually painted.
* clk_dif will move one pixel down and one pixel to the right
* when the button is clicked */
byte clk_dif = this->IsWidgetLowered(widget) ? 1 : 0;
int x = r.left + WD_FRAMERECT_LEFT;
int y = r.top;
int rect_x = clk_dif + (rtl ? r.right - 12 : r.left + WD_FRAMERECT_LEFT);
int pos = this->vscroll->GetPosition();
int max = pos + this->vscroll->GetCapacity();
GfxFillRect(rect_x, y + clk_dif, rect_x + 8, y + 5 + clk_dif, PC_BLACK);
GfxFillRect(rect_x + 1, y + 1 + clk_dif, rect_x + 7, y + 4 + clk_dif, cs->legend_colour);
SetDParam(0, cs->name);
DrawString(rtl ? r.left : x + 14 + clk_dif, (rtl ? r.right - 14 + clk_dif : r.right), y + clk_dif, STR_GRAPH_CARGO_PAYMENT_CARGO);
const CargoSpec *cs;
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
if (pos-- > 0) continue;
if (--max < 0) break;
bool lowered = !HasBit(_legend_excluded_cargo, cs->Index());
/* Redraw box if lowered */
if (lowered) DrawFrameRect(r.left, y, r.right, y + this->line_height - 1, COLOUR_ORANGE, lowered ? FR_LOWERED : FR_NONE);
byte clk_dif = lowered ? 1 : 0;
int rect_x = clk_dif + (rtl ? r.right - 12 : r.left + WD_FRAMERECT_LEFT);
GfxFillRect(rect_x, y + clk_dif, rect_x + 8, y + 5 + clk_dif, PC_BLACK);
GfxFillRect(rect_x + 1, y + 1 + clk_dif, rect_x + 7, y + 4 + clk_dif, cs->legend_colour);
SetDParam(0, cs->name);
DrawString(rtl ? r.left : x + 14 + clk_dif, (rtl ? r.right - 14 + clk_dif : r.right), y + clk_dif, STR_GRAPH_CARGO_PAYMENT_CARGO);
y += this->line_height;
}
}
virtual void OnClick(Point pt, int widget, int click_count)
@@ -968,7 +970,6 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
/* Remove all cargoes from the excluded lists. */
_legend_excluded_cargo = 0;
this->excluded_data = 0;
this->UpdateLoweredWidgets();
this->SetDirty();
break;
@@ -981,23 +982,33 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
SetBit(this->excluded_data, i);
i++;
}
this->UpdateLoweredWidgets();
this->SetDirty();
break;
}
default:
if (widget >= WID_CPR_CARGO_FIRST) {
int i = widget - WID_CPR_CARGO_FIRST;
ToggleBit(_legend_excluded_cargo, _sorted_cargo_specs[i]->Index());
this->ToggleWidgetLoweredState(widget);
case WID_CPR_MATRIX: {
uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_CPR_MATRIX, 0, this->line_height);
if (row >= this->vscroll->GetCount()) return;
const CargoSpec *cs;
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
if (row-- > 0) continue;
ToggleBit(_legend_excluded_cargo, cs->Index());
this->UpdateExcludedData();
this->SetDirty();
break;
}
break;
}
}
}
virtual void OnResize()
{
this->vscroll->SetCapacityFromWidget(this, WID_CPR_MATRIX);
}
virtual void OnGameTick()
{
/* Override default OnGameTick */
@@ -1031,23 +1042,6 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
}
};
/** Construct the row containing the digit keys. */
static NWidgetBase *MakeCargoButtons(int *biggest_index)
{
NWidgetVertical *ver = new NWidgetVertical;
for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) {
NWidgetBackground *leaf = new NWidgetBackground(WWT_PANEL, COLOUR_ORANGE, WID_CPR_CARGO_FIRST + i, NULL);
leaf->tool_tip = STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO;
leaf->SetFill(1, 0);
leaf->SetLowered(true);
ver->Add(leaf);
}
*biggest_index = WID_CPR_CARGO_FIRST + _sorted_standard_cargo_specs_size - 1;
return ver;
}
static const NWidgetPart _nested_cargo_payment_rates_widgets[] = {
NWidget(NWID_HORIZONTAL),
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
@@ -1065,12 +1059,15 @@ static const NWidgetPart _nested_cargo_payment_rates_widgets[] = {
NWidget(NWID_HORIZONTAL),
NWidget(WWT_EMPTY, COLOUR_GREY, WID_CPR_GRAPH), SetMinimalSize(495, 0), SetFill(1, 1), SetResize(1, 1),
NWidget(NWID_VERTICAL),
NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 0), SetResize(0, 1),
NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 1),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0),
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0),
NWidget(NWID_SPACER), SetMinimalSize(0, 4),
NWidgetFunction(MakeCargoButtons),
NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 1), SetResize(0, 1),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_MATRIX, COLOUR_ORANGE, WID_CPR_MATRIX), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR),
NWidget(NWID_VSCROLLBAR, COLOUR_ORANGE, WID_CPR_MATRIX_SCROLLBAR),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 1),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(0, 1), SetResize(0, 1),
EndContainer(),

View File

@@ -311,7 +311,7 @@ Group::~Group()
* @param tile unused
* @param flags type of operation
* @param p1 vehicle type
* @param p2 unused
* @param p2 parent groupid
* @param text unused
* @return the cost of this operation or an error
*/
@@ -322,15 +322,27 @@ CommandCost CmdCreateGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
if (!Group::CanAllocateItem()) return CMD_ERROR;
const Group *pg = Group::GetIfValid(GB(p2, 0, 16));
if (pg != NULL) {
if (pg->owner != _current_company) return CMD_ERROR;
if (pg->vehicle_type != vt) return CMD_ERROR;
}
if (flags & DC_EXEC) {
Group *g = new Group(_current_company);
g->replace_protection = false;
g->vehicle_type = vt;
g->parent = INVALID_GROUP;
const Company *c = Company::Get(_current_company);
g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
if (pg == NULL) {
const Company *c = Company::Get(_current_company);
g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
} else {
g->parent = pg->index;
g->livery.colour1 = pg->livery.colour1;
g->livery.colour2 = pg->livery.colour2;
}
_new_group_id = g->index;
@@ -396,17 +408,6 @@ CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
return CommandCost();
}
static bool IsUniqueGroupNameForVehicleType(const char *name, VehicleType type)
{
const Group *g;
FOR_ALL_GROUPS(g) {
if (g->name != NULL && g->vehicle_type == type && strcmp(g->name, name) == 0) return false;
}
return true;
}
/**
* Alter a group
* @param tile unused
@@ -430,7 +431,6 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
if (!reset) {
if (Utf8StringLength(text) >= MAX_LENGTH_GROUP_NAME_CHARS) return CMD_ERROR;
if (!IsUniqueGroupNameForVehicleType(text, g->vehicle_type)) return_cmd_error(STR_ERROR_NAME_MUST_BE_UNIQUE);
}
if (flags & DC_EXEC) {
@@ -536,7 +536,7 @@ CommandCost CmdAddVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, u
if (new_g == NEW_GROUP) {
/* Create new group. */
CommandCost ret = CmdCreateGroup(0, flags, v->type, 0, NULL);
CommandCost ret = CmdCreateGroup(0, flags, v->type, INVALID_GROUP, NULL);
if (ret.Failed()) return ret;
new_g = _new_group_id;

View File

@@ -687,7 +687,7 @@ public:
}
case WID_GL_CREATE_GROUP: { // Create a new group
DoCommandP(0, this->vli.vtype, 0, CMD_CREATE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_CREATE), CcCreateGroup);
DoCommandP(0, this->vli.vtype, this->vli.index, CMD_CREATE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_CREATE), CcCreateGroup);
break;
}
@@ -989,9 +989,10 @@ static inline VehicleGroupWindow *FindVehicleGroupWindow(VehicleType vt, Owner o
* @param tile Unused.
* @param p1 Vehicle type.
* @param p2 Unused.
* @param cmd Unused.
* @see CmdCreateGroup
*/
void CcCreateGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
void CcCreateGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
{
if (result.Failed()) return;
assert(p1 <= VEH_AIRCRAFT);
@@ -1006,13 +1007,14 @@ void CcCreateGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32
* @param tile Unused.
* @param p1 Unused.
* @param p2 Bit 0-19: Vehicle ID.
* @param cmd Unused.
*/
void CcAddVehicleNewGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
void CcAddVehicleNewGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
{
if (result.Failed()) return;
assert(Vehicle::IsValidID(GB(p2, 0, 20)));
CcCreateGroup(result, 0, Vehicle::Get(GB(p2, 0, 20))->type, 0);
CcCreateGroup(result, 0, Vehicle::Get(GB(p2, 0, 20))->type, 0, cmd);
}
/**

View File

@@ -22,6 +22,7 @@
#include "company_base.h"
#include "strings_func.h"
#include "hotkeys.h"
#include "zoom_func.h"
#include "widgets/highscore_widget.h"
@@ -132,7 +133,7 @@ struct EndGameWindow : EndGameHighScoreBaseWindow {
virtual void OnPaint()
{
this->SetupHighScoreEndWindow();
Point pt = this->GetTopLeft(640, 480);
Point pt = this->GetTopLeft(ScaleGUITrad(640), ScaleGUITrad(480));
const Company *c = Company::GetIfValid(_local_company);
if (c == NULL) return;
@@ -143,11 +144,11 @@ struct EndGameWindow : EndGameHighScoreBaseWindow {
SetDParam(0, c->index);
SetDParam(1, c->index);
SetDParam(2, EndGameGetPerformanceTitleFromValue(c->old_economy[0].performance_history));
DrawStringMultiLine(pt.x + 15, pt.x + 640 - 25, pt.y + 90, pt.y + 160, STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS, TC_FROMSTRING, SA_CENTER);
DrawStringMultiLine(pt.x + ScaleGUITrad(15), pt.x + ScaleGUITrad(640) - ScaleGUITrad(25), pt.y + ScaleGUITrad(90), pt.y + ScaleGUITrad(160), STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS, TC_FROMSTRING, SA_CENTER);
} else {
SetDParam(0, c->index);
SetDParam(1, EndGameGetPerformanceTitleFromValue(c->old_economy[0].performance_history));
DrawStringMultiLine(pt.x + 36, pt.x + 640, pt.y + 140, pt.y + 206, STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS, TC_FROMSTRING, SA_CENTER);
DrawStringMultiLine(pt.x + ScaleGUITrad(36), pt.x + ScaleGUITrad(640), pt.y + ScaleGUITrad(140), pt.y + ScaleGUITrad(206), STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS, TC_FROMSTRING, SA_CENTER);
}
}
};
@@ -182,24 +183,24 @@ struct HighScoreWindow : EndGameHighScoreBaseWindow {
const HighScore *hs = _highscore_table[this->window_number];
this->SetupHighScoreEndWindow();
Point pt = this->GetTopLeft(640, 480);
Point pt = this->GetTopLeft(ScaleGUITrad(640), ScaleGUITrad(480));
SetDParam(0, ORIGINAL_END_YEAR);
DrawStringMultiLine(pt.x + 70, pt.x + 570, pt.y, pt.y + 140, !_networking ? STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED : STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME, TC_FROMSTRING, SA_CENTER);
DrawStringMultiLine(pt.x + ScaleGUITrad(70), pt.x + ScaleGUITrad(570), pt.y, pt.y + ScaleGUITrad(140), !_networking ? STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED : STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME, TC_FROMSTRING, SA_CENTER);
/* Draw Highscore peepz */
for (uint8 i = 0; i < lengthof(_highscore_table[0]); i++) {
SetDParam(0, i + 1);
DrawString(pt.x + 40, pt.x + 600, pt.y + 140 + (i * 55), STR_HIGHSCORE_POSITION);
DrawString(pt.x + ScaleGUITrad(40), pt.x + ScaleGUITrad(600), pt.y + ScaleGUITrad(140 + i * 55), STR_HIGHSCORE_POSITION);
if (hs[i].company[0] != '\0') {
TextColour colour = (this->rank == i) ? TC_RED : TC_BLACK; // draw new highscore in red
SetDParamStr(0, hs[i].company);
DrawString(pt.x + 71, pt.x + 569, pt.y + 140 + (i * 55), STR_JUST_BIG_RAW_STRING, colour);
DrawString(pt.x + ScaleGUITrad(71), pt.x + ScaleGUITrad(569), pt.y + ScaleGUITrad(140 + i * 55), STR_JUST_BIG_RAW_STRING, colour);
SetDParam(0, hs[i].title);
SetDParam(1, hs[i].score);
DrawString(pt.x + 71, pt.x + 569, pt.y + 140 + FONT_HEIGHT_LARGE + (i * 55), STR_HIGHSCORE_STATS, colour);
DrawString(pt.x + ScaleGUITrad(71), pt.x + ScaleGUITrad(569), pt.y + ScaleGUITrad(140) + FONT_HEIGHT_LARGE + ScaleGUITrad(i * 55), STR_HIGHSCORE_STATS, colour);
}
}
}

View File

@@ -1719,8 +1719,16 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type,
}
if (_generating_world) {
if (HasBit(indspec->callback_mask, CBM_IND_PRODUCTION_256_TICKS)) {
IndustryProductionCallback(i, 1);
for (size_t ci = 0; ci < lengthof(i->last_month_production); ci++) {
i->last_month_production[ci] = i->produced_cargo_waiting[ci] * 8;
i->produced_cargo_waiting[ci] = 0;
}
}
for (size_t ci = 0; ci < lengthof(i->last_month_production); ci++) {
i->last_month_production[ci] = i->production_rate[ci] * 8;
i->last_month_production[ci] += i->production_rate[ci] * 8;
}
}

View File

@@ -222,8 +222,9 @@ void SortIndustryTypes()
* @param tile Tile where the industry is placed.
* @param p1 Additional data of the #CMD_BUILD_INDUSTRY command.
* @param p2 Additional data of the #CMD_BUILD_INDUSTRY command.
* @param cmd Unused.
*/
void CcBuildIndustry(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
void CcBuildIndustry(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
{
if (result.Succeeded()) return;
@@ -2753,12 +2754,12 @@ struct IndustryCargoesWindow : public Window {
}
}
virtual void OnHover(Point pt, int widget)
bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond)
{
if (widget != WID_IC_PANEL) return;
if (widget != WID_IC_PANEL) return false;
Point fieldxy, xy;
if (!CalculatePositionInWidget(pt, &fieldxy, &xy)) return;
if (!CalculatePositionInWidget(pt, &fieldxy, &xy)) return false;
const CargoesField *fld = this->fields[fieldxy.y].columns + fieldxy.x;
CargoID cid = INVALID_CARGO;
@@ -2777,9 +2778,9 @@ struct IndustryCargoesWindow : public Window {
case CFT_INDUSTRY:
if (fld->u.industry.ind_type < NUM_INDUSTRYTYPES && (this->ind_cargo >= NUM_INDUSTRYTYPES || fieldxy.x != 2)) {
GuiShowTooltips(this, STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP, 0, NULL, TCC_HOVER);
GuiShowTooltips(this, STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP, 0, NULL, close_cond);
}
return;
return true;
default:
break;
@@ -2788,8 +2789,11 @@ struct IndustryCargoesWindow : public Window {
const CargoSpec *csp = CargoSpec::Get(cid);
uint64 params[5];
params[0] = csp->name;
GuiShowTooltips(this, STR_INDUSTRY_CARGOES_CARGO_TOOLTIP, 1, params, TCC_HOVER);
GuiShowTooltips(this, STR_INDUSTRY_CARGOES_CARGO_TOOLTIP, 1, params, close_cond);
return true;
}
return false;
}
virtual void OnResize()

View File

@@ -1063,6 +1063,9 @@ static bool MakeLake(TileIndex tile, void *user_data)
TileIndex t2 = tile + TileOffsByDiagDir(d);
if (IsWaterTile(t2)) {
MakeRiver(tile, Random());
/* Remove desert directly around the river tile. */
TileIndex t = tile;
CircularTileSearch(&t, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL);
return false;
}
}
@@ -1134,7 +1137,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current)
if (!IsWaterTile(tile)) {
MakeRiver(tile, Random());
/* Remove desert directly around the river tile. */
CircularTileSearch(&tile, 5, RiverModifyDesertZone, NULL);
CircularTileSearch(&tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL);
}
}
}
@@ -1245,6 +1248,9 @@ static bool FlowRiver(TileIndex spring, TileIndex begin)
DistanceManhattan(spring, lakeCenter) > _settings_game.game_creation.min_river_length) {
end = lakeCenter;
MakeRiver(lakeCenter, Random());
/* Remove desert directly around the river tile. */
CircularTileSearch(&lakeCenter, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL);
lakeCenter = end;
uint range = RandomRange(8) + 3;
CircularTileSearch(&lakeCenter, range, MakeLake, &height);
/* Call the search a second time so artefacts from going circular in one direction get (mostly) hidden. */

View File

@@ -985,6 +985,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normaal
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dubbel groote
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad grootte
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis-grafikastel
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kies die basis-grafikastel stel om te gebruik
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} verlore / korrupte ler{P "" s}
@@ -2062,9 +2064,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Verskaff
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Maatskappy is beskerm. Voer wagwoord in
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Klient Lys
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Toeskou
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nuwe maatskapy
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient Lys
STR_NETWORK_COMPANY_LIST_SPECTATE :Toeskou
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nuwe maatskapy
# Network client list
STR_NETWORK_CLIENTLIST_KICK :Skop
@@ -2079,7 +2081,6 @@ STR_NETWORK_CLIENT :Klient
STR_NETWORK_SPECTATORS :Aanskouers
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Sleutel die bedrag geld in wat u wil gee
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Toeskouer
# Network set password
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Moenie die ingesleutelde wagwoord bewaar nie

View File

@@ -282,7 +282,7 @@ STR_SORT_BY_TIMETABLE_DELAY :تاخير جد
STR_SORT_BY_FACILITY :نوع المحطة
STR_SORT_BY_RATING_MAX :اعلى نسبة شحن
STR_SORT_BY_RATING_MIN :اقل نسبة شحن
STR_SORT_BY_ENGINE_ID :نوع المحرك (قياسي(
STR_SORT_BY_ENGINE_ID :نوع المحرك (قياسي)
STR_SORT_BY_COST :التكلفة
STR_SORT_BY_POWER :الطاقة
STR_SORT_BY_TRACTIVE_EFFORT :قوة الجذب
@@ -946,6 +946,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :تقريب عا
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :تقريب ×2
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :تقريب ×4
STR_GAME_OPTIONS_BASE_GRF :{BLACK} الواجهة الرسومية الاساسية
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK} اختر مجموعة الواجهة الرسومية
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ملف مفقود او غير صالح
@@ -1145,7 +1147,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :الكثافة
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :إختر مقدار الصناعات التي يجب تكوينها وعلى اي مستوى يجب ان تكون خلال اللعبة
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :ارتفاع خط الثلج: {STRING}
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :تحكم على اي ارتفاع يبدأ نزول الثلج في المناطق القطبية,تؤثر الثلوج على مستوى تطور القطاع الصناعي ونمو المدن
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :خشونة التضاريس (صفر التكوين فقط ) :({STRING}
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :خشونة التضاريس: {STRING}
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis only)إختر تكرار الهضبات: الاراض المستويه تحتوي على البضع منها,هضبات موزعه عرضيا اكثر,الاراض الوعرة تحتوي الكثير من الهضاب,التي من الممكن ان تكون متكررة
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :ناعم جدا
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :ناعم
@@ -1726,9 +1728,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}الخا
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}الشركه محميه. من فضلك ادخل كلمه المرور
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}قائمة العملاء
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}شاهد
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}شركة جديدة
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :قائمة العملاء
STR_NETWORK_COMPANY_LIST_SPECTATE :شاهد
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :شركة جديدة
# Network client list
STR_NETWORK_CLIENTLIST_KICK :اطرد
@@ -1944,7 +1946,7 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :بناء الس
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}بناء سكة حديد
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}بناء سكة القطار باستخدام البناء التلقائي
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}بناء ورشة قطارات (لصيانة و شراء القطارات).
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}بناء ورشة قطارات (لصيانة و شراء القطارات)
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}غير السكة الى نقطة عبور
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}بناء محطة قطار. مفتاح كنترول يسمح بضم المحطات
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}بناء إشارات السكك الحديدية.
@@ -2026,7 +2028,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}بناء
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}بناء الطرق باستخدام النظام الآلي
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}بناء سكة القطار باستخدام النظام الآلي
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}بناء ورشة صيانة لعربات الطرق (لشراء و صيانة العربات).
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}بناء ورشة لصيانة عربات الترام (لشراء و صيانة عربات الترام).
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}بناء ورشة لصيانة عربات الترام (لشراء و صيانة عربات الترام)
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}بناء محطة باصات
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}بناء محطة ركاب ترام.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}بناء محطة تحميل عربات. مفتاح كنترول يسمح بمجاورة المحطات.
@@ -2588,7 +2590,8 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}ادخل
# Town directory window
STR_TOWN_DIRECTORY_CAPTION :{WHITE}مدن/ بلدات
STR_TOWN_DIRECTORY_NONE :{ORANGE}-بدون-
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ) {COMMA})
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{RLE}{TOWN}{BLACK} {RLM}({COMMA})
STR_TOWN_DIRECTORY_CITY :{ORANGE}{RLE}{TOWN}{YELLOW} (مدينة){BLACK} {RLM}({COMMA})
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}اسم المدينة - اضغط على الاسم لتوسيط الشاشة عليها. اضغط + كنترول لفتح شاشة عرض جديدة للضاحية.
STR_TOWN_POPULATION :{BLACK}سكان العالم: {COMMA}
@@ -2676,7 +2679,7 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO
STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT}
STR_STATION_LIST_NONE :{YELLOW}- بدون -
STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}اختر جميع المرافق
STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}اختر كل انواع الشحن (حتى غير المنتظرة(
STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}اختر كل انواع الشحن (حتى غير المنتظرة)
STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}لا يوجد اي شحنة منتظرة
# Station view window
@@ -2895,7 +2898,7 @@ STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}السر
STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}السرعة في القناة/النهر: {GOLD}{VELOCITY}
STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}تكلفة التشغيل: {GOLD}{CURRENCY_LONG}/ سنة
STR_PURCHASE_INFO_CAPACITY :{BLACK}السعة: {GOLD}{CARGO_LONG} {STRING}
STR_PURCHASE_INFO_REFITTABLE :)قابل لتغيير(
STR_PURCHASE_INFO_REFITTABLE :(قابل لتغيي)
STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}تصميم: {GOLD}{NUM}{BLACK} العمر الافتراضي: {GOLD}{COMMA} سنة
STR_PURCHASE_INFO_RELIABILITY :{BLACK}الاعتمادية القصوى: {GOLD}{COMMA}%
STR_PURCHASE_INFO_COST :{BLACK}التكلفة: {GOLD}{CURRENCY_LONG}
@@ -3191,7 +3194,7 @@ STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK} عرض
STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}السعة: {LTBLUE}
# Vehicle refit
STR_REFIT_CAPTION :{WHITE}{VEHICLE} )تغيير(
STR_REFIT_CAPTION :{WHITE}{VEHICLE} (تغيير)
STR_REFIT_TITLE :{GOLD}اختر نوع الحمولة ...
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO_LONG}{}{BLACK}تكلفة التغيير: {RED}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}تكلفة اعادة التهيئة: {RED}{CURRENCY_LONG}
@@ -3413,7 +3416,7 @@ STR_TIMETABLE_RESET_LATENESS :{BLACK}اعد
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}عدل وقت التاخير للعداد حتى تصل المركبة في الوقت المحدد
STR_TIMETABLE_AUTOFILL :{BLACK}تهيئة تلقائية
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}املأ الجدولة تلقائيا بقيم الرحلة التالية (مفتاح كنترول لمحاولة ابقائ وقت الانتظار).
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}مفتاح كنترول لمحاولة ابقائ وقت الانتظار (املأ الجدولة تلقائيا بقيم الرحلة التالية)
STR_TIMETABLE_EXPECTED :{BLACK}متوقع
STR_TIMETABLE_SCHEDULED :{BLACK}مجدول

View File

@@ -972,6 +972,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normala
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Tamaina doblea
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Tamaina laukoitza
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafiko basea markatu
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Aukeratu erabili beharreko grafiko paketea
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} galdutako/hautsitako artxiboa{P "" k}
@@ -1970,9 +1972,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Zerbitza
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Konpainia babestua dago. Pasahitza sartu
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Bezero zerrenda
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Ikusle
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Konpainia berria
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Bezero zerrenda
STR_NETWORK_COMPANY_LIST_SPECTATE :Ikusle
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Konpainia berria
# Network client list
STR_NETWORK_CLIENTLIST_KICK :Kanporatu
@@ -1987,7 +1989,6 @@ STR_NETWORK_CLIENT :Bezeroa
STR_NETWORK_SPECTATORS :Ikusleak
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Eman nahi duzun diru kantitatea ezarri
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Ikusle
# Network set password
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ez gorde sartutako pasahitza

View File

@@ -1301,6 +1301,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Звычайн
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Падвоены
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Пачацвяроны
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Набор базавай ґрафікі
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Выбар базавага набору ґрафічных аб'ектаў
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} адсутнічаюч{P ы ых ых}/пашкоджан{P ы ых ых} файл{P "" ы аў}
@@ -2387,9 +2389,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сэрв
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Кампанія абароненая. Увядзіце пароль
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Сьпіс кліентаў
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Назіраць
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Новая кампанія
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Сьпіс кліентаў
STR_NETWORK_COMPANY_LIST_SPECTATE :Назіраць
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Новая кампанія
# Network client list
STR_NETWORK_CLIENTLIST_KICK :Выкінуць гульца
@@ -2404,7 +2406,6 @@ STR_NETWORK_CLIENT :Кліент
STR_NETWORK_SPECTATORS :Назіральнікі
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Увядзіце суму грошай, якую вы хочаце перадаць
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Назіральнік
# Network set password
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Не захоўваць уведзены пароль
@@ -4585,7 +4586,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... гэ
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... няправільны кірунак дарогі
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... на прахадных прыпынках нельга рабіць павароты
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... на прахадных прыпынках нельга рабіць скрыжаваньнi
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... дарога аднабаковая ці заблакавана
# Station destruction related errors
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Немагчыма выдаліць частку станцыi...

View File

@@ -992,6 +992,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobro
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quádruplo
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecionar o conjunto de gráficos base para usar
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} arquivo{P "" s} faltando/corrompido{P "" s}
@@ -2078,9 +2080,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa está protegida. Digite a senha
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Lista de clientes
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Assistir
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova Companhia
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes
STR_NETWORK_COMPANY_LIST_SPECTATE :Assistir
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova Companhia
# Network client list
STR_NETWORK_CLIENTLIST_KICK :Banir
@@ -2095,7 +2097,6 @@ STR_NETWORK_CLIENT :Cliente
STR_NETWORK_SPECTATORS :Espectadores
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Entre a quantia a ser dada
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Espectador
# Network set password
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Não salvar a senha digitada
@@ -4275,7 +4276,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... é u
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... rua na direção errada
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... paradas "drive-thru" não podem ter esquinas
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... paradas "drive-thru" não podem ter junções
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... rua é mão única ou está bloqueada
# Station destruction related errors
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Impossível remover parte da estação...

View File

@@ -191,6 +191,7 @@ STR_COLOUR_ORANGE :Оранжев
STR_COLOUR_BROWN :Кафяво
STR_COLOUR_GREY :Сиво
STR_COLOUR_WHITE :Бяло
STR_COLOUR_DEFAULT :По подразбиране
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA} мил{P я и}/ч
@@ -462,6 +463,7 @@ STR_TOOLBAR_SOUND_MUSIC :Звук/муз
############ range for message menu starts
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Последно съобщение/новини
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :История на съобщенията
STR_NEWS_MENU_DELETE_ALL_MESSAGES :Изтрий всички съобщения
############ range ends here
############ range for about menu starts
@@ -473,6 +475,7 @@ STR_ABOUT_MENU_SCREENSHOT :Screenshot
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Напълно увеличен в кадъра.
STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Увеличение по подразбиране
STR_ABOUT_MENU_GIANT_SCREENSHOT :Огромен Screenshot
STR_ABOUT_MENU_SHOW_FRAMERATE :Показване на честотата на кадрите
STR_ABOUT_MENU_ABOUT_OPENTTD :Относно 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Подравнител на спрайтове
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Активиране слепване на прозорците
@@ -704,11 +707,13 @@ STR_SMALLMAP_TYPE_OWNERS :Собстве
STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Покажи земните контури на картата
STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Покажи превозните средства
STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Покажи индустриите на картата
STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Покажи на картата потока на товарите
STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Покажи транспортните маршрути на картата
STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Покажи растителността на картата
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Покажи собствениците на земя на картата
STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Натисни върху вид индустрия за превключване на показването.Click on an industry type to toggle displaying it. Ctrl деактивира всички освен избраната. Ctrl отново за активиране на всички
STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Натисни върху компания за показване/скриване на нейната собственост. Ctrl деактивира всички компании освен избраната. Ctrl отново за активиране на всички компании
STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Кликнете върху товара, за да превключите показването на неговите данни. Ctrl+Click изключва всички товари без текущо избрания. Направете отново Ctrl+Click въху него, за да включите отново всички товари
STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Пътища
STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}ЖП
@@ -976,6 +981,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Нормалн
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Двукратно
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Четирикратно
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базов графичен набор
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Изберете базов графичен набор
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} липсващи/повредени файлове
@@ -1105,6 +1112,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Игрови н
STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Игрови настройки (съхраняват се в записаната игра; важат само за текущата игра)
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Настройки за компанията (съхраняват се в записаната игра; важат само за нови игри)
STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Настройки за компанията (съхраняват се в записаната игра; важат само за текущата компания)
STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Покажете всички резултати от търсенето като зададете{}{SILVER}Категория {BLACK}на {WHITE}{STRING} {BLACK}и {SILVER}Тип {BLACK}на {WHITE}Всички видове настройки
STR_CONFIG_SETTINGS_NONE :{WHITE}- Нищо -
STR_CONFIG_SETTING_OFF :изключено
@@ -1281,10 +1289,12 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Показва
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Дебелина на линиите в графиките: {STRING}
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Дебелина на линиите в графиките. Тънките линии са по-лесни за разчитане, но по-дебелите се забелязват и разграничават по-лесно.
STR_CONFIG_SETTING_LANDSCAPE :Пейзаж: {STRING}
STR_CONFIG_SETTING_LANDSCAPE :Терен: {STRING}
STR_CONFIG_SETTING_LAND_GENERATOR :Генератор на земя: {STRING}
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :оригинален
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :тера-генезис
STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(само за TerraGenesis) Хълмистост на терена
STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Задайте колко индустрии да се генерират и какво ниво да се поддържа по време на играта
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Максимално разстояние от ръба за нефтените рафинерии: {STRING}
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Нефтените рафинерии се изграждат само близо до края на картата
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Снежната ивица: {STRING}
@@ -1294,6 +1304,7 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :полегат
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :стръмен
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :много стръмен
STR_CONFIG_SETTING_RIVER_AMOUNT :Количество на реките: {STRING}
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Изберете колко реки да се генерират
STR_CONFIG_SETTING_TREE_PLACER :Алгоритъм за поставяне на дървета: {STRING}
STR_CONFIG_SETTING_TREE_PLACER_NONE :без дървета
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :оригинален
@@ -1581,6 +1592,11 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Без
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Множител за големината на града: {STRING}
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Относителен размер на мегаполисите в сравнение с градовете в началото на играта
STR_CONFIG_SETTING_LINKGRAPH_TIME :Вземи {STRING}{NBSP}дни{P 0:2 "" s} за преизчисляване на графа за резпределение
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :ръчно
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :симетричен
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"симетрично" означава, че приблизително един и същ брой пътници ще пътуват от спирка А до спирка Б и обратно. "асиметрично" означава, че произволен брой пътници могат да пътуват във всяка от посоките. "ръчно" означава, че няма да има автоматично разпределение за пътниците.
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Режим на разпределение на други класове товари: {STRING}
STR_CONFIG_SETTING_DEMAND_SIZE :Количество на връщания товар при симетричнен режим: {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Единици за скорост: {STRING}
@@ -1626,6 +1642,7 @@ STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Осн
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Строене
STR_CONFIG_SETTING_VEHICLES :{ORANGE}Автомобили
STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Маршрутизация
STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Ограничения
STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Права
STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Градове
STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Индустрии
@@ -1906,6 +1923,7 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Пост
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Защитаване на вашата игра с парола за да не е публично достъпна
STR_NETWORK_START_SERVER_UNADVERTISED :Не
STR_NETWORK_START_SERVER_ADVERTISED :Да
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" s}
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. брой играчи:
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Избор на максималния брой клиенти. Не всички слотове трябва да се попълнят
@@ -2009,9 +2027,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сърв
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Компанията е защитена. Въведете парола
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Списък с играчите
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Наблюдавай
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Нова фирма
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Списък с играчите
STR_NETWORK_COMPANY_LIST_SPECTATE :Наблюдавай
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Нова фирма
# Network client list
STR_NETWORK_CLIENTLIST_KICK :Изгони
@@ -2026,7 +2044,6 @@ STR_NETWORK_CLIENT :Клиент
STR_NETWORK_SPECTATORS :Наблюдатели
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Въведете количеството пари, което искате да дадете
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Зрител
# Network set password
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Незапазвай паролата
@@ -2629,9 +2646,21 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Скорост на кадрите
STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Скороср на симулация: {STRING}
STR_FRAMERATE_SPEED_FACTOR :{BLACK}Текущ коефициент за скорост на играта: {DECIMAL}x
STR_FRAMERATE_CURRENT :{WHITE}Текущ
STR_FRAMERATE_AVERAGE :{WHITE}Средно
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} кадри/сек
############ Leave those lines in this order!!
STR_FRAMERATE_GL_ECONOMY :Обработка на товари:
STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Тактове на света:
############ End of leave-in-this-order
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMELOOP :Цикъл на играта
STR_FRAMETIME_CAPTION_DRAWING :Графична обработка
STR_FRAMETIME_CAPTION_VIDEO :Видео изход
STR_FRAMETIME_CAPTION_ALLSCRIPTS :Общо GS/AI скриптове
############ End of leave-in-this-order
@@ -2781,6 +2810,7 @@ STR_NEWGRF_SETTINGS_DISABLED :{RED}Изклю
STR_NEWGRF_SETTINGS_INCOMPATIBLE :{G=n}{RED}Несъвместимо с тази версия на OpenTTD
# NewGRF save preset window
STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Списък на наличните предварително зададени настройки. Изберете една, за да я откопирате в името за запис по-долу
STR_SAVE_PRESET_TITLE :{BLACK}Въведи име за шаблона
STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Текущо избраното име за именуване на шаблона
STR_SAVE_PRESET_CANCEL :{BLACK}Отказ
@@ -2878,6 +2908,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF '
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Информация за товар/преобразувания на '{1:ENGINE}' се различава от листа с покупките. Това може да доведе до грешка при подновяване/преустройване
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' предизвика вечен цикъл в callback на производството
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Подизпълнение {1:HEX} върна неизвестен/невалиден резултат {2:HEX}
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' Върнат е невалиден тип товар в продуктивен callback на {2:HEX}
# 'User removed essential NewGRFs'-placeholders for stuff without specs
STR_NEWGRF_INVALID_CARGO :<невалиден товар>
@@ -2911,6 +2942,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Въве
STR_TOWN_DIRECTORY_CAPTION :{WHITE}Градове
STR_TOWN_DIRECTORY_NONE :{ORANGE}- Отсъства -
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA})
STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Град){BLACK} ({COMMA})
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Имена на градовете - натисни на името за да фокусираш този град. Ctrl отваря нов изглед към града.
STR_TOWN_POPULATION :{BLACK}Обща популация на картата: {COMMA}
@@ -3310,6 +3342,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Капа
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Вагони с мощност: {GOLD}+{POWER}{BLACK} Тегло: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Преобразуваем на: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Всички видове товар
STR_PURCHASE_INFO_NONE :Нищо
STR_PURCHASE_INFO_ALL_BUT :Всичко освен {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Макс. теглеща сила: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Обхват: {GOLD}{COMMA} полета
@@ -3625,7 +3658,7 @@ STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Капа
# Vehicle refit
STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Преустройване)
STR_REFIT_TITLE :{GOLD}Изберете вид товар за превозване:
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}{}{BLACK}Цена за преустройство: {RED}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}{}{BLACK}Цена за преустройсване: {RED}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Нов капцитет: {GOLD}{CARGO_LONG}{}{BLACK}Приход от преустройване: {GREEN}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Нова вместимост: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Цена за преоборудване: {RED}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Проход от преустройване: {GREEN}{CURRENCY_LONG}
@@ -3811,9 +3844,12 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Разп
STR_TIMETABLE_NO_TRAVEL :Без преминаване
STR_TIMETABLE_NOT_TIMETABLEABLE :Пътувай (автоматично; включено в разписанието, чрез следващата ваша заповед)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Пътувай (без разписание)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Пътувай с не повече от {2:VELOCITY} (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_STAY_FOR_ESTIMATED :(престой за {STRING}, без разписание)
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(Пътувай към {STRING}, без разписание)
STR_TIMETABLE_STAY_FOR :и остани за {STRING}
STR_TIMETABLE_AND_TRAVEL_FOR :и отпътувай към {STRING}
STR_TIMETABLE_DAYS :{COMMA}{NBSP}ден{P "" а}
@@ -3829,6 +3865,7 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Това
STR_TIMETABLE_STATUS_START_AT :{BLACK}Това разписание ще започне на {STRING}
STR_TIMETABLE_STARTING_DATE :{BLACK}Дата на започване
STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK} Изберете начална дата на това разписание. Ctrl + Click задава началната дата и равномерно разпределя всички превозни средства, които споделят тази поръчка, на базата на тяхната относителна поръчка, ако поръчката е изцяло по разписание
STR_TIMETABLE_CHANGE_TIME :{BLACK}Промени времето
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Промени времетраенето на маркираната заповед
@@ -4381,6 +4418,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Оригина
STR_BASESOUNDS_WIN_DESCRIPTION :Оригинални звуци на Transport Tycoon Deluxe за Windows.
STR_BASESOUNDS_NONE_DESCRIPTION :Празен звуков пакет.
STR_BASEMUSIC_WIN_DESCRIPTION :Оригинална музика на Transport Tycoon Deluxe за Windows.
STR_BASEMUSIC_TTO_DESCRIPTION :Оригинална Transport Tycoon (Original/World Editor) музика за DOS.
STR_BASEMUSIC_NONE_DESCRIPTION :Празен музикален пакет.
##id 0x2000

View File

@@ -190,6 +190,8 @@ STR_COLOUR_ORANGE :{G=Masculin}Tar
STR_COLOUR_BROWN :{G=Masculin}Marró
STR_COLOUR_GREY :{G=Masculin}Gris
STR_COLOUR_WHITE :{G=Masculin}Blanc
STR_COLOUR_RANDOM :Aleatori
STR_COLOUR_DEFAULT :Per defecte
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph
@@ -465,6 +467,7 @@ STR_TOOLBAR_SOUND_MUSIC :So/música
############ range for message menu starts
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Darrer missatge/notícia
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historial de missatges
STR_NEWS_MENU_DELETE_ALL_MESSAGES :Esborra tots els missatges
############ range ends here
############ range for about menu starts
@@ -816,6 +819,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(President)
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} ha patrocinat la construcció d'una nova població, anomenada {TOWN}
STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}S'ha fundat una nova població que es diu {TOWN}!
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}No{G u va} {STRING} en construcció prop de {TOWN}
STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}S'està plantant {G un una} {G nou nova} {STRING} prop de {TOWN}
@@ -928,6 +932,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand sud-afric
STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalitzada
STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgià (GEL)
STR_GAME_OPTIONS_CURRENCY_IRR :Rial iranià (IRR)
STR_GAME_OPTIONS_CURRENCY_RUB :Ruble rus modern (RUB)
STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicà (MXN)
############ end of currency region
STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehicles de carretera
@@ -990,6 +996,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doble
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quàdruple
STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Mida de la lletra
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Seleccioneu la mida de les fonts de la interfície.
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Doble
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quàdruple
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunt de gràfics base
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona el conjunt de gràfics base a utilitzar
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} arxiu{P "" s} absent{P "" s} o corromput{P "" s}.
@@ -1257,6 +1270,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}No es po
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manteniment de la infraestructura: {STRING}
STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quan està activat, la infraestructura provoca costos de manteniment. El cost creix proporcionalment al tamany de la xarxa de transport, afectant en conseqüència més a les companyies grosses que a les petites
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Color inicial de la companyia: {STRING}
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolliu el color inicial de la vostra companyia.
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Els aeroports mai caduquen: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activant aquesta opció fa que cada tipus d'aeroport estigui disponible per sempre després de la seva introducció
@@ -1815,6 +1830,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Canvia l
STR_CHEAT_SETUP_PROD :{LTBLUE}Activa la modificació dels valors de producció: {ORANGE}{STRING}
# Livery window
STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Esquema de colors nou
STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra esquemes de colors generals
STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra els esquemes de colors dels trens
@@ -2074,11 +2090,12 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconne
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegit: escriviu-ne la contrasenya
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companyia protegida: escriviu-ne la contrasenya
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Llista de clients
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Llista de clients
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Espectador
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova companyia
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Llista de clients
STR_NETWORK_COMPANY_LIST_SPECTATE :Espectador
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova companyia
# Network client list
STR_NETWORK_CLIENTLIST_KICK :Breu
@@ -2093,7 +2110,6 @@ STR_NETWORK_CLIENT :Client
STR_NETWORK_SPECTATORS :Espectadors
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introdueix la quantitat de diners que vols donar
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Espectador
# Network set password
STR_COMPANY_PASSWORD_CANCEL :{BLACK}No desis la nova contrasenya.
@@ -2375,7 +2391,7 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Senyal p
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Senyal de ruta (elèctric){}Un senyal de ruta permet entrar més d'un tren dins de la mateixa secció de vies. Cal, però, que sigui capaç de reservar una ruta fins un punt de parada segur sense creuar-se amb cap altre tren. Es pot travessar en el sentit contrari al senyal.
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Senyal de ruta d'un sentit (elèctric){}Un senyal de ruta permet entrar més d'un tren dins de la mateixa secció de vies. Cal, però, que sigui capaç de reservar una ruta fins un punt de parada segur sense creuar-se amb cap altre tren. No es pot travessar en el sentit contrari al senyal.
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversió de senyals{}Quan aquest botó està premut, si es clica un senyal existent el converteix al tipus de senyal seleccionat. Ctrl+Clic commuta la variant existent. Maj+Clic mostra el cost estimat de conversió.
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Espaiat entre senyals
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distància entre senyals
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Disminueix l'espai entre senyals consecutives situades automàticament quan s'arrossega el ratolí o es manté premuda la tecla Ctrl.
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augmenta l'espai entre senyals consecutives situades automàticament quan s'arrossega el ratolí o es manté premuda la tecla Ctrl.
@@ -2702,36 +2718,39 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD
# Framerate display window
STR_FRAMERATE_CAPTION :{WHITE}Fotogrames per segon
STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} (x{DECIMAL})
STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Velocitat de simulació: {STRING}
STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Velocitat de simulació: {STRING}
STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nombre de tics del joc per segon.
STR_FRAMERATE_RATE_BLITTER :{WHITE}Fotogrames per segon: {STRING}
STR_FRAMERATE_RATE_BLITTER :{BLACK}Fotogrames per segon: {STRING}
STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nombre de fotogrames renderitzats per segon.
STR_FRAMERATE_SPEED_FACTOR :{WHITE}Factor de velocitat actual: x{DECIMAL}
STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor de velocitat actual: x{DECIMAL}
STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quant ràpid va la partida actual, comparant-ho amb l'estimació de la velocitat normal.
STR_FRAMERATE_CURRENT :{WHITE}Actual
STR_FRAMERATE_AVERAGE :{WHITE}Mitjana
STR_FRAMERATE_DATA_POINTS :{WHITE}Dades basades en {COMMA} mesures.
STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE}{NBSP}ms
STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE}{NBSP}ms
STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE}{NBSP}ms
STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE}{NBSP}fps
STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE}{NBSP}fps
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE}{NBSP}fps
STR_FRAMERATE_DATA_POINTS :{BLACK}Dades basades en {COMMA} mesures.
STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{NBSP}ms
STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{NBSP}ms
STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{NBSP}ms
STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{NBSP}fps
STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{NBSP}fps
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{NBSP}fps
STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA}{NBSP}ms
STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA}{NBSP}s
############ Leave those lines in this order!!
STR_FRAMERATE_GAMELOOP :{WHITE}Total del bucle:
STR_FRAMERATE_GL_ECONOMY :{WHITE} Tractament de la càrrega:
STR_FRAMERATE_GL_TRAINS :{WHITE} Tics de tren:
STR_FRAMERATE_GL_ROADVEHS :{WHITE} Tics de vehicles de carretera:
STR_FRAMERATE_GL_SHIPS :{WHITE} Tics de vaixell:
STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Tics d'aeronau:
STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Tics del mapa:
STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Retard del graf de distribució:
STR_FRAMERATE_DRAWING :{WHITE}Renderitzat de gràfics:
STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Vistes del mapa:
STR_FRAMERATE_VIDEO :{WHITE}Sortida de vídeo:
STR_FRAMERATE_SOUND :{WHITE}Mescla de so:
STR_FRAMERATE_GAMELOOP :{BLACK}Total del bucle:
STR_FRAMERATE_GL_ECONOMY :{BLACK} Tractament de càrrega:
STR_FRAMERATE_GL_TRAINS :{BLACK} Tics de trens:
STR_FRAMERATE_GL_ROADVEHS :{BLACK} Tics de vehicles de carretera:
STR_FRAMERATE_GL_SHIPS :{BLACK} Tics de vaixells:
STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Tics d'aeronaus:
STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Tics del mapa:
STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Retard del graf de distribució:
STR_FRAMERATE_DRAWING :{BLACK}Renderitzat de gràfics:
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Vistes del mapa:
STR_FRAMERATE_VIDEO :{BLACK}Sortida de vídeo:
STR_FRAMERATE_SOUND :{BLACK}Mescla de so:
STR_FRAMERATE_ALLSCRIPTS :{BLACK} Total GS/IA:
STR_FRAMERATE_GAMESCRIPT :{BLACK} Script de partida:
STR_FRAMERATE_AI :{BLACK} IA {NUM} {STRING}
############ End of leave-in-this-order
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMELOOP :Bucle
@@ -2746,6 +2765,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Renderitzat de
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderitzat de la vista del mapa
STR_FRAMETIME_CAPTION_VIDEO :Sortida de vídeo
STR_FRAMETIME_CAPTION_SOUND :Mescla de so
STR_FRAMETIME_CAPTION_ALLSCRIPTS :Total de scripts d'IA/GS
STR_FRAMETIME_CAPTION_GAMESCRIPT :Script de partida
STR_FRAMETIME_CAPTION_AI :AI {NUM}: {STRING}
############ End of leave-in-this-order
@@ -2771,6 +2793,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalls
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No hi ha informació disponible
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
STR_SAVELOAD_FILTER_TITLE :{BLACK}Cadena de filtre:
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sobreescriu fitxer
STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Esteu segur que voleu sobreescriure el fitxer?
STR_SAVELOAD_OSKTITLE :{BLACK}Posa el nom amb què desar la partida actual
@@ -2888,7 +2913,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versió:
STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versió compatible: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Per defecte (D)
STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Per defecte (D) / 32 bpp
STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Antic (W)
STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Antic (W) / 32 bpp
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paràmetres: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PARAMETER_NONE :Cap
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No hi ha informació disponible
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}No s'ha trobat cap arxiu coincident
@@ -2969,6 +2999,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :S'ha llegit des
STR_NEWGRF_ERROR_GRM_FAILED :Els recursos GRF demanats no estan disponibles (sprite {3:NUM})
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ha estat desactivat per {STRING}
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Format de disposició de sprite no vàlid o desconegut (sprite {3:NUM}).
STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Hi ha massa elements a la llista de valors de propietats (sprite {3:NUM}, propietat {4:HEX})
STR_NEWGRF_ERROR_INDPROD_CALLBACK :«Callback» de producció d'indústria no vàlid (sprite {3:NUM}, «{2:STRING}»).
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Alerta!
@@ -3094,6 +3126,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Suborna
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} Objectius
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Objectius globals
STR_GOALS_SPECTATOR :Objectius globals
STR_GOALS_GLOBAL_TITLE :{BLACK}Objectius globals:
STR_GOALS_TEXT :{ORANGE}{STRING}
STR_GOALS_NONE :{ORANGE}- Cap -
@@ -3142,6 +3175,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clica al
# Story book window
STR_STORY_BOOK_CAPTION :{WHITE}Llibre de Partida de {COMPANY}
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Llibre Global de Partida
STR_STORY_BOOK_SPECTATOR :Llibre de partida global
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pàgina {NUM}
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Salteu a una pàgina seleccionant-la en aquesta llista desplegable.
@@ -3346,6 +3380,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra l
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent!
STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requereix: {YELLOW}{STRING}{STRING}
STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produeix: {YELLOW}{STRING}{STRING}
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
@@ -3403,6 +3440,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grups -
STR_GROUP_CREATE_TOOLTIP :{BLACK}Clica per crear un grup
STR_GROUP_DELETE_TOOLTIP :{BLACK}Elimina el grup seleccionat
STR_GROUP_RENAME_TOOLTIP :{BLACK}Canvia el nom del grup seleccionat
STR_GROUP_LIVERY_TOOLTIP :{BLACK}Canvia l'aspecte dels vehicles del grup seleccionat.
STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clica per protegir aquest grup de l'autosubstitueix global
STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Esborrar grup
@@ -3446,6 +3484,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacita
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagons Automotrius: {GOLD}+{POWER}{BLACK} Pes: {GOLD}+{WEIGHT_SHORT}
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Remodelable a: {GOLD}{STRING}
STR_PURCHASE_INFO_ALL_TYPES :Totes les càrregues
STR_PURCHASE_INFO_NONE :Cap
STR_PURCHASE_INFO_ALL_BUT :Qualsevol excepte {CARGO_LIST}
STR_PURCHASE_INFO_MAX_TE :{BLACK}Esforç de tracció màxim: {GOLD}{FORCE}
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Abast: {GOLD}{COMMA} cel·les
@@ -3845,6 +3884,7 @@ STR_ORDER_CONDITIONAL_AGE :Antiguitat (any
STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Necessita revisió
STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Sempre
STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Temps de vida restant (anys)
STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Fiabilitat màxima
STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Com comparar les dades del vehicle al valor donat
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :és igual a
@@ -4277,7 +4317,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... aque
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... sentit de la carretera en la direcció incorrecta
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... les estacions d'autobús de pas no poden tenir cantonades
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... les estacions d'autobús de pas no poden tenir interseccions
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... la carretera és d'un sol sentit o està blocada.
# Station destruction related errors
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}No es pot treure part de la estació...

View File

@@ -562,6 +562,7 @@ STR_TOOLBAR_SOUND_MUSIC :Zvuk/glazba
############ range for message menu starts
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Poslijednja poruka/vijest
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Povijest poruka
STR_NEWS_MENU_DELETE_ALL_MESSAGES :Obriši sve poruke
############ range ends here
############ range for about menu starts
@@ -1090,6 +1091,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normalno
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvostruka veličina
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Četvorostruka veličina
STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Veličina fonta
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Odaberite veličinu fonta za sučelje
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normalno
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dvostruka veličina
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Četvorostruka veličina
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Osnovni set grafike
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Odaberi osnovni grafički set za igru
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} datotek{P a e a} nedostaj{P e u e}/korumpiran{P a e o}
@@ -2177,11 +2185,12 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Odspoji
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Poslužitelj je zaštićen. Unesite zaporku
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tvrtka je zaštićena. Unesite zaporku
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Popis klijenata
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Popis klijenata
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Promatraj
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova tvrtka
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Popis klijenata
STR_NETWORK_COMPANY_LIST_SPECTATE :Promatraj
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova tvrtka
# Network client list
STR_NETWORK_CLIENTLIST_KICK :Izbaci
@@ -2196,7 +2205,6 @@ STR_NETWORK_CLIENT :Klijent
STR_NETWORK_SPECTATORS :Promatrači
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Unesite iznos novca koji želite dati
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Gledatelj
# Network set password
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Nemoj spremiti upisanu zaporku
@@ -2835,6 +2843,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Prikaz g
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Prikazi svijeta:
STR_FRAMERATE_VIDEO :{BLACK}Video izlaz:
STR_FRAMERATE_SOUND :{BLACK}Miksanje zvukova:
STR_FRAMERATE_ALLSCRIPTS :{BLACK} Ukupni broj GS/AI:
STR_FRAMERATE_GAMESCRIPT :{BLACK} Skripta Igre:
STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING}
############ End of leave-in-this-order
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMELOOP :Petlja igre
@@ -2849,6 +2860,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Prikaz grafike
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Prikazi svijeta
STR_FRAMETIME_CAPTION_VIDEO :Video izlaz
STR_FRAMETIME_CAPTION_SOUND :Miksanje zvukova
STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI broj skripti
STR_FRAMETIME_CAPTION_GAMESCRIPT :Skripta Igre
STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING}
############ End of leave-in-this-order
@@ -3081,7 +3095,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Zatraženi GRF
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} je isključen od strane {STRING}
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Pogrešan/nepoznat format raspored sprite-a (sprite {3:NUM})
STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Previše elemenata na listi postavki varijabli (sprite {3:NUM}, postavka {4:HEX})
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Pogrešna callback funkcija za industrijsku proizvodnju (sprite {3:NUM}, "{1:STRING}")
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Pogrešna callback funkcija za industrijsku proizvodnju (sprite {3:NUM}, "{2:STRING}")
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Oprez!
@@ -3106,13 +3120,14 @@ STR_NEWGRF_LIST_MISSING :{RED}Nedostaju
STR_NEWGRF_BROKEN :{WHITE}Ponašanje NewGRF '{0:STRING}' će vjerojatno uzrokovati deharmonizaciju i/ili rušenje igre
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Promijenjen status motoriziranog vagona za '{1:ENGINE}' kad vozilo nije u spremištu.
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Ovo mijenja dužinu vozila za '{1:ENGINE}' kada vozilo nije unutar spremišta
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Promijenilo je kapacitet vozila za '{1:ENGINE}' kada nije u spremšta ili se remontira
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Promijenilo je kapacitet vozila za '{1:ENGINE}' kada nije u spremištu ili se prenamjenjuje
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Vlak'{VEHICLE}' koji pripada tvrtci '{COMPANY}' neispravne je dužine. Uzrok problema je vjerojatno u NewGRF datotekama. Igra će se možda deharmonizirati ili srušiti
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' daje netočne informacije
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informacija o teretu/remontu za '{1:ENGINE}' je različita od kupovne liste nakon izgradnje. Zbog toga bi automatsko obnavljanje/zamjena mogla biti neuspješna
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{G=male}{WHITE}'{1:STRING}' je uzrokovao beskonačnu petlju u pozivu za povrat produkcije
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Povratnica {1:HEX} je vratio nepoznat/nemoguć rezultat {2:HEX}
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' callback funkcija za proizvodnju je vratila nevažeći teret na {2:HEX}
# 'User removed essential NewGRFs'-placeholders for stuff without specs
STR_NEWGRF_INVALID_CARGO :<pogrešan teret>
@@ -3207,6 +3222,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Podmiti
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} Ciljevi
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globalni ciljevi
STR_GOALS_SPECTATOR :Globalni ciljevi
STR_GOALS_GLOBAL_TITLE :{BLACK}Globalni ciljevi:
STR_GOALS_TEXT :{ORANGE}{STRING}
STR_GOALS_NONE :{ORANGE}- Nijedan -
@@ -3255,6 +3271,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikni n
# Story book window
STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Priča
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globalna priča
STR_STORY_BOOK_SPECTATOR :Globalna knjiga priča
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Stranica {NUM}
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Preskoči na specifičnu stranicu odabravši je iz liste.
@@ -3625,7 +3642,7 @@ STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}
STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} vozil{P o a a}{STRING}
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlakovi - drži lijevi klik i vuci vozilo za dodavanje/skidanjed iz vlaka, desni klik za informacije. Drži tipku Ctrl da obje funkcije rade na slijedu
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlakovi - drži lijevi klik i vuci vozilo za dodavanje/skidanje iz vlaka, desni klik za informacije. Drži tipku Ctrl da obje funkcije rade na slijedu
STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Vozila - desni klik na vozilo za informacije
STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Brodovi - desni klik na brod za informacije
STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Zrakoplov - desni klik na zrakoplov za informacije
@@ -3886,9 +3903,9 @@ STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Nosivost
STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Prenamijeni)
STR_REFIT_TITLE :{GOLD}Odaberi vrstu tereta za prijevoz:
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova nosivost: {GOLD}{CARGO_LONG}{}{BLACK}Cijena prenamjene: {RED}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}{}{BLACK}Prihod od remonta: {GREEN}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Trošak remonta: {RED}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Prihod od remonta: {GREEN}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}{}{BLACK}Prihod od prenamjene: {GREEN}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Cijena prenamjene: {RED}{CURRENCY_LONG}
STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Prihod od prenamjene: {GREEN}{CURRENCY_LONG}
STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Odaberi vozila za remont. Povlačenje mišem dopušta odabir više vozila. Klik na prazninu će označiti cijelo vozilo. Ctrl+Klik će označiti vozilo i niz koji slijedi.
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Odaberi vrstu tereta koju će vlak prevoziti
@@ -4396,7 +4413,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... ovo
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... cesta je orijentirana u krivom smjeru
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... prolazne postaje ne mogu imati zavoje
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... prolazne postaje ne mogu imati raskrižja
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... cesta je jednosmjerna ili je blokirana
# Station destruction related errors
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Nije moguće ukloniti dio postaje...

View File

@@ -264,6 +264,7 @@ STR_COLOUR_ORANGE :Oranžová
STR_COLOUR_BROWN :Hnědá
STR_COLOUR_GREY :Šedá
STR_COLOUR_WHITE :Bílá
STR_COLOUR_RANDOM :Náhodná
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}m{P íle íle il}/h
@@ -539,6 +540,7 @@ STR_TOOLBAR_SOUND_MUSIC :Zvuk/Hudba
############ range for message menu starts
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Poslední zpráva nebo článek
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historie zpráv
STR_NEWS_MENU_DELETE_ALL_MESSAGES :Smazat všechny zprávy
############ range ends here
############ range for about menu starts
@@ -1076,6 +1078,9 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normální
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvojnásobná velikost
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Čtyřnásobná velikost
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Běžné
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Základní sada grafiky
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Zvol základní sadu grafiky
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} chybějící{P "" "" ch}/poškozen{P ý é ých} soubor{P "" y ů}
@@ -1427,6 +1432,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Barva terénu n
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :zelená
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :tmavě zelená
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :fialová
STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Pohyb v mapě pomocí pravého tlačítka myši, poloha myši uzamčena
STR_CONFIG_SETTING_SMOOTH_SCROLLING :Plynulé posouvání po mapě: {STRING}
STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Ovládá jak se hlavní pohled posouvá na specifické místo na mapě, kliknutím na minimapu nebo spuštěním příkazu na posun na specifický objekt na mapě. Pokud zapnuto, pohled se posouvá plynule, pokud vypnuto, skáče pohled přímo na cílové místo
STR_CONFIG_SETTING_MEASURE_TOOLTIP :Ukázat rozměry při použití stavebních nástrojů: {STRING}
@@ -2156,9 +2162,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server j
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Společnost je chráněná. Napiš heslo
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Seznam hráčů
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Pozorovat
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nová společnost
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Seznam hráčů
STR_NETWORK_COMPANY_LIST_SPECTATE :Pozorovat
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nová společnost
# Network client list
STR_NETWORK_CLIENTLIST_KICK :Vyhodit
@@ -2173,7 +2179,6 @@ STR_NETWORK_CLIENT :Klient
STR_NETWORK_SPECTATORS :Pozorovatelé
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Napiš částku, kterou chceš poskytnout
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Pozorovatel
# Network set password
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Neukládat zadané heslo
@@ -2790,7 +2795,10 @@ STR_FRAMERATE_CAPTION :{WHITE}Počet s
STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Počet snímků videa vykreslovaných za sekundu.
STR_FRAMERATE_SPEED_FACTOR :{WHITE}Aktuální činitel rychlosti hry: {DECIMAL}x
STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Rychlost, kterou hra právě běží, v porovnání s očekávanou rychlostí při běžné rychlosti simulace.
STR_FRAMERATE_CURRENT :{WHITE}Aktuální
STR_FRAMERATE_AVERAGE :{WHITE}Průměr
STR_FRAMERATE_DATA_POINTS :{BLACK}Podle {COMMA} měření
STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms
STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} sním{P "ek" "ky" "ků"}/s
STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} sním{P "ek" "ky" "ků"}/s
@@ -2798,12 +2806,20 @@ STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COM
STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s
############ Leave those lines in this order!!
STR_FRAMERATE_GL_ECONOMY :{WHITE} Manipulace s nákladem:
STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Zpoždění grafu spojení:
STR_FRAMERATE_DRAWING :{WHITE}Vykreslování grafiky:
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Pohledy:
STR_FRAMERATE_VIDEO :{BLACK}Video:
STR_FRAMERATE_SOUND :{BLACK}Míchání zvuků:
STR_FRAMERATE_GAMESCRIPT :{BLACK} Herní skript:
############ End of leave-in-this-order
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMELOOP :Herní smyčka
STR_FRAMETIME_CAPTION_GL_ECONOMY :Manipulace s nákladem
STR_FRAMETIME_CAPTION_DRAWING :Vykreslování grafiky
STR_FRAMETIME_CAPTION_SOUND :Míchání zvuků
STR_FRAMETIME_CAPTION_GAMESCRIPT :Herní skript
STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING}
############ End of leave-in-this-order
@@ -2829,6 +2845,8 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Vlastnos
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Není dostupná žádná informace
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}Grafiky: {WHITE}{STRING}
STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtr:
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Přepsat soubor
STR_SAVELOAD_OSKTITLE :{BLACK}Zadej jméno pro uloženou hru
@@ -2947,6 +2965,7 @@ STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Minimál
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametry: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PARAMETER_NONE :Žádný
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Informace nejsou k dispozici
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Nenalezen odpovídající soubor
@@ -3200,6 +3219,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kliknut
# Story book window
STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Kniha příběhů
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globální kniha příběhů
STR_STORY_BOOK_SPECTATOR :Globální kniha příběhů
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Strana {NUM}
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Skoč na určitou stranu vybranou v tomto seznamu
@@ -3404,6 +3424,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vystřed
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkce: {YELLOW}{COMMA}%
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Průmysl oznámila blížící se uzavření!
STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Vyžaduje: {YELLOW}{STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vyžaduje:
STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING}
@@ -4338,7 +4359,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... tato
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... silnice je otočena jiným směrem
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... průjezdné zastávky nemohou být v zatáčce
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... průjezdné zastávky nemohou být na křižovatce
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... silnice je jednosměrná nebo uzavřená.
# Station destruction related errors
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Nelze odstranit část stanice...

View File

@@ -373,7 +373,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Afslut
############ range for SE file menu starts
############ range for settings menu starts
STR_SETTINGS_MENU_GAME_OPTIONS :Spilvalg
STR_SETTINGS_MENU_GAME_OPTIONS :Opsætning
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Indstillinger
STR_SETTINGS_MENU_SCRIPT_SETTINGS :AI/spilscript-indstillinger
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF indstillinger
@@ -391,7 +391,7 @@ STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Gennemsigtige s
############ range for file menu starts
STR_FILE_MENU_SAVE_GAME :Gem spil
STR_FILE_MENU_LOAD_GAME :Hent spil
STR_FILE_MENU_LOAD_GAME :Fortsæt spil
STR_FILE_MENU_QUIT_GAME :Forlad spillet
STR_FILE_MENU_SEPARATOR :
STR_FILE_MENU_EXIT :Afslut
@@ -466,6 +466,7 @@ STR_TOOLBAR_SOUND_MUSIC :Lyd/Musik
############ range for message menu starts
STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Seneste besked/nyhedsrapport
STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Tidligere beskeder
STR_NEWS_MENU_DELETE_ALL_MESSAGES :Slet alle beskeder
############ range ends here
############ range for about menu starts
@@ -839,7 +840,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLAC
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Insekter foresager kaos ved {INDUSTRY}!{}Produktionen er faldet med 50%
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}{STRING}produktionen på {INDUSTRY} sænkes med {COMMA}%!
STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} venter i remisen
STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} afventer i remisen
STR_NEWS_ROAD_VEHICLE_IS_WAITING :{WHITE}{VEHICLE} venter på værkstedet
STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} venter i skibsdokken
STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} venter i hangaren
@@ -891,7 +892,7 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Flyt hov
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Bevæg hovedvisningen til samme sted som dette vindue
# Game options window
STR_GAME_OPTIONS_CAPTION :{WHITE}Spilvalg
STR_GAME_OPTIONS_CAPTION :{WHITE}Opsætning
STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenhed
STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valg af valutaenhed
@@ -994,6 +995,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobbelt størrelse
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad (4x) størrelse
STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Skriftstørrelse
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Vælg skriftstørrelsen du ønsker i grænsefladen
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dobbelt størrelse
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quad (4x) størrelse
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis-grafiksæt
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vælg det basis-grafiksæt der skal bruges
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} forsvund{P en ne}/ødelagt{P "" e} fil{P "" er}
@@ -1414,8 +1422,8 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Vis ankomst og
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Vis forventede ankomst-og afgangstider i tidsplaner
STR_CONFIG_SETTING_QUICKGOTO :Hurtig oprettelse af køretøjsordrer: {STRING}
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Forvælg 'gå-til' når du åbner ordrer vinduet
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standard skinnetype (efter nyt spil/hentet spil): {STRING}
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Hvilken sportype der skal vælges efter start eller hentning af et spil. 'første tilgængelige' vælger den ældste type spor, 'sidste tilgængelige' vælger den nyeste form for spor, og 'mest anvendte' vælger den type, der i øjeblikket er mest i brug
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standard sportype (efter nyt spil/indlæst spil): {STRING}
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Hvilken sportype der skal vælges efter start eller indlæsning af et spil. 'Første tilgængelige' vælger den ældste type spor, 'sidste tilgængelige' vælger den nyeste form for spor, og 'mest anvendte' vælger den type, der i øjeblikket er mest i brug
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Første tilgængelige
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Sidste tilgængelige
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Mest anvendte
@@ -1741,13 +1749,13 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Allokeri
STR_INTRO_CAPTION :{WHITE}OpenTTD {REV}
STR_INTRO_NEW_GAME :{BLACK}Nyt spil
STR_INTRO_LOAD_GAME :{BLACK}Hent spil
STR_INTRO_LOAD_GAME :{BLACK}Fortsæt spil
STR_INTRO_PLAY_SCENARIO :{BLACK}Spil et scenarie
STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Spil højdekort
STR_INTRO_SCENARIO_EDITOR :{BLACK}Scenarieeditor
STR_INTRO_MULTIPLAYER :{BLACK}Netværksspil
STR_INTRO_GAME_OPTIONS :{BLACK}Spilvalg
STR_INTRO_GAME_OPTIONS :{BLACK}Opsætning
STR_INTRO_HIGHSCORE :{BLACK} Topresultater
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Indstillinger
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF indstillinger
@@ -1756,7 +1764,7 @@ STR_INTRO_SCRIPT_SETTINGS :{BLACK}AI/Spils
STR_INTRO_QUIT :{BLACK}Afslut
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Start et nyt spil. Ctrl+Klik springer kortindstillingerne over.
STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Hent et gemt spil
STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Fortsæt et gemt spil
STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Start et nyt spil med et højdekort som landskab
STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Start et nyt spil med et brugerdefineret scenarie
STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Lav en brugerdefineret verden/scenarie
@@ -1767,7 +1775,7 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Vælg 's
STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Vælg 'subtropisk' landskab
STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Vælg 'legetøjsland' landskab
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Vis spilvalg
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Sæt spillet op
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Hvis topscoreliste
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Skærm indstillinger
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Vis NewGRF-indstillinger
@@ -1874,7 +1882,7 @@ STR_FACE_SIMPLE :{BLACK}Simpel
STR_FACE_SIMPLE_TOOLTIP :{BLACK}Simpelt valg af ansigt.
STR_FACE_LOAD :{BLACK}Hent
STR_FACE_LOAD_TOOLTIP :{BLACK}Hent favoritansigt
STR_FACE_LOAD_DONE :{WHITE}Dit favoritansigt er hentet fra OpenTTD-konfigurationsfilen.
STR_FACE_LOAD_DONE :{WHITE}Dit favoritansigt er indlæst fra OpenTTD konfigurationsfilen.
STR_FACE_FACECODE :{BLACK}Spiller ansigtsnr.
STR_FACE_FACECODE_TOOLTIP :{BLACK}Vis og/eller indstil spillers ansigtsnummer
STR_FACE_FACECODE_CAPTION :{WHITE}Vis og/eller indstil spillers ansigtsnummer
@@ -2054,8 +2062,8 @@ STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spiller
STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nyt selskab
STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Opret et nyt selskab
STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Tilskuer spil
STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Se et spil som tilskuer
STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Tilskuer
STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Tilslut spillet som tilskuer
STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Tilslut dig selskab
STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Hjælp med at bestyrre dette selskab
@@ -2081,11 +2089,12 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Afbryd f
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveren er beskyttet. Indtast kodeord
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Selskabet er beskyttet. Indtast kodeord
STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientliste
# Network company list added strings
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Klient liste
STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Tilslut som tilskuer
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nyt firma
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient liste
STR_NETWORK_COMPANY_LIST_SPECTATE :Tilslut som tilskuer
STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nyt firma
# Network client list
STR_NETWORK_CLIENTLIST_KICK :Smid ud
@@ -2100,7 +2109,6 @@ STR_NETWORK_CLIENT :Klient
STR_NETWORK_SPECTATORS :Tilskuere
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriv beløbet du vil give
STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Tilskuer
# Network set password
STR_COMPANY_PASSWORD_CANCEL :{BLACK}Gem ikke den indtastede adgangskode
@@ -2144,7 +2152,7 @@ STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Der opst
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Revisionen af denne klient passer ikke sammen med serverens revision
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Forkert kodeord
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serveren er fuld
STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du har forbud mod at bruge denne server
STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du er bandlyst fra denne server
STR_NETWORK_ERROR_KICKED :{WHITE}Du blev smidt ud af spillet
STR_NETWORK_ERROR_CHEATER :{WHITE}Snyderi er ikke tilladt på denne server
STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Du sendte for mange kommandoer til serveren
@@ -2340,7 +2348,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Ombyg/op
STR_RAIL_NAME_RAILROAD :Jernbane
STR_RAIL_NAME_ELRAIL :Elektrisk jernbane
STR_RAIL_NAME_MONORAIL :Monorail
STR_RAIL_NAME_MAGLEV :Magnetskinne
STR_RAIL_NAME_MAGLEV :Magnetsvævebane
# Rail depot construction window
STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Retning af remise
@@ -2739,6 +2747,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Grafik-t
STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Landskabsvisninger:
STR_FRAMERATE_VIDEO :{BLACK}Grafik-output:
STR_FRAMERATE_SOUND :{BLACK}Lydmiksning:
STR_FRAMERATE_ALLSCRIPTS :{BLACK} Spilscript/AI total:
STR_FRAMERATE_GAMESCRIPT :{BLACK} Spilscript:
STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING}
############ End of leave-in-this-order
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GAMELOOP :Spillogik
@@ -2753,17 +2764,20 @@ STR_FRAMETIME_CAPTION_DRAWING :Grafik-tegning
STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Tegning af landskabsvisninger
STR_FRAMETIME_CAPTION_VIDEO :Grafik-output
STR_FRAMETIME_CAPTION_SOUND :Lydmiksning
STR_FRAMETIME_CAPTION_ALLSCRIPTS :Spil/AI script total
STR_FRAMETIME_CAPTION_GAMESCRIPT :Spilscript
STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING}
############ End of leave-in-this-order
# Save/load game/scenario
STR_SAVELOAD_SAVE_CAPTION :{WHITE}Gem spil
STR_SAVELOAD_LOAD_CAPTION :{WHITE}Hent spil
STR_SAVELOAD_LOAD_CAPTION :{WHITE}Fortsæt spil
STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Gem scenarie
STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Hent scenarie
STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Hent højdekort
STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Gem højdekort
STR_SAVELOAD_HOME_BUTTON :{BLACK}Klik her for at gå til det nuværende standard gemme/hente bibliotek
STR_SAVELOAD_HOME_BUTTON :{BLACK}Klik her for at gå til den nuværende standard gem/indlæs mappe
STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} fri
STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Liste over drev, biblioteker og gemte spilfiler
STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Nuværende gemte spils navn
@@ -2779,6 +2793,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Ingen in
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter-udtryk:
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overskriv fil
STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Er du sikker på du vil overskrive den eksisterende fil?
STR_SAVELOAD_OSKTITLE :{BLACK}Skriv et navn til det gemte spil
@@ -2983,7 +2999,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :De ønskede GRF
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} blev deaktiveret af {2:STRING}
STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldigt/ukendt sprite layoutformat (sprite {3:NUM})
STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :For mange elementer i værdiliste for egenskab (sprite {3:NUM}, egenskab {4:HEX})
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig produktion-callback for industri (sprite {3:NUM}, "{1:STRING}")
STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig produktion-callback for industri (sprite {3:NUM}, "{2:STRING}")
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Advarsel!
@@ -3015,6 +3031,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF '
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Fragt-/ombygningsinformation for '{1:ENGINE}' afviger fra indkøbslisten efter konstruktion. Dette kan medføre, at autofornyelse ikke fungerer korrekt.
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' forårsagede en uendelig løkke i produktions-callback'en.
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} returnerede ukendt/ugyldigt resultat {2:HEX}
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' returnerede ugyldig godstype i produktion-callback ved {2:HEX}
# 'User removed essential NewGRFs'-placeholders for stuff without specs
STR_NEWGRF_INVALID_CARGO :<ikke gyldigt gods>
@@ -3109,6 +3126,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Bestik
# Goal window
STR_GOALS_CAPTION :{WHITE}{COMPANY} Mål
STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globale Mål
STR_GOALS_SPECTATOR :Globale Mål
STR_GOALS_GLOBAL_TITLE :{BLACK}Globale mål:
STR_GOALS_TEXT :{ORANGE}{STRING}
STR_GOALS_NONE :{ORANGE}- Ingen -
@@ -3157,6 +3175,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik på
# Story book window
STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Historiebog
STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Global Historiebog
STR_STORY_BOOK_SPECTATOR :Global Historiebog
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
STR_STORY_BOOK_GENERIC_PAGE_ITEM :Side {NUM}
STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Gå til en bestemt side ved at vælge den i denne rulleliste.
@@ -3240,7 +3259,7 @@ STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Vis alle
STR_STATION_VIEW_RENAME_STATION_CAPTION :Omdøb stationen/fragtcentralen
STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Luk lufthavn
STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Undgå at fly lander i denne lufthavn
STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Forhindre at fly lander i denne lufthavn
# Waypoint/buoy view window
STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT}
@@ -3439,7 +3458,7 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM}%
# Build vehicle window
STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nye jernbanekøretøjer
STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nyt elektrisk lokomotiv
STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nye elektriske jernbanekøretøjer
STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nye monorailkøretøjer
STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nye magnetskinnekøretøjer
@@ -3567,7 +3586,7 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Klon fly
STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Dette vil købe en kopi af toget inklusiv alle vogne. Klik på denne knap og så på et tog indeni eller udenfor remisen. Ctrl-klik vil kopiere ordrer. Shift-klik vil vise prisoverslag.
STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Dette vil købe en kopi af køretøjet. Klik på denne knap og så på et køretøj indeni eller udenfor værkstedet. Ctrl-klik vil dele ordrer. Shift-klik viser anslået pris uden køb
STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Dette vil købe en kopi af skibet. Klik på denne knap og så på et skib indeni eller udenfor dokken. Ctrl-klik vil dele ordrer. Shift-klik vil vise prisoverslag.
STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dette vil købe en kopi af et fly. Klik på denne knap og så på et fly indeni eller udenfor hangaren. Ctrl-klik vil dele ordrer. Shift-klik vil vise prisoverslag.
STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dette vil købe en kopi af et fly. Klik på denne knap og så på et fly indeni eller udenfor hangaren. Ctrl-klik vil dele ordrer. Shift-klik viser estimerede omkostninger uden at indkøbe
STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over remisens lokalitet. Ctrl+Klik åbner et nyt vindue ved remisens lokalitet.
STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over værkstedets lokalitet. Ctrl+Klik åbner et nyt vindue ved køretøjsværkstedets lokalitet.
@@ -3577,7 +3596,7 @@ STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrér
STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Vis en liste over alle tog med denne remise i ordrelisten
STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Vis liste over alle køretøjer med dette værksted i ordrelisten
STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Vis liste over alle skibe med denne skibsdok i ordrelisten
STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Vis liste over alle fly med en hangar ved denne lufthavn i ordrelisten
STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Hent en liste over alle fly der har hvilken som helst hangar ved denne lufthavn i deres ordrer
STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Klik for at stoppe alle toge i remisen
STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Klik for at stoppe alle køretøjer i værkstedet
@@ -3599,7 +3618,7 @@ STR_ENGINE_PREVIEW_ROAD_VEHICLE :vejkøretøj
STR_ENGINE_PREVIEW_AIRCRAFT :fly
STR_ENGINE_PREVIEW_SHIP :skib
STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :monoraillokomotiv
STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnetskinnelokomotiv
STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnettog
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Pris: {CURRENCY_LONG} Vægt: {WEIGHT_SHORT}{}Hastighed: {VELOCITY} Styrke: {POWER}{}Driftsomkostninger: {CURRENCY_LONG}/år{}Kapacitet: {CARGO_LONG}
STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Pris: {CURRENCY_LONG} Vægt: {WEIGHT_SHORT}{}Hastighed: {VELOCITY} Hestekræfter: {POWER} Maks. Trækkraft: {6:FORCE}{}Driftsomkostning: {4:CURRENCY_LONG}/år{}Kapacitet: {5:CARGO_LONG}
@@ -4034,7 +4053,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Vælg å
# AI debug window
STR_AI_DEBUG :{WHITE}Computerspiller/Spilscript-debug
STR_AI_DEBUG :{WHITE}KI/Spilscript-debug
STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM})
STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Navn på scriptet
STR_AI_DEBUG_SETTINGS :{BLACK}Indstillinger
@@ -4071,7 +4090,7 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Flyt ned
STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Flyt valgte computerspiller ned i listen
STR_AI_CONFIG_GAMESCRIPT :{SILVER}Spilscript
STR_AI_CONFIG_AI :{SILVER}AIer
STR_AI_CONFIG_AI :{SILVER}KI'er
STR_AI_CONFIG_CHANGE :{BLACK}Vælg {STRING}
STR_AI_CONFIG_CHANGE_NONE :Ingen ændringer
@@ -4147,7 +4166,7 @@ STR_ERROR_AUTOSAVE_FAILED :{WHITE}Fejl und
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke læse drevet
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Fejl under gemning af spil{}{STRING}
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fejl under hentning af spil{}{STRING}
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fejl under indlæsning af spil{}{STRING}
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern fejl: {STRING}
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt gemt spil - {STRING}
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er gemt med en nyere version
@@ -4161,12 +4180,12 @@ STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spillet
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kortgenerering afbrudt...{}... ingen brugbare lokaliteter til byer
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... der er ingen byer i dette scenarie
STR_ERROR_PNGMAP :{WHITE}Kan ikke hente landskab fra PNG...
STR_ERROR_PNGMAP :{WHITE}Kan ikke indlæse landskab fra PNG...
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... filen blev ikke fundet.
STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... kan ikke konvertere billedtype. Der skal bruges 8 eller 24-bit PNG.
STR_ERROR_PNGMAP_MISC :{WHITE}... noget gik galt. Undskyld (Måske en ødelagt fil)
STR_ERROR_BMPMAP :{WHITE}Kan ikke hente landskab fra BMP...
STR_ERROR_BMPMAP :{WHITE}Kan ikke indlæse landskab fra BMP...
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... kunne ikke konvertere billedtypen.
STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}... billede er for stort
@@ -4298,7 +4317,6 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... denn
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... vejen peger i den forkerte retning
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... drive-through stops kan ikke have hjørner
STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... drive-through stops kan ikke have kryds
STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}vejen er ensrettet eller blokeret
# Station destruction related errors
STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan ikke fjerne en del af en station...

File diff suppressed because it is too large Load Diff

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