1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-21 13:39:09 +00:00

Compare commits

...

910 Commits
0.3.4 ... 0.3.6

Author SHA1 Message Date
darkvater
7423777a18 (svn r1663) Release 0.3.6. 2005-01-25 00:10:06 +00:00
darkvater
1054ec7749 (svn r1662) -Fix: Unpause Linkgames scenario per default 2005-01-25 00:07:58 +00:00
bjarni
001fa99741 (svn r1661) Makefile: added scenario to make install 2005-01-25 00:07:50 +00:00
dominik
3482605b1a (svn r1660) Added scenarios to Mandrakelinux specs file 2005-01-24 23:58:12 +00:00
bjarni
6a66bb2314 (svn r1659) Makefile: added scenario to mac and MorphOS release scripts 2005-01-24 23:52:59 +00:00
darkvater
212ecff33b (svn r1658) -Update readme and windows installer for 0.3.6
-Fix up VS6 and add new default icon for OpenTTD
2005-01-24 23:44:24 +00:00
bjarni
ae7bdefc33 (svn r1657) changelog update 2005-01-24 23:32:58 +00:00
dominik
66166bd7f7 (svn r1656) Sorry, this is of course the 2004 version of Linkgame Islands 2005-01-24 23:28:47 +00:00
dominik
4cc23f6608 (svn r1655) Add: Three brand new scenarios for endless multiplayer pleasure:
- Linkgame Islands (by sign_de)
 - Mountain Pass (by Korenn)
 - Volcano City (aka The Big City, by lucaspiller)
2005-01-24 23:24:34 +00:00
dominik
7150dd66cd (svn r1654) updated changelog and known-bugs for 0.3.6 2005-01-24 23:04:30 +00:00
darkvater
5666efe66b (svn r1653) -Fix: removed CTRL+A and CTRL+B cheats; thanks Hackykid
-Removed executable bits on png files in media dir (svn pd svn:executable <file>)
2005-01-24 23:02:14 +00:00
bjarni
e006f89aa3 (svn r1652) Fix: train and road vehicle lists are now redrawn when vehicles enters/leaves a depot (Hackykid)
fix: the ship status bar was not updated properly after a breakdown if show_speed was off (Hackykid)
2005-01-24 22:24:47 +00:00
dominik
ffb2c4de77 (svn r1651) Fix: [ 1098696 ] Airport shadow remains after crashing 2005-01-24 22:09:20 +00:00
matthijs
19c55cbb75 (svn r1650) - Added known-bugs.txt to os/debian/docs 2005-01-24 21:51:06 +00:00
bjarni
720b906a74 (svn r1649) Makefile: added known-bugs.txt to mac and MorphOS release scripts and made a really dirty hack to force 0.3.6 on binary files compiled with this makefile 2005-01-24 21:39:16 +00:00
darkvater
e05f961eed (svn r1648) -Fix: server can now pause and unpause a game through the console. Use 'pause' and 'unpause' 2005-01-24 21:33:44 +00:00
tron
6151c1044a (svn r1647) Remove stale comment and fix typo 2005-01-24 20:55:54 +00:00
dominik
aad7995648 (svn r1646) Miscellaneous langfile fixes, in particular for STR_NETWORK_SERVER_ADDRESS, broken by myself in r1611 2005-01-24 20:42:02 +00:00
dominik
700862295f (svn r1645) Updated Mandrakelinux spec file and added some ScummVMish comments 2005-01-24 20:35:07 +00:00
matthijs
b9c13283a4 (svn r1644) - Some minor corrections to the os/debian dir. 2005-01-24 20:33:43 +00:00
truelight
f08983a948 (svn r1643) -Fix: [ 1108547 ] You can now change the server-password via the GUI again 2005-01-24 20:25:52 +00:00
truelight
7a5ce1cb34 (svn r1642) -Fix: solve AI related order-problem 2005-01-24 20:20:30 +00:00
tron
7f14b69022 (svn r1641) Remove a boundary check added in r1332 to work around a bug - the real cause has been eleminated in r1413.
Leave an assert() just to be sure...
2005-01-24 18:57:16 +00:00
bjarni
6e2abeba5e (svn r1640) fix: now helicopters will use a hangar in schedule to be replaced in, even if they are only set to service there. Since helicopters are serviced at helipads, they will only go there if they needs to be replaced or renewed. 2005-01-24 18:21:23 +00:00
dominik
eae329f332 (svn r1639) Fixed spelling: Wrong command in error for goto_dir 2005-01-24 17:49:22 +00:00
celestar
ef3961448f (svn r1638) -Fix: Train crashes should no longer desync the game. This is more of a
workaround, as somewhere there might be some InteractiveRandom() abuse
in the code.
2005-01-24 14:39:22 +00:00
darkvater
9139f4ba84 (svn r1637) -Fix: VS6 warning
-Added missing files to VS6 and VS.Net project files (bociusz)
2005-01-24 11:32:47 +00:00
bjarni
6dc99f7738 (svn r1636) fix: helicopters now go to a hangar if they are set for replacement or needs to be renewed 2005-01-24 10:50:57 +00:00
bjarni
b4c4daf775 (svn r1635) fix: forgot to set SetVScrollCount properly in autoreplace train GUI. It appears ok now 2005-01-24 08:49:14 +00:00
tron
ad6cc5a12d (svn r1634) Update readme: JAM support has been removed, also be more precise which version of SDL is needed to compile 2005-01-24 07:18:45 +00:00
darkvater
a9e789fa02 (svn r1633) -Fix: [1040119] Flood and wagons in depot 2005-01-24 00:36:22 +00:00
darkvater
590bbd7e21 (svn r1632) -Fix: [1108008] Scenario creation bug; engines are of correct year when scenario is saved 2005-01-23 23:59:49 +00:00
dominik
29e0ded977 (svn r1631) A couple of fixes for the signed/unsigned warnings. Only train_cmd.c remains to need fixing... 2005-01-23 23:58:35 +00:00
miham
6912223444 (svn r1630) Langfile update 2005-01-23 22:39:34 +00:00
bjarni
6510b12203 (svn r1629) added a counter to tell how many engines you have of each type to the autoreplace vehicle windows and made them show only the vehicles you actually have in the left list.
this also fixes some window updates issues when autoreplacing
2005-01-23 22:01:51 +00:00
darkvater
dd6a6fa7ec (svn r1628) -Fix: [1107893] script command; log file pointer was not reset to NULL after logging was closed 2005-01-23 21:42:29 +00:00
darkvater
94dc25b45f (svn r1627) -Fix: The tabulizer in action ^_^ 2005-01-23 21:30:31 +00:00
darkvater
f1c151f157 (svn r1626) -Updated readme and credits list. 2005-01-23 21:24:33 +00:00
darkvater
f31d8bb9a1 (svn r1625) -Alphabetized credits list 2005-01-23 20:41:20 +00:00
darkvater
660f130d2b (svn r1624) -Fix: [1106930] BugFix: placing signals with 2x1 drags is treated as placing a single signal thus providing an easy fix for a nasty problem. 2005-01-23 20:40:49 +00:00
tron
a2619da37e (svn r1623) Remove dead code 2005-01-23 20:06:38 +00:00
truelight
24a34936db (svn r1622) -Fix: variables can't be defined after a statement.. (Igor2Code) 2005-01-23 19:33:42 +00:00
truelight
8edff76765 (svn r1621) -Fix: fixed some compiler warnings for the random-debug-switch 2005-01-23 19:02:53 +00:00
tron
2cf65953db (svn r1620) Fix typo in r1619 2005-01-23 17:51:22 +00:00
tron
62e8c573e8 (svn r1619) Fight bit rot in the Makefile:
- Begin all echos with ===> to visually emphasise them
- Add @ to suppress printing of commands where it was missing
- Add echos to rules where none were 
- Rephrase some existing echos
- Remove VERBOSE_FILTER, because piping errors to /dev/null is ... a bad idea
2005-01-23 17:35:01 +00:00
tron
88c10e02ff (svn r1618) () -> (void) 2005-01-23 16:33:09 +00:00
darkvater
1a92141896 (svn r1617) -Fix: Ugly hack to only call ResetObjectToPlaceon childwindows of build-toolbar if the window is closed manually (with 'X'); if not checked ResetObjectToPlace is called twice resulting in undesired actions (eg. clicked button is unclicked immediately). 2005-01-23 15:25:17 +00:00
tron
53d1c3f117 (svn r1616) Introduce ttd_strlcat() and use it to de-uglify some piece of code in misc_cmd.
While here rename the len parameter of ttd_strlcpy() to size, because it is a buffer size and not a string length.
Also add -Wwrite-strings to the Makefile, because the above mentioned piece of code was the only part which triggered this warning.
2005-01-23 15:16:47 +00:00
darkvater
9a96f5b64e (svn r1615) -Fix: [1107350] console ignoring return character occasionally. For everyone that is running 2 dedicated servers on 1 windows machine, console input is now correct (event was the same so it was random which console received the input) 2005-01-23 14:15:42 +00:00
dominik
52ec917125 (svn r1614) Fix: Signals were not updated correctly when the vehicle drive side was changed 2005-01-23 13:45:20 +00:00
darkvater
ae792cedde (svn r1613) -Fix: WE_CLICK event is not called on default actions. If special action is needed, use the other events like WE_RESIZE or WE_DESTROY, etc. 2005-01-23 13:42:26 +00:00
truelight
bb276ef5a9 (svn r1612) -Fix: made sure that ->next pointers are set to NULL 2005-01-23 13:30:02 +00:00
dominik
7d0468aaa4 (svn r1611) Display server port in the multiplayer game info window
I had to make the multiplayer window 10 pixels wider for this
2005-01-23 13:19:15 +00:00
tron
44f48ce915 (svn r1610) Remove trailing whitespace (last time ever, i hope) 2005-01-23 13:09:35 +00:00
truelight
80131e1e4a (svn r1609) -Codechange: converted the last order-loop with FOR_VEHICLE_ORDERS 2005-01-23 13:08:01 +00:00
tron
a11eddd04b (svn r1608) Make ReplaceWords() comprehensible 2005-01-23 12:04:40 +00:00
truelight
8fe9bc6439 (svn r1607) -Fix: When deleting an order, the next pointer was not cleared,
resulting in some unusual behavoir from time to time
2005-01-23 11:37:27 +00:00
tron
9f60324821 (svn r1606) Fix some bogus casts 2005-01-23 10:54:32 +00:00
tron
fd25a53d1b (svn r1605) Remove redundant if 2005-01-23 10:47:15 +00:00
dominik
322bd934be (svn r1604) Fix: [ 1105112 ] Destroyed train locks crossings 2005-01-23 10:40:54 +00:00
darkvater
720b183017 (svn r1603) -Fix: unused variable in FormatTinyDate
-Fix: added void to all win32.c functions as well
2005-01-23 10:34:39 +00:00
tron
7243369333 (svn r1602) -Fix: [1107514] When resizing a window, make sure the correct window receives the click 2005-01-23 08:34:39 +00:00
dominik
f83828d944 (svn r1601) Add: A brand new set of icons.
Removed: The old icons
2005-01-22 23:57:03 +00:00
bjarni
c7502c6eb3 (svn r1600) Mac: applied the new icon to the mac binary file 2005-01-22 23:55:45 +00:00
bjarni
8e7d88c85b (svn r1599) fix: autoreplace window now updates when inflation alters prices
Hackykid and not LordOfThePigs pointed out the update problem fixed in rev 1597. Sorry. Sometimes development can get too fast
2005-01-22 23:41:23 +00:00
dominik
6027e777c8 (svn r1598) Feature: Message history now is stickyable and resizeable
The news messages are now precisely cropped according to pixel width to fit optimal into the window.
Introduced a new date format: DATE_TINY, which is ISOish.
2005-01-22 23:13:20 +00:00
bjarni
8313879b3c (svn r1597) fix: autoreplace vehicle lists are now redrawn when a new vehicle becomes available (thanks LordOfThePigs for pointing this one out) 2005-01-22 23:11:25 +00:00
tron
e5cd6b6193 (svn r1596) Add some more statics 2005-01-22 22:47:58 +00:00
tron
e75c48ec7a (svn r1595) EmergencySave() is only used on WIN32, add preprocessor guard to hide it everywhere else 2005-01-22 22:46:10 +00:00
tron
189ca73707 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile 2005-01-22 20:23:18 +00:00
tron
7984a9a500 (svn r1593) Remove yet another alloca() 2005-01-22 19:41:30 +00:00
tron
54e78e114c (svn r1592) -Fix: [1090495] Slopes under high bridges weren't flooded 2005-01-22 19:05:30 +00:00
tron
6fb79d5f33 (svn r1591) Make dedicated servers on OS/2 check for input the UNIX way 2005-01-22 18:59:53 +00:00
darkvater
b49547b2b5 (svn r1590) -Fix: [1107347] ban 1 crashes dedicated server. Dedicated server cannot ban itself :) 2005-01-22 18:51:09 +00:00
tron
c0a0d1bb22 (svn r1589) Adapt the AI to a slight behavior change of CmdBuildSignals() introduced in r1585 2005-01-22 18:46:30 +00:00
celestar
f40ff3c134 (svn r1588) -Fix: [ 1105959 ] coded a workaround in the acceleration code so that
trains don't think they're on a slope while they drive around in a
tunnel
2005-01-22 18:39:52 +00:00
darkvater
7c28bafba9 (svn r1587) -CodeChange: fixed up the graph loop a little..numd now shows the exact amount, no +1 needed
-CodeMotion: moved 'Company performancerating detail' to the end of the file; it fits there
2005-01-22 16:24:21 +00:00
dominik
6e17ee9fe2 (svn r1586) Fix: [ 1107340 ] Graphs don't show comapany info for company #8 2005-01-22 15:50:54 +00:00
tron
5d443a2482 (svn r1585) Rewrite CmdBuildSignals()
This addresses several issues:
- Correct comments
- Check input parameters for validity (and don't assert() them)
- Reorder checks if action is possible to produce more meaningful error messages
- Correct bug where money was charged for an action which should be free
- Kill warning about uninitialized variable, because the variable exists no more
- Make more clear how the function works (at least i hope so)
2005-01-22 14:52:20 +00:00
dominik
4ce10986b5 (svn r1584) Fix: Highlighlighting tiles under bridges works again correctly for square selection tools. 2005-01-22 09:17:58 +00:00
darkvater
0a944dc950 (svn r1583) -Fix: You should no longer be able to delete bridges on any type of underground when there is a vehicle on it 2005-01-21 19:52:32 +00:00
dominik
5290d5f667 (svn r1582) Fix: Only the train orders GUI has a non-stop button now. 2005-01-21 18:36:17 +00:00
celestar
962dd27a8c (svn r1581) Added a display for the total map population to the town display (Jango) 2005-01-21 16:51:25 +00:00
dominik
2f4959dcd8 (svn r1580) Fix: [ 1106354 ] Graph's keys get confused
Fix: Graphs were not updated correctly when one graph with a certain selection was already open and another graph window was opened
2005-01-21 11:12:17 +00:00
dominik
ef93fcfe48 (svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
This makes buoys more useable in multiplayer games again, as buoys can't be deleted by other players if they are used.
2005-01-20 22:19:34 +00:00
darkvater
c245d93e7d (svn r1578) -Fix: [1102454] dedicated server crashes after some hours (highscore problems for dedicated...should be really solved now) 2005-01-20 18:57:09 +00:00
tron
2e0d576e6b (svn r1577) Fix: [1103301] Railroad tracks on slopes weren't flooded 2005-01-20 18:19:37 +00:00
tron
44dae05c3d (svn r1576) Clean TileLoopWaterHelper() a bit up 2005-01-20 18:18:32 +00:00
Celestar
1af764c4d0 (svn r1575) -Fix: Forgot to exit the construction phase for the waypoint window (if
you have newgrfs loaded)
2005-01-20 10:31:59 +00:00
celestar
f8345b3fe6 (svn r1574) -Fix [ 1105281 ] upgrade rail fails when train under bridge 2005-01-20 09:12:20 +00:00
celestar
f0e616ea2b (svn r1573) -Fix: Station and depot building mode is now terminated if the
corresponding windows are closed [ 1104277 ]
2005-01-20 08:36:15 +00:00
tron
e9c25f8274 (svn r1572) Remove dead code from ludde's autorail implementation which was left over by revision 1571 2005-01-19 21:50:38 +00:00
dominik
aaf09ceb26 (svn r1571) Feature: Visually enhanced autorail placing
When using the autorail tool, the rail pieces which are going to be build are highlighted.
If a piece is shown in red, this indicates that the slope/rail combination is impossible. It does not tell you if the rail line construction might not be possible because of other obstacles, e.g. houses or water.
2005-01-19 20:55:23 +00:00
tron
28df4a0e25 (svn r1570) Make the gcc version test work with old versions of test (i.e. don't use the < operator) 2005-01-19 20:22:10 +00:00
darkvater
7837be0575 (svn r1569) -Fix: signed/unsigned mismatch 2005-01-19 19:32:33 +00:00
bjarni
2fd3553d78 (svn r1568) made an enum of train subtypes to make the code more readable 2005-01-19 19:15:03 +00:00
darkvater
e4a3d284b2 (svn r1567) -Fix: [110452] On horizontal/vertical tracks you are also charged for building/removing signals on the parallel track on the same tile. Signal updating is also correct. (Hackykid) 2005-01-19 13:31:46 +00:00
darkvater
15630855dd (svn r1566) -Fix eol-style on script files, as well as update them a bit (sign_de) 2005-01-19 13:22:01 +00:00
celestar
941da5dc94 (svn r1565) -Fix: [ 1104969 ] Aircraft in hangar messages are now revalidated before
display
-CodeChange: replaced one if (foo) return true else return false by
return (foo)
2005-01-19 10:00:37 +00:00
tron
a6d1544447 (svn r1564) ISO C90 forbids mixed declarations and code (bad bjarni, no cookie) 2005-01-19 05:55:30 +00:00
bjarni
69065b53c8 (svn r1563) fix: autoreplaced trains now sets wagon override properly 2005-01-19 01:18:29 +00:00
bjarni
f09b0def11 (svn r1562) Changed copyright 2004 into copyright 2004-(current year) in the get info window in finder (macOSX) 2005-01-18 23:48:55 +00:00
bjarni
b1c4b0f07d (svn r1561) Fix: autoreplacing a singleheaded engine into a dualheaded engine now adds the the rear engine
autoreplacing a dualheaded engine into a singleheaded engine now sells the rear engine
as a sideeffect of this, the price for replacing both engines are now added and displayed once from the depot(instead of two identical numbers written on top of each other, looking like one)
fix: cost for autorenew dualheaded engines were doubled and their value where doubled too
2005-01-18 23:27:06 +00:00
tron
31d6f87d80 (svn r1560) Introduce SetTileType() and SetTileHeight()
Replace direct references to _map_type_and_height with these
2005-01-18 18:41:56 +00:00
tron
64b08311b9 (svn r1559) Use IsTileType() instead of bit shifting and comparisons 2005-01-18 17:19:34 +00:00
Celestar
389a4bf44d (svn r1558) -Fix: [ 1104350 ] Crashed trains do not initiate the lost vehicle
message anymore
2005-01-18 16:01:35 +00:00
tron
eaa6bf3f42 (svn r1557) Replace strange if () do while () construct with a plain for () 2005-01-18 15:26:14 +00:00
Celestar
5bcf3d2bc0 (svn r1556) -Fix: Vehicle list updates should now really work 2005-01-18 09:35:31 +00:00
miham
4559279686 (svn r1555) Daily (err.. this time it's rather weekly, sorry!) langfile updates 2005-01-17 22:44:33 +00:00
celestar
e0471187d0 (svn r1554) -Fix: [ 1103187 ] Order Check messages are now validated before
displayed, so that there are no stray error messages any more.
-Feature/Fix: Order Checking is only execute for ONE vehicle in an
order-share system
2005-01-17 21:54:45 +00:00
tron
9fadf6cf84 (svn r1553) Check which gcc version is present and only set availible compiler flags 2005-01-17 13:21:10 +00:00
tron
f4f705e723 (svn r1552) Make ottd compile on Zeta 2005-01-17 13:13:11 +00:00
tron
1847b99461 (svn r1551) Silence a warning and simplify a preprocessor check 2005-01-17 10:17:18 +00:00
tron
5adad6c1b4 (svn r1550) Remove useless function declaration 2005-01-17 09:43:02 +00:00
tron
fb0c3c8061 (svn r1549) Clean up some functions:
uint tile -> TileIndex tile
if () cascade -> switch ()
2005-01-17 09:41:46 +00:00
tron
d4beff7954 (svn r1548) Move AI_PATHFINDER_IS_ROAD from ai.h to ai_pathfinder.c to avoid global namespace pollution, turn it into a function called IsRoad and improve the commments a bit 2005-01-17 09:16:43 +00:00
darkvater
a1e94b67d5 (svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
-Fix: [1103113] font size changing. Dedicated server did not have code filtering, 'tab' could result in bigger fonts
-Fix: [1103069] console backspace key with ded server; fixed due to normal console handling
-Fix: [1101963] console in dedicated server; see above
-Fix: dedicated server also writes to log file if active
2005-01-16 18:19:33 +00:00
truelight
8521367373 (svn r1546) -Fix: possible buffer-overflow in network 2005-01-16 17:19:37 +00:00
tron
022b8cea37 (svn r1545) Add TileHeight() which returns the height (not multiplied by 8)
Replace some direct references to _map_type_and_height with TileHeight()/IsTileType()
2005-01-16 14:50:01 +00:00
truelight
8e404a26f6 (svn r1544) -Fix: SwapOrder did not use AssignOrder, which caused the saveroutine to
crash from time to time
-Codechange: added const before 'Order *' where possible
2005-01-16 14:42:53 +00:00
dominik
be5a832db3 (svn r1543) Fix: [ 1101906 ] Configure Patches window text overflow 2005-01-16 14:10:13 +00:00
tron
ef923fae44 (svn r1542) Rename TileHeight to TilePixelHeight, because this is what it actually returns 2005-01-16 14:06:22 +00:00
dominik
b119b6c474 (svn r1541) Fix: [ 1100767 ] fast forward in main menu 2005-01-16 13:59:07 +00:00
darkvater
340a9ab6be (svn r1540) -Fix: since grf files are reopened on every load/new game, close the old opened to fix stale filehandles (thx tamlin) 2005-01-16 12:40:25 +00:00
darkvater
8efc7866dd (svn r1539) -Fix: [1103271] free'd memory used. Moved w->wndproc(w, &e) to end of function. Thanks for finding this tamlin. 2005-01-16 12:30:52 +00:00
darkvater
37f56fa324 (svn r1538) -Feature: [988816] Disable servicing when breakdowns set to none (jaguar7) 2005-01-16 12:29:52 +00:00
darkvater
208a9b8547 (svn r1537) -Fix: Close all and any open filehandles open at shutdown (tamlin) 2005-01-16 12:14:52 +00:00
tron
ae796740aa (svn r1536) Move GET_TILEHEIGHT, GET_TILETYPE and IS_TILETYPE to map.h, turn them into inline functions and add some asserts 2005-01-16 11:24:58 +00:00
truelight
d2643dc483 (svn r1535) -Fix: bah, I hate to be wrong.. oh, euh, wrong copy/paste from TPFMode 1 2005-01-16 11:18:17 +00:00
tron
efecea001a (svn r1534) Use memmove() instead of memcpy() when copying overlapping memory (tamlin) 2005-01-16 11:04:45 +00:00
tron
1955371a71 (svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used 2005-01-16 09:51:56 +00:00
darkvater
d41a003bcc (svn r1532) -Fix: [1103078] default service period patch options are now cast to 0 with right variable size. 2005-01-16 00:23:19 +00:00
darkvater
6e07bad728 (svn r1531) -Feature: [1039061] Swiss town-names (vulvulune) 2005-01-15 21:41:49 +00:00
bjarni
971d844266 (svn r1530) Makefilefix: now the binary never links to SDL if DEDICATED is set. Thanks to igor2code for making me aware of this issue even through I fixed it in a different way than his patch did. (I made dedicated never link to sdl, nomatter what makefile.config says) 2005-01-15 21:30:16 +00:00
darkvater
633786f55e (svn r1529) -Feature: [1090950] Adding 16:10 resolutions for mainly laptops (doode) 2005-01-15 20:43:01 +00:00
truelight
1b00f36520 (svn r1528) -Fix: forgot to init a variable 2005-01-15 20:10:44 +00:00
truelight
24c9e6ff66 (svn r1527) -Add: RCon (Remote Connection). A server can set:
'set rcon_pw <password>'
  Which enables rcon. A client can now do:
    'rcon <password> "<command>"'
  The command will be executed on the server. (guru3)
-Fix: 'kick 1' did crash dedicated servers
-Fix: server password is now correctly saved

  !!Warning!!: do not give your rcon password to people you do not thrust!
2005-01-15 20:09:16 +00:00
darkvater
e6d31cb89c (svn r1526) -Fix: [1103027] Minor changes for the lobby GUI (widen window) (bociusz) 2005-01-15 19:17:45 +00:00
truelight
d275109e79 (svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
-Codechange: renamed all 'schedule' stuff to 'order(list)'
-Codechange: moved all order-stuff to order_cmd.c / order.h
-Codechange: vehicles that share orders are now linked to eachother
  with next_shared/prev_shared in Vehicle

  Developers: please use AssignOrder to assign data to an order. If not, 
   you _WILL_ make the save-routine to assert!
2005-01-15 19:06:22 +00:00
darkvater
732c362dea (svn r1524) -"Feature": when windows exception tracker is enabled (release builds) and the game crashes for any reason any active log file is closed first. This ensures the log file and ingame debug messages can be used to debug a problem. Any *nix versions are welcome 2005-01-15 16:38:10 +00:00
darkvater
ef3b9161f8 (svn r1523) -Fix: somehow mousewheel was disabled on windows using SDL; reenabled again
-Fix: added missing CDECL to ellipsis functions and changed VS6 project file to use _cdecl calling conventions (thx tamlin)
2005-01-15 15:48:05 +00:00
darkvater
559317f9d0 (svn r1522) -Fix: warning players.c; forgot return type. Damn, makefile is too strict ;) (Thx Tron) 2005-01-15 10:04:04 +00:00
celestar
02ed8410a2 (svn r1521) -Fix: Ship Vehicle Lists are now redrawn correctly
-Codechange: added some const to last commit
-Codechange: Ship and Aircraft lists are now update on order change, not
on new day
2005-01-15 09:28:08 +00:00
tron
3279a7c9a2 (svn r1520) Trim 134 (!) lines with trailing whitespace ): 2005-01-15 08:58:31 +00:00
celestar
7f7c6297f7 (svn r1519) -Fix: [1102776], [1099535] Aircraft vehicle lists are now redrawn when an aircraft arrives in the depot. Station-specific vehicle lists are now redrawn daily as well (not only the master list) 2005-01-15 08:40:32 +00:00
darkvater
f9b5f704b1 (svn r1518) -Fix: server issue where some company names were wrong
-Fix: Highscore troubles; accessing members of deleted window
2005-01-15 01:52:23 +00:00
darkvater
75474e5bf1 (svn r1516) -Cheating players do not get their names added to the highscore table/file
-Fixed issue where highscore window would not come up after endgame screen
-Fix: VS6 compiles once again (braindead compiler)
2005-01-15 00:46:45 +00:00
darkvater
c3a40dba68 (svn r1515) -Removed the 'close ALL windows' from the toolbar since shift+del does this. 2005-01-15 00:42:01 +00:00
darkvater
976ed5e396 (svn r1514) -Fix: [1092474] little red box in scenario editor (Celestar). Error box is also shown in scenario editor for terraforming, thus solving the eternally-pulsating-tile problem. 2005-01-14 22:03:09 +00:00
truelight
83b00ad861 (svn r1513) -Fix: glitch in revision 1510
-Fix: MSVC6 project file update (bociusz)
-Fix: MSVC6 default language is now English (UK), no longer Swedish (bociusz)
2005-01-14 21:59:31 +00:00
tron
dd27968460 (svn r1512) Replace probably incorrect test of loading_count with probably correct test of loaded_count 2005-01-14 21:58:48 +00:00
truelight
e9a57c56b7 (svn r1510) -Add: Improved Network Lobby GUI: (bociusz)
- Added green dot if company income is positive (else red dot)
 - Added lock icon if company is password protected
2005-01-14 21:47:35 +00:00
tron
3a838447a8 (svn r1509) Const correctness and add static where appropriate while touching the lines anyway 2005-01-14 19:44:42 +00:00
tron
4136f395bf (svn r1508) Remove duplicate declarations and include proper headers where necessary 2005-01-14 19:41:24 +00:00
tron
9d1f7e7348 (svn r1507) Remove unreachable code 2005-01-14 19:39:06 +00:00
dominik
34db065631 (svn r1506) Fix: [ 1102275 ] Game crashed when clicking "new face" or "company color" twice 2005-01-14 14:56:50 +00:00
celestar
314a4245a9 (svn r1505) -Fix: Refit engine button is now disabled when cargo capacity equals zero 2005-01-14 09:36:29 +00:00
celestar
febac23b25 (svn r1504) enummed town ratings (Jango) 2005-01-14 09:20:12 +00:00
miham
9e10458209 (svn r1503) Added feature:
o allows users to setup the production values of the rawmaterial producing 
  industries in the editor

Modified:
o ttd.h - added CT_INVALID for 0xFF cargo type
o english.txt - added 1 string
o industry_gui.c - the feature itself
o window.h - added compile asserts to the structs which checks whether their
  sizes are smaller than WINDOW_CUSTOM_SIZE

Thanks:
o Darkvater to bother me to constantly improve the patch
o Various users at #openttd for testing
2005-01-14 00:14:13 +00:00
darkvater
352cf002b2 (svn r1502) -Fix: [1101889] Crash under windows... stupid typo in player_gui.c ^ should've been &
-Fix: in multiplayer clientlist can only be opened once
2005-01-13 20:46:39 +00:00
celestar
7dddb6cf7a (svn r1500) -Feature: Train window shows now the number of vehicles per row (mpetrov) 2005-01-13 17:23:24 +00:00
celestar
237732d0a1 (svn r1499) -Fix: Order tooltip now explains the ctrl+click scroll. [1101412 / 1097043] (mpetrov) 2005-01-13 17:06:10 +00:00
Celestar
6dd2e2f06d (svn r1498) -Feature: Addded keyboard shortcuts for the order window 2005-01-13 16:55:17 +00:00
darkvater
61cae70fe5 (svn r1497) -Fix: [1101179] Crash if generating land while industry window is open. This also happened for towns and the land information window
-Added DeleteWindowByClass() function that deletes all windows of a given class
2005-01-13 16:50:20 +00:00
darkvater
06cc62f40d (svn r1496) -Fix: highscore no longer crashes in network games with a dedicated server. At the end of the game (can only be set by the server) the highscore is shown for the top5 companies of that game
-Fix: fixed some compiler warnings
-Added PF_NETWORK_ONLY flag to settings. Such a setting can only be modified in a network game.
2005-01-13 16:28:47 +00:00
celestar
0074496ea4 (svn r1495) -Fix: Loan does not count against the company value
-Feature: New companies receive a 5-year protection period
2005-01-13 09:55:32 +00:00
tron
131f4c50fd (svn r1494) Give GetNumberBasedOnSeed() a bit more sane name: SeedChance()
Add SeedChanceBias() which subtracts a bias from SeedChance() to reduce code duplication
While touching the lines anyway sprinkle a bit holy ANSI water (static before inline) and move assignments in the conditions of ifs before the ifs
2005-01-12 22:10:50 +00:00
celestar
253a02e712 (svn r1493) -Codechange: Removed redundancy in the order GUI. Currently we had most
of the code written 4 - 8 times in the code.
    This currently causes the "non-stop" button to appear for all
vehicles, which is disabled all the time. Don't report this as a bug
please.
    This is (hopefully) the first patch in a joint effort to simplify
the order system
2005-01-12 22:09:21 +00:00
tron
f062187e47 (svn r1492) Reduce strcpy(, "") follwed by strcat() to just strcpy() (Jango) 2005-01-12 21:38:49 +00:00
tron
45233a7e16 (svn r1491) Fix bracing style and indentation (Jango) 2005-01-12 21:33:43 +00:00
tron
fd19404b6f (svn r1490) Restore original town name generation behavior for german and hungarian (Jango) 2005-01-12 21:11:26 +00:00
truelight
747eab12d9 (svn r1489) -Fix: You fix a GCC warning, you get a MSVC warning.. now fixed both
(which compiler do we break this time?)
2005-01-12 16:33:33 +00:00
truelight
7ec997afce (svn r1488) -Fix: fixed some spelling mistakes (tnx to Tron)
-Fix: fixed some compiler-warnings
2005-01-12 11:54:51 +00:00
darkvater
f25bec9132 (svn r1487) -Fix: [1100736] wrong tooltip for place desert button 2005-01-12 11:50:41 +00:00
truelight
a243285af4 (svn r1486) -Codechange: moved all 'signs' stuff to signs.c/h and prepared it for
dynamic arrays
2005-01-12 11:21:28 +00:00
darkvater
ff23795f5b (svn r1485) -Fix: [1031451] Catchment area shows when buying sign. Catchment area wasn't reset when road station window was unselected
-Fix: small GUI glitch in terraform toolbar
2005-01-12 00:50:08 +00:00
darkvater
1a450b0b39 (svn r1484) -Fix: [1099197] scrolling through console sometimes crashed the whole game. Also added MarkWholeScreenDirty() to have redrawing of console resize instant (sign_de) 2005-01-11 23:39:21 +00:00
truelight
4873c0b1ea (svn r1483) -Fix: don't close a socket if it is already closed (windows doesn't like
it :() (partly tnx to tamlin)
2005-01-11 15:52:18 +00:00
celestar
1feae2083d (svn r1481) -Fix: [ 1099891 ] Added a return in DispatchLeftClickEvent which prevents reading of free'd memory (tamlin) 2005-01-11 12:15:08 +00:00
darkvater
5fac6142e8 (svn r1479) -Added highscore chart (accessible from the difficulty window) with top5 companies for a given difficulty (select the difficulty in the menu)
-Added endgame score on 1 jan 2051 where you are added to the highscore if sufficiently large points have been accumulated. Game is paused while
-These values are saved in hs.dat; added read/write functions for it
-Added code to delete all windows to show charts. There is one issue left: somehow a news-gui pops up in front of the the chart at the end of the game.
2005-01-11 00:54:06 +00:00
darkvater
085563653f (svn r1478) -Fix: [1099195] mouse-wheel in train replace window. Scrollbar1 and Scrollbar2 now work independently. You can only scroll on list and scrollbar itself; scrollbar must be next widget of the list.
-Fix: updated the few gui's that didn't have the scrollbar right after the listbox.
2005-01-11 00:24:27 +00:00
darkvater
38da06301d (svn r1477) -Fix: finally zooming in/out always works. The problem was that the zoomed in/out coordinates were used for checking if the area was a zoomable viewport in the not zoomed in/out position. The chances were high that there was a window. 2005-01-10 22:56:20 +00:00
darkvater
ae72661742 (svn r1476) -Fix: [1099209] Catchment area with drag&drop stations (Celestar) 2005-01-10 22:36:11 +00:00
tron
05a3a83b6c (svn r1475) Fix some more signed/unsigned comparison warnings 2005-01-10 22:14:35 +00:00
celestar
46d0e2f892 (svn r1474) Added some gcc flags in the Makefile 2005-01-10 21:56:02 +00:00
darkvater
70f9921423 (svn r1472) -Fix: correct error message for when trying to build a railroad station over a bus/truck/etc-station. 2005-01-10 21:52:35 +00:00
darkvater
02e020c05e (svn r1471) -Alternate icon added, made by Dominik
-VS6 project file updated (bociusz)
2005-01-10 20:53:18 +00:00
tron
1fc77885c2 (svn r1470) Revert r1457, this warning option was introduced with gcc 3.4 2005-01-10 19:27:38 +00:00
truelight
2c6e2a68b7 (svn r1469) -Fix: missed one in last commit 2005-01-10 19:14:05 +00:00
truelight
52de6766c7 (svn r1468) -Fix: really old maps do load again (Darkvater / TrueLight) 2005-01-10 19:08:25 +00:00
Celestar
c0b82db752 (svn r1467) Fixed a nasty bug where one could build one station OVER the other 2005-01-10 16:35:20 +00:00
darkvater
83b2abb6d6 (svn r1466) -Fix: oops, depot windows can of course also scroll horizontally. Thanks si-m1. 2005-01-10 14:56:26 +00:00
darkvater
29b4ab04c3 (svn r1465) -Fix: [1099101] starting year patch goes out of range. Clamped year between 1920-2090 as wel as adding defines for it. 2005-01-10 14:43:00 +00:00
darkvater
fae367ab31 (svn r1464) -Fix: [1099106] Resizeable portion of bus/air/rail depots window unclickable 2005-01-10 14:36:08 +00:00
darkvater
1261a44cec (svn r1463) -Fix: [1099451] Game crashes after the click on Rename (see also Bug 10992). There was no check for non-selected engine 2005-01-10 14:24:40 +00:00
darkvater
49e7939a10 (svn r1460) -Fix: [1099225] Bug Fix - Vehicle Lists not updated at Acqusition (thx tamlin and mpetrov) This also fixes some bug but can't find i right now. 2005-01-10 12:14:15 +00:00
darkvater
53bd40ebaf (svn r1458) -Fix: remove byte *s again for windows. 2005-01-10 10:38:02 +00:00
tron
cd4e73193d (svn r1457) Make Darvater happy: -Wdeclaration-after-statement 2005-01-10 09:33:18 +00:00
tron
b9fed3391b (svn r1456) Simplify isWagon(), make it static and give it a canonical name (IsWagon) 2005-01-10 08:25:43 +00:00
miham
aacb89ed53 (svn r1455) Fixed spritecache.c to compile 2005-01-10 07:26:19 +00:00
darkvater
52bfa90d5e (svn r1454) -Fix: small warnings in spritecache.c 2005-01-10 01:50:17 +00:00
dominik
aa261049f4 (svn r1453) Feature: MD5 hash check for TTD files
The original TTD files are now checked with a MD5 sum to determine which version of the grf files is used and to warn about possible file corruptions. (Thanks to ledow for the original patch)
2005-01-10 01:14:26 +00:00
miham
c77e9231ef (svn r1452) Fixed missing option from settings.c (Simen Graaten) 2005-01-09 21:39:49 +00:00
tron
49584082a0 (svn r1451) Fix some of the signed/unsigned comparison warnings 2005-01-09 21:25:44 +00:00
miham
c6c86abeee (svn r1450) Updated norwegian townname generation (Simen Graaten) 2005-01-09 20:45:07 +00:00
darkvater
fbcc84bdcf (svn r1449) -Fix: signed/unsigned error on windows
-Change: Makefile added -Wsign-compare flag
2005-01-09 18:59:16 +00:00
truelight
97479f9613 (svn r1448) -Fix: The current_order of a vehicle is now correctly saved (caused
massive desyncs)
  Warning: savegames which are made with the nightly of 08-01-2005 will 
   NO LONGER work!!
2005-01-09 18:49:18 +00:00
tron
55e6b4f928 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic 2005-01-09 17:55:11 +00:00
truelight
32f480a4ae (svn r1445) -Fix: reversing a train also reverses the UP and DOWN status for the
realistic acceleration calculation
-Fix: there was a big bug in setting the UP and DOWN flags making it 
easy possible for a overloaded train to go up a mountain. This is no 
longer possible. They will hang at a certain height
2005-01-09 16:02:06 +00:00
truelight
9853d4e0d4 (svn r1444) -Fix: fixed weight for double-head trains (and with that the acceleration)
(now maglev lvl4 can reach their top speed, and are faster than lvl3) 
(Tnx to Darkvater :))
-Fix: Buy Vehicle GUI now shows HPs bigger than 32000 correctly
2005-01-09 14:45:19 +00:00
miham
598addff94 (svn r1443) Added feature that users are able to place multiple accepting industies nearby in the editor mode if the appropriate patches are set 2005-01-09 14:07:59 +00:00
celestar
86c3bfd66d (svn r1441) Fixed a couple of warnings, and removed a pointless assert 2005-01-09 10:04:30 +00:00
celestar
e17a8989cf (svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
terminals in every group can be freely chosen
-Codechange: AT_OILRIG is now 15, so that new airports can be added
easily.
2005-01-09 08:49:40 +00:00
miham
13dda25334 (svn r1439) Daily langfile updates [except latvian for non-iso8859-1 chars] (semi-automatic)
The last patch (norwegian townnames was from Simen Graaten
2005-01-09 01:11:01 +00:00
miham
0f339f3a6b (svn r1438) Added norwegian townnames 2005-01-09 00:17:01 +00:00
darkvater
5edecb9495 (svn r1437) -Fix: Safetileadd preprocessor magic is the same as for GCC and no longer extern 2005-01-08 23:59:49 +00:00
dominik
bfc670b4d9 (svn r1435) Fix: [ 1094092 ] Toolbars accessible via keyboard in spectator mode 2005-01-08 20:55:21 +00:00
dominik
4b6a846d9c (svn r1434) Fix: [ 1098553 ] Crash when all vehicles from a vehicles per station list had been removed 2005-01-08 19:34:00 +00:00
truelight
5110ffeef4 (svn r1432) -Fix: I seem to be unable to revert a simple file :s 2005-01-08 15:31:20 +00:00
truelight
ead1aa8dfc (svn r1431) -Fix: oeps, I added my personal Makefile in the last commit :( 2005-01-08 15:28:16 +00:00
truelight
d4d4a46436 (svn r1430) -Fix: starting openttd with -g <invalid_name> now acts normal 2005-01-08 15:26:58 +00:00
truelight
788f543bc3 (svn r1429) Change: bumped savegame to revision 5.
- Now orders are bigger
   - Now _map2 is official 16 bits
2005-01-08 12:47:26 +00:00
miham
3be9515d84 (svn r1428) Compiling with MSVC6 documentation update (from the wiki) [Bociusz] 2005-01-08 12:03:21 +00:00
bjarni
4972b3722e (svn r1427) fixed issue where the wrong sprite could be used if autoreplacing between single and multiheaded trains 2005-01-08 10:38:07 +00:00
truelight
dcca3cf80b (svn r1426) -Codechange: cleaned up the reference code in the saveload routines
-Codechange: removed next_in_chain_old, and saved ->next for Vehicles
  (and bumped savegame revision for that to version 4.4)
-Codechange: Added _sl.full_version, which has both major and minor version
2005-01-08 09:48:08 +00:00
celestar
90871eeb9e (svn r1425) Added hotkeys for dock and airport toolbar 2005-01-08 09:40:22 +00:00
dominik
634c395a6f (svn r1424) Add dynamite to landscaping toolbar (hotkey 'D') 2005-01-08 09:24:15 +00:00
dominik
69a4df909c (svn r1423) Fix: [ 1084074 ] Delayed news messages 2005-01-08 09:09:11 +00:00
dominik
3f7da833d1 (svn r1422) Fixed linux compiling, that was broken in r1420 2005-01-08 08:29:12 +00:00
bjarni
db4668c057 (svn r1421) improved autoreplace multiheaded trains. It now remembers the current heading for an engine instead of turning all of them like the first one and the last the other way 2005-01-08 01:05:24 +00:00
darkvater
b11f7c7817 (svn r1420) -Fix: Console alias, load_game functionality and load fix (sign_de) 2005-01-08 00:48:10 +00:00
bjarni
2da54df9df (svn r1419) fixed issue where autoreplacing dualheaded trains turned the last engine the wrong way 2005-01-08 00:22:11 +00:00
darkvater
116789022c (svn r1418) -Feature: [1098254] (dis)Allow Shares. Add patch options to allow buying/selling of shares (Hackykid) 2005-01-07 23:59:59 +00:00
dominik
b78b576b21 (svn r1417) Fix: The invisible tiles on the southern border are now converted to class MP_VOID when an old map (with wrong classified invisible tiles) is loaded.
I bumped the minor savegame version for that, even though it's not really necessary. We're not gonna run out of minor savegame versions anyway though. ;)
2005-01-07 18:13:56 +00:00
tron
76c7f3b14e (svn r1416) Print sensible information in SafeTileAdd() if gcc is used 2005-01-07 17:47:29 +00:00
tron
35972e68e1 (svn r1415) Move TILE_FROM_XY and TILE_XY to map.h and push TILE_[XY] bits from map.h into map.c.
Now the whole source except map.c is independent of TILE_[XY]_BITS!
2005-01-07 17:40:23 +00:00
tron
7ca6b2b8b0 (svn r1414) Move TileIndex, TILE_MASK and GET_TILE_[XY] to map.h and turn the latter into inline functions names Tile[XY] 2005-01-07 17:02:43 +00:00
dominik
f5c33e5073 (svn r1413) Fixed a serious memory leak problem. The invisible tiles on the southern border now have the correct tile type (MP_VOID) again. Please note that older maps might still have incorrect border tiles, thus still causing overflows. 2005-01-07 12:33:28 +00:00
celestar
9a4465f9c0 (svn r1412) -Feature/Fix: Aircraft refit options have been restricted to "sane"
values.
-Feature: aircraft can now be refitted "mail-only"
-Feature: Passengers aircraft now ignore the amount of mail for "full
load any" options
2005-01-07 09:51:16 +00:00
truelight
e58739c559 (svn r1411) -Fix: structure packing in the OS/2 version (eg, with the old loader). 2005-01-07 09:28:16 +00:00
celestar
8ed132a5b9 (svn r1410) Replaced all occurences of 'passanger' by 'passenger' in the code 2005-01-07 08:38:27 +00:00
tron
a6ba0d3fbe (svn r1409) Simplify some preprocessor magic 2005-01-07 08:07:24 +00:00
darkvater
a3c0e81230 (svn r1408) -Fix: uninitialized variable :) 2005-01-06 22:50:48 +00:00
truelight
63e97754fb (svn r1407) -Codechange: changed a lot around _stations, _vehicles, _towns and _industries
(in prepare of dynamic arrays):
  - DEREF_XXX is changed into GetXXX
  - All direct call are directed via GetXXX
  - struct Industry has now an index-field
  - ENUM'd some stuff
  - Replaced home built loops with FOR_ALL_XXX
  - Added _stations_size, _vehicles_size, ... which gives the length of the
    array (which will be dynamic in the near future)
  - Changed lengtof(XXX) to _XXX_size (e.g. _stations_size)
  - Removed all endof(XXX) (because mostly it was part of a FOR_ALL_XXX)
  - Made the sort-functions of all 4 dynamic
  - Made all 4 Initialize functions more of the same
  - Some minor tab-fixing and stuff
  (tnx to Tron for proof-reading my 100kb patch ;))

  Note for all: please do NOT directly call _stations, _vehicles, _towns and
  _industries, but use the right wrapper to access them. Thank you.
  Ps: please also do not use 'v++', where v is of type Vehicle *.
2005-01-06 22:31:58 +00:00
bjarni
a4111363c0 (svn r1405) Added half done Estonian translation (indrek) 2005-01-06 19:40:44 +00:00
darkvater
deabdb666f (svn r1404) -Fix: Company password no longer shares a widget with buying shares 2005-01-06 18:54:13 +00:00
miham
57aebadb15 (svn r1403) Daily langfile updates (semi-automatic) [505 missing strings] 2005-01-06 18:49:51 +00:00
tron
8b7c1e94e1 (svn r1402) Trim trailing whitespace 2005-01-06 18:45:28 +00:00
truelight
2c9cd8f68c (svn r1401) -Fix: glitches in train-depot GUI (tnx to Hackykid)
-Fix: glitch in Company Overview GUI (Hackykid)
2005-01-06 17:40:57 +00:00
truelight
8e58dd8dec (svn r1400) -Fix: signal stays red if a track is removed (Darkvater / Tron / TrueLight) 2005-01-06 17:14:37 +00:00
truelight
c06dd27c33 (svn r1399) -Fix: Fixes for compiling with Watcom C/C++ (ie, OS/2 port). (orudge)
Note: If people could watch out for initialising structs with
  *non-constants* in future... it's a bit annoying, I
  know, but Open Watcom isn't the only compiler which
  doesn't support this (yet) - Borland, for example,
  still doesn't like it.
2005-01-06 15:57:26 +00:00
darkvater
becd9c224e (svn r1398) -Feature: CTRL+V (Paste) now works on all editboxes. This includes 'Add Server', chat, etc. Feature is Windows only. 2005-01-06 15:54:09 +00:00
tron
5b7e224f46 (svn r1397) Add missing RESIZE_NONE 2005-01-06 12:34:22 +00:00
tron
f8c95a1dbe (svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff 2005-01-06 11:39:00 +00:00
tron
790b03c707 (svn r1395) Fix assertion when building road bridge 2005-01-06 08:08:17 +00:00
bjarni
1e99155d61 (svn r1393) fix [ 1096026 ]. Autorenew trains should now hopefully work like it did before autoreplace was added
DEREF_ENGINE is now used in autoreplace
2005-01-05 19:28:10 +00:00
tron
cc465f0f35 (svn r1392) Use TileOffsByDir() instead of home brewed table 2005-01-05 19:12:47 +00:00
tron
5583fd89b3 (svn r1391) Make an assert map size agnostic 2005-01-05 18:59:02 +00:00
tron
2cdc210193 (svn r1390) Use TileOffsByDir() instead of home brewed table 2005-01-05 18:09:06 +00:00
truelight
523a6a1cff (svn r1389) -Add: [Network] Added packet protection. No longer a client or server
reads beyond the size of the packet
-Fix: [Network] A server no longer crashes when a client sends an 
invalid DoCommand, but drops the client instead.
2005-01-05 14:39:48 +00:00
dominik
f1e9fdf76d (svn r1388) Feature: [SDL] Show revision number in window title 2005-01-05 14:20:23 +00:00
dominik
6735135773 (svn r1387) Fix: Airplanes now also crash when only one invalid order is in the schedule 2005-01-05 13:48:38 +00:00
tron
67161506ad (svn r1386) Move TileIndexDiff to map.h
Move _tileoffs_by_dir to map.[ch] and encapsulate it in TileOffsByDir()
2005-01-05 13:32:03 +00:00
dominik
2543158c8e (svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel) 2005-01-05 13:15:27 +00:00
dominik
61761cfab1 (svn r1384) Fix: Sometimes when lists were saved, a lot of blank lines had been added 2005-01-05 11:19:57 +00:00
dominik
87e5984ae2 (svn r1383) Fix: You can now also delete automatically found servers by pressing "del"
Fix: The scrollbar is correctly updated when deleting servers
2005-01-05 10:47:59 +00:00
tron
9294d33611 (svn r1382) Make automatic placement of rails in front of train depots map size agnostic 2005-01-05 10:20:51 +00:00
dominik
e31da8532e (svn r1381) Fix: [ 1095143 ] Servers list now also saves the port 2005-01-05 09:59:45 +00:00
darkvater
c4b682f996 (svn r1380) -Fix: missed widget fixes; thanks Jango and TestMan57 2005-01-04 21:45:38 +00:00
darkvater
4c5f6fe360 (svn r1379) -Fix: various GUI glitches. Added default sizes to various widgets. Sticky/Resize- and Scrollbar must be 11 pixels wide, Horizontal scrollbar 11 pixels high, caption must be 13 pixels. I hope I didn't forget any widgets, the game will assert for that so report them to me! 2005-01-04 21:28:09 +00:00
bjarni
0fe19ed2ac (svn r1378) Fix: train engines are now only replaced if the engine is really set to be replaced and they are replaced to the type that engine type is set to be replaced to (instead of whtat the first engine in the train is set to) 2005-01-04 20:19:00 +00:00
darkvater
2af42f48b9 (svn r1377) -Fix: only a server can rename a town in a MP game 2005-01-04 19:49:44 +00:00
bjarni
29d2f6ed6c (svn r1376) fixed an issue where a modified client could try to replace a vehicle to an invalid engine ID and crash the server. Now the server just rejects the request. Also added a check for vehicle ownership, so you should not be able to replace other player's vehicles 2005-01-04 17:54:16 +00:00
darkvater
6edb21231e (svn r1375) -Fix: [1050990] Buying trains sometimes accounted for incorrectly. Was the result of the cost getting reset in a recursive call of docommand. That is fixed. In addition all cost-commands are typed explicitely. Please do not forget to do so or your costs will be credited to construction if you are unlucky. 2005-01-04 17:11:03 +00:00
darkvater
88b8a01da6 (svn r1374) -Feature: Add sticky item to finances window; sticky remains when requesting big/small window
-Moved resize icon in save dialog to bottom-right
2005-01-04 17:04:10 +00:00
darkvater
101ccce895 (svn r1373) -Fix: compilation fix for windows 2005-01-04 16:04:28 +00:00
truelight
27df6c86fc (svn r1372) -Fix: fixed some GUI glitches introduced with resize-buttons 2005-01-04 15:49:30 +00:00
truelight
c5d6230c66 (svn r1370) -Add: added console support for loading maps. Use 'load', 'list_files'
and 'goto_dir' to navigate and load games.
2005-01-04 15:06:08 +00:00
darkvater
4f496b8681 (svn r1369) -Feature(ish): Added sprites for up/down and left/right arrows. Anywhere where there are horizontal scrollers these are now left/right arrows 2005-01-04 14:54:27 +00:00
truelight
86fa7720f9 (svn r1368) -Fix: Disabled dropdown menu options are gray again (instead of blue)
(redid revision 1357)
2005-01-04 13:45:58 +00:00
matthijs
a9b3d8c998 (svn r1367) -Fix: Full-Loading trains no longer get "lost" after a while (Hackykid) 2005-01-04 00:54:12 +00:00
darkvater
cdfb3d5113 (svn r1366) -Fix: [1093186] rough land in snow upon dying of tree 2005-01-04 00:53:52 +00:00
darkvater
3a48ab4c54 (svn r1365) -Fix: very, very nasty buffer overflow bug introduced with replace vehicles. You CANNOT access the i[255] of an array that only has 255 elements! I will kick the next person that does that so hard...goddammit (I only noticed it because it screwed up my console in the debug build and took me at least an hour to fix) 2005-01-04 00:07:58 +00:00
darkvater
5a9478cdba (svn r1361) -Remove .cod files from VS6 project as well (bociusz) 2005-01-03 22:16:02 +00:00
tron
39bb863024 (svn r1359) Fix typos in last commit 2005-01-03 22:12:36 +00:00
tron
2f2688b829 (svn r1358) Assert bounds of depot list when searching for a depot 2005-01-03 22:07:40 +00:00
darkvater
579d51b1b2 (svn r1357) -Fix: Disabled dropdown menu options are gray again (instead of blue) 2005-01-03 22:04:34 +00:00
darkvater
f6c4e3eb1c (svn r1356) -Fix: [1092363] missing GCC_PACK in oldloader.c (thx hafken) 2005-01-03 21:51:24 +00:00
darkvater
9a49fda8e6 (svn r1355) -Fix: [1092473] random trees in scenario editor do not overwrite rocks as well 2005-01-03 21:47:52 +00:00
tron
d922ca68e7 (svn r1354) Use WindowClass/WindowNumber to store/pass window class/number, not some arbitrary data types 2005-01-03 21:29:59 +00:00
darkvater
52c87a0330 (svn r1353) -Fix: [1092707] placing rocks in scenario editor. You can place rocks on trees and vice versa 2005-01-03 21:26:09 +00:00
darkvater
1ee725ef35 (svn r1352) -Fix: [1093200] Drive side in new games. Setting the driver side is possible during the game until someone buys road vehicles. In networked games only the server can change it. 2005-01-03 21:05:03 +00:00
bjarni
ad24d6cb04 (svn r1351) fixed issue in last commit where it it not update the replace train window properly when changing company colour (the lower two panels stayed the old colour until the window was reopened) 2005-01-03 21:01:37 +00:00
bjarni
e0c4e144b9 (svn r1350) Replace Vehicle GUI:
- Replaced "WP(w,replaceveh_d).line_height" with 
"w->resize.step_height" since they needed to be the same anyway
- Cleaned the code a litte for readability (like correct tabbing)
- Added company color to replace vehicle windows to make them look like 
the rest of the vehicle windows and made the caption text white (also to 
fit the standard)

 --This line, and those below, will be ignored--

M    vehicle_gui.c
M    lang/english.txt
M    window.h
2005-01-03 20:52:09 +00:00
darkvater
363dd7bdf0 (svn r1349) -Fix: [1093485] Dissappearing rocks in Scenario Editor 2005-01-03 20:20:25 +00:00
truelight
a94fe04a9a (svn r1348) -Feature: resizable windows. Read the comment in window.h to find out
how the system works. All useful windows are already made resizable. Enjoy :)
-Fix: fixed some GUI-glitches and flaws along the way
2005-01-03 19:45:18 +00:00
darkvater
5b6be88587 (svn r1347) -Fix: Some were fixed for the trees -> Only copy the lowest two bits (amount of snow/desert) from map5 to map2 when placing trees, before this happened implicitly because map2 was just 8 bits wide; 2005-01-03 19:34:07 +00:00
darkvater
79d29b7633 (svn r1346) -Fix: fix signed/unsigned warnings
-Fix: latent removal of 2 lines from ttd.c which I forgot because the file was not saved :O
2005-01-03 19:09:45 +00:00
tron
afb6e5441d (svn r1345) Only copy the lowest two bits (amount of snow/desert) from map5 to map2 when placing trees, before this happened implicitly because map2 was just 8 bits wide 2005-01-03 19:06:16 +00:00
tron
c0702318d2 (svn r1344) Use MapSize[XY]() (or MapSize()/MapMax[XY]() where appropriate) instead of TILES_[XY] 2005-01-03 18:59:58 +00:00
truelight
d382463f8a (svn r1343) -Fix: [Graphic] Autorail icon is now correct (Darkvater)
-Fix: [Graphic] Added resize icon (tnx tokai)
2005-01-03 18:49:45 +00:00
darkvater
a72d993e65 (svn r1342) -Fix: [1094596] Problem with ship depot; upon load it is also given owner OWNER_WATER 2005-01-03 18:40:41 +00:00
darkvater
3ee8697bbf (svn r1341) -Fix: fix WWT_FRAME drawing when there is no text there (STR_NULL)
-Copyright notice is now 2002-2005 for all languages
2005-01-03 17:55:25 +00:00
darkvater
ca1b3a80ae (svn r1340) -Feature: scrolling credits list...finally! Hope nobody gets offended if I forgot them. 2005-01-03 16:45:42 +00:00
darkvater
d317a93e0f (svn r1339) -Fix: compilation with networking works on MinGW32 again (thx orudge). 2005-01-03 14:33:59 +00:00
darkvater
39f8b82640 (svn r1338) -Fix: fix signed/unsigned warnings introduced when ditching the macros for map querying. 2005-01-03 14:07:49 +00:00
tron
32bfe0dddd (svn r1337) Use MapMax[XY]() (or MapSize[XY]() if appropriate) instead of TILE_MAX_[XY]
While here replace one erroneous TILE_MAX_X with MapMaxY()
2005-01-03 12:56:22 +00:00
dominik
4c14afba4e (svn r1336) Fix: Correct landscaping buttons in monorail and maglev toolbars 2005-01-03 12:15:55 +00:00
dominik
288c52b688 (svn r1335) Removed wrongly renamed STR_TOWNNAME_ADDITIONAL_ENGLISH from all language files 2005-01-03 12:03:24 +00:00
dominik
2cb37408a3 (svn r1334) Fix: [ 1093466 ] no more glitches with many maps in the scenario list when creating server 2005-01-03 11:58:53 +00:00
dominik
60ba9c3280 (svn r1333) Fix: No crash when creating a game with American town names any more 2005-01-03 11:45:11 +00:00
truelight
7e89cd8643 (svn r1332) -Fix: Desert-landscape does no longer crash (protected GetMapExtraBits
from overflowing)
2005-01-03 11:11:16 +00:00
tron
6c4840fa50 (svn r1331) Update map size before sending game info 2005-01-03 09:14:31 +00:00
tron
29e71638ce (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows 2005-01-03 08:50:44 +00:00
tron
608cdbe3f6 (svn r1329) Remove unused function declaration 2005-01-03 08:34:54 +00:00
tron
09dd8053a9 (svn r1328) Turn loop with explicit terminator element into loop using endof() 2005-01-03 08:33:04 +00:00
darkvater
ae336f146d (svn r1327) -Fix: made resource file version independent for windows
-Fix: language file inconsistencies...please update all other language files as well when you rename a string name and do nothing else.
2005-01-03 00:42:43 +00:00
bjarni
6a6cbdd9b4 (svn r1326) fixed compiler warnings in vehicle_gui.c and widget.c 2005-01-02 22:28:56 +00:00
darkvater
efc2702491 (svn r1325) -Fixed eol-style properties on new files. Please before adding a new file to svn use: "svn propset svn:eol-style native <filename's>"!!
-Fix: the level land icon no longer flashes (was palette colour)
2005-01-02 21:52:21 +00:00
bjarni
2351271889 (svn r1324) Fixed problem with autoreplace GUI and msvc6 (thanks bociusz) 2005-01-02 17:39:01 +00:00
bjarni
29d8c5bb50 (svn r1323) Adding autoreplace feature
This feature works much like autorenew, but it will get you a new engine type instead of a new one of the same type. Once 
ordered, it will automatically replace the engines while they visits a depot. The GUI for setting this up have been added on the 
vehicle overview windows
Note: autorenew is now autoreplace, but to the same engine type
Nice new features, that was added to make this possible
- windows can now have two independant vertical scrollbars
- CMD_SHOW_NO_ERROR have been added as a flag for DoCommandP. It will make it do the action instead of showing the red box with 
estimated costs even if shift is pressed
- fixed problem where enginetypes where not initialized when loading a game. It's now done in InitializeGame()
2005-01-02 17:23:04 +00:00
truelight
a11f46fed4 (svn r1322) -Add: banning system (mostly tnx to guru3)
A server can ban people via ClientList
  Both server and dedicated can do it via console:
   'ban', 'unban', 'banlist'.
2005-01-02 12:03:43 +00:00
truelight
5d06584545 (svn r1321) -Fix: Revision 1302 partly solved the problem and created an other.
Should now really be solved.. now only MP_WATER is owned by OWNER_WATER
2005-01-01 19:18:48 +00:00
truelight
a0716c39de (svn r1320) -Fix: fixed chat-bug (that from a certain moment, nobody could talk).. 1
variable was still byte instead of uint16 (with a very big tnx to guru3!)
2005-01-01 16:34:54 +00:00
truelight
461ca703ff (svn r1318) -Fix: Saving a game fucked up the industries.. sorry ;) 2005-01-01 15:40:44 +00:00
truelight
36333076d5 (svn r1314) -Fix: Population numbers is no longer negative for 32k+ towns 2004-12-31 19:09:03 +00:00
truelight
2ebc5011f3 (svn r1313) -Fix: fixed MSVC problem 2004-12-31 18:59:22 +00:00
truelight
92ac503b74 (svn r1312) -Add: Patch which is on by default: population in label of the town
-Fix: Expand town is a bit more agressive
-Fix: Fixed a bug in growing algorithm
2004-12-31 18:57:24 +00:00
truelight
1fef394fde (svn r1308) -Update: updated MSVC project files 2004-12-31 15:55:14 +00:00
truelight
d76ecbba7c (svn r1307) -Fix/feature: rewrote the townname generation code. Code is much more
readable now. 'American' is replaces by 'Additional English' (Jango)
2004-12-31 14:43:47 +00:00
miham
6c1e2989b1 (svn r1303) Daily langfile update (automatic) 2004-12-31 09:47:09 +00:00
truelight
4b38004a49 (svn r1302) -Fix: [ 1091655 ] In some older maps somehow water is owned by
OWNER_NONE instead of OWNER_WATER.
-Fix: On InitializeLandscape the map was made MP_WATER, but OWNER_NONE. 
 When ConvertGroundTilesIntoWaterTiles() is not called, this gives big 
 problems (see above). Now the owner is set to OWNER_WATER by default.
2004-12-30 10:29:28 +00:00
truelight
546fcfa3ec (svn r1301) -Codechange: _industries finally has FOR_ALL_INDUSTRIES too 2004-12-30 10:03:35 +00:00
truelight
32c3fbd18e (svn r1300) -Fix: The cost for an autorenew was not always send to the right player ;) 2004-12-30 09:46:40 +00:00
truelight
635b854c29 (svn r1299) -Fix: [ 1092473 ] In SE, when trees are placed randomly, they are no
longer placed on farmland
2004-12-30 09:43:12 +00:00
truelight
bcc3b1cbb5 (svn r1298) -Fix: [ 1092661 ] On create, the scrollbar of the server-list was not updated 2004-12-29 15:32:10 +00:00
miham
57852f6498 (svn r1297) Language fixes in the source.. (ln-) 2004-12-29 13:13:29 +00:00
celestar
14dfb539b0 (svn r1296) Cleanup for MSVC files (bociusz) 2004-12-29 11:00:34 +00:00
truelight
fe08f457bc (svn r1295) -Fix: [ 1092499 ] Copy order was fucked up, because memcpy said:
sizeof(uint16), instead of sizeof(Order).
2004-12-29 08:42:30 +00:00
miham
e24c0ec9df (svn r1294) Daily langfile updates (automatic) 2004-12-28 22:46:09 +00:00
miham
37a18c858f (svn r1293) Fixed the bug in translator 2004-12-28 22:36:46 +00:00
truelight
6735bffd39 (svn r1292) -Codechange: also updated the town/industry sort-list to be uint16 compatible 2004-12-28 17:50:17 +00:00
truelight
e6a59be8c0 (svn r1291) -Codechange: prepared subsidies and towns to become an uint16 (happens
after savegame bump)
2004-12-28 17:40:15 +00:00
bjarni
c4d073a4de (svn r1290) Added type to typedef struct Engine and filled in the same data as in type in vehicle
it was kind of lame that you should use AircraftVehInfo(), ShipVehInfo() etc. if you wanted to know what type the engine is
2004-12-28 17:18:46 +00:00
truelight
5b8c604f47 (svn r1289) -Fix: Minor fix for OS/2 message boxes (orudge) 2004-12-28 12:11:34 +00:00
truelight
c2ee8d70e4 (svn r1288) -Codechange: changed _map2 to an uint16. It is still saved and loaded as
an uint8 till the savegame version is bumped to version 5. Then it works 
automaticly as a fully uint16. So _stations[] can not be increased till 
after the bump!!
2004-12-28 11:51:31 +00:00
truelight
41201f488c (svn r1287) -Fix: reversed 1285, because it is not the solution. This also means
that getting a lot of money with shares is back... :(
2004-12-28 09:55:55 +00:00
truelight
c531739602 (svn r1286) -Fix: oeps, I clamp'd some numbers wrong :$ 2004-12-28 09:31:38 +00:00
truelight
a5a811f767 (svn r1285) -Fix: your loan is now substracted from your company value 2004-12-28 09:29:40 +00:00
truelight
15d188d7f8 (svn r1284) -Fix: Fixed 'money-cheat' (read: bug which could give people a lot of money) 2004-12-28 09:24:02 +00:00
truelight
8dcbf2675b (svn r1283) -Add: AutoRenew is now a client-side patch instead of a game-side patch
Note: this is the first commit that breaks compatibility with 0.3.5!
-Fix: Bufferoverflow with autorenew_money. It is now a 32-bit integer.
2004-12-27 18:18:44 +00:00
truelight
96b36ec01e (svn r1282) -Fix: forget 2 files for the OS/2 patch. And forgot to add:
patch by Orudge, great job!!
2004-12-27 13:40:30 +00:00
truelight
1f4c1e8821 (svn r1281) -Fix: the OS/2 is now finished. Fixes:
- Networking
  - File selector issue
  - Keyboard input
  - Dedicated server console issue (use dedicated.cmd to open a server)
  - Plus many other minor issues
2004-12-27 10:40:04 +00:00
truelight
f3c8f40c51 (svn r1280) -Codechange: made the last patch a bit more... readable (in other words:
use that spacebar!!)
2004-12-27 10:24:38 +00:00
bjarni
b01382c20b (svn r1279) Fixed the scrollbar in the network gui(server list). It now updates when scrolling (HackyKid) 2004-12-26 22:09:34 +00:00
matthijs
e4ee040a04 (svn r1278) (Applied to trunk/ and branch/map/)
-Made media/opentdd.64.png non-executable
-Created an xpm version of media/openttd.64.png (required for debian)
2004-12-25 20:59:11 +00:00
miham
c575939ef4 (svn r1277) Daily langfile updates (automatic) 2004-12-25 17:08:56 +00:00
truelight
c5cca49117 (svn r1276) -Fix: [Network] Bug in bind system. Advertising failed on systems with
more then 1 ip, and server_bind active to one of them.
2004-12-24 08:54:00 +00:00
bjarni
7e0f47ff15 (svn r1274) Makefile: networking is not longer experimental 2004-12-24 00:33:41 +00:00
miham
4972ba9a78 (svn r1273) Daily langfile updates (automatic) 2004-12-24 00:24:13 +00:00
truelight
4ec9356ba2 (svn r1272) -Fix: game compiles again with network disabled 2004-12-24 00:13:32 +00:00
darkvater
de597eb7d2 (svn r1271) -Fix: set eol-style to native on missing files
-Added known_bugs file with open bugs on SF..should be included with installer
-Updated installer for 0.3.5
2004-12-24 00:00:10 +00:00
bjarni
7d18544b04 (svn r1270) Updated all languages so they are ready to be released
moved russian, turkish and latvian 'translations' to lang/unfinished so we do not release 'translations' with nearly no translated strings
2004-12-23 23:53:13 +00:00
truelight
3b60676e64 (svn r1269) - Updated changelog.txt and readme.txt for 0.3.5
- Marked docs/console.txt as out-dated
2004-12-23 23:32:07 +00:00
darkvater
d7bc1d776c (svn r1268) -Fix: some warnings in gfx.c fixed
-Fix: Makefile now correctly works for cygwin/mingw; altough defining only cygwin does not compile the game
-Fix: moved SDL information message from severity 0 to 1. Only errors/severe warnings should be level 0
2004-12-23 23:15:07 +00:00
darkvater
1e8cfa10bf (svn r1267) -Fix: fix the wrong language file postfix strings...if you do such a change in english.txt, please also update the other language as well too! 2004-12-23 22:45:24 +00:00
darkvater
b249954538 (svn r1266) -Fix: fix some cygwin/mingw warnings
-Note: when compiling with MinGW (-mno-cygwin) __MINGW32__ is defined; when compiling without it __CYGWIN32__ is defined. You need to set either -mno-cygwin (MinGW) or -mwin32 (Cygwin) to have WIN32 defined
2004-12-23 22:31:46 +00:00
truelight
dda14faac5 (svn r1265) -Fix: the server can also no longer use the money cheat if the
advertise-mode is active
2004-12-23 21:58:01 +00:00
dominik
6788a614d1 (svn r1264) Fix: Default currency is GBP again and the currency identifier is displayed correctly in the config file 2004-12-23 20:42:24 +00:00
truelight
97ec7de9e6 (svn r1263) -Fix: [Network] Client-names are limited (serverside) to 25 chars
-Fix: You can enter some more chars in the chatbox
2004-12-23 20:33:57 +00:00
darkvater
ffed7d6834 (svn r1262) -Fix: [1088996] kill some warnings for MinGW (luzi82) 2004-12-23 20:23:05 +00:00
bjarni
c330e4203e (svn r1261) Removed the English strings from danish.txt 2004-12-23 19:50:01 +00:00
darkvater
0533d9ff6e (svn r1260) -Fix: [1090357] Patch for braindead MinGW compiler (luzi82) 2004-12-23 19:33:17 +00:00
truelight
f5b68e2d9d (svn r1259) -Fix: [Network] Network now compiles with glibc 2.1 (MacBaine) 2004-12-23 19:23:56 +00:00
dominik
58c153b9ac (svn r1255) Renamed "postfix" to "suffix", for strings and variable names 2004-12-23 18:28:13 +00:00
dominik
60052ffb45 (svn r1254) - Fix: [ 993500 ] High bridge rendering error
- Changed button to open landscaping toolbar
2004-12-23 18:14:12 +00:00
truelight
1558948b9b (svn r1253) -Update: updated the multiplayer doc a bit.
Via this commit I wanted to thank everyone who helped with this new 
 network, with some people by name: Bjarni, for Endian support, 
 Hackykid, for Masterserver and ingame server-list, Geniusdex, for 
 suggestions and bug reporting, Darkvater, for the Windows testing, 
 Tron, for his comments and suggestions for the network, sign_de, for his 
 general help around the network, orudge, for his kind offer to host 
 our masterserver, dominik, for the network GUI, and all the others I 
 did not mention or forgot. Thank you all :)
2004-12-23 17:59:37 +00:00
truelight
c9645885d0 (svn r1252) -Add: [Network] With 'set restart_game_date' you can set the date for in
which year the server must restart hisself. (0 = disabled, default value)
2004-12-23 17:37:26 +00:00
truelight
3672ae1118 (svn r1251) -Fix: [Console] The alias 'clean_company' is now working correctly 2004-12-23 17:12:30 +00:00
truelight
c48ba54a09 (svn r1250) -Fix: a dedicated server could not kick user number 1 2004-12-23 15:33:47 +00:00
truelight
3f87f29a81 (svn r1249) -Fix: new files in the last commit had double content 2004-12-23 15:08:53 +00:00
truelight
a9bb5be49d (svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
Works fine, beside some minor stuff:
  - Network is not working yet
  - Keyboard is not working
  - No MIDI support
  - 'A few file selector bugs involving drives'
2004-12-23 14:46:16 +00:00
truelight
d91326fb4a (svn r1247) -Fix: [ 1090313 ] Shares are now also sold when a company goes bankrupt 2004-12-23 14:02:40 +00:00
truelight
a14a78de34 (svn r1246) -Fix: [ 1090099 ] Company-messages did crash the game, because
company-index was sent, which should have been the client-index
2004-12-23 13:53:05 +00:00
truelight
533e7a97ef (svn r1244) -Fix: no longer show the current password when 'set company_pw' is called
without parameters (technical not possible, sorry DV)
2004-12-23 13:03:48 +00:00
darkvater
b4c80052fe (svn r1243) -Fix: Scenario road-building toolbar also stickified. Thx for the notice teeone 2004-12-23 11:36:22 +00:00
darkvater
79bbc37daa (svn r1242) -Fix: fix some morhpos warnings (tokai) 2004-12-23 11:31:06 +00:00
darkvater
3a98db672b (svn r1241) -To get empty password, '*' is not needed in the gui; forgot to remove it from the tooltip...it's late already. 2004-12-23 00:33:44 +00:00
darkvater
28c1dc3e39 (svn r1240) -Fix: OpenTTD once again compiles if ENABLE_NETWORK is disabled.
-Fix: removed some warnings
-Enabled ENABLE_NETWORK on windows again which I accidentally commented out.
2004-12-23 00:24:44 +00:00
darkvater
c4836bbd70 (svn r1239) -Feature: Added gui option of setting company password. It can be found in the 'company information' window
-Spiced up 'set company_pw' a bit, where if no pw is typed, it shows the current one.
-Added a space between company name and player; looks better
2004-12-22 23:24:53 +00:00
bjarni
0e3399177e (svn r1238) Changelog update with the mac specific stuff since 0.3.4 2004-12-22 22:52:06 +00:00
darkvater
39727d6a81 (svn r1237) -Fix: Viewports crash when too many viewports are open. Their amount was not updated to reflect the updated windows amount (thx lefti) 2004-12-22 21:37:28 +00:00
bjarni
fb345e983e (svn r1236) MorphOS: added make release like in OSX (tokai)
MorphOS: cleaned up the code telling the difference between AmigaOS and MorphOS (tokai)
2004-12-22 21:12:36 +00:00
miham
64e153fc34 (svn r1235) Daily langfile updates (automatic) 2004-12-22 21:09:45 +00:00
dominik
e297eada07 (svn r1233) Fixed several currency issues. Now currencies should work correctly again. 2004-12-22 19:48:27 +00:00
tron
51cbbd0438 (svn r1232) Plug memory leak 2004-12-22 19:16:56 +00:00
truelight
51257991c0 (svn r1231) -Fix: missing header file for console_cmds.c 2004-12-22 19:16:10 +00:00
truelight
d66adc937d (svn r1228) -Add: [Network] When a server normally shuts down, it removed itself
from the server-list
2004-12-22 18:56:52 +00:00
truelight
90b2b2144b (svn r1227) -Add: Ingame Server-list (select Internet, then Find Servers)
-Fix: UDPListener was launched wrongly
-Fix: Not all sockets have broadcast enabled anymore
-Fix: Server-advertise retries 3 times before giving up
2004-12-22 18:42:56 +00:00
darkvater
ed0a42f940 (svn r1225) -Feature: SHIFT+DEL now deletes all non-vital windows (only status bar and main bar remain)
-Fix: For everyone who tried to crash the game by opening a huge amount of windows and stickying all of them; bad luck. It's fixed now (thanks Tron for the helpful criticism). First all normal windows are a candidate for replacement, then if none are found, sticky windows. Then..well that should not happen :)
2004-12-22 17:37:21 +00:00
dominik
b7f71b026d (svn r1222) Currency cleanup. Changed some currency symbols according to forum suggestions (thx ChrisCF) and rearranged the currencies alphabetically (except for the major ones). 2004-12-22 16:54:55 +00:00
darkvater
5c7decc27d (svn r1219) -Fix: compilation for windows release build (forgotten VARDEF) 2004-12-22 15:45:41 +00:00
dominik
68e1cdbdea (svn r1218) Fix: Autosaves go to the correct folder again with keep_all_autosave enabled 2004-12-22 15:32:50 +00:00
dominik
4f4fa940d8 (svn r1215) Feature: You can now make a custom currency by chosing "Custom..." 2004-12-22 13:19:26 +00:00
darkvater
46af99b8c0 (svn r1214) -Feature: Stickified Industries (list & window), Smallmaps (all three), Stations (list & window) and Towns (list & window). I hope I didn't forget to update a widget somewhere :O
-Feature: With the sticky windows on and some unfortunate resizing of your game it the 'close' button might go outside of the playing field, making it impossible to close. Added an option to the Options menu that closes all windows, even if they are stickified ("Close ALL windows")
2004-12-22 01:32:30 +00:00
darkvater
f55303b0a8 (svn r1213) -Feature: Stickified vehicle lists 2004-12-22 00:45:05 +00:00
darkvater
222d6ca952 (svn r1212) -Feature: sticky windows all build-toolbars 2004-12-22 00:18:40 +00:00
darkvater
160a0a5ee1 (svn r1211) -Feature: Introduce sticky windows to all vehicle windows...Just make sure you do not sticky more than 23 at a time. Also a lot of places in the code invalidated the 'status bar' of the vehicle, referring to it as widget 4. This is now widget 5 and has been #definitized 2004-12-21 23:27:58 +00:00
miham
9a0c994fa8 (svn r1210) Daily langfile updates (automatic) 2004-12-21 22:53:55 +00:00
truelight
91d1805fb1 (svn r1209) -Fix: fix compiler warning (sorry) 2004-12-21 19:39:21 +00:00
truelight
af4f4069ee (svn r1208) -Fix: the owner-check introduced in r1203 now also works correctly for
bridges (the middle-parts don't have any owner)
2004-12-21 19:37:10 +00:00
celestar
d9199657c1 (svn r1207) -Fix: Compiler warning due to the modified catchment areas 2004-12-21 19:07:23 +00:00
dominik
8bf52f8c0f (svn r1206) Fix: Polished build docks window a bit. 2004-12-21 18:30:51 +00:00
dominik
1e1eac5f17 (svn r1205) Fix: Made the network window a bit wider, so that other languages don't have overlapping strings 2004-12-21 17:41:12 +00:00
truelight
19e3842615 (svn r1204) -Add: [Network] Added some cheaters-protection (money-cheat mostly) 2004-12-21 17:31:10 +00:00
truelight
8ab0190c29 (svn r1203) -Fix: the pathfinder no longer sees rail with an other owner as a
possible route. This also makes sure signals don't show red because 
there is a train on the track of an other owner.
2004-12-21 17:12:20 +00:00
truelight
07d0fd6719 (svn r1202) -Fix: removed unused variable 2004-12-21 16:56:43 +00:00
truelight
9044110096 (svn r1201) -Fix: I forgot to add a * in r1183 ;) 2004-12-21 16:54:46 +00:00
truelight
d8709b18c6 (svn r1200) -Fix: Fixed bug pointed out by Tron: when a train is on the
road/rail-crossing, and you let an other train drive towards it, reverse 
it, the lights no longer go off.
2004-12-21 16:17:27 +00:00
truelight
8ee37e7b47 (svn r1199) -Fix: [ 958098 ] No longer road/rail crossing signals hang when a train
is reversed at the wrong moment (Yeah, our longest open bug finally 
fixed :) :) :))
2004-12-21 16:02:14 +00:00
truelight
24853eb42c (svn r1198) -Fix: [ 1087701 ] It is no longer possible to crash trains of other
companies by building a depot close to a station. (even more: trains do 
no longer enter tiles that do not belong to his owner)
2004-12-21 16:00:14 +00:00
truelight
c136432978 (svn r1197) -Fix: [GUI] in r1194 someone deleted too much code from WE_KEYPRESS. Now
you can change your player-name in the GUI again :)
2004-12-21 14:54:27 +00:00
truelight
245bc59c68 (svn r1196) -Fix: Preview Vehicle had a small glitch. Fixed now. 2004-12-21 14:42:06 +00:00
miham
97865f03f6 (svn r1195) Daily langfile updates (automatic) 2004-12-21 14:35:19 +00:00
dominik
7cfaa8a418 (svn r1194) Feature: You can now add and remove servers from the server list. Those will be remembered until you delete them by pressing the Delete key. 2004-12-20 22:14:39 +00:00
tron
3bbea05a93 (svn r1189) Fix vehicle list update glitch when moving waggons in depots 2004-12-20 18:11:22 +00:00
truelight
3d0cd51f27 (svn r1188) -Fix: [Network] Fixed that CTRL+<key> could sometimes hang a dedicated
server till enter was pressed. CTRL+D after a random key still does hang 
the dedicated server till enter is pressed.
2004-12-20 16:35:16 +00:00
truelight
9b237345d1 (svn r1187) -Fix: [Network] You can no longer join as spectator a game with no
companies (a lot of code can simply not handle it)
2004-12-20 16:15:19 +00:00
truelight
5f25a0788a (svn r1186) -Fix: [Network] You can now join a company on a server where a company
went bankrupt, without joining the wrong company (or even failing to do so)
2004-12-20 16:02:01 +00:00
truelight
7460764d91 (svn r1185) -Fix: [Network] Send to team now results in correct company on the sender 2004-12-20 15:26:19 +00:00
truelight
36ce6a7e4f (svn r1184) -Fix: [Network] %p as chat message no longer gives funny result (tnx to
GeniusDex (that makes 10 ;)))
2004-12-20 15:25:39 +00:00
truelight
7e61a04785 (svn r1183) -Fix: Newsmessage-validation-pointer was never reset, causing some nasty
crashes (tnx to GeniusDex for the clear backtrace)
2004-12-20 14:38:28 +00:00
truelight
28d34b0f56 (svn r1182) -Fix: Makefile had a small glitch, making it impossible to compile the game (Oskar_) 2004-12-20 14:37:52 +00:00
miham
5caca8d64e (svn r1181) Daily langfile updates (automatic) 2004-12-20 12:38:33 +00:00
bjarni
123acd5a73 (svn r1180) Makefile: fixed dependancies so the flag -j can be used. It makes the compilation process into more than one job which makes it able to benefit from multiple CPUs. Using -j without setting a limit of jobs (like -j2) is not a great idea (thanks to ln-- for reporting the need for this one) 2004-12-19 23:27:20 +00:00
dominik
110b410af4 (svn r1179) Fix: Tooltips for vehicle list sorting
This has gotta be the greatest kick for Moriarty!
2004-12-19 22:23:32 +00:00
dominik
862370f232 (svn r1178) Fix: Error message for building canals on slopes is correct 2004-12-19 22:17:27 +00:00
tron
7182b2508d (svn r1177) Enable non-stop flag for waypoints 2004-12-19 21:03:16 +00:00
truelight
0807891501 (svn r1176) -Fix: [Network] PlayerBasedMenu's caused crashes when a company went bankrupt 2004-12-19 19:17:15 +00:00
truelight
60204bd309 (svn r1175) -Fix: [ 1086375 ] Backup-order-list was not closed with an OT_NOTHING,
resulting in order-lists mixing together (maybe tnx to Darkvater, not 
sure though..)
2004-12-19 16:26:45 +00:00
truelight
db16262698 (svn r1174) -Fix: [Network] All strings can now be translated (no more hardcoded strings) 2004-12-19 15:14:55 +00:00
truelight
96c1e88d56 (svn r1173) -Fix: [Network] Console input in dedicated server for windows was not
working (Hackykid)
2004-12-19 14:42:17 +00:00
truelight
9bd54b592d (svn r1172) -Fix: [Network] Pressing CTRL+C in dedicated server now closed the server 2004-12-19 14:08:29 +00:00
dominik
8c6c4e5262 (svn r1171) Fix: Console hotkey works again on keyboards where this key is a deadkey. 2004-12-19 13:28:09 +00:00
dominik
18dd7ebae2 (svn r1170) Fix: news_gui.c should compile everywhere without warnings now. 2004-12-19 13:06:20 +00:00
truelight
4d94803d32 (svn r1169) -Fix: [Network] [ 1087591 ] When you want to be a spectator, you now
stay a spectator even if someone else joins.
2004-12-19 10:24:45 +00:00
truelight
0e19f74c16 (svn r1168) -Cleanup: [Network] Cleaned the network code a bit. Added 'const'
and 'void' where needed, prefixed all functions, typedefs and global 
vars with 'Network' and organized all externals nicely.
2004-12-19 10:17:26 +00:00
dominik
bb5dca016d (svn r1167) Feature: Added the possibility to add validation functions to NewsItems. This is now done for "Train in depot" messages. Before displaying such a message, it checks if the train really still is in the depot. Can be applied to other news items as well. 2004-12-19 09:39:19 +00:00
dominik
cf89cb12cd (svn r1166) Fix: [ 1040119 ] Flooded wagons in depots don't keep constantly exploding any more 2004-12-19 09:33:02 +00:00
dominik
f18b913493 (svn r1165) Fix: [ 1085255 ] Docks now have a button to display the catchment area 2004-12-19 09:31:35 +00:00
dominik
61d744c38a (svn r1164) Redid fix from revision 1163 to work with all patch settings 2004-12-19 09:30:05 +00:00
dominik
453c85e61d (svn r1163) Fix: [ 1087403 ] Crashed trains aren't reported to have too few orders any more 2004-12-18 21:11:45 +00:00
dominik
853c11d301 (svn r1162) The server list can now be automatically filled from the config file. Add a section [servers] with the addresses each in a new line. Those will be checked upon OpenTTD startup. 2004-12-18 18:58:03 +00:00
tron
b9779176d5 (svn r1161) Don't make redundant GetAirport() calls, use the cached value 2004-12-18 18:19:49 +00:00
truelight
c7b5cc3787 (svn r1160) -Fix: redid revision 1159. pid_t should not be defined under windows. 2004-12-18 18:13:37 +00:00
darkvater
158a4d897b (svn r1159) -Fix: pid_t was unknown to windows; typedeffed to int. 2004-12-18 18:05:56 +00:00
tron
1fd06cf773 (svn r1158) Make network compile on SunOS 2004-12-18 17:31:02 +00:00
dominik
74a0d26d0e (svn r1157) Enhanced the config file (openttd.cfg) to use another section type. "List sections" as opposed to "variable sections" contain a list of values, separated by a new line. This is now used for the [newgrf] group. You have to edit each line in this section from e.g. "0 = firstset.grf" to only "firstset.grf". 2004-12-18 16:00:10 +00:00
truelight
17a613546c (svn r1154) -Add: [Network] Forked dedicated server (start openttd with -Df) (GeniusDex) 2004-12-18 14:19:21 +00:00
truelight
3f2d2d8f37 (svn r1153) -Fix: FindCatchmentRadius is now a function that uses the enums instead
of magic numbers (tnx to Stumo)
2004-12-18 13:38:27 +00:00
truelight
88b94c3c67 (svn r1152) -Add: [Network] Added signal handling (GeniusDex) 2004-12-18 13:15:41 +00:00
tron
80a9fa962d (svn r1151) Fix last commit |: 2004-12-18 12:46:29 +00:00
tron
a4e5ed68fd (svn r1150) Fixes:
- Don't crash when building or destroying airport without depots (bugs were latent before r1149)
- Delete all hangar windows when destroying an airport, not just the first one (before r1149 none where deleted)
2004-12-18 12:40:34 +00:00
tron
376c5adb7c (svn r1149) Fix hack which abuses first TileIndex of airport depot array as number of depots (similar change as in map branch) 2004-12-18 12:19:04 +00:00
dominik
64f98e058d (svn r1148) Fix: The console hotkey is finally working properly on all keyboards. It's the key on the top left corner 2004-12-17 23:32:54 +00:00
truelight
9d05289147 (svn r1146) -Fix: You can no longer change waypoints whom are owned by somebody else 2004-12-17 17:06:20 +00:00
tron
ef89eb019a (svn r1145) Remove stray line which crept in in last commit 2004-12-17 09:02:41 +00:00
tron
e75954a7ab (svn r1144) Don't rely on sizeof() to determine the map size, use MapSize() instead 2004-12-17 09:01:24 +00:00
miham
52685ad50c (svn r1143) Daily langfile updates (automatic) 2004-12-17 04:42:55 +00:00
truelight
da24f97483 (svn r1137) -Fix: [Network] Replaces all strncpy with ttd_strlcpy.. windows really
does not like strncpy for some silly reason.
2004-12-16 15:51:18 +00:00
truelight
f04d49ca17 (svn r1136) -Fix: [Network] Revision check on windows-servers is working now 2004-12-16 15:35:19 +00:00
truelight
f6e23d726f (svn r1135) -Fix: added map.c/h to vc6 project file (bociusz) 2004-12-16 14:57:25 +00:00
truelight
5e28fb8f97 (svn r1131) -Add: [Network] Autoclean_companies (set it with 'set autoclean_companies on/off').
When enabled, empty companies (companies with no active clients) with no 
 password are declared bankrupt after 1 year of emptyness.
For empty companies with password, the password is removed after 3 years 
 of emptyness.
The delay of removing company/password can be configured via:
 - 'set autoclean_protected <months>'
 - 'set autoclean_unprotected <months>'
2004-12-16 13:59:23 +00:00
tron
89fd12692f (svn r1130) Add helper functions to query map size 2004-12-16 12:30:13 +00:00
truelight
74a149127d (svn r1129) -Add: [Network] Added 'reset_company <company-id>'. If a company is
empty (no clients logged on to it), a server can delete a company via 
this command in the console.
2004-12-16 11:36:57 +00:00
truelight
dccd3adb9b (svn r1128) -Fix: [Network] Going bankrupt of human-players was corrupted in networkgames 2004-12-16 11:36:00 +00:00
truelight
523ba1ff50 (svn r1127) -Fix: [Network] Protect the network against an illegal PLAYER_CTRL (in
which a modified client could, for example, delete a random active company)
2004-12-16 11:35:08 +00:00
truelight
693d074d76 (svn r1126) -Fix: [Network] Pressing Disconnect on the GUI puts you back to the
main-menu (so you no longer stay ingame (if you were))
2004-12-16 11:12:59 +00:00
truelight
c5770907ac (svn r1125) -Fix: [Network] You can now safely join a company again 2004-12-16 11:09:00 +00:00
truelight
e5a2abb872 (svn r1124) -Fix: [Network] Also the server now has the option Give Money in
ClientList (tnx to teeone for reporting)
2004-12-16 11:04:43 +00:00
darkvater
83981e40b5 (svn r1121) -Feature: Added sticky windows feature. A small pin allows the user to set the window as undeletable and can only be closed by hand. As an example the viewport window has been stickied (thanks to Neko-San)
-To use the feature add WDF_STICKY_BUTTON to the widget description and update all widget-ID's since sticky button will be widget 2.
2004-12-15 23:33:04 +00:00
miham
ec94450aef (svn r1119) Fixed url in manpage 2004-12-15 22:50:20 +00:00
matthijs
76363231be (svn r1118) * Added a minimal manpage with references to where to get real info
* Specified installation locations in the os/debian/rules script so it works now.
2004-12-15 22:46:53 +00:00
tron
765ecfed84 (svn r1117) Move map arrays and some related macros into their own files map.c and map.h 2004-12-15 22:18:54 +00:00
truelight
736718ef53 (svn r1116) -Add: [Console] With 'set server_advertise on/off' you can put server
advertise on/off via console (requested by imachine)
2004-12-15 22:06:47 +00:00
tron
15265ac40a (svn r1115) Put every source file on an extra line 2004-12-15 22:05:40 +00:00
miham
37192a99a6 (svn r1114) Daily langfile updates (automatic) 2004-12-15 21:54:13 +00:00
truelight
5f51b42c99 (svn r1113) -Add: [Network] Added the GUI part for server advertising. When you go
to Start Server, you can select by connection: 'Internet (advertise)'. 
When selected, the server will announce itself to the server-list at 
http://servers.openttd.org (when finished)
2004-12-15 21:54:07 +00:00
truelight
88862fcdb6 (svn r1112) -Fix: _decode_parameters was increased to [20], but not all temp-dparams were 2004-12-15 21:45:44 +00:00
darkvater
2d5a938621 (svn r1111) -Fix: Some language file fixes. Added a space in 'company information' and fixed most not-same-format as english.txt problems. Some are remaining because they need translations. 2004-12-15 21:45:05 +00:00
darkvater
ce4bff7fa5 (svn r1110) -Fix: Empty console commands were executed and returned error message (sign_de for GeniusDex) 2004-12-15 21:30:20 +00:00
tron
39b3e71239 (svn r1109) Fix c&p bug: In vehicle lists a name was displayed for road vehicles even if they had none 2004-12-15 21:25:33 +00:00
truelight
fa1f026367 (svn r1108) -Fix: [Network] Fixed problem around slow clients:
They joined, they got the map, but it took some time before the new 
player was created. In this time a player could do stuff, causing a 
player-id-mismatch, and the player was kicked out. Now a player get's a 
nice GUI which says: registering.. When that is gone, the player is 
joined and can play safely. Tnx to Moriarty for bugging me with this bug ;)
2004-12-15 21:13:52 +00:00
truelight
9595ee80e3 (svn r1107) -Fix: [Network] A spectator can no longer buy/sell shares of companies 2004-12-15 20:24:26 +00:00
truelight
015fb81810 (svn r1106) -Add: [Network] Added master-server protocol and advertise to
master-server option. No GUI yet, and disabled by default (it still is WIP)
2004-12-15 20:10:34 +00:00
darkvater
d867a845fd (svn r1104) -Fix: nasty server crash buffer overflow problem when using release build. Big thanks to Truelight for the guidance in fixing this very annoying bug!
-VS.NET now treats warnings as errors too in the release build.
2004-12-15 20:08:01 +00:00
truelight
d7d3ff4849 (svn r1102) -Fix: [Console] 'set server_pw' was acting crazy when you typed more
chars then it could take
2004-12-15 17:40:12 +00:00
truelight
a4a3d829be (svn r1101) -Fix: [Console] Removed magic numbers 2004-12-15 17:31:18 +00:00
truelight
b615e854e1 (svn r1100) -Fix: [Console] 'set company_pw' is now working again (Hackykid) 2004-12-15 17:24:10 +00:00
darkvater
f1b6b1711b (svn r1098) -Fix: server without revision build doesn't care about the client's version. Also moved all revision things where it belongs (network.c) 2004-12-15 16:51:55 +00:00
truelight
29b844a408 (svn r1096) -Fix: [Network] PlayAs is now registered correctly
-Codewise: [Network] Cleaned some code, removed some comment, changed 
some wrong comment
2004-12-15 15:19:51 +00:00
darkvater
c8ca2a8604 (svn r1095) -Fix: scenario editor road-build-gui works again altough shortcuts are screwed.
-Feature: Pressing enter on 'Abandon Game' returns to main menu (one less click \o/)
2004-12-15 11:42:05 +00:00
miham
f3ca6a9180 (svn r1094) Daily langfile updates (automatic) 2004-12-15 10:56:33 +00:00
darkvater
c58549d512 (svn r1093) -Fix: Hopefully fixed windows revision issues once and for all. Removed globalness of _openttd_revision and put all such ifdefs into one place. If server has a revision only the same revisions can join; if the server has no revision everyone can join. I reckon this should be a server-side option to allow people to join or not to join. 2004-12-15 00:31:08 +00:00
dominik
6cb53e7d34 (svn r1092) Fix: Autorail can be accessed with the 'a' hotkey again 2004-12-14 21:56:01 +00:00
dominik
af9dc1f817 (svn r1091) Fix: Finally station names use 100% the correct color in transparent mode 2004-12-14 20:54:01 +00:00
truelight
b6c74c1c20 (svn r1090) -Fix: Made the _openttd_revision variable global, and with that
hopefully killed the windows-revision problem. If WITH_REV is defined, 
for both Windows as *nix system _openttd_revision is filled with normal 
info, else _openttd_revision is set to 'norev000'
-Fix: Small possible server-crash
2004-12-14 20:27:00 +00:00
miham
52aeaebde0 (svn r1089) Daily langfile updates (automatic) 2004-12-14 20:21:52 +00:00
dominik
20f36f8c88 (svn r1088) Strings cleanup. Renamed some strings to reflect their content. 2004-12-14 19:47:35 +00:00
truelight
967762e5ef (svn r1086) -Fix: [Network] [ 1084774 ] Fixed quick-share-sell bug 2004-12-14 18:17:24 +00:00
truelight
55f3347514 (svn r1085) -Fix: [Network] [ 1084834 ] If IF_IN_NETWORK flag was on, an error
resulted in infinite money (or assert)
2004-12-14 18:13:02 +00:00
dominik
23612e41f2 (svn r1084) Generalized hotkey catching when textfield windows are open. Now only hotkeys attached to the main toolbar are working if you have a textfield open. 2004-12-14 17:38:48 +00:00
dominik
a94da5937c (svn r1083) Fix: the console "script" command saves all output to the textfile, not only printf stuff (sign_de) 2004-12-14 17:06:54 +00:00
dominik
7196860373 (svn r1082) Feature: Chat toolbar
- to chat with all players press Return (or Shift-T) and type in the message
- Press Return again to send the message
2004-12-14 16:53:38 +00:00
miham
833ce98409 (svn r1081) Daily langfile updates (automatic) 2004-12-14 15:24:36 +00:00
tron
1fcf823d66 (svn r1080) Improve mini-map scrolling in a similar way as viewport scrolling (r1063): now the centre of the mini-map window is the region of interest instead some arbitrary coordinate. 2004-12-14 08:01:12 +00:00
darkvater
043b8bc5ad (svn r1079) -Fix: you can once again quit the game in windows by pressing ALT+F4 or the 'exit' button in the main menu. 2004-12-14 00:45:24 +00:00
bjarni
1b386f46b4 (svn r1078) md5.c vc6 + vs.net fix for release builds (sign_de) 2004-12-13 22:19:37 +00:00
dominik
a9972399c5 (svn r1077) Implements scripts/autoexec.scr to get executed on game starting (sign_de)
- %! allows to merge alias parameters
- \% allows to use % in alias strings
- "alias" command now overwrites the old alias list entry
2004-12-13 22:13:02 +00:00
dominik
77e882c3bd (svn r1076) Feature: Patch setting to autosave the game on exit
If you set autosave_on_exit = true in openttd.cfg, your game will be saved as exit.sav in the autosave folder and you won't be asked if you want to quit the game any more.
2004-12-13 22:10:12 +00:00
miham
2b13b2d239 (svn r1075) Daily langfile updates (automatic) 2004-12-13 21:28:38 +00:00
dominik
27e008d3f7 (svn r1074) Fix: server_bind_ip was set to 255.255.255.255 by default
The correct default value is 0.0.0.0. If you are experiencing problems with connecting to your server you'll have to change the value of server_bind_ip to 0.0.0.0 in openttd.cfg
2004-12-13 21:23:28 +00:00
dominik
9aeb0e1d30 (svn r1073) - condebugger extended a bit [shows the commandline] (sign_de)
- fixed handling of aliases with parameters (sign_de)
2004-12-13 20:45:55 +00:00
dominik
def5fc3ff7 (svn r1072) Fixed a few warnings that made trouble in VS .NET 2003 2004-12-13 20:12:45 +00:00
truelight
db6a545203 (svn r1069) -Add: [Network] Added UDP-packet for detail info about a server for
upcoming server-listing
2004-12-13 19:55:31 +00:00
truelight
cf205d059f (svn r1068) -Fix: [Console] Let the client remember his own name-change 2004-12-13 19:54:44 +00:00
truelight
c185adf780 (svn r1067) -Add: [Console] Added comment for scripts (everything behind the # is
ignored) (GeniusDex / sign_de)
2004-12-13 19:07:54 +00:00
truelight
5b2cd5fae0 (svn r1066) -Fix: Crash when saving game as spectator (tnx to GeniusDex for reporting) 2004-12-13 18:53:59 +00:00
truelight
551d0622c5 (svn r1065) -Add: [Console] Alias support. Type 'list_aliases' to show them all (sign_de) 2004-12-13 18:51:08 +00:00
truelight
92b8ec9ff8 (svn r1064) -Fixed typo (tnx GeniusDex) 2004-12-13 18:34:31 +00:00
tron
d1d33372ff (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
Hopefully this new code is also a bit more comprehensible than the old. (;
2004-12-13 18:33:47 +00:00
truelight
d6e4999f1f (svn r1062) -Fix: [Console] Compile warnigs in Get/SetPatchSettings 2004-12-13 18:32:49 +00:00
truelight
2e7f669153 (svn r1061) -Fix: [Network] Compiling without ENABLE_NETWORK now works again correctly 2004-12-13 17:58:53 +00:00
truelight
9ced62e239 (svn r1059) -Fix: [Console] Renamed 'set port' to 'set server_port'
-Add: [Network] Add ip-bind ('set server_bind_ip <ip>' in console or use 
scripts/pre_dedicated.scr)
2004-12-13 17:47:21 +00:00
truelight
382b924b41 (svn r1058) -Add: [Console] 3 aliases for newgame: new_game, newmap, new_map (this
annoyed me for some time now)
2004-12-13 17:07:32 +00:00
truelight
b153236503 (svn r1057) -Add: [Network] 'set port <port>' changes the port of the server (after reboot)
-Fix: [Network] Fixed warnings that came with last revision
-Cleanup: [Network] Removed an unused var (_network_client_port)
2004-12-13 17:04:41 +00:00
truelight
549dafc241 (svn r1056) -Fix: [Network] Give the dedicated-server always a console in windows (sign_de) 2004-12-13 16:51:10 +00:00
truelight
e7886b6a34 (svn r1055) -Add: [Console] Special for dedicated servers:
- You can change patch settings via 'set patch <patch_name> [<value>]'
2004-12-13 16:16:28 +00:00
truelight
25dfbc3134 (svn r1054) -Fix: [Network] Redid revision 1024, only a bit more nice this time
(revision length is back to 10, and checking is now done correctly)
2004-12-13 16:15:21 +00:00
truelight
bff8c0af61 (svn r1053) -Change: [Console] Changed 'setservername', 'setpassword', 'protect' and 'name' in:
- set server_pw "password"
 - set server_name "servername"
 - set company_pw "password"
 - set name "playername"
(patch by sign_de)
2004-12-13 15:07:33 +00:00
truelight
1c4c5ae370 (svn r1052) -Fix: [Network] You can't join a server when revision mismatches. 2004-12-13 14:57:58 +00:00
truelight
c0247e66e8 (svn r1051) -Fix: [Network] New Company button is disabled when there is no more
space for a new company
2004-12-13 14:49:31 +00:00
truelight
4d7c2e9d90 (svn r1050) -Fix: [Network] Scripts are no longer under revision control
-Add: [Network] Moved original scripts to be example scripts
2004-12-13 14:43:41 +00:00
truelight
f80094deb7 (svn r1045) -Fix: OpenTTD compiles again under VC6 (sign_de) 2004-12-13 11:17:59 +00:00
truelight
c0603e4768 (svn r1042) -Fix: [Network] Hopefully enabled revision-check for windows (somehow
windows uses WITH_REV_HACK instead of WITH_REV :s)
2004-12-13 09:01:24 +00:00
tron
523b37a3e9 (svn r1041) Under certain circumstances obsolete fields are included in the size calculation of a chunk in a savegame which leads to failed loads. This wasn't triggered because the necessary conditions weren't met. 2004-12-13 07:41:04 +00:00
dominik
2690ba03b2 (svn r1040) Fix: All character hotkeys are disabled now when a window for typing is open 2004-12-12 22:05:08 +00:00
bjarni
9e3ca26ae6 (svn r1039) Makefile: now RELEASE flag can contain () too 2004-12-12 21:18:39 +00:00
dominik
52134822b8 (svn r1038) Feature: OpenTTD runs with the grf files of the DOS version
Please read the Readme for further information. There are some minor graphical glitches when you use the DOS files. E.g. the autorail button is a bit screwed up.
2004-12-12 20:36:24 +00:00
dominik
3c3ba97d11 (svn r1037) Rearranged landscaping hotkeys a bit more.
See this URL for the list of hotkeys: http://wiki.openttd.org/index.php/Hotkeys
2004-12-12 18:51:24 +00:00
miham
99f0cda875 (svn r1036) Daily langfile updates (automatic) 2004-12-12 18:49:50 +00:00
dominik
7188778c81 (svn r1035) Fix: Added a line that I accidentally deleted in r1033 2004-12-12 18:20:05 +00:00
bjarni
625b0ffec0 (svn r1034) Makefile: fixed issue where it would not compile if RELEASE string contained space. Did the same fix to OSXAPP, just in case it's changed to something containing space at a later date 2004-12-12 18:10:35 +00:00
dominik
532aa593a6 (svn r1033) -Add: 'l' openes the landscaping toolbar globally 2004-12-12 18:06:48 +00:00
dominik
3887747e4a (svn r1032) Fix: Pressing "-" crashed the game 2004-12-12 18:05:36 +00:00
truelight
c8452c5195 (svn r1031) -Fix: [Network] The unique-id was not as unique as I though it was.. 2004-12-12 17:47:50 +00:00
dominik
6d8a0c52f5 (svn r1030) Some toolbar icons are arranged differently:
- Landscaping buttons have to be accessed from the landscaping toolbar
 - Landscaping toolbar can be opened from all other toolbars
 - The order of buttons in the docks toolbar now matches the other toolbars
 - Landscaping toolbar has new keyboard shortcuts
2004-12-12 17:42:04 +00:00
truelight
8057dd2214 (svn r1029) -Update: also added md5.h to vc6 / vc.net project files (bociusz) 2004-12-12 17:32:32 +00:00
truelight
96bf7074e3 (svn r1028) -Update: updated MSVC6 project file (bociusz) 2004-12-12 17:22:02 +00:00
tron
8f7373427e (svn r1027) Add tooltips to the per-station vehicle list buttons 2004-12-12 17:20:46 +00:00
truelight
0e79314353 (svn r1026) -Add: [Network] Added unique id, so in network, each client has an
unique id (generated via md5)
2004-12-12 16:04:32 +00:00
truelight
5221f35182 (svn r1025) -Fix: [Network] [ 1083687 ] Sending to depot caused desync because the
new pathfinder uses a random, and the goto_depot uses the new pathfinder 
(if enabled)
2004-12-12 15:43:55 +00:00
truelight
a65302dafe (svn r1024) -Fix: [New Network] Revisions can now be longer then 10 chars, so I made
it 20 chars long
2004-12-12 14:28:08 +00:00
truelight
397bd915a3 (svn r1023) -Fix: [Network] [ 1083692 ] You can no longer buy out a company in MP
because of the lag between commands (anyway, I hope)
2004-12-12 14:00:25 +00:00
truelight
e027fa76b1 (svn r1022) -Fix: [Network] [ 1083690 ] The password dialog made the network
disconnect without cleaning up.
2004-12-12 13:46:10 +00:00
dominik
920a93071b (svn r1021) Updated Spec file for Linux RPM release builds 2004-12-11 19:20:00 +00:00
truelight
5b72167c8c (svn r1018) -Fix: Buffer overflow in edit box, because we misuse maxlen for a flag..
someone should rewrite the editbox!
2004-12-11 12:30:12 +00:00
Celestar
7559b9fed1 (svn r1017) Solved a Segfault if a station was built too close to the northern corner 2004-12-11 12:12:51 +00:00
tron
f995fd08a1 (svn r1016) Make the cargo sorter not consider the number of wagons of a particular cargo type but the sum of their capacity.
Also add the number sorter to sort by vehicle number if the cargo capacity is equal.
2004-12-11 11:00:54 +00:00
tron
0ba5123cef (svn r1015) MFM r789
Replaced the slightly misleading SERVICE_INTERVAL by a function VehicleNeedsService()
2004-12-11 10:17:10 +00:00
miham
5a3ef18c94 (svn r1013) Daily langfile updates (automatic) 2004-12-11 09:51:55 +00:00
truelight
8dc2405ad6 (svn r1012) -Fix: [Network] Endless loop if a server was offline (WizKid) 2004-12-10 22:01:17 +00:00
bjarni
72559a785e (svn r1011) Makefile, mac: added absolute path to hdiutil (default location) to fix the path issues when building nightly builds with a cronjob 2004-12-10 20:22:24 +00:00
bjarni
88cdb99ff7 (svn r1010) Makefile: removed the outdated remove of ttd binary from make clean (should only be a check for openttd binary)
Tron forgot to credit Celestar for last commit (rev 1009)
2004-12-10 18:24:35 +00:00
tron
5b0915e677 (svn r1009) -Feature: per-station vehicle lists
This adds a little button per vehicle class to the station window which opens a list of all vehicles that have this station on their schedule.
As side effect this gets rid of some global variables.
2004-12-10 18:16:08 +00:00
tron
55bac62c5a (svn r1007) Remove the last SET_DPARAM (: 2004-12-10 15:12:48 +00:00
miham
38f5ef6bd4 (svn r1006) Daily langfile updates (automatic) 2004-12-10 13:58:39 +00:00
tron
bd1d21911d (svn r1005) Don't treat orders in the normal load routine as old orders, this lead to corruption on load. 2004-12-10 13:10:17 +00:00
tron
ea8311301e (svn r1004) Fix harmless typo (comma instead of semicolon) 2004-12-10 13:02:47 +00:00
bjarni
c669c94ba3 (svn r1003) Mac: reintroduced the static libpng hack in makefile since it appears to be needed in the nightly builds 2004-12-10 13:00:11 +00:00
darkvater
625332a686 (svn r1002) -Fixed the placement of the OpenTTD logo a bit (thx Jango). 2004-12-09 23:49:23 +00:00
darkvater
6bc9b64421 (svn r1001) -Changed the title name to OpenTTD. Don't know how this was missed all this time; but is fixed now. 2004-12-09 23:20:32 +00:00
bjarni
74619675d5 (svn r1000) Makefile: added check for static build releases on mac. Most users can't use a dynamic build 2004-12-09 23:17:03 +00:00
dominik
416e2b67b1 (svn r999) New icons for the network interface, newgrf gui and the tiny euro 2004-12-09 23:16:52 +00:00
bjarni
02bf3ed5c0 (svn r998) now vehicles are serviced both when entering and when leaving depots to prevent that vehicles might need service when leaving after a long stay (ln--) 2004-12-09 21:46:56 +00:00
tron
93a4dbda4b (svn r990) Fix a display bug in the order list:
TTD stores invalid orders different than OTTD, this resulted in empty lines in the order list. With the overhaul of the order system this got worse: no line was shown at all.
Fix this by sanity checking while loading and convert the orders accordingly.
2004-12-09 18:18:21 +00:00
bjarni
4a818ecbb6 (svn r988) Removed the JAM file stuff since it turned out that nobody uses it anymore and it is not maintained anymore 2004-12-08 21:33:44 +00:00
bjarni
416953f6dc (svn r986) Norwegian translation update (Johannes) 2004-12-08 20:02:15 +00:00
bjarni
9ec6e0a501 (svn r985) Makefile: repaired issue in make release (OSX) 2004-12-08 19:33:44 +00:00
truelight
22951f5523 (svn r984) -Fix: deleted a debug level 0 line that was introduced in revision 978 2004-12-08 18:18:20 +00:00
bjarni
ec40598d4c (svn r983) SunOS: fixed backspace key (Oskar) 2004-12-08 18:17:58 +00:00
truelight
2bb5145a20 (svn r982) -Fix: [Network] Because dparams are misused as a char, we had some
endian-problems. To fix this, we are sending dparams byte by byte 
(instead of an uint32). Because of this dparam is sent 
not-uint32-endian-safe, but char-endian-safe. Too bad dparam can no 
longer be used for normal stuff (which is currently not the case) (tnx 
to Tron and Bjarni)
2004-12-08 18:16:43 +00:00
bjarni
ecf7e8e9a7 (svn r981) SunOS: fixed the hotkey for console (Oskar) 2004-12-08 17:14:36 +00:00
bjarni
1f31bee5e4 (svn r980) Fixed issues where MorphOS would get problems if AmigaOS would get a port, since MorphOS also have the flag __AMIGA__ defined (Tokai) 2004-12-08 16:27:54 +00:00
Celestar
5b0743d66b (svn r979) Allow more realistically sized catchment areas 2004-12-08 15:46:13 +00:00
Celestar
6fd3fc10e3 (svn r978) Fixed an endianess issue with the new Order system. Thanks to Bjarni, Oskar and Tron 2004-12-08 15:26:57 +00:00
miham
547a2d1f9f (svn r977) Daily langfile updates (automatic) 2004-12-08 13:35:00 +00:00
bjarni
7938c1b884 (svn r974) Makefile: fixed issue in make release and nightly_build, which caused failures if RELEASE contained spaces 2004-12-07 19:31:24 +00:00
bjarni
253ec52c01 (svn r973) Makefile: added make nightly_build (only on mac) 2004-12-07 18:17:41 +00:00
bjarni
701e58e157 (svn r972) Makefile: added make release (currently only works on mac)
Mac: sets the STATIC flag if no makefile.config is found
2004-12-07 17:58:06 +00:00
bjarni
bad25dec0e (svn r971) Mac: updated text files and added the link files from the releases 2004-12-07 17:27:55 +00:00
bjarni
051134ac9f (svn r970) Added 2nd data path for all non-windows OSes
added completely customizable lang path (all non-Windows OSes)
2004-12-07 17:16:57 +00:00
Celestar
a3a2f0617c (svn r962) Fixed a problem with the new order system due to missing '{}' (another place) 2004-12-06 00:03:26 +00:00
Celestar
293d5bffa8 (svn r961) Fixed a problem with the new order system due to missing '{}' 2004-12-05 23:57:08 +00:00
darkvater
c8d83ce557 (svn r960) -Fix: forgotten conversion of orders for the AI (Tron) 2004-12-05 21:30:58 +00:00
darkvater
860a39af2a (svn r959) -Fix: fix previous typo for workaround of braindead MSVC6 (Tron)
-Fix: added debug code to autosave cause it is buggy in multiplayer (does not remember settings; takes them from _opt instead of _new_opt (or vice versa)).
2004-12-05 20:02:49 +00:00
darkvater
78b651c2c9 (svn r957) -Fix: vehicle.c compiler problems for MSVC6 only! (Tron) 2004-12-05 19:50:58 +00:00
tron
7c2448ecea (svn r955) Replace uint16 for orders with struct Order
This adds no functionality, but is a stepping stone for future improvement (like 16bit order indices) and is easier to read.
This changes preserves binary compatibility wrt savegames.
2004-12-05 12:43:04 +00:00
truelight
1de8e294d8 (svn r954) -Fix: [Console] Hook fixes (sign_de)
-Add: [Console] Auto sort commands and variables (sign_de)
2004-12-05 12:25:25 +00:00
miham
cef5ac8c8b (svn r953) Daily langfile updates (automatic) 2004-12-05 11:40:58 +00:00
darkvater
6e49b85703 (svn r952) -A tiny insignificant fix for a toyland industry gfx
-Added table\sprites.h to VS.NET project file
2004-12-04 23:43:54 +00:00
bjarni
14a025a6bf (svn r951) Makefile: fixed missing flag for libpng, which prevented lib detection if SDL was not used
Makefile: Combined the OSX specific libpng code with the general one. Now OSX have no special code for libpng
2004-12-04 23:19:31 +00:00
miham
e7ee76dc56 (svn r950) Daily langfile updates (automatic) 2004-12-04 22:29:18 +00:00
bjarni
47713d05e3 (svn r949) Makefile: added DEDICATED flag to allow complilation of dedicated servers without linking to SDL. Request by Jezral 2004-12-04 20:34:59 +00:00
truelight
40121d60cd (svn r948) -Codechange: clearified my last commit a bit more with some comment in the code 2004-12-04 18:57:42 +00:00
truelight
43e495045c (svn r947) -Fix: [Network] Desync problem 2004-12-04 18:43:07 +00:00
tron
581302e147 (svn r946) Remove double patch option which crept in during merge 2004-12-04 18:27:08 +00:00
truelight
00168d4660 (svn r945) -Fix: [Network] Terraform callback went wrong in merge
-Fix: Some settings went wrong in merge
2004-12-04 18:17:52 +00:00
truelight
39382a16f3 (svn r944) -Updated vc6 project file (Hackykid) 2004-12-04 18:16:20 +00:00
truelight
b8f6d41418 (svn r942) -Merged branch/network back into the trunk 2004-12-04 17:54:56 +00:00
truelight
0434287ef8 (svn r939) -Fix: Fixed compiler errors 2004-12-04 15:02:45 +00:00
tron
e56c3cddd8 (svn r925) Use sound enums
Also play the correct sound when a toyland road vehicle breaks down
2004-12-04 09:26:39 +00:00
tron
d036559e0e (svn r924) Use RailVehInfo() instead of &_rail_vehicle_info[] 2004-12-04 07:41:37 +00:00
tron
aa183e35d8 (svn r923) Forgot s/rail_vehinfo/RailVehInfo/ 2004-12-04 00:34:20 +00:00
tron
56dd31f33b (svn r920) Replace vehicle info macros with inline functions and add asserts to check limits 2004-12-03 21:57:05 +00:00
tron
5149373467 (svn r909) Small cleanup in vehicle.c, this should fix some warnings on 64bit machines 2004-12-03 14:38:02 +00:00
tron
c00258237e (svn r907) Sprinkle holy ANSI water:
- "inline" must before the return type (and after "static")
- Initialise all struct members, not just some of them
- Remove (one) spurious semicolon
2004-12-03 07:43:00 +00:00
miham
b7f0b278fb (svn r906) Daily langfile updates (automatic) 2004-12-03 05:59:26 +00:00
tron
fdb447ac55 (svn r901) Small step in the process to clean up the DPARAM mess:
- reduce to 2 sizes (*DParam64 for 64bit values, *DParam for the rest)
- use inline functions instead of macros
- add assert()s to check for buffer overruns
2004-12-02 22:53:07 +00:00
miham
2c88f958ed (svn r880) Daily langfile updates (automatic) 2004-12-01 21:35:14 +00:00
bjarni
a317cbdc09 (svn r877) Moved bemidi.cpp correctly this time 2004-12-01 19:44:39 +00:00
bjarni
5a458590b8 (svn r876) reverted the accidently cleared bemidi.cpp 2004-12-01 19:42:42 +00:00
bjarni
e9b49ebf8e (svn r870) BeOS: made the move of bemidi.cpp properly (I hope) 2004-12-01 15:25:18 +00:00
bjarni
c925f452e7 (svn r869) Mac: finally made asserts open the console, so people should be able to see what went wrong even if they opened the game in the GUI
deleted the wrongly moved bemidi.cpp
2004-12-01 15:23:05 +00:00
bjarni
2fc6077a68 (svn r862) Cygwin: libdetection now sets the flags properly if no Makefile.config is found
Cygwin: workaround: libpng is automatically not used even if present until the Cygwin/libpng problem is solved
2004-12-01 11:50:20 +00:00
miham
ec7586dac3 (svn r857) Daily langfile updates (automatic) 2004-11-29 23:20:07 +00:00
Bjarni
00d6b3609f (svn r856) Makefile: added the flags CYGWIN and MINGW to libdetection. They were missing in the autodetected makefile.config 2004-11-29 20:26:00 +00:00
bjarni
a580b4c21e (svn r855) BeOS: moved bemidi to os/beos/ (w-ber) 2004-11-29 20:03:04 +00:00
darkvater
ccd731a2ce (svn r854) -Fix [1070274] Invisible trains. Weird macros and MSVC optimizing don't always mix. (Tron) 2004-11-29 19:26:24 +00:00
tron
d701668f50 (svn r853) -Feature: Implement improved vehicle loading algorithm
It's not FIFO loading, but does the right thing in the common case:
If a vehicle is empty and another vehicle is already loading the same cargo at this station then the vehicle waits.

This is an reworked version of [ 1072211 ] submitted by Hackykid, thanks!
2004-11-29 11:59:09 +00:00
miham
5733ad3e32 (svn r852) Daily langfile updates (automatic) 2004-11-28 22:43:46 +00:00
tron
29cec910fc (svn r850) Adjust the other language files according to revision 844 2004-11-28 21:37:23 +00:00
tron
9be1dadb04 (svn r847) Add the station type icons to strgen: {TRAIN}, {LORRY}, {BUS}, {PLANE} and {SHIP} 2004-11-28 19:46:24 +00:00
tron
d542f5624a (svn r844) Fix some typos ([ 1074329 ]) and use a bigger font in the detailed performance rating window 2004-11-28 12:24:48 +00:00
tron
6b9a744b2d (svn r843) Remove redundant variable assignments and function calls 2004-11-27 21:28:51 +00:00
tron
12d6d679b0 (svn r842) -Fix: [ 985925 ] Start/stop flag in train depots always works, regardless of the horizontal scroll position 2004-11-27 19:53:53 +00:00
pasky
97c533eb9c (svn r831) Remove station-specific roadbits magic. Tron already fixed road stations so that they don't give out roadbits in r780. 2004-11-26 22:29:02 +00:00
pasky
0554031514 (svn r830) Move the MP_STATION roadbits guard to GetTownRoadBitsByTile() wrapper of GetRoadBitsByTile(). This should really and for once fix the road-behind-road-station bug. 2004-11-26 22:21:12 +00:00
tron
908adfc191 (svn r829) Fix small glitch: Immediately redraw the tile selection square when using the hotkey to toggle removal 2004-11-26 21:52:18 +00:00
pasky
08e16d966a (svn r828) Everyone welcome table/sprites.h in trunk - so far not in use besides enum AnimCursors migrated from viewport.h and tiny fragment of enum Sprites migrated from ttd.h (we should slowly convert trunk to use the symbolic names instead of sprite numbers too to reduce the delta to map). Ported from the map branch, where the work was done by Darkvater, Celestar and Tron. 2004-11-26 21:14:42 +00:00
tron
daa599c135 (svn r827) Dye bridge ramps in the matching colours compared to the rest of the bridge
This fix was created by Celestar
2004-11-26 21:11:37 +00:00
tron
1c86acd8ba (svn r826) Seperate all bridge related tables from tunnel_land.h into their own file 2004-11-26 20:29:05 +00:00
tron
7b8bf96c2b (svn r822) Use a struct instead of pairs of bytes for the string colormap.
While here give the string colormap a more canonical name.
2004-11-26 16:55:35 +00:00
dominik
d801ca16a3 (svn r819) Code cleanup: colors for langfile strings are now taken from a color table instead of a sprite 2004-11-26 14:00:57 +00:00
miham
a295166754 (svn r818) Daily langfile updates (automatic) 2004-11-26 07:30:06 +00:00
tron
acbd1801c7 (svn r815) Include strings.h only in the files which need it.
This should reduce the compile time after altering english.txt by about 1/3, because "only" 62 instead of 90 .c files must be recompiled.
2004-11-25 10:47:30 +00:00
miham
908d2471ec (svn r814) Daily langfile updates (automatic) 2004-11-25 08:11:48 +00:00
tron
b07357373f (svn r813) Push two tables from vehicle_gui.h into vehicle_gui.c - they were in the binary 48 (!) times.
While here change the type for one table from uint16 to StringID.
2004-11-25 06:05:47 +00:00
tron
e35a0b1c44 (svn r803) Switch to ISO 8859-15
It has proper support for the euro sign and includes letters which are needed by the Latvian translation (and perhaps others), though the letter sprites are missing.
2004-11-24 22:52:57 +00:00
darkvater
669368cf21 (svn r802) -add latvian to VS.net Project (bociusz) 2004-11-24 20:56:52 +00:00
dominik
372340b731 (svn r801) - re-enabled background highlighting in Newgrf GUI
- minor Newgrf GUI fixes and adjustments
2004-11-24 20:08:38 +00:00
tron
3ef3f05288 (svn r800) Check if the data tables for houses have the correct number of elements via compile time asserts 2004-11-24 17:19:26 +00:00
tron
fca55e3741 (svn r793) Merge INLINE -> inline replacement (revision 376) 2004-11-24 13:19:48 +00:00
tron
0ea87b6473 (svn r792) Small cleanup: Kill a goto 2004-11-24 12:47:25 +00:00
bjarni
aceb89fb7d (svn r788) added a latvian translation (currently contains 0 strings) 2004-11-24 09:10:42 +00:00
tron
e8537f5512 (svn r787) Invert the sense of the DO_TRANS_BUILDINGS flag to be consistent with its own name and all other DO_* flags.
Now it is active-true.
2004-11-23 22:36:11 +00:00
miham
06158be674 (svn r786) Daily langfile updates (automatic) 2004-11-23 20:54:51 +00:00
tron
0b3cceb21d (svn r785) -Fix: A train can leave and enter the same depot at the same time, then the trai simply got stuck 2004-11-23 20:25:18 +00:00
tron
c5b0ecac4f (svn r780) Always report a bus/lorry station as unpassable.
The current behavior just causes bugs and the pathfinder does the necessary magic to handle stations as destinations and enter them anyway.
This fixes [ 1058809 ]
2004-11-23 18:04:04 +00:00
matthijs
a3cb5499bf (svn r779) Reverting last commit, svn didn't cancel the commit like I was meaning to tell it.
Tron will commit the real bugfix we were working on in a minute (I hope ;-)
2004-11-23 17:46:39 +00:00
matthijs
ca0f5ffe60 (svn r778) -Fix: [ 1064742 ]  2004-11-23 17:16:41 +00:00
pasky
2214a9df5c (svn r773) When refitting a train engine, refit also all the attached wagons which can be refitted (applicable to DBSetXL, as shown in http://pasky.or.cz/~pasky/dev/openttd/screenshots/wagrefit.png). This is how TTDPatch does it, pointed out by Bjarni. 2004-11-22 23:05:34 +00:00
pasky
34c89d6896 (svn r772) Whoops, I know. Do not consider pointer to be a boolean value. Sorry 'bout that, sirs. 2004-11-22 22:52:01 +00:00
pasky
f012e15c95 (svn r771) Do not give a file new {struct GRFFile} if it was already loaded once. Eliminates those double entries in the newgrf manager and also some possible memory leaks. 2004-11-22 22:51:19 +00:00
miham
b2e973056a (svn r770) Daily langfile updates (automatic) 2004-11-22 22:22:03 +00:00
pasky
4beb4ae2bc (svn r769) Fixed a tiny mistake in the _userstring boundary check. Let's hope I got it right this time. 2004-11-22 21:53:19 +00:00
pasky
bf587e9aac (svn r768) In the NewGRF manager, show GRF ids as 8-digit hex numbers (that's how they are supposed to look). 2004-11-22 21:48:40 +00:00
pasky
3ee0dee12a (svn r767) Introduce USERSTRING_LEN (128) and try to make sure we don't overflow it anywhere (as long as we keep USERSTRING_LEN above 7 or so). 2004-11-22 21:41:25 +00:00
darkvater
d4b723a7c9 (svn r766) -Fix: compilation problems on windows
-There is nothing wrong with uses spacebars in the code; they are not a luxury item
-Please use standard rowsizes of 14px and less magic numbers (highlighted items drawn in white as all other windows do)
-TYPEDEF structs (this goes to pasky!!)
2004-11-22 20:49:42 +00:00
tron
d51887fbed (svn r764) Enumerate the houses only one per town can exist and use the enums instead of magic numbers to check for these 2004-11-22 18:42:03 +00:00
tron
8a3d7cce1c (svn r760) Replace some bit-juggling with bit fields 2004-11-22 11:01:30 +00:00
tron
a744e8e375 (svn r757) Repair the damage inflicted on english.txt in revision 745 2004-11-22 10:26:59 +00:00
tron
40a04816a4 (svn r756) Demystify and explain some piece of code regarding which house sprite to draw 2004-11-22 10:09:37 +00:00
miham
6d81770985 (svn r746) Daily langfile updates (automatic) 2004-11-21 23:20:11 +00:00
dominik
4e41cf9e2b (svn r745) Added newgrf GUI (in options menu)\nThe interface currently only displays the installed grf sets, you can't (de)activate them through the gui yet 2004-11-21 22:44:13 +00:00
miham
485102814f (svn r739) Daily langfile updates (automatic) 2004-11-21 15:18:41 +00:00
tron
17cfda1a98 (svn r727) The langauge files depend on english.txt, not strings.h 2004-11-21 12:21:23 +00:00
tron
7fea17457d (svn r726) The OpenTTD binary doesn't depend on the language files, so move this dependency to the all target 2004-11-21 12:18:52 +00:00
tron
2a3969695b (svn r725) Fix language file dependencies 2004-11-21 11:34:07 +00:00
tron
57adc97733 (svn r724) Remove restriction that a tile can only accept 3 cargo types.
This especially enables houses to accept passengers, mail, goods AND food.
Add string templates for up to 5 cargo types for the tile info window. If more are needed just add them.
Simplify (de-uglify) the logic for cargo acceptence for houses and split the goods/food table into two. The acceptance is unmodified, but accepting goods AND food is now trivially possible. The exact amounts have to be decided.
This is based on Celestar's changes in the map branch plus some further bits that will be merged there soon.
2004-11-21 10:49:40 +00:00
tron
75d002690a (svn r723) Increase size of dparam so more parameters can be passed to string output 2004-11-21 10:42:01 +00:00
miham
4bba1273aa (svn r721) Daily langfile updates (automatic) 2004-11-21 08:22:57 +00:00
pasky
bf6dace925 (svn r703) Attempt to improve the town growth algorithm - now it scales over 76 houses, is slightly exponential and travels further for larger towns. 2004-11-20 11:57:45 +00:00
truelight
32f69dab0e (svn r702) -Fix: Buffer overflow in music/sound/video-driver-parameter (Oskar_) 2004-11-20 11:15:31 +00:00
pasky
578bde9aae (svn r698) Merge a town growth fix from TTDPatch - in arctic and desert climate, require food (and possibly water) only if the population is more than 90, so that the town gets chance to actually accept it. (By Marcin?) 2004-11-20 02:36:10 +00:00
pasky
e1c1036648 (svn r697) Fix the town road removal crash _still_ present there. 2004-11-20 02:25:31 +00:00
pasky
5650257c0c (svn r696) Do not consider a road station as street when growing the town. 2004-11-20 01:49:42 +00:00
pasky
7a8fb5d2fd (svn r694) Make the town sometimes build streets on slopes. 2004-11-20 01:08:41 +00:00
pasky
d9096f9ea4 (svn r688) Fix eol-style (hopefully). 2004-11-19 22:59:31 +00:00
pasky
989fd10d06 (svn r687) Export InitNewGRFFile() and DecodeSpecialSprite() properly. 2004-11-19 22:53:18 +00:00
pasky
ad068622fb (svn r681) Support for VERBOSE configuration variable which shows the commands actually used for compilation. 2004-11-19 22:29:30 +00:00
pasky
0f7e48ead2 (svn r679) Clarify bp.sprite assignment in GfxMainBlitter(). Pointed out by Oskar. 2004-11-19 21:57:02 +00:00
darkvater
249438be88 (svn r677) -newgrf: Fix some custom electric trains appearing in maglev depots (pasky). 2004-11-19 19:13:32 +00:00
darkvater
d51daeab1a (svn r669) -Add missing language files to VS.NET and VS6 project files (bociusz). 2004-11-17 21:57:00 +00:00
tron
3f91aff573 (svn r668) -Fix: [ 1068269 ]
- Number of passangers and mail in exclusive test offer window is swapped
  - Wrong data caused by double index shift is displayed in exclusive test offer window
2004-11-17 21:36:04 +00:00
tron
83ffb9c7fa (svn r667) Fix bug in rendering stations from savegames
Also don't pitch custom station sprites by railtype
(pasky)
2004-11-17 21:11:16 +00:00
darkvater
258ffc1382 (svn r666) -Added missing sprite.c for VS6 project file 2004-11-17 20:30:34 +00:00
dominik
8d91459f37 (svn r665) code fixes for newgrf.c/newgrf.h 2004-11-17 20:08:13 +00:00
tron
9dd7c284f0 (svn r664) Fix warning on MorphOS 2004-11-17 19:29:24 +00:00
dominik
31184f974e (svn r663) [newgrf] sorry, forgot newgrf.h 2004-11-17 18:53:49 +00:00
dominik
4612dcdb48 (svn r662) [newgrf] Moved grfspecial.c to newgrf.c/newgrf.h 2004-11-17 18:49:55 +00:00
tron
0f24c74b14 (svn r661) Make strgen print its own revision instead of the repo's.
This also fixes the annoying unecessary language file recompiles.
2004-11-17 18:38:07 +00:00
tron
d753aeea58 (svn r660) Fix typo introduced in r655 2004-11-17 18:22:21 +00:00
tron
3a7abc2a35 (svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky) 2004-11-17 18:03:33 +00:00
tron
c4e9896851 (svn r658) Ignore callbackish randomized spritegroups - they would just crash us (pasky) 2004-11-17 17:15:36 +00:00
celestar
155f20329b (svn r657) Do not touch 0x8000 bit in sprite index for custom waypoints. (pasky) 2004-11-17 15:14:18 +00:00
tron
87adce3ca0 (svn r655) Add the necessary bits to make building on SunOS/Solaris work 2004-11-17 09:07:29 +00:00
tron
13f0b6c0cf (svn r654) Hopefully complete support for randomized variational spritegroups (i.e. the cars transporter in DBSetXL gets different cars each time) (pasky) 2004-11-17 08:52:47 +00:00
tron
0086bb9d06 (svn r653) Prevent SDL parachute from catching SIGSEGV and SIGFPE (pasky) 2004-11-17 08:11:24 +00:00
tron
2760ed80fd (svn r652) Factorise special case for MorphOS regarding signal() handling 2004-11-17 07:57:28 +00:00
miham
4fb8338fa6 (svn r651) LoadNewGrfFile() now doesn't care about num_sprites and just loads whatever is
available. Fixes George's long vehicles. (pasky)
2004-11-17 02:24:21 +00:00
miham
dd90693a4c (svn r650) Pasky fix #4. (Misc fixes to get USSet going) 2004-11-17 02:01:12 +00:00
miham
46dddda22f (svn r649) Support for custom rail vehicle refit bitmasks. (pasky) 2004-11-17 01:09:15 +00:00
miham
e2f3634db3 (svn r648) Dummy skip-support for two new station properties. Rename FOR_EACH_ENGINE() to more appropriate FOR_EACH_OBJECT(). (pasky) 2004-11-17 01:00:04 +00:00
miham
86d19cb577 (svn r647) Cleanup custom station classes handling. (pasky) 2004-11-17 00:52:54 +00:00
darkvater
cd6cb84889 (svn r646) -Fix: braindead case-sensitive file extension filter replaced with a case-INsensitive one (joint effort of Bjarni and Darkvater). 2004-11-16 23:51:38 +00:00
darkvater
60184e1495 (svn r645) -Feature: Finally support for TTDLX games on Big Endian machines such as Macintosh and MorphOS; thanks for testing Bjarni :)
-Added turkish.txt to lang-project and screenshot.h to ttd-project
2004-11-16 23:26:15 +00:00
tron
cc428ef6cf (svn r637) Add keycode for the key to open the console on BeOS 2004-11-16 16:13:54 +00:00
tron
69159b6e52 (svn r636) Set svn:eol-style for screenshot.h 2004-11-16 11:40:32 +00:00
tron
b65bda506c (svn r635) Fix choosing a spritegroup from deterministic variational spritegroups if there is no structure to search (i.e. in purchase lists) (pasky) 2004-11-15 20:52:11 +00:00
miham
61103119fb (svn r634) Added turkish translation (iso8859-1) 2004-11-15 20:45:25 +00:00
miham
f1a3b32dc4 (svn r633) Daily langfile updates (automatic) 2004-11-15 20:44:39 +00:00
tron
450c669eb2 (svn r631) Merge r440, r444, r485, r630 to trunk:
r440
Move screenshot function declarations to new file screenshot.h
Clean up screenshot.c a bit, mostly whitespace, alloca() -> malloc() and checking return values
r485
Remove unused field from struct ScreenshotFormat
2004-11-15 19:25:59 +00:00
tron
fb4b5fa841 (svn r628) Merge r442 to trunk:
In bemidi.cpp
- Whitespace cleanup
- Simplify one if ()
2004-11-15 12:15:03 +00:00
tron
6da3e44fc7 (svn r627) Merge r439 to trunk:
Cleaned up whitespace in namegen.c
2004-11-15 12:11:43 +00:00
tron
a0b4161a32 (svn r626) Merge r438 to trunk:
Some whitespace and magic number cleanup (in news_gui)
2004-11-15 12:05:01 +00:00
tron
2f35fea097 (svn r625) Almost complete support for deterministic variational vehicle spritegroups. (pasky) 2004-11-15 11:54:35 +00:00
tron
57c472e093 (svn r624) Merge r377 to trunk:
Remove the memmove special case for MSVC
According to the MSDN it was just plain wrong and memmove was directly used in some places anyway
2004-11-15 10:31:48 +00:00
tron
01e88bb61d (svn r623) -Feature: [ 1066504 ] Pause key pauses the game 2004-11-15 10:04:57 +00:00
tron
95a3e4fe1f (svn r621) Merge r450 to trunk:
Cleanups and #if 0 some unused debug code
2004-11-15 09:05:06 +00:00
miham
747d0fcca9 (svn r620) Daily langfile updates (automatic) 2004-11-15 08:11:04 +00:00
tron
5a07c9bd71 (svn r619) Add the necessary bits to make building under BeOS using GNU Make work 2004-11-15 07:53:09 +00:00
darkvater
4852474343 (svn r617) -newgrf: Support for parameter 0x8E (train Y-pitch in info windows) both setting and testing. This should fix displaced wagons in DBSetXL as reported by DarkVater. (pasky) 2004-11-14 23:36:19 +00:00
darkvater
afca207cf0 (svn r616) -newgrf: Fixed crashing when trying to resolve references to unknown or callback result spritegroups in variational spritegroup handler of NewSpriteGroup() (pasky). 2004-11-14 23:14:44 +00:00
bjarni
5914888ad6 (svn r615) Fix the same bug in ParamSet action loading, pointer out by Bjarni too. (pasky) 2004-11-14 22:31:57 +00:00
dominik
d99b89ab29 (svn r614) [newgrf] Some minor code fixes 2004-11-14 22:30:46 +00:00
bjarni
363a92bd43 (svn r613) Fix bug in GRFInhibit action loading, pointed out by Bjarni. (pasky) 2004-11-14 22:25:21 +00:00
dominik
fb64b4e499 (svn r612) [newgrf] Fix: custom waypoints on monorail/maglev are displayed correctly 2004-11-14 22:10:08 +00:00
darkvater
051e094921 (svn r611) -newgrf: Change GetCustomEngineSprite() calling convention (invisible to users of GetCustomVehicle*() wrappers). Needed for deterministic spritegroups support (pasky). 2004-11-14 20:53:34 +00:00
darkvater
ec434b208e (svn r610) -newgrf: Support for some basic deterministical spritegroups regarding stations. Waypoints look changes based on year now :^) (pasky). 2004-11-14 20:50:38 +00:00
dominik
c2193ce1a8 (svn r609) Fixed choose waypoints dialogs, it works without assertion failures and with custom waypoint #0 selectable now. (pasky) 2004-11-14 20:25:07 +00:00
dominik
0bcc9b7573 (svn r608) [newgrf] enabled possibility to build default waypoint when custom waypoints are enabled 2004-11-14 20:02:43 +00:00
tron
249a170ace (svn r607) -Patch: [ 985102 ] static cleanup
Thanks to lvoge
2004-11-14 19:44:06 +00:00
dominik
200d3fdbe8 (svn r606) -newgrf: Fixed waypoint scrollbar 2004-11-14 18:20:40 +00:00
darkvater
183c33931d (svn r605) -newgrf: Framework for supporting variational spritegroups . Deterministic only at the moment, but random ones support shouldn't be that difficult now It doesn't do anything, but makes these actions actually possible (pasky). 2004-11-14 18:18:28 +00:00
tron
a348f74c65 (svn r604) -Fix: [ 999669 ] Wrong trees (toyland's) in sub-tropical landscape style
Tree generation code sometimes set the non-existent growth state 7
This could also become manifest in snow covered trees below the swnow line in arctic climate and similar effects
2004-11-14 17:16:26 +00:00
darkvater
ea48b0d05c (svn r603) -newgrf: Stupid TortoiseSVN converted the file to DOS newlines. Bah 2004-11-14 16:45:38 +00:00
darkvater
e656a91736 (svn r602) -newgrf: Move DrawTileSeqStruct & co and struct SpriteGroup to sprite.h (pasky) 2004-11-14 16:42:08 +00:00
darkvater
a415b8ecce (svn r601) -newgrf: blaat 2004-11-14 16:13:43 +00:00
darkvater
5fcd71cf28 (svn r600) -newgrf: Relocation offset for custom station sprites is now stored separately, making it possible to show different sprites in waypoint selection dialog (pasky). 2004-11-14 16:11:48 +00:00
tron
2b5b1f4e06 (svn r594) -Fix/Feature: [ 1066121 ] Resetting file name after deleting a file
Thanks to dannys9 for the patch
2004-11-14 15:11:25 +00:00
darkvater
80f787e60a (svn r593) -newgrf: Support for two more TTD(Patch) version relate) SkipIf in-game variables (pasky). 2004-11-14 14:54:10 +00:00
darkvater
5847317526 (svn r592) -newgrf: Dynamically allocate global custom station IDs (pasky). 2004-11-14 14:53:15 +00:00
darkvater
ccc496ba2c (svn r591) -newgrf: Store whole struct StationSpec in SetCustomStation(), not just the rendering data. This will be needed for variational stationspecs (pasky). 2004-11-14 14:10:03 +00:00
darkvater
5663926aaf (svn r590) -newgrf: Instead of a bunch of statinfo arrays, use station-array of struct StationSpec-s (pasky). 2004-11-14 13:59:11 +00:00
darkvater
770eb4c8c3 (svn r589) -newgrf: Rename spritesset to spritegroups (pasky). 2004-11-14 13:45:38 +00:00
darkvater
552689b7fe (svn r588) -newgrf: Silent ignore those stupid one-byte zero special sprites (dbsetw.grf is crawling with them) (pasky). 2004-11-14 13:11:38 +00:00
darkvater
397cc50f61 (svn r587) -newgrf: Rename all /Checkpoint/i tokens to 'Waypoint's. The name actually makes some sense and is also compatible with TTDPatch (pasky). 2004-11-14 13:07:07 +00:00
darkvater
8946e92468 (svn r586) -Fix: [1066114] Code error in win32.c Thanks Shai
-Fix: ttd.vcproj change to hard-set compilation as C, as well as adding WITH_SDL to debug mode. If you don't have SDL just remove that.
2004-11-14 12:37:23 +00:00
darkvater
989289fadd (svn r585) -newgrf: GUI for selecting custom waypoint graphics to use. Patch by dominik81 and pasky. 2004-11-14 11:04:59 +00:00
darkvater
4f6fa3b468 (svn r584) -newgrf: Increase chance to get a TTDPatch savegame using custom GRF files loaded (pasky) 2004-11-14 10:18:15 +00:00
darkvater
a9a7957eaa (svn r583) -newgrf: Hopefully prevent GRF files introducing new bridges or townhouses to crash the game (pasky). 2004-11-14 10:03:21 +00:00
tron
2f56162f35 (svn r582) -Fix: [ 1034318 ] place sign and blue message box
A name change wasn't possible while an always-on-top window (like news) has been visible
2004-11-14 09:31:39 +00:00
celestar
eb50427670 (svn r581) -newgrf: Basic support for new stations - only waypoints supported now and only
the first custom one can be placed (no selector GUI, coming soon). This
also moves some global variables to {struct GRFFile} and reorders which
actions are processed in what stage, to get it all working together --
(pasky)
2004-11-14 09:07:15 +00:00
tron
a9a852a4d6 (svn r580) Fix latent bug in BringWindowToFrontByID() - a wrong pointer was returned 2004-11-14 08:15:50 +00:00
tron
37cbae0370 (svn r579) Remove now unused function memswap() 2004-11-14 08:11:57 +00:00
tron
84d1041edf (svn r578) Simplify BringWindowToFront() 2004-11-14 08:11:05 +00:00
darkvater
7a2a973b48 (svn r577) -newgrf: fixed some typos of last commit (airports were looking weird) 2004-11-14 01:50:15 +00:00
darkvater
7930faace9 (svn r576) -newgrf: Cleanup horrible table/(station|unmovable)_land.h DrawTileSeqStruct hacks needed for custom station supports (pasky) 2004-11-14 01:25:05 +00:00
miham
e9ef930155 (svn r575) Daily langfile updates (automatic) 2004-11-14 00:19:48 +00:00
darkvater
1f12dee3a0 (svn r572) -newgrf: Support for custom (newGRF-yielded) refit masks for trains and aircrafts (pasky). 2004-11-13 21:42:35 +00:00
darkvater
0a2f28c2f2 (svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky). 2004-11-13 20:37:57 +00:00
tron
e260aa3870 (svn r569) Fix type mismatch 2004-11-13 18:15:03 +00:00
celestar
e31f37d578 (svn r568) -newgrf: Make @wagover bool, simplifying stuff. (pasky)
-newgrf: "More debugging and severity levels consolidation. (pasky)
2004-11-13 18:08:45 +00:00
celestar
20e9a8061d (svn r567) -newgrf: Support for road vehicles customization (seems to work at
least with tropicset). (pasky)
2004-11-13 18:01:33 +00:00
miham
dae7b4ae21 (svn r566) Daily langfile updates (automatic) 2004-11-13 17:10:41 +00:00
darkvater
7690093b4c (svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch. 2004-11-13 16:28:50 +00:00
tron
b5e1240a8a (svn r564) Simplify scroll logic and correct one erroneous use of memcpy() 2004-11-13 16:10:25 +00:00
celestar
b8327e0457 (svn r562) newgrf: Merge most of the road vehicle info to a single
road_vehicle_info table, like it already is for trains and ships. Needed
for GRF custom override support. (pasky)
2004-11-13 15:15:41 +00:00
celestar
6db750373a (svn r561) -newgrf: killed some of the magic numbers in the code (pasky) 2004-11-13 12:38:38 +00:00
celestar
04748217d1 (svn r560) -newgrf: General cleanup of the code (pasky & octo) 2004-11-13 12:21:32 +00:00
tron
3df0ff7854 (svn r559) Minor simplification 2004-11-13 11:08:50 +00:00
tron
53116247c3 (svn r558) -Fix: [ 1065247 ] Windows can be placed behind toolbar
While here make clamping against the screen border a bit nicer
2004-11-13 10:53:42 +00:00
darkvater
22f627c8e1 (svn r557) -newgrf: Rename all 'superset' tokens to 'group' and some other small renamings (pasky and octo). 2004-11-12 23:59:51 +00:00
darkvater
76341a9173 (svn r556) -newgrf: Some seemingly proper support for loading stages of grf files (octo & pasky). 2004-11-12 23:26:02 +00:00
darkvater
2ab4669251 (svn r555) -newgrf: Preliminary support for action 0xE. Inhibit another GRF file by ID. It won't really work until we get stages support (pasky & octo). 2004-11-12 22:39:00 +00:00
darkvater
27b48faad2 (svn r554) -newgrf: Keep track of GRF files. Remember them all in a linked list, this already enables tests for an already loaded GRF file in SkipIf(). Patch by octo, heavily re-hammered by pasky 2004-11-12 22:28:19 +00:00
darkvater
015cb74dd9 (svn r553) -newgrf: Special routine for loading newgrf files. LoadNewGrfFile() introduced; will get more handy when loading stages will be introduced (octo and pasky). 2004-11-12 21:51:34 +00:00
darkvater
7accdb9003 (svn r552) -newgrf: Include bits forgotten when merging octo's ReplaceSprites support - it would replace even special sprites in the way now. (pasky) 2004-11-12 21:33:18 +00:00
darkvater
2aae43a848 (svn r551) -newgrf: Preliminary support for TTDPatch flags checking (we just pretend that a bunch of things are on and the rest is off and that's it). Patch by octo, small cleanup by pasky. 2004-11-12 19:03:37 +00:00
darkvater
c53cf38ffd (svn r550) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky. 2004-11-12 18:57:46 +00:00
darkvater
16f8a7b2d2 (svn r549) -newgrf: Support for action 0xd (change a parameter (sorta variable for the GRF scripts)). Based on patch by octo, heavy changes by pasky. 2004-11-12 18:47:19 +00:00
darkvater
a2869639b2 (svn r548) -newgrf: minor style changes, and application of boolean type 2004-11-12 18:43:12 +00:00
darkvater
fd80b53f39 (svn r547) -newgrf: Enhanced support for action 0x7 and 0x9 (skips). Killer mixture mixed from octo's patch and pasky's old patch (pasky & octo). 2004-11-12 17:27:30 +00:00
darkvater
e7441c39e3 (svn r546) -newgrf: Use GetCustomVehicleIcon() for fetching sprites for vehicle selection dialogs. (Idea by octo, done by pasky). 2004-11-12 17:16:13 +00:00
celestar
acaff32984 (svn r545) -newgrf: repaired indendation (pasky & octo) 2004-11-12 15:36:49 +00:00
celestar
aac4fbc220 (svn r544) -newgrf: codechange for better handling (pasky and octo__) 2004-11-12 15:15:56 +00:00
tron
5d6c0a8220 (svn r543) -Fix: [ 1064742 ] Editor Map-Menu wrong String
The fix is a bit ugly, but this is due to limitations in the dropdown menu handling (the strings have to be contiguous)
2004-11-11 23:23:42 +00:00
tron
65058d0d57 (svn r542) -Fix: Display correct rail type in "build railway station" window
Thanks, ln--
2004-11-11 23:10:22 +00:00
tron
7a97e54559 (svn r541) Make windows even snappier! ^^
Thanks to nzhook, who also proposed the original patch.
2004-11-11 21:20:15 +00:00
tron
95fdf39bca (svn r540) Tell subversion to ignore some more files 2004-11-11 17:53:11 +00:00
tron
315006a28e (svn r539) Set svn:eol-style property 2004-11-11 17:17:52 +00:00
tron
872f49ae8a (svn r538) -Feature: Windows snap at each other
This is inspired by [1063636].
2004-11-10 21:14:16 +00:00
tron
603618a75b (svn r532) Disable date change buttons in scenario editor if date limit is reached.
Note: It's a /bit/ ugly, need to find a cleaner way
While I'm here enlarge the start date window to 1920-2000 (was 1950-1975).
2004-11-08 22:21:14 +00:00
bjarni
b78bbf80bf (svn r531) Makefile: made asserts enabled by default
RELEASE disables asserts unless ENABLE_ASSERTS(not in makefile.config) is set
makefile.config version 3
2004-11-08 21:24:48 +00:00
bjarni
72880f2dad (svn r530) Makefile: added ability to switch asserts on and off
Updated makefile.config to versiontag 2 for autoupdating purposes
2004-11-08 21:11:52 +00:00
tron
2cf5b77d0b (svn r528) Minor fixes in german.txt 2004-11-08 20:44:10 +00:00
tron
37e199cd2b (svn r526) -Fix: [1035303] bug about lowering tracks built on slopes
While here make sure that the failing tile gets a red error marker
2004-11-08 09:11:55 +00:00
bjarni
21b1607fb5 (svn r520) Lang: added empty Russian translation 2004-11-07 14:15:38 +00:00
miham
f1d552c5b6 (svn r519) Daily langfile diff 2004-11-07 08:41:38 +00:00
tron
6909bba290 (svn r518) Merge extmidi.c r441 to trunk:
- Whitespace cleanup
- Use execlp() with relative path instead of execl() with absolute path
2004-11-06 23:24:59 +00:00
tron
476dfd9f12 (svn r517) -Fix: [1033947] Wrong mapping between music titles and songs 2004-11-06 23:20:12 +00:00
celestar
9c1aa0b75f (svn r516) Solved a little bug with the order checker. 2004-11-06 15:13:44 +00:00
darkvater
92d1dd153f (svn r515) -Fix: [1050993] Incorrect Tooltip in Road Vehicle List. Already fixed in /map branch 2004-11-06 12:02:43 +00:00
tron
0a422b06a5 (svn r514) -Fix: [1053397] Refit Train Window Stays Open 2004-11-06 09:24:28 +00:00
tron
d641175e3c (svn r513) Merge revisions 402, 416, 417, 478, 479, 511, 512 from map to trunk
This includes 2 fixes
-Fix: [1048596] Monorail and Maglev sounds are swapped (r511)
-Add special case to load the jackhammer sound (r478)
The rest are cleanups und enumeration to make merging possible/easier
2004-11-05 23:12:33 +00:00
tron
8348068f5f (svn r505) Tell svn to ignore some files and remove one stale entry 2004-11-04 18:41:39 +00:00
tron
f2a858c6a5 (svn r504) The Bourne Shell ist spelled 'sh', not 'bash'; even if there is a 'bash', on most systems it's not in /bin
Typical Linuxism... /:
2004-11-03 21:50:21 +00:00
tron
f7485d586e (svn r501) -Fix: Vehicles slow down under bridge if the track is on a foundation 2004-11-03 11:35:29 +00:00
tron
fe1ccdf834 (svn r500) -Fix: Some bridge part isn't displayed transparent in transparent mode
-Fix: If bridge has no pillars cursor arrow is displayed in transparent mode
2004-11-03 11:06:21 +00:00
tron
2eb00c0bd3 (svn r499) Merge r498 to trunk:
Disabled buttons flicker no more
  This solves bug report 991101
2004-11-01 15:08:40 +00:00
miham
f6690500bf (svn r472) Daily langfile updates -- 79 strings missing 2004-10-26 20:56:51 +00:00
miham
49d0f082f8 (svn r468) Daily langfile updates -- 88 strings missing 2004-10-25 08:37:01 +00:00
miham
9947627df9 (svn r461) Daily langfile updates -- Minor language tweaks 2004-10-20 21:08:39 +00:00
miham
034b0b5aef (svn r418) Daily langfile updates -- Portuguese language finished 2004-10-10 12:06:19 +00:00
miham
1fd2edf29a (svn r407) Daily langfile updates (automatic) 2004-10-09 07:12:08 +00:00
miham
88e3ef36a4 (svn r399) Daily langfile updates (automatic) 2004-10-06 21:56:44 +00:00
miham
385da141e6 (svn r396) Daily langfile updates (automatic) 2004-10-06 16:22:57 +00:00
miham
98b60a605f (svn r384) Daily langfile update -- 102/1 (3007/3) missing S/L 2004-10-05 14:38:15 +00:00
miham
9c3b9fd40d (svn r360) Daily langfile update -- Added portuguese translation + danish fixes by Bjarni (100+2 / 1) 2004-10-02 19:41:06 +00:00
miham
884fd51b68 (svn r341) Daily langfile update -- 102 strings missing for galician 2004-09-30 22:11:28 +00:00
miham
af3348fe94 (svn r339) Daily langfile update -- 104 strings missing for 2 finished languages 2004-09-30 14:26:35 +00:00
miham
43ca0548da (svn r334) Daily langfile update -- 104 strings missing for 2 finished languages 2004-09-28 22:02:23 +00:00
dominik
a99ac0d057 (svn r329) Fix: [ 1035066 ] 'Allow goto depot' turned off, no checkpoints in orders 2004-09-27 14:30:17 +00:00
darkvater
edf841fb6f (svn r328) -Fix: remove some unlogical alloca()s (Tron) 2004-09-27 12:36:59 +00:00
miham
0dbe38fba7 (svn r327) Daily langfile update -- 112 strings missing for 3 finished languages 2004-09-26 21:35:16 +00:00
miham
35c13ef965 (svn r322) Daily langfile update -- 1683 strings missing for 5 languages 2004-09-26 08:01:08 +00:00
truelight
12c91671bf (svn r321) -Fix: crash when making png screenshot with odd resolution (Tron)
-Fix: unable to select other screenshot format in Game Option
2004-09-25 18:30:19 +00:00
truelight
3dc8dcf312 (svn r320) -Fix: some last _current_player fixes 2004-09-25 17:37:32 +00:00
truelight
75a54521e8 (svn r319) -Fix: [ 1029064 ] Building a station acted weird in some rare situations 2004-09-25 13:58:27 +00:00
miham
773737930a (svn r318) Daily langfile update -- 1895 strings missing for 6 languages 2004-09-25 10:24:11 +00:00
miham
4449917a7c (svn r317) Daily langfile update -- 1952 strings missing for 9 languages 2004-09-24 07:53:21 +00:00
darkvater
67f385ded8 (svn r316) -Fix: not +7 (Tron) 2004-09-23 21:44:36 +00:00
darkvater
cee5cd6cc7 (svn r315) -Fix: starting with -r option allows all resolutions (including 666x666) (t r o n) 2004-09-23 21:39:55 +00:00
darkvater
36f18e7f40 (svn r314) -Fix: [982611] Pathfinding bug; train likes the roundabout. If train needs servicing it will now look 16 tiles along the track instead of 12 tiles manhattan style (blathijs) 2004-09-23 21:20:38 +00:00
darkvater
198f841c7e (svn r313) -Feature/Fix: directories in *nix are now sorted alphabetically in ascending order (Tron). 2004-09-23 21:16:23 +00:00
darkvater
f3758d133a (svn r312) -Fix: [926105] ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
-Fix: [1030393] some screensizes crashes OTTD. Fix in general bug that only allows resolutions which were multiple of 8 in width and height. Also use closest possible resolution in fullscreen if window size is not a valid resolution (Tron)
2004-09-23 21:14:20 +00:00
bjarni
d72abf6c3e (svn r311) Added incomplete Icelandic translation (Hinrik)
Mac: made track_starter executable by default. Needed for midi player
2004-09-23 20:12:51 +00:00
miham
408a27a64e (svn r310) Added catalan translation & daily langfile update -- 551 strings missing for 16 languages 2004-09-22 11:16:44 +00:00
miham
db516f667e (svn r309) Fixed spanish translation 2004-09-22 09:34:59 +00:00
dominik
f7fee73752 (svn r308) Added debug hotkey 'caps lock' for sdl builds as well 2004-09-22 07:40:41 +00:00
darkvater
cd01b3890a (svn r307) -Fix: Several potential buffer-overflow fixes, and removal of 'magic-numbers' in favour of constants. (Tron) 2004-09-21 21:40:59 +00:00
darkvater
475ef74ab7 (svn r306) -Fix: [985439] un-owned rail. Trains could cross competitor's tracks if there was a road-crossing over it. 2004-09-21 21:28:42 +00:00
bjarni
93d9afca4b (svn r305) made the shellscripts executable, so the user do not have to do this manually 2004-09-21 21:19:08 +00:00
darkvater
493df26058 (svn r304) -Fix: [967096] fullscreen. New button 'Fullscreen' in 'Game Options' menu which lets you set fullscreen ingame. 2004-09-21 20:56:49 +00:00
dominik
0ba58f25a4 (svn r303) Fix: [ 1022227 ] Ships could unload cargo at stations without docks 2004-09-20 19:09:06 +00:00
miham
807da4e722 (svn r302) Added initial spanish translation 2004-09-20 14:49:53 +00:00
dominik
be726e5ec4 (svn r301) Fix: game options (like drive side) are not taken from the scenario when using 'new game' command 2004-09-19 23:05:09 +00:00
dominik
e0d671ab5f (svn r300) Fix: order checker now correctly detects station with invalid facilities 2004-09-19 21:44:01 +00:00
miham
72bd3bd170 (svn r299) Daily langfile update -- 209 changed finnish strings 2004-09-19 20:57:31 +00:00
dominik
eb445b5189 (svn r298) Fix: Engines from other climates do not appear any more when never_expire_vehicles is enabled 2004-09-19 19:56:40 +00:00
dominik
a38e2d046a (svn r297) Fix (SDL): Added a confirmation dialog when quitting the game 2004-09-19 18:23:11 +00:00
miham
6cad1071c8 (svn r296) Daily langfile update. -- 519 strings missing for 3 languages 2004-09-19 16:55:09 +00:00
darkvater
e2c1370d60 (svn r295) -Fix: Rewrite and fix of console stuff, including marking (XXX) of areas that require further investigation (Tron)
-Note: booby trapped some suspicous assignments (Tron)
2004-09-19 15:24:45 +00:00
darkvater
089a2a7847 (svn r294) -Fix: autorail always builds rail, instead of occasional rail removal (on pressing hotkey after pressing 'bulldozer')
-Fix: network fixes (Tron)
-Some textfile changes, mainly URL's
2004-09-18 16:40:06 +00:00
darkvater
b7fd924806 (svn r293) -Feature: Windows now shows (available) revision, release information in title bar 2004-09-18 16:36:14 +00:00
darkvater
c62f670bca (svn r292) -Fix: [1030275] 'Service at' orders ignored after 2090. After 2090 year is reset to 1. Jan 2090, so most of the time, last service was in the future and no service ensured. 2004-09-18 16:31:31 +00:00
bjarni
d1a88cbbca (svn r291) Minor fix to english.txt
added debian support (blathijs)
improved make install (blathijs)
2004-09-18 16:29:12 +00:00
miham
f5a50c0007 (svn r290) Daily langfile update. -- 519 strings missing for 3 languages 2004-09-17 21:29:24 +00:00
dominik
894bb262ad (svn r289) Fix: Checkpoints on snow have correct ground now 2004-09-17 20:56:28 +00:00
dominik
ebc18e3957 (svn r288) Fix: new checkpoint graphics now also work for monorail/maglev 2004-09-17 20:49:47 +00:00
dominik
da80dabe6b (svn r287) Sorry, another mistake 2004-09-17 20:34:51 +00:00
dominik
431363908e (svn r286) Sorry, little memalloc problem 2004-09-17 20:22:31 +00:00
dominik
7e882e8fa3 (svn r285) Fix: networkc.tmp will be created in user's homedir (Loki|muh) 2004-09-17 20:08:35 +00:00
dominik
9d1bf52ce3 (svn r284) Fix: on opening the saveload dialog the game pauses again in single player games 2004-09-17 17:53:34 +00:00
dominik
345003d49f (svn r283) New checkpoint graphics (drawn by Eobet and George) 2004-09-17 17:09:00 +00:00
signde
f7eccfc6fe (svn r282) -Fix: decode params change accidently commited 2004-09-17 16:59:03 +00:00
signde
e049bd9b2b (svn r281) -Fix: some endian issues fixed in network code 2004-09-17 16:35:56 +00:00
signde
f7cfd47261 (svn r280) -Fix: ^M removement in console.c 2004-09-17 09:51:44 +00:00
signde
7693c58e28 (svn r279) -Feature: [WIN32] Console now allows to paste data from the clipboard [ctrl + v] 2004-09-17 06:06:47 +00:00
miham
78b02129c1 (svn r278) Daily langfile update. -- 546 string(s) missing for 5 languages 2004-09-17 06:02:27 +00:00
signde
0e08a8f61c (svn r277) -Fix: removed playerseeds again until it is stable 2004-09-16 18:03:29 +00:00
bjarni
5b145f4d7c (svn r276) Lang: American fixes by Pipian and removed Unfinished from Dutch :D 2004-09-16 17:27:59 +00:00
signde
dae15e81d8 (svn r275) -Fix: Client accidently marked as unready when sending framesync packets. [this caused occasional timeouts]
-Codechange: now all debug messages for network games show the frame_counter [better debugging]
2004-09-16 17:02:19 +00:00
bjarni
e63f6efaef (svn r274) Mac: restored extmusic to be default, which were accidently turned off by a windows music fix 2004-09-16 16:44:36 +00:00
darkvater
11545f1c4d (svn r273) -Fix: sorry, wrongly fixed 2004-09-16 15:21:24 +00:00
darkvater
1cfc877088 (svn r272) -Fix: industries are once again generated on a new map 2004-09-16 15:15:04 +00:00
dominik
21b905e963 (svn r271) another town name confusion fix 2004-09-16 10:41:56 +00:00
dominik
19533f8992 (svn r270) Fix: [ 1028851 ] automatic and unwanted city renaming 2004-09-16 10:07:52 +00:00
miham
09fcc36c9c (svn r269) Daily lf upd #1. -- <1000 strings missing from ? languages 2004-09-16 07:49:59 +00:00
signde
25b5a727e8 (svn r268) -Fix: console-command: script command now stops recording correctly
-Fix: network client should not stop sending ready packets anymore [client should not timeout without any reason]
2004-09-16 06:17:50 +00:00
darkvater
cbcf002a91 (svn r267) -Fix: Moved EUR back in its place, savegames should not list Romanian Lei anymore, and 2002 currency is also to EUR again 2004-09-15 22:32:37 +00:00
truelight
a69e422cdd (svn r266) -Fix: hopefully fixed the desync problem nicely (and reverted the
workaround for it)
2004-09-15 18:36:33 +00:00
miham
0346fec1ca (svn r265) Daily lf upd #1. -- 1335 strings missing from 7 languages 2004-09-15 18:01:43 +00:00
signde
f15c85d508 (svn r263) -Fix: on_server.scr contained an unneeded ";"
-Fix: saving or loading a map doesnt pauses the game anymore
2004-09-15 11:53:01 +00:00
dominik
39f1c6dda3 (svn r262) Fix: [ 1028234 ] Monorail and MagLev infrastructure not available in 1920s any more 2004-09-15 06:51:23 +00:00
signde
9dcf10eb6c (svn r261) -Workaround: unplayeable network-game on busy maps because of wrong setup of _current_player. This is only a workaround that can cause desyncs too but not that often 2004-09-14 22:51:37 +00:00
dominik
eaeca76e5a (svn r260) Added updated linux RPM stuff 2004-09-14 20:56:57 +00:00
darkvater
a43bc5f82e (svn r259) -Fix: Installer version updated to 12. Properly commented now. Thx teeone 2004-09-14 20:35:24 +00:00
miham
937aafd6d2 (svn r258) Daily lf upd #3. -- 1433 strings missing from 7 languages 2004-09-14 20:25:52 +00:00
266 changed files with 72972 additions and 32095 deletions

View File

@@ -1,163 +0,0 @@
CFILES = ai.c aircraft_cmd.c aircraft_gui.c airport_gui.c
bridge_gui.c clear_cmd.c command.c disaster_cmd.c
dock_gui.c dummy_land.c economy.c engine.c engine_gui.c
fileio.c gfx.c graph_gui.c industry_cmd.c industry_gui.c
intro_gui.c landscape.c main_gui.c minilzo.c misc.c
misc_cmd.c misc_gui.c music_gui.c namegen.c network.c
news_gui.c oldloader.c order_cmd.c order_gui.c pathfind.c
player_gui.c players.c rail_cmd.c rail_gui.c road_cmd.c
road_gui.c roadveh_cmd.c roadveh_gui.c saveload.c sdl.c
settings.c settings_gui.c ship_cmd.c ship_gui.c smallmap_gui.c
sound.c spritecache.c station_cmd.c station_gui.c
strings.c subsidy_gui.c texteff.c town_cmd.c town_gui.c
train_cmd.c train_gui.c tree_cmd.c ttd.c
tunnelbridge_cmd.c unmovable_cmd.c vehicle.c
viewport.c water_cmd.c widget.c window.c screenshot.c
airport.c grfspecial.c terraform_gui.c ;
LANGFILES = english.txt swedish.txt french.txt german.txt italian.txt slovak.txt hungarian.txt norwegian.txt danish.txt czech.txt galician.txt polish.txt romanian.txt;
####################
# On UNIX we use gcc
####################
if $(UNIX) {
SDL_CONFIG_CFLAGS = `XX_SDL_CONFIG_PLACEHOLDER_XX --cflags` ;
SDL_CONFIG_LIBS = `XX_SDL_CONFIG_PLACEHOLDER_XX --libs` ;
LINKFLAGS += $(SDL_CONFIG_LIBS) ;
CC = gcc ;
CCFLAGS += -Wall -Wno-multichar -DUNIX -DWITH_SDL ;
OPTIMFLAGS = -O2 -fomit-frame-pointer ;
DEBUGFLAGS = -g ;
# also include extmidi
CFILES += extmidi.c unix.c ;
# compile in PNG support?
if $(WITH_PNG) {
CCFLAGS += -DWITH_PNG -I$(WITH_PNG) ;
LINKFLAGS += -lpng ;
}
# compile in zlib support?
if $(WITH_ZLIB) {
CCFLAGS += -DWITH_ZLIB ;
LINKFLAGS += -lz ;
}
# compile for BeOS 5.1 and higher
if $(WITH_BONE_NETWORKING) {
CCFLAGS += -DENABLE_NETWORK ;
LINKFLAGS += -lsocket -lbind ;
}
# link in BeOS MIDI and Be API libraries
if $(BEOS_MIDI) {
CCFLAGS += -DBEOS_MIDI ;
LINKFLAGS += -lbe -lmidi ;
CFILES += bemidi.cpp ;
}
}
####################
# MSVC on Win32
####################
actions ActWin32Res {
$(VISUALC)\\..\\common\\msdev98\\bin\\rc /r /i $(STDHDRS) /fo $(<) $(>)
}
rule Win32Res { ActWin32Res $(<) : $(>) ; DEPENDS $(<) : $(>) ; }
if $(TOOLSET) = VISUALC {
OPTIMFLAGS = /Oa /Os /Ow /Oy /Oi /Og /Ox /Gr /Gf /Gy /Zp4 /J /WX /W3 -DNDEBUG ;
CCFLAGS += -DWIN32 -DWIN32_EXCEPTION_TRACKER ;
CFILES += win32.c ;
LINKFLAGS += /opt:nowin98 /LIBPATH:$(VISUALC)\\lib ;
LINKLIBS = ws2_32.lib winmm.lib user32.lib gdi32.lib ;
# compile resources too
EOBJ = ttd.res ;
Win32Res ttd.res : ttd.rc ;
# png screenshots?
if $(WITH_PNG) {
CCFLAGS += -DWITH_PNG -I$(WITH_PNG) ;
LINKLIBS += libpng.lib ;
}
# zlib savegames?
if $(WITH_ZLIB) {
CCFLAGS += -DWITH_ZLIB ;
LINKLIBS += zlibstat.lib ;
}
# build release by default
RELEASE = 1 ;
}
####################
# Common
####################
rule MyObjects {
local _i _t _s ;
_t = $(OUTDIR)/$(>:S=$(SUFOBJ)) ;
OPTIM on $(_t) = $(3) ;
MkDir $(OUTDIR) ;
Depends $(_t) : $(OUTDIR) ;
for _i in $(>) {
_s = $(OUTDIR)/$(_i:S=$(SUFOBJ)) ;
Object $(_s) : $(_i) ;
# special handling for sdl.c and unix.c
if $(_i) = sdl.c || $(_i) = unix.c { CCFLAGS on $(_s) += $(SDL_CONFIG_CFLAGS) ; }
}
MainFromObjects $(OUTDIR)/$(<) : $(_t) $(EOBJ) ;
}
rule MyMain {
if $(RELEASE) {
OUTDIR = release ;
MyObjects ttd : $(>) : $(OPTIMFLAGS) ;
} else {
OUTDIR = debug ;
MyObjects ttd : $(>) : -D_DEBUG $(DEBUGFLAGS) ;
}
}
actions CompileLang {
strgen$(SLASH)strgen $(>)
}
rule LangFile {
if $(>) = lang/english.txt {
CompileLang $(<) table/strings.h : ;
DEPENDS table/string.h : $(>) ;
} else {
CompileLang $(<) : $(>) ;
}
Clean clean : $(<) ;
DEPENDS $(<) : $(>) ;
DEPENDS all : $(<) ;
DEPENDS $(<) : strgen/strgen ;
}
rule LangFiles {
local _i ;
for _i in $(<) { LangFile $(_i:S=.lng) : $(_i) ; }
Clean clean : table/strings.h ;
}
LangFiles lang/$(LANGFILES) ;
Main strgen/strgen : strgen/strgen.c ;
MyMain ttd : $(CFILES) ;

553
Makefile
View File

@@ -36,6 +36,7 @@
# mrproper: remove intermediate files and makefile configuration
# upgradeconf: add new options to old Makefile.config
# osx: OS X application
# release: used by OSX to make a dmg file ready to release
# Options:
#
@@ -44,6 +45,8 @@
# UNIX: building on *nix derivate (Linux, FreeBSD)
# OSX: building on Mac OS X
# MORPHOS: building on MorphOS
# BEOS: building on BeOS
# SUNOS: building on SunOS (Solaris)
#
# Summary of library choice defines
# WITH_ZLIB: savegames using zlib
@@ -61,18 +64,48 @@
# where it normally would print the revision number
# MIDI: if set, it will use it as custom path to midi player.
# If unset, it will use the hardcoded path in the c code
# NOVERBOSE: supress all warnings and errors during compilation.
# It looks nicer, but you will not know what went wrong. Use it on released (stable) sources only
# VERBOSE: actually show the commands used for compilation.
# WITH_NETWORK: enable networking
# DEDICATED: allows compilation on UNIX without SDL. Useful for dedicated servers
#
# DATA_DIR_PREFIX: This sets the dir OpenTTD looks for the needed files.
# MUST END WITH / if defined
# Paths:
# INSTALL: If not set, the game uses the directory of the binary to
# store everything (lang, data, gm, save and openttd.cfg), this is the `old' behaviour.
# In this case, none of the following paths are used, you also should _not_
# use `make install', but copy the required stuff yourself (or just play out
# of you source directory, which should work fine).
# If you want to use `make install' to install the game globally, you should
# define it _before_ you build the game. If you only define INSTALL when you
# do `make install', the game won't be able to find it's files (so you should
# also define all the following paths before building).
#
# So, the following paths should be defined if INSTALL is defined.
# None of these paths have to end with /
# PREFIX: Normally /usr/local
# BINARY_DIR: The location of the binary, normally games. (Will be prefixed
# with $PREFIX)
# DATA_DIR: The location of the data (lang, data and gm), normally
# share/games/openttd. (Will be prefixed with $PREFIX)
# PERSONAL_DIR: The directory where openttd.cfg and the save folder will be
# stored. You cannot use ~ here, define USE_HOMEDIR for that.
# USE_HOMEDIR: If this variable is set, PERSONAL_DIR will be prefixed with
# ~/ at runtime (the user's homedir)
# SECOND_DATA_PATH Use this data dir if a file is not found in the data dir in the data path
# CUSTOM_LANG_PATH If this is set, it will use the path given to search for lng files
# instead of the lang dir in the data path
# NOTE: both SECOND_DATA_PATH and CUSTOM_LANG_PATH uses paths relative to where OTTD is opened
#
# DEST_DIR: make install will use this directory instead of the filesystem
# root to install its files. This should normally not be used by
# ordinary users, currently it is only used for the debian
# packaging. This value should only be set when calling `make
# install' and is not saved in Makefile.config
#
# STATIC: link statically
# CYGWIN: build in Cygwin environment
# MINGW: build with MingW compiler, link with MingW libraries
#
# Experimental (does not work properly):
# WITH_NETWORK: enable networking
# WITH_DIRECTMUSIC: enable DirectMusic MIDI support
@@ -81,11 +114,15 @@
# Configuration
#
ifndef RELEASE
RELEASE:=0.3.6
endif
# Makefile version tag
# it checks if the version tag in makefile.config is the same and force update outdated config files
MAKEFILE_VERSION:=1
MAKEFILE_VERSION:=6
# CONFIG_WRITER have to be found even for manual configuration
# CONFIG_WRITER has to be found even for manual configuration
CONFIG_WRITER=makefiledir/Makefile.config_writer
ifndef MANUAL_CONFIG
@@ -127,30 +164,29 @@ endif
# this is used if there aren't any makefile.config
ifndef CONFIG_INCLUDED
ENABLE_NETWORK:=1 # sets network on by default if there aren't any config file
# sets network on by default if there aren't any config file
ENABLE_NETWORK:=1
# paths for make install
# disabled as they would break it for some (many?) people if they were default
#PREFIX:=/usr/local
#DATA_DIR:=share/games/openttd
#BINARY_DIR:=games
#PERSONAL_DIR:=.openttd
#USE_HOMEDIR:=1
-include $(LIB_DETECTION)
endif
# Verbose filter
ifdef NOVERBOSE
VERBOSE_FILTER = >/dev/null 2>&1
else
VERBOSE_FILTER =
endif
ifdef DISPLAY_WARNINGS
WARNING_DISPLAY:=-fstrict-aliasing
VERBOSE_FILTER =
else
WARNING_DISPLAY:=-fno-strict-aliasing
endif
ifdef SUPRESS_LANG_ERRORS
ifndef VERBOSE_FILTER
LANG_ERRORS = >/dev/null 2>&1
endif
endif
ifdef STATIC
ifndef WIN32
@@ -164,14 +200,27 @@ endif
endif
endif
ifdef RELEASE
ifdef OSX
ifndef STATIC
$(error do not make dynamically linked releases. Most users can't use those)
endif
endif
endif
# Force SDL on UNIX platforms
ifndef WITH_SDL
ifdef UNIX
$(error You need to have SDL installed in order to run OpenTTD on UNIX.)
ifndef DEDICATED
$(error You need to have SDL installed in order to run OpenTTD on UNIX. Use DEDICATED if you want to compile a CLI based server)
endif
endif
endif
# remove the dependancy for sdl if DEDICALTED is used
ifdef DEDICATED
WITH_SDL:=
endif
##############################################################################
@@ -205,7 +254,7 @@ REV_NUMBER := $(shell if test -d .svn; then svnversion . | tr -dc 0-9; fi)
ifdef RELEASE
REV:=$(RELEASE)
else
REV := $(shell if test -d .svn; then echo -n r; svnversion .; fi)
REV := $(shell if test -d .svn; then svnversion . | awk '{ print "r"$$0 }'; fi)
tmp_test:=$(shell echo "$(REV)" | grep "M" )
ifdef tmp_test
REV_NUMBER:=1
@@ -236,7 +285,21 @@ endif
# -O optimize or -O2 fully optimize (O's above 2 are not recommended)
# -pg profile - generate profiling data. See "man gprof" to use this.
CFLAGS=-Wall -Wno-multichar
CC_VERSION = $(shell $(CC) -dumpversion | cut -c 1,3)
# GNU make can only test for (in)equality
# this is a workaround to test for >=
ifeq ($(shell if test $(CC_VERSION) -ge 29; then echo true; fi), true)
CFLAGS += -O -Wall -Wno-multichar -Wsign-compare -Wstrict-prototypes
CFLAGS += -Wwrite-strings
endif
ifeq ($(shell if test $(CC_VERSION) -ge 30; then echo true; fi), true)
CFLAGS += -W -Wno-unused-parameter
endif
ifeq ($(shell if test $(CC_VERSION) -ge 34; then echo true; fi), true)
CFLAGS += -Wdeclaration-after-statement -Wold-style-definition
endif
CDEFS=-DWITH_REV
LDFLAGS=
LIBS=
@@ -248,6 +311,7 @@ BASECFLAGS += -g
else
ifdef PROFILE
BASECFLAGS += -pg
LDFLAGS += -pg
else
# Release mode
ifndef MORPHOS
@@ -262,7 +326,7 @@ ifdef OSX
BASECFLAGS += -O3 -funroll-loops -fsched-interblock -falign-loops=16 -falign-jumps=16 -falign-functions=16 -falign-jumps-max-skip=15 -falign-loops-max-skip=15 -mdynamic-no-pic -mpowerpc-gpopt -force_cpusubtype_ALL $(WARNING_DISPLAY)
else
ifdef MORPHOS
BASECFLAGS += -O2 -funroll-loops -fexpensive-optimizations -mstring -mmultiple $(WARNING_DISPLAY)
BASECFLAGS += -O3 -funroll-loops -fexpensive-optimizations -mstring -mmultiple $(WARNING_DISPLAY)
else
BASECFLAGS += -O2 $(WARNING_DISPLAY)
endif
@@ -278,15 +342,17 @@ LDFLAGS += -static
endif
endif
# If building on Cygwin/MingW don't link with Cygwin libs
# If building on MingW don't link with Cygwin libs
ifdef WIN32
ifdef MINGW
ifdef CYGWIN
BASECFLAGS += -mwin32
LDFLAGS += -mwin32
endif
ifdef MINGW
BASECFLAGS += -mno-cygwin
LDFLAGS += -mno-cygwin
endif
endif
endif
CFLAGS += $(BASECFLAGS)
@@ -294,6 +360,26 @@ ifdef UNIX
CDEFS += -DUNIX
endif
ifdef BEOS
CDEFS += -DBEOS
LDFLAGS += -lmidi -lbe
ifdef WITH_NETWORK
ifdef BEOS_NET_SERVER
CDEFS += -DBEOS_NET_SERVER
else
# Zeta needs a few more libraries than R5
LDFLAGS += -lbind -lsocket
endif
endif
endif
ifdef SUNOS
CDEFS += -DSUNOS
ifdef WITH_NETWORK
LDFLAGS += -lnsl -lsocket
endif
endif
# SDL config
ifdef WITH_SDL
CDEFS += -DWITH_SDL
@@ -349,25 +435,33 @@ ifdef FREEBSD
LIBS += -lpng
else
CFLAGS += `libpng-config --cflags`
ifdef OSX
ifdef STATIC
# Seems like we need a tiny hack for OSX static to work
LIBS += `libpng-config --prefix`/lib/libpng.a
else
LIBS += `libpng-config --libs`
endif
else
# seems like older libpng versions are broken and need this
PNGCONFIG_FLAGS = --ldflags --libs
ifdef STATIC
LIBS += `libpng-config --static $(PNGCONFIG_FLAGS)`
ifdef OSX
# Seems like we need a tiny hack for OSX static to work
LIBS += `libpng-config --prefix`/lib/libpng.a
else
LIBS += `libpng-config $(PNGCONFIG_FLAGS)`
LIBS += `libpng-config --static $(PNGCONFIG_FLAGS)`
endif
else
LIBS += `libpng-config --L_opts $(PNGCONFIG_FLAGS)`
endif
endif
endif
# enables/disables assert()
ifdef DISABLE_ASSERTS
CFLAGS += -DNDEBUG
endif
# automatically disables asserts for release
ifdef RELEASE
ifndef ENABLE_ASSERTS
CFLAGS += -DNDEBUG
endif
endif
ifdef TRANSLATOR
STRGEN_FLAGS=-t
@@ -375,24 +469,18 @@ else
STRGEN_FLAGS=
endif
# file paths setup
ifdef GAME_DATA_DIR
CDEFS += -DGAME_DATA_DIR=\"$(GAME_DATA_DIR)\"
endif
ifdef PERSONAL_DIR
CDEFS += -DPERSONAL_DIR=\"$(PERSONAL_DIR)\"
endif
ifdef USE_HOMEDIR
CDEFS += -DUSE_HOMEDIR
endif
# MIDI setup
ifdef OSX
ifndef MIDI
MIDI:=$(OSXAPP)/contents/macos/track_starter
endif
ifndef SECOND_DATA_PATH
SECOND_DATA_PATH:="$(OSXAPP)/contents/data/"
endif
ifndef CUSTOM_LANG_DIR
CUSTOM_LANG_DIR:="$(OSXAPP)/contents/lang/"
endif
endif
ifdef MIDI
@@ -402,9 +490,11 @@ CDEFS += -DMIDI_ARG=\"$(MIDI_ARG)\"
endif
endif
# Experimental
ifdef WITH_NETWORK
CDEFS += -DENABLE_NETWORK
ifdef QNX
LIBS += -lsocket
endif
ifdef UNIX
ifndef OSX
ifndef MORPHOS
@@ -416,6 +506,15 @@ endif
endif
endif
ifdef SECOND_DATA_PATH
CDEFS += -DSECOND_DATA_DIR=\"$(SECOND_DATA_PATH)/\"
endif
ifdef CUSTOM_LANG_DIR
CDEFS += -DCUSTOM_LANG_DIR=\"$(CUSTOM_LANG_DIR)/\"
endif
ifdef WITH_DIRECTMUSIC
CDEFS += -DWIN32_ENABLE_DIRECTMUSIC_SUPPORT
endif
@@ -426,15 +525,27 @@ TTDLDFLAGS += -Wl,--subsystem,windows
endif
# sets up the paths for use for make install
ifdef BINARY_DIR
BINARY_INSTALL:=$(BINARY_DIR)$(TTD)
else
BINARY_INSTALL:=$(INSTALL_DIR)$(TTD)
ifdef INSTALL
# We use _PREFIXED vars here, so the paths are recalculated every time, and
# the prefix is not prepended in the makefile config
BINARY_DIR_PREFIXED:=$(PREFIX)/$(BINARY_DIR)
DATA_DIR_PREFIXED:=$(PREFIX)/$(DATA_DIR)
# We use _INSTALL vars here, these vars are the locations where the files will
# be installed
DATA_DIR_INSTALL=$(DEST_DIR)/$(DATA_DIR_PREFIXED)
BINARY_DIR_INSTALL=$(DEST_DIR)/$(BINARY_DIR_PREFIXED)
# Let the code know where to find stuff
ifdef DATA_DIR_PREFIXED
CDEFS += -DGAME_DATA_DIR=\"$(DATA_DIR_PREFIXED)/\"
endif
ifdef PERSONAL_DIR
CDEFS += -DPERSONAL_DIR=\"$(PERSONAL_DIR)/\"
endif
ifdef USE_HOMEDIR
CDEFS += -DUSE_HOMEDIR
endif
ifdef DATA_DIR_PREFIX
DATA_DIR:=$(DATA_DIR_PREFIX)
else
DATA_DIR:=$(INSTALL_DIR)
endif
##############################################################################
@@ -446,33 +557,118 @@ endif
### Sources
ttd_SOURCES = \
ai.c ai_build.c ai_new.c ai_pathfinder.c ai_shared.c aircraft_cmd.c \
aircraft_gui.c airport.c airport_gui.c aystar.c bridge_gui.c \
clear_cmd.c command.c console.c console_cmds.c disaster_cmd.c dock_gui.c dummy_land.c economy.c \
engine.c engine_gui.c fileio.c gfx.c graph_gui.c grfspecial.c \
industry_cmd.c industry_gui.c intro_gui.c landscape.c main_gui.c \
minilzo.c misc.c misc_cmd.c misc_gui.c music_gui.c namegen.c network.c \
network_gui.c news_gui.c oldloader.c order_cmd.c order_gui.c \
pathfind.c player_gui.c players.c queue.c rail_cmd.c rail_gui.c rev.c \
road_cmd.c road_gui.c roadveh_cmd.c roadveh_gui.c saveload.c \
screenshot.c settings.c settings_gui.c ship_cmd.c ship_gui.c \
smallmap_gui.c sound.c spritecache.c station_cmd.c station_gui.c \
strings.c subsidy_gui.c terraform_gui.c texteff.c town_cmd.c \
town_gui.c train_cmd.c train_gui.c tree_cmd.c ttd.c tunnelbridge_cmd.c \
unmovable_cmd.c vehicle.c vehicle_gui.c viewport.c water_cmd.c widget.c window.c \
C_SOURCES += ai.c
C_SOURCES += ai_build.c
C_SOURCES += ai_new.c
C_SOURCES += ai_pathfinder.c
C_SOURCES += ai_shared.c
C_SOURCES += aircraft_cmd.c
C_SOURCES += aircraft_gui.c
C_SOURCES += airport.c
C_SOURCES += airport_gui.c
C_SOURCES += aystar.c
C_SOURCES += bridge_gui.c
C_SOURCES += callback_table.c
C_SOURCES += clear_cmd.c
C_SOURCES += command.c
C_SOURCES += console.c
C_SOURCES += console_cmds.c
C_SOURCES += dedicated.c
C_SOURCES += disaster_cmd.c
C_SOURCES += dock_gui.c
C_SOURCES += dummy_land.c
C_SOURCES += economy.c
C_SOURCES += engine.c
C_SOURCES += engine_gui.c
C_SOURCES += fileio.c
C_SOURCES += gfx.c
C_SOURCES += graph_gui.c
C_SOURCES += newgrf.c
C_SOURCES += industry_cmd.c
C_SOURCES += industry_gui.c
C_SOURCES += intro_gui.c
C_SOURCES += landscape.c
C_SOURCES += main_gui.c
C_SOURCES += map.c
C_SOURCES += md5.c
C_SOURCES += minilzo.c
C_SOURCES += misc.c
C_SOURCES += misc_cmd.c
C_SOURCES += misc_gui.c
C_SOURCES += music_gui.c
C_SOURCES += namegen.c
C_SOURCES += network.c
C_SOURCES += network_client.c
C_SOURCES += network_data.c
C_SOURCES += network_gamelist.c
C_SOURCES += network_gui.c
C_SOURCES += network_server.c
C_SOURCES += network_udp.c
C_SOURCES += news_gui.c
C_SOURCES += oldloader.c
C_SOURCES += order_cmd.c
C_SOURCES += order_gui.c
C_SOURCES += pathfind.c
C_SOURCES += player_gui.c
C_SOURCES += players.c
C_SOURCES += queue.c
C_SOURCES += rail_cmd.c
C_SOURCES += rail_gui.c
C_SOURCES += rev.c
C_SOURCES += road_cmd.c
C_SOURCES += road_gui.c
C_SOURCES += roadveh_cmd.c
C_SOURCES += roadveh_gui.c
C_SOURCES += saveload.c
C_SOURCES += screenshot.c
C_SOURCES += settings.c
C_SOURCES += settings_gui.c
C_SOURCES += ship_cmd.c
C_SOURCES += ship_gui.c
C_SOURCES += signs.c
C_SOURCES += smallmap_gui.c
C_SOURCES += sound.c
C_SOURCES += sprite.c
C_SOURCES += spritecache.c
C_SOURCES += station_cmd.c
C_SOURCES += station_gui.c
C_SOURCES += strings.c
C_SOURCES += subsidy_gui.c
C_SOURCES += terraform_gui.c
C_SOURCES += texteff.c
C_SOURCES += town_cmd.c
C_SOURCES += town_gui.c
C_SOURCES += train_cmd.c
C_SOURCES += train_gui.c
C_SOURCES += tree_cmd.c
C_SOURCES += ttd.c
C_SOURCES += tunnelbridge_cmd.c
C_SOURCES += unmovable_cmd.c
C_SOURCES += vehicle.c
C_SOURCES += vehicle_gui.c
C_SOURCES += viewport.c
C_SOURCES += water_cmd.c
C_SOURCES += widget.c
C_SOURCES += window.c
CXX_SOURCES =
ifdef WITH_SDL
ttd_SOURCES += sdl.c
C_SOURCES += sdl.c
endif
ifdef WIN32
ttd_SOURCES += win32.c w32dm.c
C_SOURCES += win32.c w32dm.c
else
ttd_SOURCES += extmidi.c unix.c
C_SOURCES += extmidi.c unix.c
endif
ttd_OBJS = $(ttd_SOURCES:%.c=%.o)
ttd_OBJS = $(C_SOURCES:%.c=%.o) $(CXX_SOURCES:%.cpp=%.o)
ifdef BEOS
CXX_SOURCES += os/beos/bemidi.cpp
CFLAGS += -I.
endif
ifdef WIN32
# Resource file
@@ -480,8 +676,7 @@ ttd_OBJS += winres.o
endif
ifdef WITH_DIRECTMUSIC
ttd_SOURCES += w32dm2.cpp
ttd_OBJS += w32dm2.o
CXX_SOURCES += w32dm2.cpp
endif
ttd_DEPS1 = $(foreach obj,$(ttd_OBJS),.deps/$(obj))
@@ -514,33 +709,38 @@ OSX:=OSX
endif
all: endian.h $(UPDATECONFIG) $(TTD) $(OSX) $(endwarnings)
all: endian.h $(UPDATECONFIG) $(LANGS) $(TTD) $(OSX) $(endwarnings)
endian.h: $(ENDIAN_CHECK)
@# Check if system is LITTLE_ENDIAN or BIG_ENDIAN
@echo 'Running endian_check'; \
./$(ENDIAN_CHECK) > $@
@echo '===> Testing endianness'
@./$(ENDIAN_CHECK) > $@
$(ENDIAN_CHECK): endian_check.c
@echo 'Compiling and Linking $@'; \
$(CC) $(BASECFLAGS) $(CDEFS) endian_check.c -o $@
@echo '===> Compiling and Linking $@'
@$(CC) $(BASECFLAGS) $(CDEFS) endian_check.c -o $@
$(TTD): table/strings.h $(ttd_OBJS) $(LANGS) $(MAKE_CONFIG)
@echo 'Compiling and Linking $@'; \
$(C_LINK) $@ $(TTDLDFLAGS) $(ttd_OBJS) $(LIBS) $(VERBOSE_FILTER)
$(TTD): table/strings.h $(ttd_OBJS) $(MAKE_CONFIG)
@echo '===> Linking $@'
@$(if $(VERBOSE), echo '$(C_LINK) $@ $(TTDLDFLAGS) $(ttd_OBJS) $(LIBS)')
@$(C_LINK) $@ $(TTDLDFLAGS) $(ttd_OBJS) $(LIBS)
$(OSX):
@mkdir -p $(OSXAPP)/Contents/MacOS
@mkdir -p $(OSXAPP)/Contents/Resources
@echo "APPL????" > $(OSXAPP)/Contents/PkgInfo
@cp os/macos/ttd.icns $(OSXAPP)/Contents/Resources/openttd.icns
@os/macos/plistgen.sh $(OSXAPP) $(REV)
@cp os/macos/track_starter $(OSXAPP)/contents/macos
$(OSX): $(TTD)
@rm -fr "$(OSXAPP)"
@mkdir -p "$(OSXAPP)"/Contents/MacOS
@mkdir -p "$(OSXAPP)"/Contents/Resources
@mkdir -p "$(OSXAPP)"/Contents/Data
@mkdir -p "$(OSXAPP)"/Contents/Lang
@echo "APPL????" > "$(OSXAPP)"/Contents/PkgInfo
@cp os/macos/openttd.icns "$(OSXAPP)"/Contents/Resources/openttd.icns
@os/macos/plistgen.sh "$(OSXAPP)" "$(REV)"
@cp os/macos/track_starter "$(OSXAPP)"/contents/macos
@ls os/macos | grep -q "\.class" || \
javac os/macos/OpenTTDMidi.java
@cp os/macos/OpenTTDMidi.class $(OSXAPP)/contents/macos
@cp $(TTD) $(OSXAPP)/Contents/MacOS/$(TTD)
@cp os/macos/OpenTTDMidi.class "$(OSXAPP)"/contents/macos
@cp data/* "$(OSXAPP)"/Contents/data/
@cp lang/*.lng "$(OSXAPP)"/Contents/lang/
@cp $(TTD) "$(OSXAPP)"/Contents/MacOS/$(TTD)
$(endwarnings): $(64_bit_warnings)
@@ -548,31 +748,101 @@ $(64_bit_warnings):
$(warning 64 bit CPUs will get some 64 bit specific bugs!)
$(warning If you see any bugs, include in your bug report that you use a 64 bit CPU)
$(STRGEN): strgen/strgen.c rev.o
@echo 'Compiling and Linking $@'; \
$(CC) $(BASECFLAGS) $(CDEFS) -o $@ $^ $(VERBOSE_FILTER)
$(STRGEN): strgen/strgen.c endian.h
@echo '===> Compiling and Linking $@'
@$(CC) $(BASECFLAGS) $(CDEFS) -o $@ $<
lang/english.lng: lang/english.txt $(STRGEN)
@echo 'Generating $@'; \
$(STRGEN)
table/strings.h: lang/english.txt $(STRGEN)
@echo '===> Generating $@'
@$(STRGEN)
table/strings.h: lang/english.lng
lang/%.lng: lang/%.txt $(STRGEN)
@echo 'Generating $@'; \
$(STRGEN) $(STRGEN_FLAGS) $< $(VERBOSE_FILTER) $(LANG_ERRORS)
lang/%.lng: lang/%.txt $(STRGEN) lang/english.txt
@echo '===> Compiling language $(*F)'
@$(STRGEN) $(STRGEN_FLAGS) $< $(LANG_ERRORS)
winres.o: ttd.rc
windres -o $@ $<
@echo '===> Compiling resource $<'
@windres -o $@ $<
ifdef MORPHOS
release: all
@rm -fr "/t/openttd-$(RELEASE)-morphos.lha"
@mkdir -p "/t/"
@mkdir -p "/t/openttd-$(RELEASE)-morphos"
@mkdir -p "/t/openttd-$(RELEASE)-morphos/docs"
@mkdir -p "/t/openttd-$(RELEASE)-morphos/data"
@mkdir -p "/t/openttd-$(RELEASE)-morphos/lang"
@mkdir -p "/t/openttd-$(RELEASE)-morphos/scenario"
@cp -R $(TTD) "/t/openttd-$(RELEASE)-morphos/"
@cp data/* "/t/openttd-$(RELEASE)-morphos/data/"
@cp lang/*.lng "/t/openttd-$(RELEASE)-morphos/lang/"
@cp scenario/* "/t/openttd-$(RELEASE)-morphos/scenario/"
@cp readme.txt "/t/openttd-$(RELEASE)-morphos/docs/ReadMe"
@cp docs/console.txt "/t/openttd-$(RELEASE)-morphos/docs/Console"
@cp COPYING "/t/openttd-$(RELEASE)-morphos/docs/"
@cp changelog.txt "/t/openttd-$(RELEASE)-morphos/docs/ChangeLog"
@cp known-bugs.txt "/t/openttd-$(RELEASE)-morphos/docs/known-bugs.txt"
@cp os/morphos/icons/openttd.info "/t/openttd-$(RELEASE)-morphos/$(TTD).info"
@cp os/morphos/icons/docs.info "/t/openttd-$(RELEASE)-morphos/docs.info"
@cp os/morphos/icons/drawer.info "/t/openttd-$(RELEASE)-morphos.info"
@cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/ReadMe.info"
@cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/Console.info"
@cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/COPYING.info"
@cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/ChangeLog.info"
@strip --strip-all --strip-unneeded --remove-section .comment "/t/openttd-$(RELEASE)-morphos/$(TTD)"
@lha a -r "t:openttd-$(RELEASE)-morphos.lha" "t:openttd-$(RELEASE)-morphos"
@lha a "t:openttd-$(RELEASE)-morphos.lha" "t:openttd-$(RELEASE)-morphos.info"
@rm -fr "/t/openttd-$(RELEASE)-morphos"
@rm -fr "/t/openttd-$(RELEASE)-morphos.info"
@echo "Release archive can be found in RAM:t/ now."
.PHONY: release
endif
ifdef OSX
release: all
@mkdir -p "OpenTTD $(RELEASE)"
@mkdir -p "OpenTTD $(RELEASE)"/docs
@mkdir -p "OpenTTD $(RELEASE)"/scenario
@cp -R $(OSXAPP) "OpenTTD $(RELEASE)"/
@cp docs/OSX_where_did_the_package_go.txt "OpenTTD $(RELEASE)"/Where\ did\ the\ package\ go.txt
@cp readme.txt "OpenTTD $(RELEASE)"/docs/
@cp docs/README_if_game_crashed_on_OSX.txt "OpenTTD $(RELEASE)"/docs/readme\ if\ crashed\ on\ OSX.txt
@cp docs/console.txt "OpenTTD $(RELEASE)"/docs/
@cp COPYING "OpenTTD $(RELEASE)"/docs/
@cp changelog.txt "OpenTTD $(RELEASE)"/docs/
@cp docs/README_if_game_crashed_on_OSX.txt "OpenTTD $(RELEASE)"/docs/
@cp os/macos/*.webloc "OpenTTD $(RELEASE)"
@cp known-bugs.txt "OpenTTD $(RELEASE)"/known-bugs.txt
@cp scenario/* "OpenTTD $(RELEASE)"/scenario/
@/usr/bin/hdiutil create -ov -format UDZO -srcfolder "OpenTTD $(RELEASE)" openttd-"$(RELEASE)"-osx.dmg
@rm -fr "OpenTTD $(RELEASE)"
nightly_build: all
@mkdir -p "OpenTTD_nightly_$(DATE)"
@mkdir -p "OpenTTD_nightly_$(DATE)"/docs
@cp -R $(OSXAPP) "OpenTTD_nightly_$(DATE)"/
@cp docs/OSX_where_did_the_package_go.txt "OpenTTD_nightly_$(DATE)"/Where\ did\ the\ package\ go.txt
@cp readme.txt "OpenTTD_nightly_$(DATE)"/docs/
@cp docs/README_if_game_crashed_on_OSX.txt "OpenTTD_nightly_$(DATE)"/docs/readme\ if\ crashed\ on\ OSX.txt
@cp docs/console.txt "OpenTTD_nightly_$(DATE)"/docs/
@cp COPYING "OpenTTD_nightly_$(DATE)"/docs/
@cp revisionlog.txt "OpenTTD_nightly_$(DATE)"/revisionlog.txt
@cp docs/README_if_game_crashed_on_OSX.txt "OpenTTD_nightly_$(DATE)"/docs/
@cp os/macos/*.webloc "OpenTTD_nightly_$(DATE)"/
@/usr/bin/hdiutil create -ov -format UDZO -srcfolder "OpenTTD_nightly_$(DATE)" openttd-nightly-"$(DATE)".dmg
@rm -fr "OpenTTD_nightly_$(DATE)"
.PHONY: release nightly_build
endif
rev.c: FORCE
@# setting the revision number in a place, there the binary can read it
@echo 'const char _openttd_revision[] = "'$(REV)'";' >>rev.c.new
@echo 'const char _openttd_revision[] = "$(REV)";' >>rev.c.new
@echo 'const int _revision_number = $(REV_NUMBER);' >>rev.c.new
@# some additions for MorphOS versions tag
@echo '#ifdef __MORPHOS__' >>rev.c.new
@echo 'const char morphos_versions_tag[] = "\\0$$VER: OpenTTD '$(REV)' ('${BUILDDATE}') <20> OpenTTD Team [MorphOS, PowerPC]";' >>rev.c.new
@echo 'const char morphos_versions_tag[] = "\\0$$VER: OpenTTD $(REV) ('${BUILDDATE}') <20> OpenTTD Team [MorphOS, PowerPC]";' >>rev.c.new
@echo '#endif' >>rev.c.new
@# Only update the real rev.c if it actually changed, to prevent
@# useless rebuilds.
@@ -582,27 +852,46 @@ rev.c: FORCE
FORCE:
# ttd$(EXE) is removed just to make sure people execute the right binary (openttd$(EXE))
# remove this for next release!
clean:
@echo 'Cleaning up...'; \
rm -rf .deps *~ $(TTD) $(STRGEN) core table/strings.h $(LANGS) $(ttd_OBJS) endian.h $(ENDIAN_CHECK) ttd$(EXE)
@echo '===> Cleaning up'
@rm -rf .deps *~ $(TTD) $(STRGEN) core table/strings.h $(LANGS) $(ttd_OBJS) endian.h $(ENDIAN_CHECK)
mrproper: clean
rm -rf $(MAKE_CONFIG)
@rm -rf $(MAKE_CONFIG)
ifndef OSX
ifndef MORPHOS
install:
@if [ "$(INSTALL)" == "" ]; then $(error make install is highly experimental at his state and not\
ifeq ($(INSTALL),)
$(error make install is highly experimental at his state and not\
tested very much - use at your own risk - to use run \"make install INSTALL:=1\" - make sure makefile.config\
is set correctly up - run \"make upgradeconf\")
@if [ "$(DATA_DIR)" == "" ]; then $(error no install path set - check makefile.config)
mkdir -p $(DATA_DIR)/lang
mkdir -p $(DATA_DIR)/data
cp $(TTD) $(BINARY_INSTALL)
cp lang/*.lng $(DATA_DIR)/lang
cp data/*.grf $(DATA_DIR)/data
endif
ifeq ($(PREFIX), )
$(error no prefix set - check makefile.config)
endif
# We compare against the non prefixed version here, so we won't install
# if only the prefix has been set
ifeq ($(DATA_DIR),)
$(error no data path set - check makefile.config)
endif
ifeq ($(BINARY_DIR),)
$(error no binary path set - check makefile.config)
endif
# We'll install in $DEST_DIR instead of root if it is set (we don't
# care about extra /'s
mkdir -p $(DATA_DIR_INSTALL)/lang
mkdir -p $(DATA_DIR_INSTALL)/data
mkdir -p $(DATA_DIR_INSTALL)/gm
mkdir -p $(BINARY_DIR_INSTALL)
mkdir -p $(PERSONAL_DIR)/scenario
cp $(TTD) $(BINARY_DIR_INSTALL)
cp lang/*.lng $(DATA_DIR_INSTALL)/lang
cp data/*.grf $(DATA_DIR_INSTALL)/data
cp data/opntitle.dat $(DATA_DIR_INSTALL)/data
cp media/openttd.64.png $(DATA_DIR_INSTALL)
cp scenario/* $(PERSONAL_DIR)/scenario/
else #MorphOS
install:
$(error make install is not supported on MorphOS)
@@ -626,8 +915,8 @@ love:
# Export all variables set to subprocesses (a bit dirty)
.EXPORT_ALL_VARIABLES:
upgradeconf: $(MAKE_CONFIG)
rm $(MAKE_CONFIG)
$(MAKE) $(MAKE_CONFIG)
@rm $(MAKE_CONFIG)
@$(MAKE) $(MAKE_CONFIG)
.PHONY: upgradeconf
@@ -645,18 +934,18 @@ DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
# first compilation round as we just build everything at that time anyway,
# therefore we do not need to watch deps.
#@echo '$(C_BUILD) $<'; \
%.o: %.c $(MAKE_CONFIG)
@echo 'Compiling $(*F).o'; \
$(C_BUILD) $< -Wp,-MD,.deps/$(*F).pp $(VERBOSE_FILTER)
%.o: %.c $(MAKE_CONFIG) endian.h table/strings.h
@echo '===> Compiling $<'
@$(if $(VERBOSE), echo '$(C_BUILD) $<')
@$(C_BUILD) $< -Wp,-MD,.deps/$(*F).pp
@-cp .deps/$(*F).pp .deps/$(*F).P; \
tr ' ' '\012' < .deps/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*F).P; \
rm .deps/$(*F).pp
# For DirectMusic build
%.o: %.cpp $(MAKE_CONFIG)
$(CXX_BUILD) $<
# For DirectMusic build and BeOS specific parts
%.o: %.cpp $(MAKE_CONFIG) endian.h table/strings.h
@echo '===> Compiling $<'
@$(CXX_BUILD) $< -o $@

292
ai.c
View File

@@ -1,5 +1,6 @@
#include "stdafx.h"
#include "ttd.h"
#include "map.h"
#include "player.h"
#include "vehicle.h"
#include "engine.h"
@@ -68,10 +69,11 @@ static void AiCase1(Player *p)
static void AiStateVehLoop(Player *p)
{
Vehicle *v;
uint index;
v = p->ai.cur_veh == NULL ? _vehicles : p->ai.cur_veh+1;
index = (p->ai.cur_veh == NULL) ? 0 : p->ai.cur_veh->index + 1;
for (;v != endof(_vehicles); v++) {
FOR_ALL_VEHICLES_FROM(v, index) {
if (v->type == 0 || v->owner != _current_player)
continue;
@@ -113,25 +115,19 @@ static void AiStateVehLoop(Player *p)
p->ai.state_counter = 0;
}
// XXX
static const byte _rail_locos_count[3] = {
27, 3, 5
};
extern const byte _rail_engines_start[3];
static int AiChooseTrainToBuild(byte railtype, int32 money, byte flag)
{
int best_veh_index = -1;
byte best_veh_score = 0;
int32 r;
int i;
int i = _rail_engines_start[railtype];
int end = i + _rail_locos_count[railtype];
Engine *e = &_engines[i];
do {
assert(!(_rail_vehicle_info[i].flags & RVI_WAGON));
for (i = 0; i < NUM_TRAIN_ENGINES; i++) {
const RailVehicleInfo *rvi = RailVehInfo(i);
Engine *e = DEREF_ENGINE(i);
if (!HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D)
if (e->railtype != railtype || rvi->flags & RVI_WAGON
|| !HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D)
continue;
r = DoCommandByTile(0, i, 0, 0, CMD_BUILD_RAIL_VEHICLE);
@@ -142,7 +138,7 @@ static int AiChooseTrainToBuild(byte railtype, int32 money, byte flag)
best_veh_score = _cmd_build_rail_veh_score;
best_veh_index = i;
}
} while (++e, ++i != end);
}
return best_veh_index;
}
@@ -254,7 +250,7 @@ static int AiChooseShipToReplaceWith(Player *p, Vehicle *v)
static void AiHandleGotoDepot(Player *p, int cmd)
{
if ((p->ai.cur_veh->next_order & OT_MASK) != OT_GOTO_DEPOT)
if (p->ai.cur_veh->current_order.type != OT_GOTO_DEPOT)
DoCommandByTile(0, p->ai.cur_veh->index, 0, DC_EXEC, cmd);
if (++p->ai.state_counter <= 1387) {
@@ -262,21 +258,20 @@ static void AiHandleGotoDepot(Player *p, int cmd)
return;
}
if ((p->ai.cur_veh->next_order&OT_MASK) == OT_GOTO_DEPOT) {
p->ai.cur_veh->next_order = OT_DUMMY;
if (p->ai.cur_veh->current_order.type == OT_GOTO_DEPOT) {
p->ai.cur_veh->current_order.type = OT_DUMMY;
p->ai.cur_veh->current_order.flags = 0;
InvalidateWindow(WC_VEHICLE_VIEW, p->ai.cur_veh->index);
}
}
static void AiRestoreVehicleOrders(Vehicle *v, BackuppedOrders *bak)
{
uint16 *os = bak->order, ord;
int ind = 0;
while ((ord = *os++) != 0) {
if (DoCommandByTile(0, v->index + (ind << 16), ord, DC_EXEC, CMD_INSERT_ORDER) == CMD_ERROR)
int i;
for (i = 0; bak->order[i].type != OT_NOTHING; i++)
if (!DoCommandP(0, v->index + (i << 16), PackOrder(&bak->order[i]), NULL, CMD_INSERT_ORDER | CMD_NO_TEST_IF_IN_NETWORK))
break;
ind++;
}
}
static void AiHandleReplaceTrain(Player *p)
@@ -300,7 +295,7 @@ static void AiHandleReplaceTrain(Player *p)
if (DoCommandByTile(0, v->index, 2, DC_EXEC, CMD_SELL_RAIL_WAGON) != CMD_ERROR &&
DoCommandByTile(tile, veh, 0, DC_EXEC, CMD_BUILD_RAIL_VEHICLE) != CMD_ERROR) {
veh = _new_train_id;
AiRestoreVehicleOrders(&_vehicles[veh], orderbak);
AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
DoCommandByTile(0, veh, 0, DC_EXEC, CMD_START_STOP_TRAIN);
DoCommandByTile(0, veh, _ai_service_interval, DC_EXEC, CMD_CHANGE_TRAIN_SERVICE_INT);
@@ -328,7 +323,7 @@ static void AiHandleReplaceRoadVeh(Player *p)
if (DoCommandByTile(0, v->index, 0, DC_EXEC, CMD_SELL_ROAD_VEH) != CMD_ERROR &&
DoCommandByTile(tile, veh, 0, DC_EXEC, CMD_BUILD_ROAD_VEH) != CMD_ERROR) {
veh = _new_roadveh_id;
AiRestoreVehicleOrders(&_vehicles[veh], orderbak);
AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
DoCommandByTile(0, veh, 0, DC_EXEC, CMD_START_STOP_ROADVEH);
DoCommandByTile(0, veh, _ai_service_interval, DC_EXEC, CMD_CHANGE_TRAIN_SERVICE_INT);
@@ -356,7 +351,7 @@ static void AiHandleReplaceAircraft(Player *p)
if (DoCommandByTile(0, v->index, 0, DC_EXEC, CMD_SELL_AIRCRAFT) != CMD_ERROR &&
DoCommandByTile(tile, veh, 0, DC_EXEC, CMD_BUILD_AIRCRAFT) != CMD_ERROR) {
veh = _new_aircraft_id;
AiRestoreVehicleOrders(&_vehicles[veh], orderbak);
AiRestoreVehicleOrders(GetVehicle(veh), orderbak);
DoCommandByTile(0, veh, 0, DC_EXEC, CMD_START_STOP_AIRCRAFT);
DoCommandByTile(0, veh, _ai_service_interval, DC_EXEC, CMD_CHANGE_TRAIN_SERVICE_INT);
@@ -415,19 +410,21 @@ typedef struct FoundRoute {
void *to;
} FoundRoute;
static Town *AiFindRandomTown() {
Town *t = DEREF_TOWN(RandomRange(_total_towns));
static Town *AiFindRandomTown(void)
{
Town *t = GetTown(RandomRange(_total_towns));
return (t->xy != 0) ? t : NULL;
}
static Industry *AiFindRandomIndustry() {
Industry *i = DEREF_INDUSTRY(RandomRange(_total_industries));
static Industry *AiFindRandomIndustry(void)
{
Industry *i = GetIndustry(RandomRange(_total_industries));
return (i->xy != 0) ? i : NULL;
}
static void AiFindSubsidyIndustryRoute(FoundRoute *fr)
{
int i;
uint i;
byte cargo;
Subsidy *s;
Industry *from, *to_ind;
@@ -450,16 +447,16 @@ static void AiFindSubsidyIndustryRoute(FoundRoute *fr)
return;
fr->cargo = cargo;
fr->from = from = DEREF_INDUSTRY(s->from);
fr->from = from = GetIndustry(s->from);
if (cargo == CT_GOODS || cargo == CT_FOOD) {
to_tow = DEREF_TOWN(s->to);
to_tow = GetTown(s->to);
if (to_tow->population < (uint32)(cargo == CT_FOOD ? 200 : 900))
return; // error
fr->to = to_tow;
to_xy = to_tow->xy;
} else {
to_ind = DEREF_INDUSTRY(s->to);
to_ind = GetIndustry(s->to);
fr->to = to_ind;
to_xy = to_ind->xy;
}
@@ -488,8 +485,8 @@ static void AiFindSubsidyPassengerRoute(FoundRoute *fr)
return;
fr->cargo = s->cargo_type;
fr->from = from = DEREF_TOWN(s->from);
fr->to = to = DEREF_TOWN(s->to);
fr->from = from = GetTown(s->from);
fr->to = to = GetTown(s->to);
// They must be big enough
if (from->population < 400 || to->population < 400)
@@ -624,16 +621,16 @@ static bool AiCheckIfRouteIsGood(Player *p, FoundRoute *fr, byte bitmask)
static byte AiGetDirectionBetweenTiles(TileIndex a, TileIndex b)
{
byte i = (GET_TILE_X(a) < GET_TILE_X(b)) ? 1 : 0;
if (GET_TILE_Y(a) >= GET_TILE_Y(b)) i ^= 3;
byte i = (TileX(a) < TileX(b)) ? 1 : 0;
if (TileY(a) >= TileY(b)) i ^= 3;
return i;
}
static TileIndex AiGetPctTileBetween(TileIndex a, TileIndex b, byte pct)
{
return TILE_XY(
GET_TILE_X(a) + ((GET_TILE_X(b) - GET_TILE_X(a)) * pct >> 8),
GET_TILE_Y(a) + ((GET_TILE_Y(b) - GET_TILE_Y(a)) * pct >> 8)
TileX(a) + ((TileX(b) - TileX(a)) * pct >> 8),
TileY(a) + ((TileY(b) - TileY(a)) * pct >> 8)
);
}
@@ -1419,7 +1416,7 @@ static void AiWantOilRigAircraftRoute(Player *p)
t = AiFindRandomTown();
if (t != NULL) {
// Find a random oil rig industry
in = DEREF_INDUSTRY(RandomRange(lengthof(_industries)));
in = GetIndustry(RandomRange(_total_industries));
if (in != NULL && in->type == IT_OIL_RIG) {
if (GetTileDist(t->xy, in->xy) < 60)
break;
@@ -1534,19 +1531,27 @@ static bool AiCheckTrackResources(TileIndex tile, const AiDefaultBlockData *p, b
uint values[NUM_CARGO];
int w,h;
uint tile2;
int rad;
for(;p->mode != 4;p++) if (p->mode == 1) {
tile2 = TILE_ADD(tile, p->tileoffs);
tile2 = TILE_ADD(tile, ToTileIndexDiff(p->tileoffs));
w = ((p->attr>>1) & 7);
h = ((p->attr>>4) & 7);
if (p->attr&1) intswap(w, h);
if (_patches.modified_catchment) {
rad = CA_TRAIN;
} else {
rad = 4;
}
if (cargo & 0x80) {
GetProductionAroundTiles(values, tile2, w, h);
GetProductionAroundTiles(values, tile2, w, h, rad);
return values[cargo & 0x7F] != 0;
} else {
GetAcceptanceAroundTiles(values, tile2, w, h);
GetAcceptanceAroundTiles(values, tile2, w, h, rad);
if (!(values[cargo] & ~7))
return false;
if (cargo != CT_MAIL)
@@ -1568,7 +1573,7 @@ static int32 AiDoBuildDefaultRailTrack(TileIndex tile, const AiDefaultBlockData
for(;;) {
// This will seldomly overflow for valid reasons. Mask it to be on the safe side.
uint c = TILE_MASK(tile + p->tileoffs);
uint c = TILE_MASK(tile + ToTileIndexDiff(p->tileoffs));
_cleared_town = NULL;
@@ -1593,7 +1598,7 @@ clear_town_stuff:;
}
} else if (p->mode == 2) {
// Rail
if (IS_TILETYPE(c, MP_RAILWAY))
if (IsTileType(c, MP_RAILWAY))
return CMD_ERROR;
j = p->attr;
@@ -1612,7 +1617,7 @@ clear_town_stuff:;
/* signals too? */
if (j&3) {
// Can't build signals on a road.
if (IS_TILETYPE(c, MP_STREET))
if (IsTileType(c, MP_STREET))
return CMD_ERROR;
if (flag & DC_EXEC) {
@@ -1711,7 +1716,7 @@ static void AiDoTerraformLand(TileIndex tile, int dir, int unk, int mode)
unk &= (int)r;
do {
tile = TILE_MASK(tile + _tileoffs_by_dir[dir]);
tile = TILE_MASK(tile + TileOffsByDir(dir));
r >>= 2;
if (r&2) {
@@ -1817,7 +1822,7 @@ static TileIndex AiGetEdgeOfDefaultRailBlock(byte rule, TileIndex tile, byte cmd
while (p->mode != 3 || !((--cmd) & 0x80)) p++;
return tile + p->tileoffs - _tileoffs_by_dir[*dir = p->attr];
return tile + ToTileIndexDiff(p->tileoffs) - TileOffsByDir(*dir = p->attr);
}
typedef struct AiRailPathFindData {
@@ -1850,7 +1855,7 @@ static bool AiDoFollowTrack(Player *p)
arpfd.tile2 = p->ai.cur_tile_a;
arpfd.flag = false;
arpfd.count = 0;
FollowTrack(p->ai.cur_tile_a + _tileoffs_by_dir[p->ai.cur_dir_a], 0x2000 | TRANSPORT_RAIL, p->ai.cur_dir_a^2,
FollowTrack(p->ai.cur_tile_a + TileOffsByDir(p->ai.cur_dir_a), 0x2000 | TRANSPORT_RAIL, p->ai.cur_dir_a^2,
(TPFEnumProc*)AiEnumFollowTrack, NULL, &arpfd);
return arpfd.count > 8;
}
@@ -1942,7 +1947,7 @@ static bool AiCheckRailPathBetter(AiRailFinder *arf, const byte *p)
return better;
}
static void FORCEINLINE AiCheckBuildRailBridgeHere(AiRailFinder *arf, TileIndex tile, const byte *p)
static inline void AiCheckBuildRailBridgeHere(AiRailFinder *arf, TileIndex tile, const byte *p)
{
TileIndex tile_new;
bool flag;
@@ -1956,8 +1961,8 @@ static void FORCEINLINE AiCheckBuildRailBridgeHere(AiRailFinder *arf, TileIndex
// Allow bridges directly over bottom tiles
flag = arf->ti.z == 0;
for(;;) {
if (tile_new < -_tileoffs_by_dir[dir2]) return; // Wraping around map, no bridge possible!
tile_new = TILE_MASK(tile_new + _tileoffs_by_dir[dir2]);
if (tile_new < -TileOffsByDir(dir2)) return; // Wraping around map, no bridge possible!
tile_new = TILE_MASK(tile_new + TileOffsByDir(dir2));
FindLandscapeHeightByTile(&arf->ti, tile_new);
if (arf->ti.tileh != 0 || arf->ti.type == MP_CLEAR || arf->ti.type == MP_TREES) {
if (!flag) return;
@@ -1982,7 +1987,7 @@ static void FORCEINLINE AiCheckBuildRailBridgeHere(AiRailFinder *arf, TileIndex
}
}
static void FORCEINLINE AiCheckBuildRailTunnelHere(AiRailFinder *arf, TileIndex tile, const byte *p)
static inline void AiCheckBuildRailTunnelHere(AiRailFinder *arf, TileIndex tile, const byte *p)
{
FindLandscapeHeightByTile(&arf->ti, tile);
@@ -2003,7 +2008,7 @@ static void AiBuildRailRecursive(AiRailFinder *arf, TileIndex tile, int dir)
{
const byte *p;
tile = TILE_MASK(tile + _tileoffs_by_dir[dir]);
tile = TILE_MASK(tile + TileOffsByDir(dir));
// Reached destination?
if (tile == arf->final_tile) {
@@ -2121,7 +2126,7 @@ static void AiBuildRailConstruct(Player *p)
return;
}
p->ai.cur_tile_a += _tileoffs_by_dir[p->ai.cur_dir_a];
p->ai.cur_tile_a += TileOffsByDir(p->ai.cur_dir_a);
if (arf.best_ptr[0]&0x80) {
int i;
@@ -2173,12 +2178,12 @@ static bool AiRemoveTileAndGoForward(Player *p)
int offs;
TileIndex tilenew;
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) {
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
if (!(_map5[tile] & 0x80)) {
// Clear the tunnel and continue at the other side of it.
if (DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR) == CMD_ERROR)
return false;
p->ai.cur_tile_a = TILE_MASK(_build_tunnel_endtile - _tileoffs_by_dir[p->ai.cur_dir_a]);
p->ai.cur_tile_a = TILE_MASK(_build_tunnel_endtile - TileOffsByDir(p->ai.cur_dir_a));
return true;
}
@@ -2190,7 +2195,7 @@ static bool AiRemoveTileAndGoForward(Player *p)
return false;
// Find other side of bridge.
offs = _tileoffs_by_dir[p->ai.cur_dir_a];
offs = TileOffsByDir(p->ai.cur_dir_a);
do {
tile = TILE_MASK(tile - offs);
} while (_map5[tile] & 0x40);
@@ -2213,7 +2218,7 @@ static bool AiRemoveTileAndGoForward(Player *p)
bit = FindFirstBit(b);
// Then remove and signals if there are any.
if (IS_TILETYPE(tile, MP_RAILWAY) &&
if (IsTileType(tile, MP_RAILWAY) &&
(_map5[tile]&0xC0) == 0x40) {
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_REMOVE_SIGNALS);
}
@@ -2228,7 +2233,7 @@ static bool AiRemoveTileAndGoForward(Player *p)
p->ai.cur_dir_a = ptr[1] ^ 2;
// And then also switch tile.
p->ai.cur_tile_a = TILE_MASK(p->ai.cur_tile_a - _tileoffs_by_dir[p->ai.cur_dir_a]);
p->ai.cur_tile_a = TILE_MASK(p->ai.cur_tile_a - TileOffsByDir(p->ai.cur_dir_a));
return true;
}
@@ -2327,7 +2332,7 @@ static void AiStateBuildRail(Player *p)
p->ai.cur_tile_a = tile;
p->ai.start_dir_a = dir;
p->ai.cur_dir_a = dir;
DoCommandByTile(TILE_MASK(tile + _tileoffs_by_dir[dir]), 0, (dir&1)?1:0, DC_EXEC, CMD_REMOVE_SINGLE_RAIL);
DoCommandByTile(TILE_MASK(tile + TileOffsByDir(dir)), 0, (dir&1)?1:0, DC_EXEC, CMD_REMOVE_SINGLE_RAIL);
assert(TILE_MASK(tile) != 0xFF00);
@@ -2338,7 +2343,7 @@ static void AiStateBuildRail(Player *p)
p->ai.cur_tile_b = tile;
p->ai.start_dir_b = dir;
p->ai.cur_dir_b = dir;
DoCommandByTile(TILE_MASK(tile + _tileoffs_by_dir[dir]), 0, (dir&1)?1:0, DC_EXEC, CMD_REMOVE_SINGLE_RAIL);
DoCommandByTile(TILE_MASK(tile + TileOffsByDir(dir)), 0, (dir&1)?1:0, DC_EXEC, CMD_REMOVE_SINGLE_RAIL);
assert(TILE_MASK(tile) != 0xFF00);
@@ -2352,7 +2357,7 @@ static int AiGetStationIdByDef(TileIndex tile, int id)
{
const AiDefaultBlockData *p = _default_rail_track_data[id]->data;
while (p->mode != 1) p++;
return _map2[TILE_ADD(tile,p->tileoffs)];
return _map2[TILE_ADD(tile, ToTileIndexDiff(p->tileoffs))];
}
static void AiStateBuildRailVeh(Player *p)
@@ -2368,7 +2373,7 @@ static void AiStateBuildRailVeh(Player *p)
ptr = _default_rail_track_data[p->ai.src.cur_building_rule]->data;
while (ptr->mode != 0) { ptr++; }
tile = TILE_ADD(p->ai.src.use_tile, ptr->tileoffs);
tile = TILE_ADD(p->ai.src.use_tile, ToTileIndexDiff(ptr->tileoffs));
cargo = p->ai.cargo_type;
for(i=0;;) {
@@ -2407,7 +2412,7 @@ handle_nocash:
loco_id = _new_train_id;
// Sell a vehicle if the train is double headed.
v = &_vehicles[loco_id];
v = GetVehicle(loco_id);
if (v->next != NULL) {
i = p->ai.wagon_list[p->ai.num_wagons*2-2];
p->ai.wagon_list[p->ai.num_wagons*2-2] = INVALID_VEHICLE;
@@ -2421,15 +2426,20 @@ handle_nocash:
for(i=0; p->ai.order_list_blocks[i] != 0xFF; i++) {
AiBuildRec *aib = (&p->ai.src) + p->ai.order_list_blocks[i];
uint flags = (AiGetStationIdByDef(aib->use_tile, aib->cur_building_rule) << 8) + OT_GOTO_STATION;
bool is_pass = (p->ai.cargo_type == CT_PASSENGERS ||
p->ai.cargo_type == CT_MAIL ||
(_opt.landscape==LT_NORMAL && p->ai.cargo_type == CT_VALUABLES));
Order order;
if (!is_pass && i == 1) flags |= OF_UNLOAD;
if (p->ai.num_want_fullload != 0 && (is_pass || i == 0)) flags |= OF_FULL_LOAD;
order.type = OT_GOTO_STATION;
order.flags = 0;
order.station = AiGetStationIdByDef(aib->use_tile, aib->cur_building_rule);
DoCommandByTile(0, loco_id + (i << 16), flags, DC_EXEC, CMD_INSERT_ORDER);
if (!is_pass && i == 1) order.flags |= OF_UNLOAD;
if (p->ai.num_want_fullload != 0 && (is_pass || i == 0))
order.flags |= OF_FULL_LOAD;
DoCommandByTile(0, loco_id + (i << 16), PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
}
DoCommandByTile(0, loco_id, 0, DC_EXEC, CMD_START_STOP_TRAIN);
@@ -2459,7 +2469,7 @@ static void AiStateDeleteRailBlocks(Player *p)
if (aib->cur_building_rule != 255) {
b = _default_rail_track_data[aib->cur_building_rule]->data;
while (b->mode != 4) {
DoCommandByTile(TILE_ADD(aib->use_tile, b->tileoffs), 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
DoCommandByTile(TILE_ADD(aib->use_tile, ToTileIndexDiff(b->tileoffs)), 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
b++;
}
}
@@ -2471,16 +2481,24 @@ static void AiStateDeleteRailBlocks(Player *p)
static bool AiCheckRoadResources(TileIndex tile, const AiDefaultBlockData *p, byte cargo)
{
uint values[NUM_CARGO];
int rad;
if (_patches.modified_catchment) {
rad = CA_TRUCK; //Same as CA_BUS at the moment?
} else { //change that at some point?
rad = 4;
}
for(;;p++) {
if (p->mode == 4) {
return true;
} else if (p->mode == 1) {
uint tile2 = TILE_ADD(tile, p->tileoffs);
uint tile2 = TILE_ADD(tile, ToTileIndexDiff(p->tileoffs));
if (cargo & 0x80) {
GetProductionAroundTiles(values, tile2, 1, 1);
GetProductionAroundTiles(values, tile2, 1, 1, rad);
return values[cargo & 0x7F] != 0;
} else {
GetAcceptanceAroundTiles(values, tile2, 1, 1);
GetAcceptanceAroundTiles(values, tile2, 1, 1, rad);
return (values[cargo]&~7) != 0;
}
}
@@ -2518,12 +2536,12 @@ static int32 AiDoBuildDefaultRoadBlock(TileIndex tile, const AiDefaultBlockData
int roadflag = 0;
for(;p->mode != 4;p++) {
uint c = TILE_MASK(tile+ p->tileoffs);
uint c = TILE_MASK(tile + ToTileIndexDiff(p->tileoffs));
_cleared_town = NULL;
if (p->mode == 2) {
if (IS_TILETYPE(c, MP_STREET) &&
if (IsTileType(c, MP_STREET) &&
(_map5[c]&0xF0)==0 &&
(_map5[c]&p->attr)!=0) {
roadflag |= 2;
@@ -2571,7 +2589,7 @@ clear_town_stuff:;
if (GetTileSlope(c, NULL) != 0)
return CMD_ERROR;
if (!(IS_TILETYPE(c, MP_STREET) && (_map5[c]&0xF0)==0)) {
if (!(IsTileType(c, MP_STREET) && (_map5[c] & 0xF0) == 0)) {
r = DoCommandByTile(c, 0, 0, flag | DC_AUTO | DC_NO_WATER | DC_AI_BUILDING, CMD_LANDSCAPE_CLEAR);
if (r == CMD_ERROR) return CMD_ERROR;
}
@@ -2753,8 +2771,8 @@ static bool AiEnumFollowRoad(uint tile, AiRoadEnum *a, int track, uint length, b
uint tile2;
if (dist <= a->best_dist) {
tile2 = TILE_MASK(tile + _tileoffs_by_dir[_dir_by_track[track]]);
if (IS_TILETYPE(tile2, MP_STREET) &&
tile2 = TILE_MASK(tile + TileOffsByDir(_dir_by_track[track]));
if (IsTileType(tile2, MP_STREET) &&
(_map5[tile2]&0xF0) == 0) {
a->best_dist = dist;
a->best_tile = tile;
@@ -2772,7 +2790,7 @@ static const uint16 _ai_road_table_and[4] = {
0x2A00,
};
bool AiCheckRoadFinished(Player *p)
static bool AiCheckRoadFinished(Player *p)
{
AiRoadEnum are;
uint tile;
@@ -2781,7 +2799,7 @@ bool AiCheckRoadFinished(Player *p)
int i;
are.dest = p->ai.cur_tile_b;
tile = TILE_MASK(p->ai.cur_tile_a + _tileoffs_by_dir[dir]);
tile = TILE_MASK(p->ai.cur_tile_a + TileOffsByDir(dir));
bits = GetTileTrackStatus(tile, TRANSPORT_ROAD) & _ai_road_table_and[dir];
if (bits == 0) {
@@ -2819,7 +2837,7 @@ static bool AiBuildRoadHelper(uint tile, int flags, int type)
return DoCommandByTile(tile, _road_bits[type], 0, flags, CMD_BUILD_ROAD) != CMD_ERROR;
}
static void FORCEINLINE AiCheckBuildRoadBridgeHere(AiRoadFinder *arf, TileIndex tile, const byte *p)
static inline void AiCheckBuildRoadBridgeHere(AiRoadFinder *arf, TileIndex tile, const byte *p)
{
TileIndex tile_new;
bool flag;
@@ -2832,8 +2850,8 @@ static void FORCEINLINE AiCheckBuildRoadBridgeHere(AiRoadFinder *arf, TileIndex
// Allow bridges directly over bottom tiles
flag = arf->ti.z == 0;
for(;;) {
if (tile_new < -_tileoffs_by_dir[dir2]) return; // Wraping around map, no bridge possible!
tile_new = TILE_MASK(tile_new + _tileoffs_by_dir[dir2]);
if (tile_new < -TileOffsByDir(dir2)) return; // Wraping around map, no bridge possible!
tile_new = TILE_MASK(tile_new + TileOffsByDir(dir2));
FindLandscapeHeightByTile(&arf->ti, tile_new);
if (arf->ti.tileh != 0 || arf->ti.type == MP_CLEAR || arf->ti.type == MP_TREES) {
// Allow a bridge if either we have a tile that's water, rail or street,
@@ -2859,7 +2877,7 @@ static void FORCEINLINE AiCheckBuildRoadBridgeHere(AiRoadFinder *arf, TileIndex
}
}
static void FORCEINLINE AiCheckBuildRoadTunnelHere(AiRoadFinder *arf, TileIndex tile, const byte *p)
static inline void AiCheckBuildRoadTunnelHere(AiRoadFinder *arf, TileIndex tile, const byte *p)
{
FindLandscapeHeightByTile(&arf->ti, tile);
@@ -2881,7 +2899,7 @@ static void AiBuildRoadRecursive(AiRoadFinder *arf, TileIndex tile, int dir)
{
const byte *p;
tile = TILE_MASK(tile + _tileoffs_by_dir[dir]);
tile = TILE_MASK(tile + TileOffsByDir(dir));
// Reached destination?
if (tile == arf->final_tile) {
@@ -2983,14 +3001,14 @@ do_some_terraform:
if (++p->ai.state_counter == 21) {
p->ai.state_mode = 1;
p->ai.cur_tile_a = TILE_MASK(p->ai.cur_tile_a + _tileoffs_by_dir[p->ai.cur_dir_a]);
p->ai.cur_tile_a = TILE_MASK(p->ai.cur_tile_a + TileOffsByDir(p->ai.cur_dir_a));
p->ai.cur_dir_a ^= 2;
p->ai.state_counter = 0;
}
return;
}
tile = TILE_MASK(p->ai.cur_tile_a + _tileoffs_by_dir[p->ai.cur_dir_a]);
tile = TILE_MASK(p->ai.cur_tile_a + TileOffsByDir(p->ai.cur_dir_a));
if (arf.best_ptr[0]&0x80) {
int i;
@@ -3067,7 +3085,7 @@ static TileIndex AiGetRoadBlockEdge(byte rule, TileIndex tile, int *dir)
const AiDefaultBlockData *p = _road_default_block_data[rule]->data;
while (p->mode != 1) p++;
*dir = p->attr;
return TILE_ADD(tile, p->tileoffs);
return TILE_ADD(tile, ToTileIndexDiff(p->tileoffs));
}
@@ -3140,7 +3158,7 @@ static int AiGetStationIdFromRoadBlock(TileIndex tile, int id)
{
const AiDefaultBlockData *p = _road_default_block_data[id]->data;
while (p->mode != 1) p++;
return _map2[TILE_ADD(tile, p->tileoffs)];
return _map2[TILE_ADD(tile, ToTileIndexDiff(p->tileoffs))];
}
static void AiStateBuildRoadVehicles(Player *p)
@@ -3152,7 +3170,7 @@ static void AiStateBuildRoadVehicles(Player *p)
ptr = _road_default_block_data[p->ai.src.cur_building_rule]->data;
for(;ptr->mode != 0;ptr++) {}
tile = TILE_ADD(p->ai.src.use_tile, ptr->tileoffs);
tile = TILE_ADD(p->ai.src.use_tile, ToTileIndexDiff(ptr->tileoffs));
veh = AiChooseRoadVehToBuild(p->ai.cargo_type, p->player_money);
if (veh == -1) {
@@ -3168,15 +3186,20 @@ static void AiStateBuildRoadVehicles(Player *p)
for(i=0; p->ai.order_list_blocks[i] != 0xFF; i++) {
AiBuildRec *aib = (&p->ai.src) + p->ai.order_list_blocks[i];
uint flags = (AiGetStationIdFromRoadBlock(aib->use_tile, aib->cur_building_rule) << 8) + OT_GOTO_STATION;
bool is_pass = (p->ai.cargo_type == CT_PASSENGERS ||
p->ai.cargo_type == CT_MAIL ||
(_opt.landscape==LT_NORMAL && p->ai.cargo_type == CT_VALUABLES));
Order order;
if (!is_pass && i == 1) flags |= OF_UNLOAD;
if (p->ai.num_want_fullload != 0 && (is_pass || i == 0)) flags |= OF_FULL_LOAD;
order.type = OT_GOTO_STATION;
order.flags = 0;
order.station = AiGetStationIdFromRoadBlock(aib->use_tile, aib->cur_building_rule);
DoCommandByTile(0, loco_id + (i << 16), flags, DC_EXEC, CMD_INSERT_ORDER);
if (!is_pass && i == 1) order.flags |= OF_UNLOAD;
if (p->ai.num_want_fullload != 0 && (is_pass || i == 0))
order.flags |= OF_FULL_LOAD;
DoCommandByTile(0, loco_id + (i << 16), PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
}
DoCommandByTile(0, loco_id, 0, DC_EXEC, CMD_START_STOP_ROADVEH);
@@ -3204,7 +3227,7 @@ static void AiStateDeleteRoadBlocks(Player *p)
b = _road_default_block_data[aib->cur_building_rule]->data;
while (b->mode != 4) {
if (b->mode <= 1) {
DoCommandByTile(TILE_ADD(aib->use_tile, b->tileoffs), 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
DoCommandByTile(TILE_ADD(aib->use_tile, ToTileIndexDiff(b->tileoffs)), 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
}
b++;
}
@@ -3316,7 +3339,7 @@ static int32 AiDoBuildDefaultAirportBlock(TileIndex tile, const AiDefaultBlockDa
for(;p->mode == 0;p++) {
if (!HASBIT(_avail_aircraft, p->attr))
return CMD_ERROR;
r = DoCommandByTile(TILE_MASK(tile + p->tileoffs), p->attr,0,flag | DC_AUTO | DC_NO_WATER,CMD_BUILD_AIRPORT);
r = DoCommandByTile(TILE_MASK(tile + ToTileIndexDiff(p->tileoffs)), p->attr,0,flag | DC_AUTO | DC_NO_WATER,CMD_BUILD_AIRPORT);
if (r == CMD_ERROR)
return CMD_ERROR;
total_cost += r;
@@ -3330,16 +3353,23 @@ static bool AiCheckAirportResources(TileIndex tile, const AiDefaultBlockData *p,
uint values[NUM_CARGO];
int w,h;
uint tile2;
int rad;
if (_patches.modified_catchment) {
rad = CA_AIR_LARGE; //I Have NFI what airport the
} else { //AI is going to build here
rad = 4;
}
for(;p->mode==0;p++) {
tile2 = TILE_ADD(tile, p->tileoffs);
tile2 = TILE_ADD(tile, ToTileIndexDiff(p->tileoffs));
w = _airport_size_x[p->attr];
h = _airport_size_y[p->attr];
if (cargo & 0x80) {
GetProductionAroundTiles(values, tile2, w, h);
GetProductionAroundTiles(values, tile2, w, h, rad);
return values[cargo & 0x7F] != 0;
} else {
GetAcceptanceAroundTiles(values, tile2, w, h);
GetAcceptanceAroundTiles(values, tile2, w, h, rad);
return values[cargo] >= 8;
}
}
@@ -3395,9 +3425,9 @@ static void AiStateBuildDefaultAirportBlocks(Player *p)
rule = AiFindBestDefaultAirportBlock(aib->use_tile, aib->cargo, p->ai.build_kind, &cost);
#if 0
if (!IS_TILETYPE(aib->use_tile, MP_STREET) &&
!IS_TILETYPE(aib->use_tile, MP_RAILWAY) &&
!IS_TILETYPE(aib->use_tile, MP_STATION)
if (!IsTileType(aib->use_tile, MP_STREET) &&
!IsTileType(aib->use_tile, MP_RAILWAY) &&
!IsTileType(aib->use_tile, MP_STATION)
) {
_map_type_and_height[aib->use_tile] = 0xa1;
@@ -3449,7 +3479,7 @@ static int AiGetStationIdFromAircraftBlock(TileIndex tile, int id)
{
const AiDefaultBlockData *p = _airport_default_block_data[id];
while (p->mode != 1) p++;
return _map2[TILE_ADD(tile, p->tileoffs)];
return _map2[TILE_ADD(tile, ToTileIndexDiff(p->tileoffs))];
}
static void AiStateBuildAircraftVehicles(Player *p)
@@ -3464,7 +3494,7 @@ static void AiStateBuildAircraftVehicles(Player *p)
ptr = _airport_default_block_data[p->ai.src.cur_building_rule];
for(;ptr->mode!=0;ptr++) {}
tile = TILE_ADD(p->ai.src.use_tile, ptr->tileoffs);
tile = TILE_ADD(p->ai.src.use_tile, ToTileIndexDiff(ptr->tileoffs));
veh = AiChooseAircraftToBuild(p->player_money, p->ai.build_kind!=0 ? 1 : 0);
if (veh == -1) {
@@ -3478,13 +3508,18 @@ static void AiStateBuildAircraftVehicles(Player *p)
for(i=0; p->ai.order_list_blocks[i] != 0xFF; i++) {
AiBuildRec *aib = (&p->ai.src) + p->ai.order_list_blocks[i];
uint flags = (AiGetStationIdFromAircraftBlock(aib->use_tile, aib->cur_building_rule) << 8) + OT_GOTO_STATION;
bool is_pass = (p->ai.cargo_type == CT_PASSENGERS || p->ai.cargo_type == CT_MAIL);
Order order;
if (!is_pass && i == 1) flags |= OF_UNLOAD;
if (p->ai.num_want_fullload != 0 && (is_pass || i == 0)) flags |= OF_FULL_LOAD;
order.type = OT_GOTO_STATION;
order.flags = 0;
order.station = AiGetStationIdFromAircraftBlock(aib->use_tile, aib->cur_building_rule);
DoCommandByTile(0, loco_id + (i << 16), flags, DC_EXEC, CMD_INSERT_ORDER);
if (!is_pass && i == 1) order.flags |= OF_UNLOAD;
if (p->ai.num_want_fullload != 0 && (is_pass || i == 0))
order.flags |= OF_FULL_LOAD;
DoCommandByTile(0, loco_id + (i << 16), PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
}
DoCommandByTile(0, loco_id, 0, DC_EXEC, CMD_START_STOP_AIRCRAFT);
@@ -3525,7 +3560,7 @@ static void AiStateSellVeh(Player *p)
if (v->type == VEH_Train) {
if (!IsTrainDepotTile(v->tile) || v->u.rail.track != 0x80 || !(v->vehstatus&VS_STOPPED)) {
if ((v->next_order & OT_MASK) != OT_GOTO_DEPOT)
if (v->current_order.type != OT_GOTO_DEPOT)
DoCommandByTile(0, v->index, 0, DC_EXEC, CMD_TRAIN_GOTO_DEPOT);
goto going_to_depot;
}
@@ -3535,7 +3570,7 @@ static void AiStateSellVeh(Player *p)
} else if (v->type == VEH_Road) {
if (!IsRoadDepotTile(v->tile) || v->u.road.state != 254 || !(v->vehstatus&VS_STOPPED)) {
if ((v->next_order & OT_MASK) != OT_GOTO_DEPOT)
if (v->current_order.type != OT_GOTO_DEPOT)
DoCommandByTile(0, v->index, 0, DC_EXEC, CMD_SEND_ROADVEH_TO_DEPOT);
goto going_to_depot;
}
@@ -3543,7 +3578,7 @@ static void AiStateSellVeh(Player *p)
DoCommandByTile(0, v->index, 0, DC_EXEC, CMD_SELL_ROAD_VEH);
} else if (v->type == VEH_Aircraft) {
if (!IsAircraftHangarTile(v->tile) && !(v->vehstatus&VS_STOPPED)) {
if ((v->next_order & OT_MASK) != OT_GOTO_DEPOT)
if (v->current_order.type != OT_GOTO_DEPOT)
DoCommandByTile(0, v->index, 0, DC_EXEC, CMD_SEND_AIRCRAFT_TO_HANGAR);
goto going_to_depot;
}
@@ -3560,8 +3595,9 @@ going_to_depot:;
if (++p->ai.state_counter <= 832)
return;
if ((v->next_order&OT_MASK) == OT_GOTO_DEPOT) {
v->next_order = OT_DUMMY;
if (v->current_order.type == OT_GOTO_DEPOT) {
v->current_order.type = OT_DUMMY;
v->current_order.flags = 0;
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
}
return_to_loop:;
@@ -3572,7 +3608,7 @@ static void AiStateRemoveStation(Player *p)
{
// Remove stations that aren't in use by any vehicle
byte in_use[256], *used;
uint16 *ord;
const Order *ord;
Station *st;
uint tile;
@@ -3581,9 +3617,9 @@ static void AiStateRemoveStation(Player *p)
// Get a list of all stations that are in use by a vehicle
memset(in_use, 0, sizeof(in_use));
for(ord=_order_array; ord != _ptr_to_next_order; ord++) {
if ((*ord & OT_MASK) == OT_GOTO_STATION)
in_use[*ord >> 8] = 1;
FOR_ALL_ORDERS(ord) {
if (ord->type == OT_GOTO_STATION)
in_use[ord->station] = 1;
}
// Go through all stations and delete those that aren't in use
@@ -3606,7 +3642,7 @@ static void AiRemovePlayerRailOrRoad(Player *p, uint tile)
{
byte m5;
if (IS_TILETYPE(tile, MP_RAILWAY)) {
if (IsTileType(tile, MP_RAILWAY)) {
if (_map_owner[tile] != _current_player)
return;
m5 = _map5[tile];
@@ -3660,12 +3696,12 @@ pos_3:
static const byte _depot_bits[] = {0x19,0x16,0x25,0x2A};
m5 &= 3;
if (GetRailTrackStatus(tile + _tileoffs_by_dir[m5]) & _depot_bits[m5])
if (GetRailTrackStatus(tile + TileOffsByDir(m5)) & _depot_bits[m5])
return;
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
}
} else if (IS_TILETYPE(tile, MP_STREET)) {
} else if (IsTileType(tile, MP_STREET)) {
if (_map_owner[tile] != _current_player)
return;
@@ -3676,19 +3712,19 @@ pos_3:
int dir;
// Check if there are any stations around.
if (IS_TILETYPE(tile + TILE_XY(-1,0), MP_STATION) &&
if (IsTileType(tile + TILE_XY(-1,0), MP_STATION) &&
_map_owner[tile + TILE_XY(-1,0)] == _current_player)
return;
if (IS_TILETYPE(tile + TILE_XY(1,0), MP_STATION) &&
if (IsTileType(tile + TILE_XY(1,0), MP_STATION) &&
_map_owner[tile + TILE_XY(1,0)] == _current_player)
return;
if (IS_TILETYPE(tile + TILE_XY(0,-1), MP_STATION) &&
if (IsTileType(tile + TILE_XY(0,-1), MP_STATION) &&
_map_owner[tile + TILE_XY(0,-1)] == _current_player)
return;
if (IS_TILETYPE(tile + TILE_XY(0,1), MP_STATION) &&
if (IsTileType(tile + TILE_XY(0,1), MP_STATION) &&
_map_owner[tile + TILE_XY(0,1)] == _current_player)
return;
@@ -3696,13 +3732,13 @@ pos_3:
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
DoCommandByTile(
TILE_MASK(tile + _tileoffs_by_dir[dir]),
TILE_MASK(tile + TileOffsByDir(dir)),
8 >> (dir ^ 2),
0,
DC_EXEC,
CMD_REMOVE_ROAD);
}
} else if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) {
} else if (IsTileType(tile, MP_TUNNELBRIDGE)) {
byte b;
if (_map_owner[tile] != _current_player || (_map5[tile] & 0xC6) != 0x80)

22
ai.h
View File

@@ -71,7 +71,7 @@
#define AI_LOCATE_ROUTE_MAX_COUNTER 200
// How many days must there be between building the first station and the second station
// within one city. This number is in days and should be more then 4 months.
// within one city. This number is in days and should be more than 4 months.
#define AI_CHECKCITY_DATE_BETWEEN 180
// How many cargo is needed for one station in a city?
@@ -130,7 +130,7 @@
// reuse the station instead of building a new one!
#define AI_STATION_REUSE_MULTIPLER 2
// No more then this amount of vehicles per station..
// No more than this amount of vehicles per station..
#define AI_CHECK_MAX_VEHICLE_PER_STATION 10
// How many thick between building 2 vehicles
@@ -149,7 +149,7 @@
// while old vehicles stay longer, because we do get less in return.
#define AI_MINIMUM_ROUTE_PROFIT 1000
// A vehicle is considered lost when he his cargo is more then 180 days old
// A vehicle is considered lost when he his cargo is more than 180 days old
#define AI_VEHICLE_LOST_DAYS 180
// How many times may the AI try to find a route before it gives up
@@ -168,13 +168,6 @@ static const byte _illegal_curves[6] = {
3, // upright and downright are not valid
};
static const TileIndexDiff _tiles_around[4] = {
TILE_XY(-1,0),
TILE_XY(0,1),
TILE_XY(1,0),
TILE_XY(0,-1),
};
enum {
AI_STATE_STARTUP = 0,
AI_STATE_FIRST_TIME,
@@ -227,7 +220,7 @@ enum {
#define AI_NO_CARGO 0xFF // Means that there is no cargo defined yet (used for industry)
#define AI_NEED_CARGO 0xFE // Used when the AI needs to find out a cargo for the route
#define AI_STATION_RANGE TILE_XY(TILE_X_MAX, TILE_Y_MAX)
#define AI_STATION_RANGE TILE_XY(MapMaxX(), MapMaxY())
#define AI_PATHFINDER_NO_DIRECTION (byte)-1
@@ -235,13 +228,6 @@ enum {
#define AI_PATHFINDER_FLAG_BRIDGE 1
#define AI_PATHFINDER_FLAG_TUNNEL 2
// A macro for mp_street, where 0x20 is depot
// mp_tunnelbridge, where 0xf0 is a bridge, and 0x4/0x2 means: roadtunnel/bridge
#define AI_PATHFINDER_IS_ROAD(tile) ((IS_TILETYPE(tile, MP_STREET) && !(_map5[tile] & 0x20)) || \
(IS_TILETYPE(tile, MP_TUNNELBRIDGE) && \
(((_map5[tile] & 0x80) == 0 && (_map5[tile] & 0x4) == 0x4) || \
((_map5[tile] & 0x80) != 0 && (_map5[tile] & 0x2) == 0x2))))
typedef void AiNew_StateFunction(Player *p);
// ai_new.c

View File

@@ -1,5 +1,6 @@
#include "stdafx.h"
#include "ttd.h"
#include "map.h"
#include "command.h"
#include "ai.h"
#include "engine.h"
@@ -173,11 +174,11 @@ int AiNew_Build_RoutePart(Player *p, Ai_PathFinderInfo *PathFinderInfo, byte fla
if (old_dir != -1 && old_dir != dir) break;
old_dir = dir;
// There is already some road, and it is a bridge.. don't build!!!
if (!IS_TILETYPE(route[part], MP_TUNNELBRIDGE)) {
if (!IsTileType(route[part], MP_TUNNELBRIDGE)) {
// Build the tile
res = DoCommandByTile(route[part], dir, 0, flag | DC_NO_WATER, CMD_BUILD_ROAD);
// Currently, we ignore CMD_ERRORs!
if (res == CMD_ERROR && flag == DC_EXEC && !IS_TILETYPE(route[part], MP_STREET) && !EnsureNoVehicle(route[part])) {
if (res == CMD_ERROR && flag == DC_EXEC && !IsTileType(route[part], MP_STREET) && !EnsureNoVehicle(route[part])) {
// Problem.. let's just abort it all!
DEBUG(ai,0)("Darn, the route could not be builded.. aborting!");
p->ainew.state = AI_STATE_NOTHING;
@@ -249,7 +250,7 @@ int AiNew_Build_Depot(Player *p, uint tile, byte direction, byte flag) {
r = DoCommandByTile(tile, direction, 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD_DEPOT);
if (r == CMD_ERROR) return r;
// Try to build the road from the depot
r2 = DoCommandByTile(tile + _tileoffs_by_dir[direction], _roadbits_by_dir[direction], 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD);
r2 = DoCommandByTile(tile + TileOffsByDir(direction), _roadbits_by_dir[direction], 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD);
// If it fails, ignore it..
if (r2 == CMD_ERROR) return r;
return r + r2;

199
ai_new.c
View File

@@ -15,6 +15,8 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "map.h"
#include "command.h"
#include "ai.h"
#include "town.h"
@@ -183,7 +185,7 @@ static void AiNew_State_ActionDone(Player *p) {
// Check if a city or industry is good enough to start a route there
static bool AiNew_Check_City_or_Industry(Player *p, int ic, byte type) {
if (type == AI_CITY) {
Town *t = DEREF_TOWN(ic);
Town *t = GetTown(ic);
Station *st;
int count = 0;
int j = 0;
@@ -245,7 +247,7 @@ static bool AiNew_Check_City_or_Industry(Player *p, int ic, byte type) {
return true;
}
if (type == AI_INDUSTRY) {
Industry *i = DEREF_INDUSTRY(ic);
Industry *i = GetIndustry(ic);
Station *st;
int count = 0;
int j = 0;
@@ -403,16 +405,16 @@ static void AiNew_State_LocateRoute(Player *p) {
// is.
if (p->ainew.from_type == AI_CITY && p->ainew.tbt == AI_BUS) {
int max_cargo = DEREF_TOWN(p->ainew.from_ic)->max_pass + DEREF_TOWN(p->ainew.temp)->max_pass;
max_cargo -= DEREF_TOWN(p->ainew.from_ic)->act_pass + DEREF_TOWN(p->ainew.temp)->act_pass;
int max_cargo = GetTown(p->ainew.from_ic)->max_pass + GetTown(p->ainew.temp)->max_pass;
max_cargo -= GetTown(p->ainew.from_ic)->act_pass + GetTown(p->ainew.temp)->act_pass;
// max_cargo is now the amount of cargo we can move between the two cities
// If it is more then the distance, we allow it
if (GetTileDist(DEREF_TOWN(p->ainew.from_ic)->xy, DEREF_TOWN(p->ainew.temp)->xy) <= max_cargo * AI_LOCATEROUTE_BUS_CARGO_DISTANCE) {
// If it is more than the distance, we allow it
if (GetTileDist(GetTown(p->ainew.from_ic)->xy, GetTown(p->ainew.temp)->xy) <= max_cargo * AI_LOCATEROUTE_BUS_CARGO_DISTANCE) {
// We found a good city/industry, save the data of it
p->ainew.to_ic = p->ainew.temp;
p->ainew.state = AI_STATE_FIND_STATION;
DEBUG(ai,1)("[AiNew - LocateRoute] Found bus-route of %d tiles long (from %d to %d)",GetTileDist(DEREF_TOWN(p->ainew.from_ic)->xy, DEREF_TOWN(p->ainew.temp)->xy), p->ainew.from_ic, p->ainew.temp);
DEBUG(ai,1)("[AiNew - LocateRoute] Found bus-route of %d tiles long (from %d to %d)",GetTileDist(GetTown(p->ainew.from_ic)->xy, GetTown(p->ainew.temp)->xy), p->ainew.from_ic, p->ainew.temp);
p->ainew.from_tile = 0;
p->ainew.to_tile = 0;
@@ -425,12 +427,12 @@ static void AiNew_State_LocateRoute(Player *p) {
int i;
// TODO: in max_cargo, also check other cargo (beside [0])
// First we check if the from_ic produces cargo that this ic accepts
if (DEREF_INDUSTRY(p->ainew.from_ic)->produced_cargo[0] != 0xFF && DEREF_INDUSTRY(p->ainew.from_ic)->total_production[0] != 0) {
if (GetIndustry(p->ainew.from_ic)->produced_cargo[0] != 0xFF && GetIndustry(p->ainew.from_ic)->total_production[0] != 0) {
for (i=0;i<3;i++) {
if (DEREF_INDUSTRY(p->ainew.temp)->accepts_cargo[i] == 0xFF) break;
if (DEREF_INDUSTRY(p->ainew.from_ic)->produced_cargo[0] == DEREF_INDUSTRY(p->ainew.temp)->accepts_cargo[i]) {
if (GetIndustry(p->ainew.temp)->accepts_cargo[i] == 0xFF) break;
if (GetIndustry(p->ainew.from_ic)->produced_cargo[0] == GetIndustry(p->ainew.temp)->accepts_cargo[i]) {
// Found a compatbiel industry
max_cargo = DEREF_INDUSTRY(p->ainew.from_ic)->total_production[0] - DEREF_INDUSTRY(p->ainew.from_ic)->total_transported[0];
max_cargo = GetIndustry(p->ainew.from_ic)->total_production[0] - GetIndustry(p->ainew.from_ic)->total_transported[0];
found = true;
p->ainew.from_deliver = true;
p->ainew.to_deliver = false;
@@ -438,14 +440,14 @@ static void AiNew_State_LocateRoute(Player *p) {
}
}
}
if (!found && DEREF_INDUSTRY(p->ainew.temp)->produced_cargo[0] != 0xFF && DEREF_INDUSTRY(p->ainew.temp)->total_production[0] != 0) {
if (!found && GetIndustry(p->ainew.temp)->produced_cargo[0] != 0xFF && GetIndustry(p->ainew.temp)->total_production[0] != 0) {
// If not check if the current ic produces cargo that the from_ic accepts
for (i=0;i<3;i++) {
if (DEREF_INDUSTRY(p->ainew.from_ic)->accepts_cargo[i] == 0xFF) break;
if (DEREF_INDUSTRY(p->ainew.temp)->produced_cargo[0] == DEREF_INDUSTRY(p->ainew.from_ic)->accepts_cargo[i]) {
if (GetIndustry(p->ainew.from_ic)->accepts_cargo[i] == 0xFF) break;
if (GetIndustry(p->ainew.temp)->produced_cargo[0] == GetIndustry(p->ainew.from_ic)->accepts_cargo[i]) {
// Found a compatbiel industry
found = true;
max_cargo = DEREF_INDUSTRY(p->ainew.temp)->total_production[0] - DEREF_INDUSTRY(p->ainew.from_ic)->total_transported[0];
max_cargo = GetIndustry(p->ainew.temp)->total_production[0] - GetIndustry(p->ainew.from_ic)->total_transported[0];
p->ainew.from_deliver = false;
p->ainew.to_deliver = true;
break;
@@ -455,17 +457,17 @@ static void AiNew_State_LocateRoute(Player *p) {
if (found) {
// Yeah, they are compatible!!!
// Check the length against the amount of goods
if (GetTileDist(DEREF_INDUSTRY(p->ainew.from_ic)->xy, DEREF_INDUSTRY(p->ainew.temp)->xy) > AI_LOCATEROUTE_TRUCK_MIN_DISTANCE &&
GetTileDist(DEREF_INDUSTRY(p->ainew.from_ic)->xy, DEREF_INDUSTRY(p->ainew.temp)->xy) <= max_cargo * AI_LOCATEROUTE_TRUCK_CARGO_DISTANCE) {
if (GetTileDist(GetIndustry(p->ainew.from_ic)->xy, GetIndustry(p->ainew.temp)->xy) > AI_LOCATEROUTE_TRUCK_MIN_DISTANCE &&
GetTileDist(GetIndustry(p->ainew.from_ic)->xy, GetIndustry(p->ainew.temp)->xy) <= max_cargo * AI_LOCATEROUTE_TRUCK_CARGO_DISTANCE) {
p->ainew.to_ic = p->ainew.temp;
if (p->ainew.from_deliver) {
p->ainew.cargo = DEREF_INDUSTRY(p->ainew.from_ic)->produced_cargo[0];
p->ainew.cargo = GetIndustry(p->ainew.from_ic)->produced_cargo[0];
} else {
p->ainew.cargo = DEREF_INDUSTRY(p->ainew.temp)->produced_cargo[0];
p->ainew.cargo = GetIndustry(p->ainew.temp)->produced_cargo[0];
}
p->ainew.state = AI_STATE_FIND_STATION;
DEBUG(ai,1)("[AiNew - LocateRoute] Found truck-route of %d tiles long (from %d to %d)",GetTileDist(DEREF_INDUSTRY(p->ainew.from_ic)->xy, DEREF_INDUSTRY(p->ainew.temp)->xy), p->ainew.from_ic, p->ainew.temp);
DEBUG(ai,1)("[AiNew - LocateRoute] Found truck-route of %d tiles long (from %d to %d)",GetTileDist(GetIndustry(p->ainew.from_ic)->xy, GetIndustry(p->ainew.temp)->xy), p->ainew.from_ic, p->ainew.temp);
p->ainew.from_tile = 0;
p->ainew.to_tile = 0;
@@ -491,21 +493,20 @@ static void AiNew_State_LocateRoute(Player *p) {
p->ainew.last_id = p->ainew.temp;
}
// Check if there are not more then a certain amount of vehicles pointed to a certain
// Check if there are not more than a certain amount of vehicles pointed to a certain
// station. This to prevent 10 busses going to one station, which gives... problems ;)
static bool AiNew_CheckVehicleStation(Player *p, Station *st) {
int count = 0;
Vehicle *v;
uint16 *sched;
uint16 ord;
// Also check if we don't have already a lot of busses to this city...
FOR_ALL_VEHICLES(v) {
if (v->owner == _current_player) {
sched = v->schedule_ptr;
while (sched != NULL && (ord=*sched++) != 0) {
if ((ord & OT_MASK) == OT_GOTO_STATION && DEREF_STATION(ord >> 8) == st) {
// This vehicle has this city in his list
const Order *order;
FOR_VEHICLE_ORDERS(v, order) {
if (order->type == OT_GOTO_STATION && GetStation(order->station) == st) {
// This vehicle has this city in its list
count++;
}
}
@@ -516,9 +517,6 @@ static bool AiNew_CheckVehicleStation(Player *p, Station *st) {
return true;
}
extern const byte _roadveh_speed[88];
extern const byte _roadveh_capacity[88];
// This function finds a good spot for a station
static void AiNew_State_FindStation(Player *p) {
TileIndex tile;
@@ -533,19 +531,19 @@ static void AiNew_State_FindStation(Player *p) {
if (p->ainew.from_tile == 0) {
// First we scan for a station in the from-city
if (p->ainew.from_type == AI_CITY) {
town = DEREF_TOWN(p->ainew.from_ic);
town = GetTown(p->ainew.from_ic);
tile = town->xy;
} else {
industry = DEREF_INDUSTRY(p->ainew.from_ic);
industry = GetIndustry(p->ainew.from_ic);
tile = industry->xy;
}
} else if (p->ainew.to_tile == 0) {
// Second we scan for a station in the to-city
if (p->ainew.to_type == AI_CITY) {
town = DEREF_TOWN(p->ainew.to_ic);
town = GetTown(p->ainew.to_ic);
tile = town->xy;
} else {
industry = DEREF_INDUSTRY(p->ainew.to_ic);
industry = GetIndustry(p->ainew.to_ic);
tile = industry->xy;
}
} else {
@@ -558,7 +556,7 @@ static void AiNew_State_FindStation(Player *p) {
// First, we are going to look at the stations that already exist inside the city
// If there is enough cargo left in the station, we take that station
// If that is not possible, and there are more then 2 stations in the city, abort
// If that is not possible, and there are more than 2 stations in the city, abort
i = AiNew_PickVehicle(p);
// Euhmz, this should not happen _EVER_
// Quit finding a route...
@@ -570,7 +568,7 @@ static void AiNew_State_FindStation(Player *p) {
if (p->ainew.tbt == AI_BUS && (FACIL_BUS_STOP & st->facilities) == FACIL_BUS_STOP) {
if (st->town == town) {
// Check how much cargo there is left in the station
if ((st->goods[p->ainew.cargo].waiting_acceptance & 0xFFF) > _roadveh_capacity[i-ROAD_ENGINES_INDEX] * AI_STATION_REUSE_MULTIPLER) {
if ((st->goods[p->ainew.cargo].waiting_acceptance & 0xFFF) > RoadVehInfo(i)->capacity * AI_STATION_REUSE_MULTIPLER) {
if (AiNew_CheckVehicleStation(p, st)) {
// We did found a station that was good enough!
new_tile = st->xy;
@@ -588,7 +586,7 @@ static void AiNew_State_FindStation(Player *p) {
}
// We are going to add a new station...
if (new_tile == 0) count++;
// No more then 2 stations allowed in a city
// No more than 2 stations allowed in a city
// This is because only the best 2 stations of one cargo do get any cargo
if (count > 2) {
p->ainew.state = AI_STATE_NOTHING;
@@ -606,13 +604,14 @@ static void AiNew_State_FindStation(Player *p) {
// where we get the most cargo and where it is buildable.
// TODO: also check for station of myself and make sure we are not
// taking eachothers passangers away (bad result when it does not)
for (x = GET_TILE_X(tile) - AI_FINDSTATION_TILE_RANGE; x <= GET_TILE_X(tile) + AI_FINDSTATION_TILE_RANGE; x++) {
for (y = GET_TILE_Y(tile) - AI_FINDSTATION_TILE_RANGE; y <= GET_TILE_Y(tile) + AI_FINDSTATION_TILE_RANGE; y++) {
for (x = TileX(tile) - AI_FINDSTATION_TILE_RANGE; x <= TileX(tile) + AI_FINDSTATION_TILE_RANGE; x++) {
for (y = TileY(tile) - AI_FINDSTATION_TILE_RANGE; y <= TileY(tile) + AI_FINDSTATION_TILE_RANGE; y++) {
new_tile = TILE_XY(x,y);
if (IS_TILETYPE(new_tile, MP_CLEAR) || IS_TILETYPE(new_tile, MP_TREES)) {
if (IsTileType(new_tile, MP_CLEAR) || IsTileType(new_tile, MP_TREES)) {
// This tile we can build on!
// Check acceptance
GetAcceptanceAroundTiles(accepts, new_tile, 1, 1);
// XXX - Get the catchment area
GetAcceptanceAroundTiles(accepts, new_tile, 1, 1, 4);
// >> 3 == 0 means no cargo
if (accepts[p->ainew.cargo] >> 3 == 0) continue;
// See if we can build the station
@@ -681,8 +680,8 @@ static void AiNew_State_FindPath(Player *p) {
// Init path_info
if (p->ainew.from_tile == AI_STATION_RANGE) {
// For truck routes we take a range around the industry
p->ainew.path_info.start_tile_tl = DEREF_INDUSTRY(p->ainew.from_ic)->xy - TILE_XY(1,1);
p->ainew.path_info.start_tile_br = DEREF_INDUSTRY(p->ainew.from_ic)->xy + TILE_XY(DEREF_INDUSTRY(p->ainew.from_ic)->width, DEREF_INDUSTRY(p->ainew.from_ic)->height) + TILE_XY(1,1);
p->ainew.path_info.start_tile_tl = GetIndustry(p->ainew.from_ic)->xy - TILE_XY(1,1);
p->ainew.path_info.start_tile_br = GetIndustry(p->ainew.from_ic)->xy + TILE_XY(GetIndustry(p->ainew.from_ic)->width, GetIndustry(p->ainew.from_ic)->height) + TILE_XY(1,1);
p->ainew.path_info.start_direction = p->ainew.from_direction;
} else {
p->ainew.path_info.start_tile_tl = p->ainew.from_tile;
@@ -691,8 +690,8 @@ static void AiNew_State_FindPath(Player *p) {
}
if (p->ainew.to_tile == AI_STATION_RANGE) {
p->ainew.path_info.end_tile_tl = DEREF_INDUSTRY(p->ainew.to_ic)->xy - TILE_XY(1,1);
p->ainew.path_info.end_tile_br = DEREF_INDUSTRY(p->ainew.to_ic)->xy + TILE_XY(DEREF_INDUSTRY(p->ainew.to_ic)->width, DEREF_INDUSTRY(p->ainew.to_ic)->height) + TILE_XY(1,1);
p->ainew.path_info.end_tile_tl = GetIndustry(p->ainew.to_ic)->xy - TILE_XY(1,1);
p->ainew.path_info.end_tile_br = GetIndustry(p->ainew.to_ic)->xy + TILE_XY(GetIndustry(p->ainew.to_ic)->width, GetIndustry(p->ainew.to_ic)->height) + TILE_XY(1,1);
p->ainew.path_info.end_direction = p->ainew.to_direction;
} else {
p->ainew.path_info.end_tile_tl = p->ainew.to_tile;
@@ -744,16 +743,16 @@ static void AiNew_State_FindDepot(Player *p) {
for (i=2;i<p->ainew.path_info.route_length-2;i++) {
tile = p->ainew.path_info.route[i];
for (j=0;j<lengthof(_tileoffs_by_dir);j++) {
if (IS_TILETYPE(tile + _tileoffs_by_dir[j], MP_STREET)) {
for (j = 0; j < 4; j++) {
if (IsTileType(tile + TileOffsByDir(j), MP_STREET)) {
// Its a street, test if it is a depot
if (_map5[tile + _tileoffs_by_dir[j]] & 0x20) {
if (_map5[tile + TileOffsByDir(j)] & 0x20) {
// We found a depot, is it ours? (TELL ME!!!)
if (_map_owner[tile + _tileoffs_by_dir[j]] == _current_player) {
if (_map_owner[tile + TileOffsByDir(j)] == _current_player) {
// Now, is it pointing to the right direction.........
if ((_map5[tile + _tileoffs_by_dir[j]] & 3) == (j ^ 2)) {
if ((_map5[tile + TileOffsByDir(j)] & 3) == (j ^ 2)) {
// Yeah!!!
p->ainew.depot_tile = tile + _tileoffs_by_dir[j];
p->ainew.depot_tile = tile + TileOffsByDir(j);
p->ainew.depot_direction = j ^ 2; // Reverse direction
p->ainew.state = AI_STATE_VERIFY_ROUTE;
return;
@@ -780,28 +779,28 @@ static void AiNew_State_FindDepot(Player *p) {
tile = p->ainew.path_info.route[i];
for (j=0;j<lengthof(_tileoffs_by_dir);j++) {
for (j = 0; j < 4; j++) {
// It may not be placed on the road/rail itself
// And because it is not build yet, we can't see it on the tile..
// So check the surrounding tiles :)
if (tile + _tileoffs_by_dir[j] == p->ainew.path_info.route[i-1] ||
tile + _tileoffs_by_dir[j] == p->ainew.path_info.route[i+1]) continue;
if (tile + TileOffsByDir(j) == p->ainew.path_info.route[i-1] ||
tile + TileOffsByDir(j) == p->ainew.path_info.route[i+1]) continue;
// Not around a bridge?
if (p->ainew.path_info.route_extra[i] != 0) continue;
if (IS_TILETYPE(tile, MP_TUNNELBRIDGE)) continue;
if (IsTileType(tile, MP_TUNNELBRIDGE)) continue;
// Is the terrain clear?
if (IS_TILETYPE(tile + _tileoffs_by_dir[j], MP_CLEAR) ||
IS_TILETYPE(tile + _tileoffs_by_dir[j], MP_TREES)) {
if (IsTileType(tile + TileOffsByDir(j), MP_CLEAR) ||
IsTileType(tile + TileOffsByDir(j), MP_TREES)) {
TileInfo ti;
FindLandscapeHeightByTile(&ti, tile);
// If the current tile is on a slope (tileh != 0) then we do not allow this
if (ti.tileh != 0) continue;
// Check if everything went okay..
r = AiNew_Build_Depot(p, tile + _tileoffs_by_dir[j], j ^ 2, 0);
r = AiNew_Build_Depot(p, tile + TileOffsByDir(j), j ^ 2, 0);
if (r == CMD_ERROR) continue;
// Found a spot!
p->ainew.new_cost += r;
p->ainew.depot_tile = tile + _tileoffs_by_dir[j];
p->ainew.depot_tile = tile + TileOffsByDir(j);
p->ainew.depot_direction = j ^ 2; // Reverse direction
p->ainew.state = AI_STATE_VERIFY_ROUTE;
return;
@@ -829,11 +828,10 @@ static int AiNew_HowManyVehicles(Player *p) {
// Passenger run.. how long is the route?
length = p->ainew.path_info.route_length;
// Calculating tiles a day a vehicle moves is not easy.. this is how it must be done!
// ROAD_ENGINES_INDEX is because the first roadveh engine is ROAD_ENGINES_INDEX, and _roadveh_speed starts from 0
tiles_a_day = _roadveh_speed[i-ROAD_ENGINES_INDEX] * DAY_TICKS / 256 / 16;
tiles_a_day = RoadVehInfo(i)->max_speed * DAY_TICKS / 256 / 16;
// We want a vehicle in a station once a month at least, so, calculate it!
// (the * 2 is because we have 2 stations ;))
amount = ((int)(((float)length / (float)tiles_a_day / 30 * 2))) * 2;
amount = length * 2 * 2 / tiles_a_day / 30;
if (amount == 0) amount = 1;
return amount;
} else if (p->ainew.tbt == AI_TRUCK) {
@@ -845,19 +843,18 @@ static int AiNew_HowManyVehicles(Player *p) {
// Passenger run.. how long is the route?
length = p->ainew.path_info.route_length;
// Calculating tiles a day a vehicle moves is not easy.. this is how it must be done!
// ROAD_ENGINES_INDEX is because the first roadveh engine is ROAD_ENGINES_INDEX, and _roadveh_speed starts from 0
tiles_a_day = _roadveh_speed[i-ROAD_ENGINES_INDEX] * DAY_TICKS / 256 / 16;
tiles_a_day = RoadVehInfo(i)->max_speed * DAY_TICKS / 256 / 16;
if (p->ainew.from_deliver)
max_cargo = DEREF_INDUSTRY(p->ainew.from_ic)->total_production[0];
max_cargo = GetIndustry(p->ainew.from_ic)->total_production[0];
else
max_cargo = DEREF_INDUSTRY(p->ainew.to_ic)->total_production[0];
max_cargo = GetIndustry(p->ainew.to_ic)->total_production[0];
// This is because moving 60% is more then we can dream of!
// This is because moving 60% is more than we can dream of!
max_cargo *= 0.6;
// We want all the cargo to be gone in a month.. so, we know the cargo it delivers
// we know what the vehicle takes with him, and we know the time it takes him
// to get back here.. now let's do some math!
amount = (int)(((float)length / (float)tiles_a_day / 30 * 2) * ((float)max_cargo / (float)_roadveh_capacity[i-ROAD_ENGINES_INDEX]));
amount = 2 * length * max_cargo / tiles_a_day / 30 / RoadVehInfo(i)->capacity;
amount += 1;
return amount;
} else {
@@ -932,11 +929,11 @@ static void AiNew_State_BuildStation(Player *p) {
int res = 0;
assert(p->ainew.state == AI_STATE_BUILD_STATION);
if (p->ainew.temp == 0) {
if (!IS_TILETYPE(p->ainew.from_tile, MP_STATION))
if (!IsTileType(p->ainew.from_tile, MP_STATION))
res = AiNew_Build_Station(p, p->ainew.tbt, p->ainew.from_tile, 0, 0, p->ainew.from_direction, DC_EXEC);
}
else {
if (!IS_TILETYPE(p->ainew.to_tile, MP_STATION))
if (!IsTileType(p->ainew.to_tile, MP_STATION))
res = AiNew_Build_Station(p, p->ainew.tbt, p->ainew.to_tile, 0, 0, p->ainew.to_direction, DC_EXEC);
p->ainew.state = AI_STATE_BUILD_PATH;
}
@@ -985,14 +982,14 @@ static void AiNew_State_BuildPath(Player *p) {
int i, r;
for (i=0;i<2;i++) {
if (i == 0) {
tile = p->ainew.from_tile + _tileoffs_by_dir[p->ainew.from_direction];
tile = p->ainew.from_tile + TileOffsByDir(p->ainew.from_direction);
dir1 = p->ainew.from_direction - 1;
if (dir1 < 0) dir1 = 3;
dir2 = p->ainew.from_direction + 1;
if (dir2 > 3) dir2 = 0;
dir3 = p->ainew.from_direction;
} else {
tile = p->ainew.to_tile + _tileoffs_by_dir[p->ainew.to_direction];
tile = p->ainew.to_tile + TileOffsByDir(p->ainew.to_direction);
dir1 = p->ainew.to_direction - 1;
if (dir1 < 0) dir1 = 3;
dir2 = p->ainew.to_direction + 1;
@@ -1002,11 +999,11 @@ static void AiNew_State_BuildPath(Player *p) {
r = DoCommandByTile(tile, _roadbits_by_dir[dir1], 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
dir1 = _tileoffs_by_dir[dir1];
if (IS_TILETYPE(tile+dir1, MP_CLEAR) || IS_TILETYPE(tile+dir1, MP_TREES)) {
dir1 = TileOffsByDir(dir1);
if (IsTileType(tile + dir1, MP_CLEAR) || IsTileType(tile + dir1, MP_TREES)) {
r = DoCommandByTile(tile+dir1, AiNew_GetRoadDirection(tile, tile+dir1, tile+dir1+dir1), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
if (IS_TILETYPE(tile+dir1+dir1, MP_CLEAR) || IS_TILETYPE(tile+dir1+dir1, MP_TREES))
if (IsTileType(tile + dir1 + dir1, MP_CLEAR) || IsTileType(tile + dir1 + dir1, MP_TREES))
DoCommandByTile(tile+dir1+dir1, AiNew_GetRoadDirection(tile+dir1, tile+dir1+dir1, tile+dir1+dir1+dir1), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
}
}
@@ -1014,11 +1011,11 @@ static void AiNew_State_BuildPath(Player *p) {
r = DoCommandByTile(tile, _roadbits_by_dir[dir2], 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
dir2 = _tileoffs_by_dir[dir2];
if (IS_TILETYPE(tile+dir2, MP_CLEAR) || IS_TILETYPE(tile+dir2, MP_TREES)) {
dir2 = TileOffsByDir(dir2);
if (IsTileType(tile + dir2, MP_CLEAR) || IsTileType(tile + dir2, MP_TREES)) {
r = DoCommandByTile(tile+dir2, AiNew_GetRoadDirection(tile, tile+dir2, tile+dir2+dir2), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
if (IS_TILETYPE(tile+dir2+dir2, MP_CLEAR) || IS_TILETYPE(tile+dir2+dir2, MP_TREES))
if (IsTileType(tile + dir2 + dir2, MP_CLEAR) || IsTileType(tile + dir2 + dir2, MP_TREES))
DoCommandByTile(tile+dir2+dir2, AiNew_GetRoadDirection(tile+dir2, tile+dir2+dir2, tile+dir2+dir2+dir2), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
}
}
@@ -1026,11 +1023,11 @@ static void AiNew_State_BuildPath(Player *p) {
r = DoCommandByTile(tile, _roadbits_by_dir[dir3^2], 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
dir3 = _tileoffs_by_dir[dir3];
if (IS_TILETYPE(tile+dir3, MP_CLEAR) || IS_TILETYPE(tile+dir3, MP_TREES)) {
dir3 = TileOffsByDir(dir3);
if (IsTileType(tile + dir3, MP_CLEAR) || IsTileType(tile + dir3, MP_TREES)) {
r = DoCommandByTile(tile+dir3, AiNew_GetRoadDirection(tile, tile+dir3, tile+dir3+dir3), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
if (r != CMD_ERROR) {
if (IS_TILETYPE(tile+dir3+dir3, MP_CLEAR) || IS_TILETYPE(tile+dir3+dir3, MP_TREES))
if (IsTileType(tile + dir3 + dir3, MP_CLEAR) || IsTileType(tile + dir3 + dir3, MP_TREES))
DoCommandByTile(tile+dir3+dir3, AiNew_GetRoadDirection(tile+dir3, tile+dir3+dir3, tile+dir3+dir3+dir3), 0, DC_EXEC | DC_NO_WATER, CMD_BUILD_ROAD);
}
}
@@ -1049,7 +1046,7 @@ static void AiNew_State_BuildDepot(Player *p) {
int res = 0;
assert(p->ainew.state == AI_STATE_BUILD_DEPOT);
if (IS_TILETYPE(p->ainew.depot_tile, MP_STREET) && _map5[p->ainew.depot_tile] & 0x20) {
if (IsTileType(p->ainew.depot_tile, MP_STREET) && _map5[p->ainew.depot_tile] & 0x20) {
if (_map_owner[p->ainew.depot_tile] == _current_player) {
// The depot is already builded!
p->ainew.state = AI_STATE_BUILD_VEHICLE;
@@ -1062,7 +1059,7 @@ static void AiNew_State_BuildDepot(Player *p) {
}
// There is a bus on the tile we want to build road on... idle till he is gone! (BAD PERSON! :p)
if (!EnsureNoVehicle(p->ainew.depot_tile + _tileoffs_by_dir[p->ainew.depot_direction]))
if (!EnsureNoVehicle(p->ainew.depot_tile + TileOffsByDir(p->ainew.depot_direction)))
return;
res = AiNew_Build_Depot(p, p->ainew.depot_tile, p->ainew.depot_direction, DC_EXEC);
@@ -1117,7 +1114,9 @@ static void AiNew_State_BuildVehicle(Player *p) {
// Put the stations in the order list
static void AiNew_State_GiveOrders(Player *p) {
int order, flags;
int idx;
Order order;
assert(p->ainew.state == AI_STATE_GIVE_ORDERS);
if (p->ainew.veh_main_id != (VehicleID)-1) {
@@ -1133,24 +1132,30 @@ static void AiNew_State_GiveOrders(Player *p) {
p->ainew.veh_main_id = p->ainew.veh_id;
}
// When more then 1 vehicle, we send them to different directions
order = 0;
flags = (_map2[p->ainew.from_tile] << 8) | OT_GOTO_STATION;
// When more than 1 vehicle, we send them to different directions
idx = 0;
order.type = OT_GOTO_STATION;
order.flags = 0;
order.station = _map2[p->ainew.from_tile];
if (p->ainew.tbt == AI_TRUCK && p->ainew.from_deliver)
flags |= OF_FULL_LOAD;
DoCommandByTile(0, p->ainew.veh_id + (order << 16), flags, DC_EXEC, CMD_INSERT_ORDER);
order.flags |= OF_FULL_LOAD;
DoCommandByTile(0, p->ainew.veh_id + (idx << 16), PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
order = 1;
flags = (_map2[p->ainew.to_tile] << 8) | OT_GOTO_STATION;
idx = 1;
order.type = OT_GOTO_STATION;
order.flags = 0;
order.station = _map2[p->ainew.to_tile];
if (p->ainew.tbt == AI_TRUCK && p->ainew.to_deliver)
flags |= OF_FULL_LOAD;
DoCommandByTile(0, p->ainew.veh_id + (order << 16), flags, DC_EXEC, CMD_INSERT_ORDER);
order.flags |= OF_FULL_LOAD;
DoCommandByTile(0, p->ainew.veh_id + (idx << 16), PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
// Very handy for AI, goto depot.. but yeah, it needs to be activated ;)
if (_patches.gotodepot) {
order = 2;
flags = (GetDepotByTile(p->ainew.depot_tile) << 8) | OT_GOTO_DEPOT | OF_UNLOAD;
DoCommandByTile(0, p->ainew.veh_id + (order << 16), flags, DC_EXEC, CMD_INSERT_ORDER);
idx = 2;
order.type = OT_GOTO_DEPOT;
order.flags = OF_UNLOAD;
order.station = GetDepotByTile(p->ainew.depot_tile);
DoCommandByTile(0, p->ainew.veh_id + (idx << 16), PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
}
// Start the engines!
@@ -1181,7 +1186,7 @@ static void AiNew_CheckVehicle(Player *p, Vehicle *v) {
// When a vehicle is older then 1 year, it should make money...
if (v->age > 360) {
// If both years together are not more then AI_MINIMUM_ROUTE_PROFIT,
// If both years together are not more than AI_MINIMUM_ROUTE_PROFIT,
// it is not worth the line I guess...
if (v->profit_last_year + v->profit_this_year < AI_MINIMUM_ROUTE_PROFIT ||
(v->reliability * 100 >> 16) < 40) {

View File

@@ -1,5 +1,6 @@
#include "stdafx.h"
#include "ttd.h"
#include "map.h"
#include "command.h"
#include "ai.h"
@@ -7,7 +8,8 @@
// Tests if a station can be build on the given spot
// TODO: make it train compatible
bool TestCanBuildStationHere(uint tile, byte dir) {
static bool TestCanBuildStationHere(uint tile, byte dir)
{
Player *p = DEREF_PLAYER(_current_player);
if (dir == TEST_STATION_NO_DIR) {
// TODO: currently we only allow spots that can be access from al 4 directions...
@@ -26,16 +28,32 @@ bool TestCanBuildStationHere(uint tile, byte dir) {
return true;
}
static bool IsRoad(TileIndex tile)
{
return
// MP_STREET, but not a road depot?
(IsTileType(tile, MP_STREET) && !(_map5[tile] & 0x20)) ||
(IsTileType(tile, MP_TUNNELBRIDGE) && (
// road tunnel?
((_map5[tile] & 0x80) == 0 && (_map5[tile] & 0x4) == 0x4) ||
// road bridge?
((_map5[tile] & 0x80) != 0 && (_map5[tile] & 0x2) == 0x2)
));
}
// Checks if a tile 'a' is between the tiles 'b' and 'c'
#define TILES_BETWEEN(a,b,c) (GET_TILE_X(a) >= GET_TILE_X(b) && GET_TILE_X(a) <= GET_TILE_X(c) && GET_TILE_Y(a) >= GET_TILE_Y(b) && GET_TILE_Y(a) <= GET_TILE_Y(c))
#define TILES_BETWEEN(a, b, c) (TileX(a) >= TileX(b) && TileX(a) <= TileX(c) && TileY(a) >= TileY(b) && TileY(a) <= TileY(c))
// Check if the current tile is in our end-area
int32 AyStar_AiPathFinder_EndNodeCheck(AyStar *aystar, OpenListNode *current) {
static int32 AyStar_AiPathFinder_EndNodeCheck(AyStar *aystar, OpenListNode *current)
{
Ai_PathFinderInfo *PathFinderInfo = (Ai_PathFinderInfo*)aystar->user_target;
// It is not allowed to have a station on the end of a bridge or tunnel ;)
if (current->path.node.user_data[0] != 0) return AYSTAR_DONE;
if (TILES_BETWEEN(current->path.node.tile, PathFinderInfo->end_tile_tl, PathFinderInfo->end_tile_br))
if (IS_TILETYPE(current->path.node.tile, MP_CLEAR) || IS_TILETYPE(current->path.node.tile, MP_TREES))
if (IsTileType(current->path.node.tile, MP_CLEAR) || IsTileType(current->path.node.tile, MP_TREES))
if (current->path.parent == NULL || TestCanBuildStationHere(current->path.node.tile,AiNew_GetDirection(current->path.parent->node.tile, current->path.node.tile)))
return AYSTAR_FOUND_END_NODE;
@@ -44,12 +62,14 @@ int32 AyStar_AiPathFinder_EndNodeCheck(AyStar *aystar, OpenListNode *current) {
// Calculates the hash
// Currently it is a 10 bit hash, so the hash array has a max depth of 6 bits (so 64)
uint AiPathFinder_Hash(uint key1, uint key2) {
return (GET_TILE_X(key1) & 0x1F) + ((GET_TILE_Y(key1) & 0x1F) << 5);
static uint AiPathFinder_Hash(uint key1, uint key2)
{
return (TileX(key1) & 0x1F) + ((TileY(key1) & 0x1F) << 5);
}
// Clear the memory of all the things
void AyStar_AiPathFinder_Free(AyStar *aystar) {
static void AyStar_AiPathFinder_Free(AyStar *aystar)
{
AyStarMain_Free(aystar);
free(aystar);
}
@@ -89,8 +109,8 @@ AyStar *new_AyStar_AiPathFinder(int max_tiles_around, Ai_PathFinderInfo *PathFin
start_node.node.user_data[0] = 0;
// Now we add all the starting tiles
for (x=GET_TILE_X(PathFinderInfo->start_tile_tl);x<=GET_TILE_X(PathFinderInfo->start_tile_br);x++) {
for (y=GET_TILE_Y(PathFinderInfo->start_tile_tl);y<=GET_TILE_Y(PathFinderInfo->start_tile_br);y++) {
for (x = TileX(PathFinderInfo->start_tile_tl); x <= TileX(PathFinderInfo->start_tile_br); x++) {
for (y = TileY(PathFinderInfo->start_tile_tl); y <= TileY(PathFinderInfo->start_tile_br); y++) {
start_node.node.tile = TILE_XY(x,y);
result->addstart(result, &start_node.node);
}
@@ -116,9 +136,9 @@ void clean_AyStar_AiPathFinder(AyStar *aystar, Ai_PathFinderInfo *PathFinderInfo
start_node.node.tile = PathFinderInfo->start_tile_tl;
// Now we add all the starting tiles
for (x=GET_TILE_X(PathFinderInfo->start_tile_tl);x<=GET_TILE_X(PathFinderInfo->start_tile_br);x++) {
for (y=GET_TILE_Y(PathFinderInfo->start_tile_tl);y<=GET_TILE_Y(PathFinderInfo->start_tile_br);y++) {
if (!(IS_TILETYPE(TILE_XY(x,y), MP_CLEAR) || IS_TILETYPE(TILE_XY(x,y), MP_TREES))) continue;
for (x = TileX(PathFinderInfo->start_tile_tl); x <= TileX(PathFinderInfo->start_tile_br); x++) {
for (y = TileY(PathFinderInfo->start_tile_tl); y <= TileY(PathFinderInfo->start_tile_br); y++) {
if (!(IsTileType(TILE_XY(x,y), MP_CLEAR) || IsTileType(TILE_XY(x,y), MP_TREES))) continue;
if (!TestCanBuildStationHere(TILE_XY(x,y),TEST_STATION_NO_DIR)) continue;
start_node.node.tile = TILE_XY(x,y);
aystar->addstart(aystar, &start_node.node);
@@ -132,14 +152,14 @@ static int32 AyStar_AiPathFinder_CalculateH(AyStar *aystar, AyStarNode *current,
int r, r2;
if (PathFinderInfo->end_direction != AI_PATHFINDER_NO_DIRECTION) {
// The station is pointing to a direction, add a tile towards that direction, so the H-value is more accurate
r = GetTileDist(current->tile, PathFinderInfo->end_tile_tl + _tiles_around[PathFinderInfo->end_direction]);
r2 = GetTileDist(current->tile, PathFinderInfo->end_tile_br + _tiles_around[PathFinderInfo->end_direction]);
r = GetTileDist(current->tile, PathFinderInfo->end_tile_tl + TileOffsByDir(PathFinderInfo->end_direction));
r2 = GetTileDist(current->tile, PathFinderInfo->end_tile_br + TileOffsByDir(PathFinderInfo->end_direction));
} else {
// No direction, so just get the fastest route to the station
r = GetTileDist(current->tile, PathFinderInfo->end_tile_tl);
r2 = GetTileDist(current->tile, PathFinderInfo->end_tile_br);
}
// See if the bottomright is faster then the topleft..
// See if the bottomright is faster than the topleft..
if (r2 < r) r = r2;
return r * AI_PATHFINDER_H_MULTIPLER;
}
@@ -147,7 +167,7 @@ static int32 AyStar_AiPathFinder_CalculateH(AyStar *aystar, AyStarNode *current,
// We found the end.. let's get the route back and put it in an array
static void AyStar_AiPathFinder_FoundEndNode(AyStar *aystar, OpenListNode *current) {
Ai_PathFinderInfo *PathFinderInfo = (Ai_PathFinderInfo*)aystar->user_target;
int i = 0;
uint i = 0;
PathNode *parent = &current->path;
do {
@@ -167,35 +187,40 @@ static void AyStar_AiPathFinder_FoundEndNode(AyStar *aystar, OpenListNode *curre
// What tiles are around us.
static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *current) {
int i, r, dir;
uint i;
int r;
int dir;
Ai_PathFinderInfo *PathFinderInfo = (Ai_PathFinderInfo*)aystar->user_target;
aystar->num_neighbours = 0;
// Go through all surrounding tiles and check if they are within the limits
for (i=0;i<4;i++) {
if (GET_TILE_X(_tiles_around[i] + current->path.node.tile) > 1 && GET_TILE_X(_tiles_around[i] + current->path.node.tile) < TILE_X_MAX - 1 &&
GET_TILE_Y(_tiles_around[i] + current->path.node.tile) > 1 && GET_TILE_Y(_tiles_around[i] + current->path.node.tile) < TILE_Y_MAX - 1) {
if (TileX(TileOffsByDir(i) + current->path.node.tile) > 1 &&
TileX(TileOffsByDir(i) + current->path.node.tile) < MapMaxX() - 1 &&
TileY(TileOffsByDir(i) + current->path.node.tile) > 1 &&
TileY(TileOffsByDir(i) + current->path.node.tile) < MapMaxY() - 1) {
// We also directly test if the current tile can connect to this tile..
// We do this simply by just building the tile!
// If the next step is a bridge, we have to enter it the right way
if (!PathFinderInfo->rail_or_road && AI_PATHFINDER_IS_ROAD(current->path.node.tile + _tiles_around[i])) {
if (IS_TILETYPE(current->path.node.tile + _tiles_around[i], MP_TUNNELBRIDGE)) {
if (!PathFinderInfo->rail_or_road && IsRoad(current->path.node.tile + TileOffsByDir(i))) {
if (IsTileType(current->path.node.tile + TileOffsByDir(i), MP_TUNNELBRIDGE)) {
// An existing bridge... let's test the direction ;)
if ((_map5[current->path.node.tile + _tiles_around[i]] & 1) != (i & 1)) continue;
if ((_map5[current->path.node.tile + TileOffsByDir(i)] & 1U) != (i & 1)) continue;
// This problem only is valid for tunnels:
// When the last tile was not yet a tunnel, check if we enter from the right side..
if (!IS_TILETYPE(current->path.node.tile, MP_TUNNELBRIDGE) && (_map5[current->path.node.tile + _tiles_around[i]] & 0x80) == 0) {
if (i != (_map5[current->path.node.tile + _tiles_around[i]] & 3)) continue;
if (!IsTileType(current->path.node.tile, MP_TUNNELBRIDGE) && (_map5[current->path.node.tile + TileOffsByDir(i)] & 0x80) == 0) {
if (i != (_map5[current->path.node.tile + TileOffsByDir(i)] & 3U)) continue;
}
}
}
// But also if we are on a bridge, we can only move a certain direction
if (!PathFinderInfo->rail_or_road && AI_PATHFINDER_IS_ROAD(current->path.node.tile)) {
if (IS_TILETYPE(current->path.node.tile, MP_TUNNELBRIDGE)) {
if (!PathFinderInfo->rail_or_road && IsRoad(current->path.node.tile)) {
if (IsTileType(current->path.node.tile, MP_TUNNELBRIDGE)) {
// An existing bridge/tunnel... let's test the direction ;)
if ((_map5[current->path.node.tile] & 1) != (i & 1)) continue;
if ((_map5[current->path.node.tile] & 1U) != (i & 1)) continue;
}
}
@@ -212,14 +237,14 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
// If not, this means we are at the starting station
if (PathFinderInfo->start_direction != AI_PATHFINDER_NO_DIRECTION) {
// We do need a direction?
if (AiNew_GetDirection(current->path.node.tile, current->path.node.tile + _tiles_around[i]) != PathFinderInfo->start_direction)
if (AiNew_GetDirection(current->path.node.tile, current->path.node.tile + TileOffsByDir(i)) != PathFinderInfo->start_direction)
// We are not pointing the right way, invalid tile
continue;
}
} else if (current->path.node.user_data[0] == 0) {
if (PathFinderInfo->rail_or_road) {
// Rail check
dir = AiNew_GetRailDirection(current->path.parent->node.tile, current->path.node.tile, current->path.node.tile + _tiles_around[i]);
dir = AiNew_GetRailDirection(current->path.parent->node.tile, current->path.node.tile, current->path.node.tile + TileOffsByDir(i));
r = DoCommandByTile(current->path.node.tile, 0, dir, DC_AUTO | DC_NO_WATER, CMD_BUILD_SINGLE_RAIL);
if (r == CMD_ERROR) continue;
#ifdef AI_PATHFINDER_NO_90DEGREES_TURN
@@ -233,9 +258,9 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
#endif
} else {
// Road check
dir = AiNew_GetRoadDirection(current->path.parent->node.tile, current->path.node.tile, current->path.node.tile + _tiles_around[i]);
if (AI_PATHFINDER_IS_ROAD(current->path.node.tile)) {
if (IS_TILETYPE(current->path.node.tile, MP_TUNNELBRIDGE)) {
dir = AiNew_GetRoadDirection(current->path.parent->node.tile, current->path.node.tile, current->path.node.tile + TileOffsByDir(i));
if (IsRoad(current->path.node.tile)) {
if (IsTileType(current->path.node.tile, MP_TUNNELBRIDGE)) {
// We have a bridge, how nicely! We should mark it...
dir = 0;
} else {
@@ -258,7 +283,7 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
}
// The tile can be connected
aystar->neighbours[aystar->num_neighbours].tile = _tiles_around[i] + current->path.node.tile;
aystar->neighbours[aystar->num_neighbours].tile = TileOffsByDir(i) + current->path.node.tile;
aystar->neighbours[aystar->num_neighbours].user_data[0] = 0;
aystar->neighbours[aystar->num_neighbours++].direction = 0;
}
@@ -279,11 +304,11 @@ static void AyStar_AiPathFinder_GetNeighbours(AyStar *aystar, OpenListNode *curr
// Bridges can only be build on land that is not flat
// And if there is a road or rail blocking
if (ti.tileh != 0 ||
(PathFinderInfo->rail_or_road && IS_TILETYPE(tile + _tiles_around[dir], MP_STREET)) ||
(!PathFinderInfo->rail_or_road && IS_TILETYPE(tile + _tiles_around[dir], MP_RAILWAY))) {
(PathFinderInfo->rail_or_road && IsTileType(tile + TileOffsByDir(dir), MP_STREET)) ||
(!PathFinderInfo->rail_or_road && IsTileType(tile + TileOffsByDir(dir), MP_RAILWAY))) {
for (;;) {
new_tile += _tiles_around[dir];
new_tile += TileOffsByDir(dir);
// Precheck, is the length allowed?
if (!CheckBridge_Stuff(0,GetBridgeLength(tile, new_tile))) break;
@@ -355,7 +380,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
if (!PathFinderInfo->rail_or_road) {
// Road has the lovely advantage it can use other road... check if
// the current tile is road, and if so, give a good bonus
if (AI_PATHFINDER_IS_ROAD(current->tile)) {
if (IsRoad(current->tile)) {
res -= AI_PATHFINDER_ROAD_ALREADY_EXISTS_BONUS;
}
}
@@ -372,7 +397,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;
}
} else {
if (!(AI_PATHFINDER_IS_ROAD(parent->path.node.tile) && IS_TILETYPE(parent->path.node.tile, MP_TUNNELBRIDGE))) {
if (!(IsRoad(parent->path.node.tile) && IsTileType(parent->path.node.tile, MP_TUNNELBRIDGE))) {
r = GetRoadFoundation(parent_ti.tileh, AiNew_GetRoadDirection(parent->path.parent->node.tile, parent->path.node.tile, current->tile));
if (r >= 15 || r == 0)
res += AI_PATHFINDER_TILE_GOES_UP_PENALTY;
@@ -417,7 +442,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
if (parent->path.parent != NULL &&
AiNew_GetDirection(current->tile, parent->path.node.tile) != AiNew_GetDirection(parent->path.node.tile, parent->path.parent->node.tile)) {
// When road exists, we don't like turning, but its free, so don't be to piggy about it
if (AI_PATHFINDER_IS_ROAD(parent->path.node.tile))
if (IsRoad(parent->path.node.tile))
res += AI_PATHFINDER_DIRECTION_CHANGE_ON_EXISTING_ROAD_PENALTY;
else
res += AI_PATHFINDER_DIRECTION_CHANGE_PENALTY;
@@ -428,7 +453,7 @@ static int32 AyStar_AiPathFinder_CalculateG(AyStar *aystar, AyStarNode *current,
if (parent->path.parent != NULL && parent->path.parent->parent != NULL) {
int dir1 = AiNew_GetRailDirection(parent->path.parent->node.tile, parent->path.node.tile, current->tile);
int dir2 = AiNew_GetRailDirection(parent->path.parent->parent->node.tile, parent->path.parent->node.tile, parent->path.node.tile);
// First, see if we are on diagonal path, that is better then straight path
// First, see if we are on diagonal path, that is better than straight path
if (dir1 > 1) { res -= AI_PATHFINDER_DIAGONAL_BONUS; }
// First see if they are different

View File

@@ -1,5 +1,6 @@
#include "stdafx.h"
#include "ttd.h"
#include "map.h"
#include "ai.h"
#include "vehicle.h"
@@ -14,13 +15,13 @@ int AiNew_GetRailDirection(uint tile_a, uint tile_b, uint tile_c) {
int x1, x2, x3;
int y1, y2, y3;
x1 = GET_TILE_X(tile_a);
x2 = GET_TILE_X(tile_b);
x3 = GET_TILE_X(tile_c);
x1 = TileX(tile_a);
x2 = TileX(tile_b);
x3 = TileX(tile_c);
y1 = GET_TILE_Y(tile_a);
y2 = GET_TILE_Y(tile_b);
y3 = GET_TILE_Y(tile_c);
y1 = TileY(tile_a);
y2 = TileY(tile_b);
y3 = TileY(tile_c);
if (y1 == y2 && y2 == y3) return 0;
if (x1 == x2 && x2 == x3) return 1;
@@ -49,13 +50,13 @@ int AiNew_GetRoadDirection(uint tile_a, uint tile_b, uint tile_c) {
int y1, y2, y3;
int r;
x1 = GET_TILE_X(tile_a);
x2 = GET_TILE_X(tile_b);
x3 = GET_TILE_X(tile_c);
x1 = TileX(tile_a);
x2 = TileX(tile_b);
x3 = TileX(tile_c);
y1 = GET_TILE_Y(tile_a);
y2 = GET_TILE_Y(tile_b);
y3 = GET_TILE_Y(tile_c);
y1 = TileY(tile_a);
y2 = TileY(tile_b);
y3 = TileY(tile_c);
r = 0;
@@ -74,9 +75,9 @@ int AiNew_GetRoadDirection(uint tile_a, uint tile_b, uint tile_c) {
// Get's the direction between 2 tiles seen from tile_a
int AiNew_GetDirection(uint tile_a, uint tile_b) {
if (GET_TILE_Y(tile_a) < GET_TILE_Y(tile_b)) return 1;
if (GET_TILE_Y(tile_a) > GET_TILE_Y(tile_b)) return 3;
if (GET_TILE_X(tile_a) < GET_TILE_X(tile_b)) return 2;
if (TileY(tile_a) < TileY(tile_b)) return 1;
if (TileY(tile_a) > TileY(tile_b)) return 3;
if (TileX(tile_a) < TileX(tile_b)) return 2;
return 0;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

132
airport.c
View File

@@ -1,5 +1,6 @@
#include "stdafx.h"
#include "ttd.h"
#include "map.h"
#include "airport.h"
AirportFTAClass *CountryAirport;
@@ -9,11 +10,10 @@ AirportFTAClass *MetropolitanAirport;
AirportFTAClass *InternationalAirport;
static void AirportFTAClass_Constructor(AirportFTAClass *Airport,
const byte nofterminals, const byte nofterminalgroups,
const byte nofhelipads, const byte nofhelipadgroups,
const byte *terminals, const byte *helipads,
const byte entry_point, const byte acc_planes,
const AirportFTAbuildup *FA,
const TileIndex *depots);
const TileIndexDiffC *depots, const byte nof_depots);
static void AirportFTAClass_Destructor(AirportFTAClass *Airport);
static uint16 AirportGetNofElements(const AirportFTAbuildup *FA);
@@ -22,31 +22,82 @@ static byte AirportTestFTA(const AirportFTAClass *Airport);
/*static void AirportPrintOut(const AirportFTAClass *Airport, const bool full_report);
static byte AirportBlockToString(uint32 block);*/
void InitializeAirports()
void InitializeAirports(void)
{
// country airport
CountryAirport = (AirportFTAClass *)malloc(sizeof(AirportFTAClass));
AirportFTAClass_Constructor(CountryAirport, 2, 1, 0, 0, 16, ALL, _airport_fta_country, _airport_depots_country);
CountryAirport = malloc(sizeof(AirportFTAClass));
AirportFTAClass_Constructor(
CountryAirport,
_airport_terminal_country,
NULL,
16,
ALL,
_airport_fta_country,
_airport_depots_country,
lengthof(_airport_depots_country)
);
// city airport
CityAirport = (AirportFTAClass *)malloc(sizeof(AirportFTAClass));
AirportFTAClass_Constructor(CityAirport, 3, 1, 0, 0, 19, ALL, _airport_fta_city, _airport_depots_city);
CityAirport = malloc(sizeof(AirportFTAClass));
AirportFTAClass_Constructor(
CityAirport,
_airport_terminal_city,
NULL,
19,
ALL,
_airport_fta_city,
_airport_depots_city,
lengthof(_airport_depots_city)
);
// metropolitan airport
MetropolitanAirport = (AirportFTAClass *)malloc(sizeof(AirportFTAClass));
AirportFTAClass_Constructor(MetropolitanAirport, 3, 1, 0, 0, 20, ALL, _airport_fta_metropolitan, _airport_depots_metropolitan);
MetropolitanAirport = malloc(sizeof(AirportFTAClass));
AirportFTAClass_Constructor(
MetropolitanAirport,
_airport_terminal_metropolitan,
NULL,
20,
ALL,
_airport_fta_metropolitan,
_airport_depots_metropolitan,
lengthof(_airport_depots_metropolitan)
);
// international airport
InternationalAirport = (AirportFTAClass *)malloc(sizeof(AirportFTAClass));
AirportFTAClass_Constructor(InternationalAirport, 6, 2, 2, 1, 37, ALL, _airport_fta_international, _airport_depots_international);
AirportFTAClass_Constructor(
InternationalAirport,
_airport_terminal_international,
_airport_helipad_international,
37,
ALL,
_airport_fta_international,
_airport_depots_international,
lengthof(_airport_depots_international)
);
// heliport, oilrig
Heliport = (AirportFTAClass *)malloc(sizeof(AirportFTAClass));
AirportFTAClass_Constructor(Heliport, 0, 0, 1, 1, 7, HELICOPTERS_ONLY, _airport_fta_heliport_oilrig, _airport_depots_heliport_oilrig);
AirportFTAClass_Constructor(
Heliport,
NULL,
_airport_helipad_heliport_oilrig,
7,
HELICOPTERS_ONLY,
_airport_fta_heliport_oilrig,
NULL,
0
);
Oilrig = Heliport; // exactly the same structure for heliport/oilrig, so share state machine
}
void UnInitializeAirports()
void UnInitializeAirports(void)
{
AirportFTAClass_Destructor(CountryAirport);
AirportFTAClass_Destructor(CityAirport);
@@ -56,12 +107,46 @@ void UnInitializeAirports()
}
static void AirportFTAClass_Constructor(AirportFTAClass *Airport,
const byte nofterminals, const byte nofterminalgroups,
const byte nofhelipads, const byte nofhelipadgroups,
const byte *terminals, const byte *helipads,
const byte entry_point, const byte acc_planes,
const AirportFTAbuildup *FA,
const TileIndex *depots)
const TileIndexDiffC *depots, const byte nof_depots)
{
byte nofterminals, nofhelipads;
byte nofterminalgroups = 0;
byte nofhelipadgroups = 0;
const byte * curr;
int i;
nofterminals = nofhelipads = 0;
//now we read the number of terminals we have
if (terminals != NULL) {
i = terminals[0];
nofterminalgroups = i;
curr = terminals;
while (i-- > 0) {
curr++;
assert(*curr != 0); //we don't want to have an empty group
nofterminals += *curr;
}
}
Airport->terminals = terminals;
//read helipads
if (helipads != NULL) {
i = helipads[0];
nofhelipadgroups = i;
curr = helipads;
while (i-- > 0) {
curr++;
assert(*curr != 0); //no empty groups please
nofhelipads += *curr;
}
}
Airport->helipads = helipads;
// if there are more terminals than 6, internal variables have to be changed, so don't allow that
// same goes for helipads
if (nofterminals > MAX_TERMINALS) { printf("Currently only maximum of %2d terminals are supported (you wanted %2d)\n", MAX_TERMINALS, nofterminals);}
@@ -69,32 +154,25 @@ static void AirportFTAClass_Constructor(AirportFTAClass *Airport,
// terminals/helipads are divided into groups. Groups are computed by dividing the number
// of terminals by the number of groups. Half in half. If #terminals is uneven, first group
// will get the less # of terminals
if (nofterminalgroups > nofterminals) { printf("# of terminalgroups (%2d) must be less or equal to terminals (%2d)", nofterminals, nofterminalgroups);}
if (nofhelipadgroups > nofhelipads) { printf("# of helipadgroups (%2d) must be less or equal to helipads (%2d)", nofhelipads, nofhelipadgroups);}
assert(nofterminals <= MAX_TERMINALS);
assert(nofhelipads <= MAX_HELIPADS);
assert(nofterminalgroups <= nofterminals);
assert(nofhelipadgroups <= nofhelipads);
Airport->nofelements = AirportGetNofElements(FA);
// check
if (entry_point >= Airport->nofelements) {printf("Entry point (%2d) must be within the airport positions (which is max %2d)\n", entry_point, Airport->nofelements);}
assert(entry_point < Airport->nofelements);
Airport->nofterminals = nofterminals;
Airport->nofterminalgroups = nofterminalgroups;
Airport->nofhelipads = nofhelipads;
Airport->nofhelipadgroups = nofhelipadgroups;
Airport->acc_planes = acc_planes;
Airport->entry_point = entry_point;
Airport->airport_depots = (const uint16*)depots;
Airport->airport_depots = depots;
Airport->nof_depots = nof_depots;
// build the state machine
AirportBuildAutomata(Airport, FA);
DEBUG(misc, 1) ("#Elements %2d; #Terminals %2d in %d group(s); #Helipads %2d in %d group(s)", Airport->nofelements,
Airport->nofterminals, Airport->nofterminalgroups, Airport->nofhelipads, Airport->nofhelipadgroups);
DEBUG(misc, 1) ("#Elements %2d; #Terminals %2d in %d group(s); #Helipads %2d in %d group(s); Entry Point %d", Airport->nofelements,
nofterminals, nofterminalgroups, nofhelipads, nofhelipadgroups, Airport->entry_point);
{

View File

@@ -13,7 +13,7 @@ enum {
AT_HELIPORT = 2,
AT_METROPOLITAN = 3,
AT_INTERNATIONAL = 4,
AT_OILRIG = 5
AT_OILRIG = 15
};
// do not change unless you change v->subtype too. This aligns perfectly with its current setting
@@ -26,13 +26,12 @@ enum {
// Finite sTate mAchine --> FTA
typedef struct AirportFTAClass {
byte nofelements; // number of positions the airport consists of
byte nofterminals; // number of terminals this airport has
byte nofterminalgroups; // terminals belong to so many groups (MAX is the nofterminals)
byte nofhelipads; // number of helipads this airport has
byte nofhelipadgroups; // helipads belong to so many groups (MAX is the nofhelipads)
const byte *terminals;
const byte *helipads;
byte entry_point; // when an airplane arrives at this airport, enter it at position entry_point
byte acc_planes; // accept airplanes or helicopters or both
const uint16 *airport_depots; // gives the position of the depots on the airports
const TileIndexDiffC *airport_depots; // gives the position of the depots on the airports
byte nof_depots; // number of depots this airport has
struct AirportFTA *layout; // state machine for airport
} AirportFTAClass;
@@ -45,8 +44,8 @@ typedef struct AirportFTA {
struct AirportFTA *next_in_chain; // possible extra movement choices from this position
} AirportFTA;
void InitializeAirports();
void UnInitializeAirports();
void InitializeAirports(void);
void UnInitializeAirports(void);
const AirportFTAClass* GetAirport(const byte airport_type);
#endif /* AIRPORT_H */

View File

@@ -1,10 +1,12 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "map.h"
#include "window.h"
#include "gui.h"
#include "viewport.h"
#include "gfx.h"
#include "sound.h"
#include "command.h"
#include "vehicle.h"
#include "station.h"
@@ -12,13 +14,13 @@
static byte _selected_airport_type;
static void ShowBuildAirportPicker();
static void ShowBuildAirportPicker(void);
static void CcBuildAirport(bool success, uint tile, uint32 p1, uint32 p2)
void CcBuildAirport(bool success, uint tile, uint32 p1, uint32 p2)
{
if (success) {
SndPlayTileFx(0x1D, tile);
SndPlayTileFx(SND_1F_SPLAT, tile);
ResetObjectToPlace();
}
}
@@ -36,36 +38,24 @@ static void PlaceAir_DemolishArea(uint tile)
static void BuildAirClick_Airport(Window *w)
{
if (HandlePlacePushButton(w, 2, 0xAA4, 1, PlaceAirport)) ShowBuildAirportPicker();
if (HandlePlacePushButton(w, 3, 0xAA4, 1, PlaceAirport)) ShowBuildAirportPicker();
}
static void BuildAirClick_Demolish(Window *w)
{
HandlePlacePushButton(w, 3, ANIMCURSOR_DEMOLISH, 1, PlaceAir_DemolishArea);
HandlePlacePushButton(w, 4, ANIMCURSOR_DEMOLISH, 1, PlaceAir_DemolishArea);
}
static void BuildAirClick_Lower(Window *w)
static void BuildAirClick_Landscaping(Window *w)
{
HandlePlacePushButton(w, 4, ANIMCURSOR_LOWERLAND, 2, PlaceProc_LowerLand);
}
static void BuildAirClick_Raise(Window *w)
{
HandlePlacePushButton(w, 5, ANIMCURSOR_RAISELAND, 2, PlaceProc_RaiseLand);
}
static void BuildAirClick_Purchase(Window *w)
{
HandlePlacePushButton(w, 6, 0x12B8, 1, PlaceProc_BuyLand);
ShowTerraformToolbar();
}
typedef void OnButtonClick(Window *w);
static OnButtonClick * const _build_air_button_proc[] = {
BuildAirClick_Airport,
BuildAirClick_Demolish,
BuildAirClick_Lower,
BuildAirClick_Raise,
BuildAirClick_Purchase,
BuildAirClick_Landscaping,
};
static void BuildAirToolbWndProc(Window *w, WindowEvent *e)
@@ -76,10 +66,20 @@ static void BuildAirToolbWndProc(Window *w, WindowEvent *e)
break;
case WE_CLICK:
if (e->click.widget-2 >= 0)
_build_air_button_proc[e->click.widget - 2](w);
if (e->click.widget - 3 >= 0)
_build_air_button_proc[e->click.widget - 3](w);
break;
case WE_KEYPRESS: {
switch (e->keypress.keycode) {
case '1': BuildAirClick_Airport(w); break;
case '2': BuildAirClick_Demolish(w); break;
case 'l': BuildAirClick_Landscaping(w); break;
default:
return;
}
} break;
case WE_PLACE_OBJ:
_place_proc(e->place.tile);
break;
@@ -96,7 +96,7 @@ static void BuildAirToolbWndProc(Window *w, WindowEvent *e)
break;
case WE_ABORT_PLACE_OBJ:
w->click_state = 0;
UnclickWindowButtons(w);
SetWindowDirty(w);
w = FindWindowById(WC_BUILD_STATION, 0);
if (w != 0)
@@ -106,27 +106,27 @@ static void BuildAirToolbWndProc(Window *w, WindowEvent *e)
}
static const Widget _air_toolbar_widgets[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 129, 0, 13, STR_A000_AIRPORT_CONSTRUCT, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 41, 14, 35, 0x2E8, STR_A01E_BUILD_AIRPORT},
{ WWT_PANEL, 7, 42, 63, 14, 35, 0x2BF, STR_018D_DEMOLISH_BUILDINGS_ETC},
{ WWT_PANEL, 7, 64, 85, 14, 35, 0x2B7, STR_018E_LOWER_A_CORNER_OF_LAND},
{ WWT_PANEL, 7, 86, 107, 14, 35, 0x2B6, STR_018F_RAISE_A_CORNER_OF_LAND},
{ WWT_PANEL, 7, 108, 129, 14, 35, 0x12B7, STR_0329_PURCHASE_LAND_FOR_FUTURE},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 73, 0, 13, STR_A000_AIRPORTS, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_STICKYBOX, RESIZE_NONE, 7, 74, 85, 0, 13, 0x0, STR_STICKY_BUTTON},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 41, 14, 35, 0x2E8, STR_A01E_BUILD_AIRPORT},
{ WWT_PANEL, RESIZE_NONE, 7, 42, 63, 14, 35, 0x2BF, STR_018D_DEMOLISH_BUILDINGS_ETC},
{ WWT_PANEL, RESIZE_NONE, 7, 64, 85, 14, 35, SPR_IMG_LANDSCAPING, STR_LANDSCAPING_TOOLBAR_TIP},
{ WIDGETS_END},
};
static const WindowDesc _air_toolbar_desc = {
510, 22, 130, 36,
640-86, 22, 86, 36,
WC_BUILD_TOOLBAR,0,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
_air_toolbar_widgets,
BuildAirToolbWndProc
};
void ShowBuildAirToolbar()
void ShowBuildAirToolbar(void)
{
if (_current_player == OWNER_SPECTATOR) return;
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
AllocateWindowDescFront(&_air_toolbar_desc, 0);
}
@@ -136,6 +136,7 @@ static void BuildAirportPickerWndProc(Window *w, WindowEvent *e)
switch(e->event) {
case WE_PAINT: {
int sel;
int rad = 4; // default catchment radious
if (WP(w,def_d).close)
return;
@@ -154,29 +155,38 @@ static void BuildAirportPickerWndProc(Window *w, WindowEvent *e)
// select default the coverage area to 'Off' (8)
w->click_state = ((1<<3) << sel) | ((1<<8) << _station_show_coverage);
SetTileSelectSize(_airport_size_x[sel],_airport_size_y[sel]);
if (_station_show_coverage) SetTileSelectBigSize(-4, -4, 8, 8);
if (_patches.modified_catchment) {
switch (sel) {
case AT_OILRIG: rad = CA_AIR_OILPAD; break;
case AT_HELIPORT: rad = CA_AIR_HELIPORT; break;
case AT_SMALL: rad = CA_AIR_SMALL; break;
case AT_LARGE: rad = CA_AIR_LARGE; break;
case AT_METROPOLITAN: rad = CA_AIR_METRO; break;
case AT_INTERNATIONAL: rad = CA_AIR_INTER; break;
}
}
if (_station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
DrawWindowWidgets(w);
// strings such as 'Size' and 'Coverage Area'
DrawStringCentered(74, 16, STR_305B_SIZE, 0);
DrawStringCentered(74, 78, STR_3066_COVERAGE_AREA_HIGHLIGHT, 0);
DrawStationCoverageAreaText(2, 104, (uint)-1);
DrawStationCoverageAreaText(2, 104, (uint)-1, rad);
break;
}
case WE_CLICK: {
switch(e->click.widget) {
case 0:
ResetObjectToPlace();
break;
case 3: case 4: case 5: case 6: case 7:
_selected_airport_type = e->click.widget - 3;
SndPlayFx(0x13);
SndPlayFx(SND_15_BEEP);
SetWindowDirty(w);
break;
case 8: case 9:
_station_show_coverage = e->click.widget - 8;
SndPlayFx(0x13);
SndPlayFx(SND_15_BEEP);
SetWindowDirty(w);
break;
}
@@ -190,20 +200,25 @@ static void BuildAirportPickerWndProc(Window *w, WindowEvent *e)
CheckRedrawStationCoverage(w);
} break;
case WE_DESTROY:
if (!WP(w,def_d).close)
ResetObjectToPlace();
break;
}
}
static const Widget _build_airport_picker_widgets[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 147, 0, 13, STR_3001_AIRPORT_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 147, 14, 130, 0x0, STR_NULL},
{WWT_NODISTXTBTN, 14, 2, 73, 27, 38, STR_3059_SMALL, STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
{WWT_NODISTXTBTN, 14, 74, 145, 27, 38, STR_305A_LARGE, STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
{WWT_NODISTXTBTN, 14, 2, 145, 63, 74, STR_306B_HELIPORT, STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
{WWT_NODISTXTBTN, 14, 2, 145, 39, 50, STR_305AA_LARGE, STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
{WWT_NODISTXTBTN, 14, 2, 145, 51, 62, STR_305AB_LARGE, STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
{ WWT_CLOSEBOX, 14, 14, 73, 88, 98, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE},
{ WWT_CLOSEBOX, 14, 74, 133, 88, 98, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 147, 0, 13, STR_3001_AIRPORT_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 147, 14, 130, 0x0, STR_NULL},
{WWT_NODISTXTBTN, RESIZE_NONE, 14, 2, 73, 27, 38, STR_3059_SMALL, STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
{WWT_NODISTXTBTN, RESIZE_NONE, 14, 74, 145, 27, 38, STR_305A_LARGE, STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
{WWT_NODISTXTBTN, RESIZE_NONE, 14, 2, 145, 63, 74, STR_306B_HELIPORT, STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
{WWT_NODISTXTBTN, RESIZE_NONE, 14, 2, 145, 39, 50, STR_305AA_LARGE, STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
{WWT_NODISTXTBTN, RESIZE_NONE, 14, 2, 145, 51, 62, STR_305AB_LARGE, STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 14, 73, 88, 98, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 74, 133, 88, 98, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA},
{ WIDGETS_END},
};
@@ -215,12 +230,12 @@ static const WindowDesc _build_airport_desc = {
BuildAirportPickerWndProc
};
static void ShowBuildAirportPicker()
static void ShowBuildAirportPicker(void)
{
AllocateWindowDesc(&_build_airport_desc);
}
void InitializeAirportGui()
void InitializeAirportGui(void)
{
_selected_airport_type = AT_SMALL;
_last_built_aircraft_depot_tile = 0;

View File

@@ -4,10 +4,6 @@
#include "stdafx.h"
#include "macros.h"
// don't forget to change the airport_depots too for larger mapsizes. TILE_X_BITS 16
// won't fit in uint16 for example and overflow will occur in the checking code!
// TrueLight -- So make it a TileIndex..
typedef struct AirportMovingData {
int x,y;
byte flag;
@@ -267,7 +263,8 @@ static const AirportMovingData _airport_moving_data_oilrig[9] = {
/////**********Movement Machine on Airports*********************///////
// first element of depots array tells us how many depots there are (to know size of array)
// this may be changed later when airports are moved to external file
static const TileIndex _airport_depots_country[] = {1, TILE_XY(3,0)};
static const TileIndexDiffC _airport_depots_country[] = {{3, 0}};
static const byte _airport_terminal_country[] = {1, 2};
static const AirportFTAbuildup _airport_fta_country[] = {
{ 0,HANGAR,NOTHING_block,1},
{ 1,255,AIRPORT_BUSY_block,0}, {1,HANGAR,0,0}, {1,TERM1,TERM1_block,2}, {1,TERM2,0,4}, {1,HELITAKEOFF,0,19}, {1,0,0,6},
@@ -297,7 +294,8 @@ static const AirportFTAbuildup _airport_fta_country[] = {
{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
};
static const TileIndex _airport_depots_city[] = {1, TILE_XY(5,0)};
static const TileIndexDiffC _airport_depots_city[] = {{5, 0}};
static const byte _airport_terminal_city[] = {1, 3};
static const AirportFTAbuildup _airport_fta_city[] = {
{ 0,HANGAR,NOTHING_block,1}, {0,TAKEOFF,OUT_WAY_block,1}, {0,0,0,1},
{ 1,255,TAXIWAY_BUSY_block,0}, {1,HANGAR,0,0}, {1,TERM2,0,6}, {1,TERM3,0,6}, {1,0,0,7}, // for all else, go to 7
@@ -331,7 +329,8 @@ static const AirportFTAbuildup _airport_fta_city[] = {
{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
};
static const TileIndex _airport_depots_metropolitan[] = {1, TILE_XY(5,0)};
static const TileIndexDiffC _airport_depots_metropolitan[] = {{5, 0}};
static const byte _airport_terminal_metropolitan[] = {1, 3};
static const AirportFTAbuildup _airport_fta_metropolitan[] = {
{ 0,HANGAR,NOTHING_block,1},
{ 1,255,TAXIWAY_BUSY_block,0}, {1,HANGAR,0,0}, {1,TERM2,0,6}, {1,TERM3,0,6}, {1,0,0,7}, // for all else, go to 7
@@ -367,7 +366,9 @@ static const AirportFTAbuildup _airport_fta_metropolitan[] = {
{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
};
static const TileIndex _airport_depots_international[] = {2, TILE_XY(0,3), TILE_XY(6,1)};
static const TileIndexDiffC _airport_depots_international[] = {{0, 3}, {6, 1}};
static const byte _airport_terminal_international[] = {2, 3, 3};
static const byte _airport_helipad_international[] = {1, 2};
static const AirportFTAbuildup _airport_fta_international[] = {
{ 0,HANGAR,NOTHING_block,2}, {0,255,TERM_GROUP1_block,0}, {0,255,TERM_GROUP2_ENTER1_block,1}, {0,HELITAKEOFF,HELIPAD1_block,2}, {0,0,0,2},
{ 1,HANGAR,NOTHING_block,3}, {1,255,HANGAR2_AREA_block,1}, {1,HELITAKEOFF,HELIPAD2_block,3}, {1,0,0,3},
@@ -429,7 +430,8 @@ static const AirportFTAbuildup _airport_fta_international[] = {
{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
};
static const TileIndex _airport_depots_heliport_oilrig[] = {0};
// heliports, oilrigs don't have depots
static const byte _airport_helipad_heliport_oilrig[] = {1, 1};
static const AirportFTAbuildup _airport_fta_heliport_oilrig[] = {
{0,HELIPAD1,HELIPAD1_block,1},
{1,HELITAKEOFF,NOTHING_block,0}, // takeoff
@@ -444,12 +446,22 @@ static const AirportFTAbuildup _airport_fta_heliport_oilrig[] = {
{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
};
static const AirportMovingData * const _airport_moving_datas[6] = {
static const AirportMovingData * const _airport_moving_datas[] = {
_airport_moving_data_country, // Country Airfield (small) 4x3
_airport_moving_data_town, // City Airport (large) 6x6
_airport_moving_data_heliport, // Heliport
_airport_moving_data_metropolitan, // Metropolitain Airport (large) - 2 runways
_airport_moving_data_international, // International Airport (xlarge) - 2 runways
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
_airport_moving_data_oilrig // Oilrig
};

View File

@@ -19,13 +19,15 @@
#include "aystar.h"
// This looks in the Hash if a node exists in ClosedList
// If so, it returns the PathNode, else NULL
PathNode *AyStarMain_ClosedList_IsInList(AyStar *aystar, AyStarNode *node) {
static PathNode *AyStarMain_ClosedList_IsInList(AyStar *aystar, AyStarNode *node)
{
return (PathNode*)Hash_Get(&aystar->ClosedListHash, node->tile, node->direction);
}
// This adds a node to the ClosedList
// It makes a copy of the data
void AyStarMain_ClosedList_Add(AyStar *aystar, PathNode *node) {
static void AyStarMain_ClosedList_Add(AyStar *aystar, PathNode *node)
{
// Add a node to the ClosedList
PathNode *new_node = malloc(sizeof(PathNode));
*new_node = *node;
@@ -34,14 +36,16 @@ void AyStarMain_ClosedList_Add(AyStar *aystar, PathNode *node) {
// Checks if a node is in the OpenList
// If so, it returns the OpenListNode, else NULL
OpenListNode *AyStarMain_OpenList_IsInList(AyStar *aystar, AyStarNode *node) {
static OpenListNode *AyStarMain_OpenList_IsInList(AyStar *aystar, AyStarNode *node)
{
return (OpenListNode*)Hash_Get(&aystar->OpenListHash, node->tile, node->direction);
}
// Gets the best node from OpenList
// returns the best node, or NULL of none is found
// Also it deletes the node from the OpenList
OpenListNode *AyStarMain_OpenList_Pop(AyStar *aystar) {
static OpenListNode *AyStarMain_OpenList_Pop(AyStar *aystar)
{
// Return the item the Queue returns.. the best next OpenList item.
OpenListNode* res = (OpenListNode*)aystar->OpenListQueue.pop(&aystar->OpenListQueue);
if (res != NULL)
@@ -52,7 +56,8 @@ OpenListNode *AyStarMain_OpenList_Pop(AyStar *aystar) {
// Adds a node to the OpenList
// It makes a copy of node, and puts the pointer of parent in the struct
void AyStarMain_OpenList_Add(AyStar *aystar, PathNode *parent, AyStarNode *node, int f, int g, int userdata) {
static void AyStarMain_OpenList_Add(AyStar *aystar, PathNode *parent, AyStarNode *node, int f, int g, int userdata)
{
// Add a new Node to the OpenList
OpenListNode* new_node = malloc(sizeof(OpenListNode));
new_node->g = g;
@@ -101,7 +106,7 @@ int AyStarMain_CheckTile(AyStar *aystar, AyStarNode *current, OpenListNode *pare
// Check if this item is already in the OpenList
if ((check = AyStarMain_OpenList_IsInList(aystar, current)) != NULL) {
int i;
uint i;
// Yes, check if this g value is lower..
if (new_g > check->g) return AYSTAR_DONE;
aystar->OpenListQueue.del(&aystar->OpenListQueue, check, 0);
@@ -215,7 +220,7 @@ void AyStarMain_Clear(AyStar *aystar) {
int AyStarMain_Main(AyStar *aystar) {
int r, i = 0;
// Loop through the OpenList
// Quit if result is no AYSTAR_STILL_BUSY or is more then loops_per_tick
// Quit if result is no AYSTAR_STILL_BUSY or is more than loops_per_tick
while ((r = aystar->loop(aystar)) == AYSTAR_STILL_BUSY && (aystar->loops_per_tick == 0 || ++i < aystar->loops_per_tick)) { }
#ifdef AYSTAR_DEBUG
if (r == AYSTAR_FOUND_END_NODE)
@@ -246,7 +251,8 @@ int AyStarMain_Main(AyStar *aystar) {
*/
void AyStarMain_AddStartNode(AyStar *aystar, AyStarNode *start_node) {
#ifdef AYSTAR_DEBUG
printf("[AyStar] Starting A* Algorithm from node (%d, %d, %d)\n", GET_TILE_X(start_node->tile), GET_TILE_Y(start_node->tile), start_node->direction);
printf("[AyStar] Starting A* Algorithm from node (%d, %d, %d)\n",
TileX(start_node->tile), TileY(start_node->tile), start_node->direction);
#endif
AyStarMain_OpenList_Add(aystar, NULL, start_node, 0, 0, 0);
}

View File

@@ -1,11 +1,13 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "map.h"
#include "window.h"
#include "gui.h"
#include "viewport.h"
#include "gfx.h"
#include "command.h"
#include "sound.h"
static struct BridgeData {
int count;
@@ -22,9 +24,9 @@ extern const PalSpriteID _bridge_sprites[MAX_BRIDGES];
extern const uint16 _bridge_speeds[MAX_BRIDGES];
extern const StringID _bridge_material[MAX_BRIDGES];
static void CcBuildBridge(bool success, uint tile, uint32 p1, uint32 p2)
void CcBuildBridge(bool success, uint tile, uint32 p1, uint32 p2)
{
if (success) { SndPlayTileFx(0x25, tile); }
if (success) SndPlayTileFx(SND_27_BLACKSMITH_ANVIL, tile);
}
static void BuildBridge(Window *w, int i)
@@ -45,9 +47,9 @@ static void BuildBridgeWndProc(Window *w, WindowEvent *e)
for(i=0; i < 4 && i + w->vscroll.pos < _bridge.count; i++) {
int ind = _bridge.indexes[i + w->vscroll.pos];
SET_DPARAM32(2, _bridge.costs[i + w->vscroll.pos]);
SET_DPARAM16(1, (_bridge_speeds[ind] >> 4) * 10);
SET_DPARAM16(0, _bridge_material[ind]);
SetDParam(2, _bridge.costs[i + w->vscroll.pos]);
SetDParam(1, (_bridge_speeds[ind] >> 4) * 10);
SetDParam(0, _bridge_material[ind]);
DrawSprite(_bridge_sprites[ind], 3, 15 + i * 22);
DrawString(44, 15 + i*22 , STR_500D, 0);
@@ -75,10 +77,10 @@ static void BuildBridgeWndProc(Window *w, WindowEvent *e)
}
static const Widget _build_bridge_widgets[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 199, 0, 13, STR_100D_SELECT_RAIL_BRIDGE, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_MATRIX, 7, 0, 188, 14, 101, 0x401, STR_101F_BRIDGE_SELECTION_CLICK},
{ WWT_SCROLLBAR, 7, 189, 199, 14, 101, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 199, 0, 13, STR_100D_SELECT_RAIL_BRIDGE, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_MATRIX, RESIZE_NONE, 7, 0, 187, 14, 101, 0x401, STR_101F_BRIDGE_SELECTION_CLICK},
{ WWT_SCROLLBAR, RESIZE_NONE, 7, 188, 199, 14, 101, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
{ WIDGETS_END},
};
@@ -92,10 +94,10 @@ static const WindowDesc _build_bridge_desc = {
static const Widget _build_road_bridge_widgets[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 199, 0, 13, STR_1803_SELECT_ROAD_BRIDGE, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_MATRIX, 7, 0, 188, 14, 101, 0x401, STR_101F_BRIDGE_SELECTION_CLICK},
{ WWT_SCROLLBAR, 7, 189, 199, 14, 101, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 199, 0, 13, STR_1803_SELECT_ROAD_BRIDGE, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_MATRIX, RESIZE_NONE, 7, 0, 187, 14, 101, 0x401, STR_101F_BRIDGE_SELECTION_CLICK},
{ WWT_SCROLLBAR, RESIZE_NONE, 7, 188, 199, 14, 101, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
{ WIDGETS_END},
};
@@ -159,6 +161,7 @@ void ShowBuildBridgeWindow(uint start, uint end, byte bridge_type)
w->vscroll.cap = 4;
w->vscroll.count = (byte)j;
} else {
ShowErrorMessage(errmsg, STR_5015_CAN_T_BUILD_BRIDGE_HERE, GET_TILE_X(end) * 16, GET_TILE_Y(end) * 16);
ShowErrorMessage(errmsg, STR_5015_CAN_T_BUILD_BRIDGE_HERE,
TileX(end) * 16, TileY(end) * 16);
}
}

74
callback_table.c Normal file
View File

@@ -0,0 +1,74 @@
#include "stdafx.h"
#include "ttd.h"
#include "functions.h"
// If you add a callback for DoCommandP, also add the callback in here
// see below for the full list!
// If you don't do it, it won't work across the network!!
/* aircraft_gui.c */
CommandCallback CcBuildAircraft;
/* airport_gui.c */
CommandCallback CcBuildAirport;
/* bridge_gui.c */
CommandCallback CcBuildBridge;
/* dock_gui.c */
CommandCallback CcBuildDocks;
CommandCallback CcBuildCanal;
/* main_gui.c */
CommandCallback CcPlaySound10;
CommandCallback CcPlaceSign;
CommandCallback CcTerraform;
//CommandCallback CcDemolish;
CommandCallback CcBuildTown;
/* rail_gui.c */
CommandCallback CcPlaySound1E;
CommandCallback CcRailDepot;
CommandCallback CcStation;
CommandCallback CcBuildRailTunnel;
/* road_gui.c */
CommandCallback CcPlaySound1D;
CommandCallback CcBuildRoadTunnel;
CommandCallback CcRoadDepot;
/* roadveh_gui.c */
CommandCallback CcBuildRoadVeh;
/* ship_gui.c */
CommandCallback CcBuildShip;
/* train_gui.c */
CommandCallback CcBuildWagon;
CommandCallback CcBuildLoco;
CommandCallback *_callback_table[] = {
/* 0x00 */ NULL,
/* 0x01 */ CcBuildAircraft,
/* 0x02 */ CcBuildAirport,
/* 0x03 */ CcBuildBridge,
/* 0x04 */ CcBuildCanal,
/* 0x05 */ CcBuildDocks,
/* 0x06 */ CcBuildLoco,
/* 0x07 */ CcBuildRoadVeh,
/* 0x08 */ CcBuildShip,
/* 0x09 */ CcBuildTown,
/* 0x0A */ CcBuildRoadTunnel,
/* 0x0B */ CcBuildRailTunnel,
/* 0x0C */ CcBuildWagon,
/* 0x0D */ CcRoadDepot,
/* 0x0E */ CcRailDepot,
/* 0x0F */ CcPlaceSign,
/* 0x10 */ CcPlaySound10,
/* 0x11 */ CcPlaySound1D,
/* 0x12 */ CcPlaySound1E,
/* 0x13 */ CcStation,
/* 0x14 */ CcTerraform
};
const int _callback_table_count = sizeof (_callback_table) / sizeof (*_callback_table);

7
callback_table.h Normal file
View File

@@ -0,0 +1,7 @@
#ifndef CALLBACK_TABLE_H
#define CALLBACK_TABLE_H
extern CommandCallback *_callback_table[];
extern const int _callback_table_count;
#endif

View File

@@ -1,3 +1,230 @@
0.3.6 (2005-01-24)
------------------------------------------------------------------------
- Feature: resizable windows. All useful windows are already made resizable.
- Feature: highscore chart (accessible from the difficulty window) with top5 companies for a given difficulty (select the difficulty in the menu)
- Feature: endgame score on 1 jan 2051 where you are added to the highscore if sufficiently large points have been accumulated. Game is paused while
- Feature: Visually enhanced autorail placing
When using the autorail tool, the rail pieces which are going to be build are highlighted.
If a piece is shown in red, this indicates that the slope/rail combination is impossible. It does not tell you if
the rail line construction might not be possible because of other obstacles, e.g. houses or water.
- Feature: Autoreplace Vehicles (accessible from the vehicle lists)
This feature works much like autorenew, but it will get you a new engine type instead of a new one of the same type. Once
ordered, it will automatically replace the engines while they visits a depot. The GUI for setting this up have been added on the
vehicle overview windows (Bjarni)
- Feature: A counter to tell how many engines you have of each type to the autoreplace vehicle windows (Bjarni)
- Feature: A display for the total map population to the town display
- Feature: [network] RCon (Remote Connection).
A server can set: 'set rcon_pw <password>' to enable rcon
A client can now do: 'rcon <password> "<command>"'
!!Warning!!: do not give your rcon password to people you do not thrust!
- Feature: hotkeys for dock and airport toolbar (see http://wiki.openttd.org/index.php/Hotkeys)
- Feature: [Network] banning system (mostly tnx to guru3) A server can ban people via ClientList using 'ban', 'unban', 'banlist'.
- Feature: [Network] server can now pause and unpause a game through the console. Use 'pause' and 'unpause'
- Feature: [OS/2] OS/2 support is now finished (Fixes for networking, file selection, keyboard input, plus many other minor issues)
- Feature: [SDL] Show revision number in window title
- Feature: [Unix] Check which gcc version is present and only set available compiler flags
- Feature: [Windows] CTRL+V (Paste) now works on all editboxes. This includes 'Add Server', chat, etc.
- Feature: [Windows] dedicated server is now functioning correctly
- Feature: Addded keyboard shortcuts for the order window
- Feature: Aircraft refit options have been restricted to "sane" values.
- Feature: allows setting the production values of the rawmaterial producing industries in the editor
- Feature: console support for loading maps. Use 'load', 'list_files' and 'goto_dir' to navigate and load games.
- Feature: Display server port in the multiplayer game info window
- Feature: dynamite in landscaping toolbar (hotkey 'D')
- Feature: Improved Network Lobby GUI with a green dot if company income is positive (else red dot) and lock icon if company is password protected
- Feature: Make ottd compile on Zeta
- Feature: MD5 hash check for TTD files (The original TTD files are now checked with a MD5 sum to determine which version of the grf files is used and to warn about possible file corruptions. Thanks to ledow for the original patch)
- Feature: New companies receive a 5-year protection period against buying-up
- Feature: norwegian townnames (Simen Graaten)
- Feature: Order Checking is only execute for ONE vehicle in an order-share system
- Feature: Passengers aircraft now ignore the amount of mail for "full load any" options
- Feature: place multiple accepting industies nearby in the editor mode if the appropriate patches are set
- Feature: population in label of the town (patch setting)
- Feature: scrolling credits list (in alphabetical order)
- Feature: Train window now shows the number of vehicles per row (mpetrov)
- Feature: [ 1039061 ] Swiss town-names (vulvulune)
- Feature: [ 1090950 ] Adding 16:10 resolutions for mainly laptops (doode)
- Feature: [ 1098254 ] (dis)Allow Shares. Add patch options to allow buying/selling of shares (Hackykid)
- Fix: [ 1031451 ] Catchment area shows when buying sign
- Fix: [ 1040119 ] Flood and wagons in depot
- Fix: [ 1050990 ] Buying trains sometimes accounted for incorrectly.
- Fix: [ 1084074 ] Delayed news messages
- Fix: [ 1090495 ] Slopes under high bridges weren't flooded
- Fix: [ 1092473 ] In scenario editor, when trees are placed randomly, they are no longer placed on farmland
- Fix: [ 1092661 ] On create, the scrollbar of the server-list was not updated
- Fix: [ 1092707 ] placing rocks in scenario editor. You can place rocks on trees and vice versa
- Fix: [ 1093200 ] Drive side in new games. Setting the driver side is possible during the game until someone buys road vehicles. In networked games only the server can change it.
- Fix: [ 1093466 ] no more glitches with many maps in the scenario list when creating server
- Fix: [ 1093485 ] Dissappearing rocks in Scenario Editor
- Fix: [ 1094092 ] Toolbars accessible via keyboard in spectator mode
- Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
- Fix: [ 1095143 ] Servers list now also saves the port
- Fix: [ 1098553 ] Crash when all vehicles from a vehicles per station list had been removed
- Fix: [ 1099101 ] starting year patch goes out of range. Clamped year between 1920-2090
- Fix: [ 1099225 ] Bug Fix - Vehicle Lists not updated at Acqusition (thx tamlin and mpetrov)
- Fix: [ 1099451 ] Game crashes after the click on Rename (see also Bug 10992). There was no check for non-selected engine
- Fix: [ 1100736 ] wrong tooltip for place desert button
- Fix: [ 1100767 ] fast forward in main menu
- Fix: [ 1101179 ] Crash if generating land while industry window is open. This also happened for towns and the land information window
- Fix: [ 1101906 ] Configure Patches window text overflow
- Fix: [ 1101963 ] console in dedicated server
- Fix: [ 1102275 ] Game crashed when clicking "new face" or "company color" twice
- Fix: [ 1102776 ], [ 1099535 ] Vehicle lists are now redrawn when a vehicle arrives in a depot. Station-specific vehicle lists are now redrawn daily as well (not only the master list)
- Fix: [ 1103113 ] font size changing. Dedicated server did not have code filtering, 'tab' could result in bigger fonts
- Fix: [ 1103187 ] Order Check messages are now validated before displayed
- Fix: [ 1103301 ] Railroad tracks on slopes weren't flooded
- Fix: [ 1104350 ] Crashed trains do not initiate the lost vehicle message anymore
- Fix: [ 110452 ] On horizontal/vertical tracks you are also charged for building/removing signals on the parallel track on the same tile.
- Fix: [ 1104969 ] Aircraft in hangar messages are now revalidated before display
- Fix: [ 1105112 ] Destroyed train locks crossings
- Fix: [ 1105281 ] upgrade rail fails when train under bridge
- Fix: [ 1105959 ] Trains don't think they're on a slope any more while they drive around in a tunnel
- Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule. (This makes buoys more useable in multiplayer games again, as buoys can't be deleted by other players if they are used.)
- Fix: [ 1106354 ] Graph's keys get confused
- Fix: [ 1106930 ] placing signals with 2x1 drags is treated as placing a single signal
- Fix: [ 1107350 ] console ignoring return character occasionally.
- Fix: [ 1108008 ] Scenario creation bug; engines are of correct year when scenario is saved
- Fix: [ 1092474 ] little red box in scenario editor
- Fix: [ 1099197 ] scrolling through console sometimes crashed the whole game.
- Fix: [ 1099209 ] Catchment area with drag&drop stations
- Fix: [Network] 'kick 1' did crash dedicated servers
- Fix: [Network] A server no longer crashes when a client sends an invalid DoCommand, but drops the client instead.
- Fix: [Network] Added packet protection. No longer a client or server
- Fix: [Network] Bug in bind system. Advertising failed on systems with more then 1 ip, and server_bind active to one of them.
- Fix: [Network] Disabled 'money-cheat' (read: bug which could give people a lot of money)
- Fix: [SDL] now the binary never links to SDL if DEDICATED is set.
- Fix: [Windows] somehow mousewheel was disabled on windows using SDL; reenabled again
- Fix: a modified client could try to replace a vehicle to an invalid engine ID and crash the server.
- Fix: autoreplace vehicle lists are now redrawn when a new vehicle becomes available
- Fix: Buy Vehicle GUI now shows HPs bigger than 32000 correctly
- Fix: Console alias, load_game functionality and load fix
- Fix: correct error message for when trying to build a railroad station over a bus/truck/etc-station.
- Fix: Correct landscaping buttons in monorail and maglev toolbars
- Fix: dedicated server also writes to log file if active
- Fix: Desert-landscape does no longer crash
- Fix: Expand town is a bit more agressive
- Fix: finally zooming in/out always works.
- Fix: fixed chat-bug (that from a certain moment, nobody could talk)
- Fix: fixed weight for double-head trains and with that the acceleration (now maglev lvl4 can reach their top speed, and are faster than lvl3)
- Fix: Full-Loading trains no longer get "lost" after a while (Hackykid)
- Fix: Graphs were not updated correctly when one graph with a certain selection was already open and another graph window was opened
- Fix: in multiplayer clientlist can only be opened once
- Fix: Loan does not count against the company value
- Fix: nasty bug where one could build one station OVER the other
- Fix: No crash when creating a game with New English town names any more
- Fix: now helicopters will use a hangar in schedule to be replaced in, even if they are only set to service there. Since helicopters are serviced at helipads, they will only go there if they needs to be replaced or renewed. They will also use a hangar in an airport in the schedule if needed. (Bjarni)
- Fix: only a server can rename a town in a MP game
- Fix: really old maps do load again (Darkvater / TrueLight)
- Fix: Refit engine button is now disabled when cargo capacity equals zero
- Fix: server issue where some company names were wrong
- Fix: Ship Vehicle Lists are now redrawn correctly
- Fix: signal stays red if a track is removed (Darkvater / Tron / TrueLight)
- Fix: solve AI related order-problem
- Fix: starting openttd with -g <invalid_name> now acts normal
- Fix: The cost for an autorenew was not always send to the right player ;)
- Fix: Autorenewing multiheaded train engines now costs the correct amount. Used to be twice the correct price
- Fix: the scrollbar in the network gui (server list) now updates when scrolling (HackyKid)
- Fix: Train crashes should no longer desync the game.
- Fix: When deleting an order, the next pointer was not cleared, resulting in some unusual behavoir from time to time
- Fix: You can now also delete automatically found servers by pressing "del"
- Fix: You should no longer be able to delete bridges on any type of underground when there is a vehicle on it
- Fix: your loan is now substracted from your company value
- Add: A brand new set of icons.
- Change: AutoRenew is now a client-side patch instead of a game-side patch
- Change: Removed the 'close ALL windows' from the toolbar since shift+del does this.
- Language: Updated all languages
- Fix: Many more things....
0.3.5 (2004-12-24)
------------------------------------------------------------------------
- Feature: [Network] New network, very stable, a lot of new features
- Feature: [Network] Ingame Serverlist (with online game-servers to join)
- Feature: [Network] Webbased Serverlist: http://servers.openttd.org/
- Feature: [Network] Added dedicated server support
- Feature: [Network] Cheat protection in MultiPlayer
- Feature: [Network] Patch settings are also synced with the server
- Feature: [Network] Chat
- Feature: Custom currency settings
- Feature: Per-station vehicle lists
- Feature: More realistically sized catchment areas
- Feature: Sticky windows
- Feature: Even better support for newgrf-files
- Feature: Implement improved vehicle loading algorithm
- Feature: Even more advanced console
- Feature: Game compiles under BEOS_SERVER
- Feature: Game compiles under OS/2 (no network-support)
- Feature: OpenTTD runs with the grf files of the DOS version
- Feature: [Big Endian computers, which are mac and MorphOS]: are able to load savegames by TTD(Patch)
- Feature: Many more new things...
- Add: 'l' openes the landscaping toolbar globally
- Add: Make the town sometimes build streets on slopes
- Add: Manpage
- Add: New checkpoint grahpics
- Add: SHIFT+DEL now deletes all non-vital windows (only status bar and main bar remain)
- Add: Windows now shows revision, release information in title bar
- Add: Windows snap at each other
- Change: [OSX build] Moved data and lang folders inside OpenTTD. This got rid of the package system too, making installing/updating easier
- Fix: [OSX build] Music is now on by default again
- Fix: [OSX build] Made error opens the console
- Fix: [SDL] Added a confirmation dialog when quitting the game
- Fix: A train can leave and enter the same depot at the same time, then the trai simply got stuck
- Fix: Crash when making png screenshot with odd resolution (Tron)
- Fix: Directories in *nix are now sorted alphabetically in ascending order (Tron).
- Fix: Do not consider a road station as street when growing the town
- Fix: Engines from other climates do not appear any more when never_expire_vehicles is enabled
- Fix: Game options (like drive side) are not taken from the scenario when using 'new game' command
- Fix: Order checker now correctly detects station with invalid facilities
- Fix: Polished GUI in a lot of ways
- Fix: Saving or loading a map doesnt pauses the game anymore
- Fix: Some bridge part isn't displayed transparent in transparent mode
- Fix: Starting with -r option allows all resolutions (Tron)
- Fix: The pathfinder no longer sees rail with an other owner as a possible route.
- Fix: Unable to select other screenshot format in Game Option
- Fix: Unwanted town renaming
- Fix: Vehicles slow down under bridge if the track is on a foundation
- Fix: You can no longer change name of waypoints whom are owned by somebody else
- Fix: [ 1090313 ] Shares are now also sold when a company goes bankrupt
- Fix: [ 1087701 ] It is no longer possible to crash trains of other companies by building a depot close to a station. (even more: trains do no longer enter tiles that do not belong to his owner)
- Fix: [ 1087403 ] Crashed trains aren't reported to have too few orders any more
- Fix: [ 1086375 ] Backup-order-list was not closed with an OT_NOTHING,
- Fix: [ 1085255 ] Docks now have a button to display the catchment area
- Fix: [ 1070274 ] Invisible trains. Weird macros and MSVC optimizing don't always mix. (Tron)
- Fix: [ 1068269 ] Number of passangers and mail in exclusive test offer window is swapped
- Fix: [ 1066504 ] Pause key pauses the game
- Fix: [ 1066121 ] Resetting file name after deleting a file (dannys9)
- Fix: [ 1066114 ] Code error in win32.c Thanks Shai
- Fix: [ 1065247 ] Windows can be placed behind toolbar
- Fix: [ 1064742 ] Editor Map-Menu wrong String
- Fix: [ 1058809 ] Always report a bus/lorry station as unpassable
- Fix: [ 1053397 ] Refit train window stays open
- Fix: [ 1050993 ] Incorrect Tooltip in Road Vehicle List.
- Fix: [ 1048596 ] Monorail and Maglev sounds are swapped
- Fix: [ 1040119 ] Flooded wagons in depots don't keep constantly exploding any more
- Fix: [ 1035303 ] Bug about lowering tracks built on slopes
- Fix: [ 1035066 ] 'Allow goto depot' turned off, no checkpoints in orders
- Fix: [ 1034318 ] Place sign and blue message box
- Fix: [ 1033947 ] Wrong mapping between music titles and songs
- Fix: [ 1030393 ] Some screensizes crashes OTTD. Fix in general bug that only allows resolutions which were multiple of 8 in width and height. Also use closest possible resolution in fullscreen if window size is not a valid resolution (Tron)
- Fix: [ 1030275 ] 'Service at' orders ignored after 2090. After 2090 year is reset to 1. Jan 2090, so most of the time, last service was in the future and no service ensured.
- Fix: [ 1029064 ] Building a station acted weird in some rare situations
- Fix: [ 1022227 ] Ships could unload cargo at stations without docks
- Fix: [ 999669 ] Wrong trees (toyland's) in sub-tropical landscape style
- Fix: [ 993500 ] High bridge rendering error
- Fix: [ 991101 ] Disabled buttons flicker no more
- Fix: [ 985925 ] Start/stop flag in train depots always works, regardless of the horizontal scroll position
- Fix: [ 985439 ] Un-owned rail. Trains could cross competitor's tracks if there was a road-crossing over it.
- Fix: [ 982611 ] Pathfinding bug; train likes the roundabout. If train needs servicing it will now look 16 tiles along the track instead of 12 tiles manhattan style (blathijs)
- Fix: [ 967096 ] Fullscreen. New button 'Fullscreen' in 'Game Options' menu which lets you set fullscreen ingame.
- Fix: [ 958098 ] No longer road/rail crossing signals hang when a train is reversed at the wrong moment (Yeah, our longest open bug finally fixed :) :) :))
- Fix: [ 926105 ] Ctrl + d bug. Longest outstanding bug has been fixed \o/ 2004-03-30 (Tron)
- Language: Added Spanish
- Language: Added Catalan
- Language: Added Icelandic
- Language: Updated most languages
- Fix: Many more things....
0.3.4 (2004-09-14)
------------------------------------------------------------------------
- Add: Dutch translation

View File

@@ -1,5 +1,7 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "map.h"
#include "viewport.h"
#include "command.h"
@@ -28,7 +30,7 @@ static int TerraformAllowTileProcess(TerraformerState *ts, TileIndex tile)
TileIndex *t;
int count;
if ((GET_TILE_X(tile) == TILE_X_MAX) || (GET_TILE_Y(tile) == TILE_Y_MAX))
if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY())
return -1;
t = ts->tile_table;
@@ -50,7 +52,7 @@ static int TerraformGetHeightOfTile(TerraformerState *ts, TileIndex tile)
return mod->height;
}
return _map_type_and_height[tile] & 0xF;
return TileHeight(tile);
}
static void TerraformAddDirtyTile(TerraformerState *ts, TileIndex tile)
@@ -84,19 +86,23 @@ static int TerraformProc(TerraformerState *ts, uint tile, int mode)
int r;
int32 ret;
assert(tile < TILES_X * TILES_Y);
assert(tile < MapSize());
if ((r=TerraformAllowTileProcess(ts, tile)) <= 0)
return r;
if ((_map_type_and_height[tile] >> 4) == MP_RAILWAY) {
if (IsTileType(tile, MP_RAILWAY)) {
static const byte _railway_modes[4] = {8, 0x10, 4, 0x20};
static const byte _railway_dangslopes[4] = {0xd, 0xe, 7, 0xb};
static const byte _railway_dangslopes2[4] = {0x2, 0x1, 0x8, 0x4};
// Nothing could be built at the steep slope - this avoids a bug
// when you have a single diagonal track in one corner on a
// basement and then you raise the other corner.
if ((GetTileSlope(tile, NULL)&0xF) == _railway_dangslopes[mode]) {
// basement and then you raise/lower the other corner.
int tileh = GetTileSlope(tile, NULL) & 0xF;
if (tileh == _railway_dangslopes[mode] ||
tileh == _railway_dangslopes2[mode]) {
_terraform_err_tile = tile;
_error_message = STR_1008_MUST_REMOVE_RAILROAD_TRACK;
return -1;
}
@@ -129,7 +135,7 @@ static bool TerraformTileHeight(TerraformerState *ts, uint tile, int height)
TerraformerHeightMod *mod;
int count;
assert(tile < TILES_X * TILES_Y);
assert(tile < MapSize());
if (height < 0) {
_error_message = STR_1003_ALREADY_AT_SEA_LEVEL;
@@ -180,12 +186,17 @@ static bool TerraformTileHeight(TerraformerState *ts, uint tile, int height)
{
int direction = ts->direction, r;
const TileIndexDiff *ttm;
const TileIndexDiffC *ttm;
static const TileIndexDiff _terraform_tilepos[5] = {TILE_XY(1,0), TILE_XY(-2,0), TILE_XY(1,1), TILE_XY(0,-2), 0 };
static const TileIndexDiffC _terraform_tilepos[] = {
{ 1, 0},
{-2, 0},
{ 1, 1},
{ 0, -2}
};
for(ttm = _terraform_tilepos; *ttm != 0; ttm++) {
tile += *ttm;
for(ttm = _terraform_tilepos; ttm != endof(_terraform_tilepos); ttm++) {
tile += ToTileIndexDiff(*ttm);
r = TerraformGetHeightOfTile(ts, tile);
if (r != height && r-direction != height && r+direction != height) {
@@ -228,25 +239,25 @@ int32 CmdTerraformLand(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (p1 & 1) {
if (!TerraformTileHeight(&ts, tile+TILE_XY(1,0),
(_map_type_and_height[tile+TILE_XY(1,0)]&0xF) + direction))
TileHeight(tile + TILE_XY(1, 0)) + direction))
return CMD_ERROR;
}
if (p1 & 2) {
if (!TerraformTileHeight(&ts, tile+TILE_XY(1,1),
(_map_type_and_height[tile+TILE_XY(1,1)]&0xF) + direction))
TileHeight(tile + TILE_XY(1, 1)) + direction))
return CMD_ERROR;
}
if (p1 & 4) {
if (!TerraformTileHeight(&ts, tile+TILE_XY(0,1),
(_map_type_and_height[tile+TILE_XY(0,1)]&0xF) + direction))
TileHeight(tile + TILE_XY(0, 1)) + direction))
return CMD_ERROR;
}
if (p1 & 8) {
if (!TerraformTileHeight(&ts, tile+TILE_XY(0,0),
(_map_type_and_height[tile+TILE_XY(0,0)]&0xF) + direction))
TileHeight(tile + TILE_XY(0, 0)) + direction))
return CMD_ERROR;
}
@@ -292,9 +303,7 @@ int32 CmdTerraformLand(int x, int y, uint32 flags, uint32 p1, uint32 p2)
for(count = ts.modheight_count; count != 0; count--, mod++) {
til = mod->tile;
// Change tile height
_map_type_and_height[til] = (_map_type_and_height[til]&~0x0F)|mod->height;
SetTileHeight(til, mod->height);
TerraformAddDirtyTileAround(&ts, til);
}
}
@@ -324,14 +333,16 @@ int32 CmdLevelLand(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
uint tile;
int32 ret, cost, money;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
// remember level height
h = _map_type_and_height[p1]&0xF;
h = TileHeight(p1);
ex >>= 4; ey >>= 4;
// make sure sx,sy are smaller than ex,ey
sx = GET_TILE_X(p1);
sy = GET_TILE_Y(p1);
sx = TileX(p1);
sy = TileY(p1);
if (ex < sx) intswap(ex, sx);
if (ey < sy) intswap(ey, sy);
tile = TILE_XY(sx,sy);
@@ -343,7 +354,7 @@ int32 CmdLevelLand(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
cost = 0;
BEGIN_TILE_LOOP(tile2, size_x, size_y, tile)
curh = _map_type_and_height[tile2]&0xF;
curh = TileHeight(tile2);
while (curh != h) {
ret = DoCommandByTile(tile2, 8, (curh > h)?0:1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND);
if (ret == CMD_ERROR) break;
@@ -382,7 +393,7 @@ int32 CmdPurchaseLandArea(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (!EnsureNoVehicle(tile))
return CMD_ERROR;
if (IS_TILETYPE(tile, MP_UNMOVABLE) &&
if (IsTileType(tile, MP_UNMOVABLE) &&
_map5[tile] == 3 &&
_map_owner[tile] == _current_player)
return_cmd_error(STR_5807_YOU_ALREADY_OWN_IT);
@@ -402,7 +413,8 @@ int32 CmdPurchaseLandArea(int x, int y, uint32 flags, uint32 p1, uint32 p2)
}
int32 ClearTile_Clear(uint tile, byte flags) {
static int32 ClearTile_Clear(uint tile, byte flags)
{
static const int32 * _clear_price_table[] = {
NULL,
&_price.clear_1, &_price.clear_1,&_price.clear_1,
@@ -512,14 +524,17 @@ static void DrawTile_Clear(TileInfo *ti)
DrawClearLandFence(ti, _map3_hi[ti->tile] >> 2);
}
uint GetSlopeZ_Clear(TileInfo *ti) { return GetPartialZ(ti->x&0xF, ti->y&0xF, ti->tileh) + ti->z; }
static uint GetSlopeZ_Clear(TileInfo *ti)
{
return GetPartialZ(ti->x & 0xF, ti->y & 0xF, ti->tileh) + ti->z;
}
uint GetSlopeTileh_Clear(TileInfo *ti)
static uint GetSlopeTileh_Clear(TileInfo *ti)
{
return ti->tileh;
}
static void GetAcceptedCargo_Clear(uint tile, AcceptedCargo *ac)
static void GetAcceptedCargo_Clear(uint tile, AcceptedCargo ac)
{
/* unused */
}
@@ -536,16 +551,16 @@ void TileLoopClearHelper(uint tile)
uint dirty = -1;
img_1 = 0;
if (IS_TILETYPE(tile, MP_CLEAR)) {
if (IsTileType(tile, MP_CLEAR)) {
img_1 = img_by_map5[(_map5[tile] & 0x1C) >> 2];
} else if (IS_TILETYPE(tile, MP_TREES) && (_map2[tile] & 0x30) == 0x20) {
} else if (IsTileType(tile, MP_TREES) && (_map2[tile] & 0x30) == 0x20) {
img_1 = 1;
}
img_2 = 0;
if (IS_TILETYPE(TILE_ADDXY(tile, 1, 0), MP_CLEAR)) {
if (IsTileType(TILE_ADDXY(tile, 1, 0), MP_CLEAR)) {
img_2 = img_by_map5[(_map5[TILE_ADDXY(tile, 1, 0)] & 0x1C) >> 2];
} else if (IS_TILETYPE(TILE_ADDXY(tile, 1, 0), MP_TREES) && (_map2[TILE_ADDXY(tile, 1, 0)] & 0x30) == 0x20) {
} else if (IsTileType(TILE_ADDXY(tile, 1, 0), MP_TREES) && (_map2[TILE_ADDXY(tile, 1, 0)] & 0x30) == 0x20) {
img_2 = 1;
}
@@ -562,9 +577,9 @@ void TileLoopClearHelper(uint tile)
}
img_2 = 0;
if (IS_TILETYPE(TILE_ADDXY(tile, 0, 1), MP_CLEAR)) {
if (IsTileType(TILE_ADDXY(tile, 0, 1), MP_CLEAR)) {
img_2 = img_by_map5[(_map5[TILE_ADDXY(tile, 0, 1)] & 0x1C) >> 2];
} else if (IS_TILETYPE(TILE_ADDXY(tile, 0, 1), MP_TREES) && (_map2[TILE_ADDXY(tile, 0, 1)] & 0x30) == 0x20) {
} else if (IsTileType(TILE_ADDXY(tile, 0, 1), MP_TREES) && (_map2[TILE_ADDXY(tile, 0, 1)] & 0x30) == 0x20) {
img_2 = 1;
}
@@ -580,7 +595,7 @@ void TileLoopClearHelper(uint tile)
}
}
if (dirty != -1)
if (dirty != (uint) -1)
MarkTileDirtyByTile(dirty);
}
@@ -718,7 +733,7 @@ static void TileLoop_Clear(uint tile)
MarkTileDirtyByTile(tile);
}
void GenerateClearTile()
void GenerateClearTile(void)
{
int i,j;
uint tile,tile_new;
@@ -728,7 +743,7 @@ void GenerateClearTile()
i = (Random() & 0x3FF) | 0x400;
do {
tile = TILE_MASK(Random());
if (IS_TILETYPE(tile, MP_CLEAR))
if (IsTileType(tile, MP_CLEAR))
_map5[tile] = (byte)((_map5[tile] & ~(3<<2)) | (1<<2));
} while (--i);
@@ -737,14 +752,14 @@ void GenerateClearTile()
do {
r = Random();
tile = TILE_MASK(r);
if (IS_TILETYPE(tile, MP_CLEAR)) {
if (IsTileType(tile, MP_CLEAR)) {
j = ((r >> 16) & 0xF) + 5;
for(;;) {
_map5[tile] = (byte)((_map5[tile] & ~(3<<2)) | (2<<2));
do {
if (--j == 0) goto get_out;
tile_new = tile + _tileoffs_by_dir[Random() & 3];
} while (!IS_TILETYPE(tile_new, MP_CLEAR));
tile_new = tile + TileOffsByDir(Random() & 3);
} while (!IsTileType(tile_new, MP_CLEAR));
tile = tile_new;
}
get_out:;
@@ -757,7 +772,7 @@ static void ClickTile_Clear(uint tile)
/* not used */
}
uint32 GetTileTrackStatus_Clear(uint tile, TransportType mode)
static uint32 GetTileTrackStatus_Clear(uint tile, TransportType mode)
{
return 0;
}
@@ -790,7 +805,8 @@ static void ChangeTileOwner_Clear(uint tile, byte old_player, byte new_player)
return;
}
void InitializeClearLand() {
void InitializeClearLand(void)
{
_opt.snow_line = _patches.snow_line_height * 8;
}

103
command.c
View File

@@ -1,8 +1,11 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "map.h"
#include "gui.h"
#include "command.h"
#include "player.h"
#include "network.h"
#define DEF_COMMAND(yyyy) int32 yyyy(int x, int y, uint32 flags, uint32 p1, uint32 p2)
@@ -30,9 +33,9 @@ DEF_COMMAND(CmdSellLandArea);
DEF_COMMAND(CmdBuildTunnel);
DEF_COMMAND(CmdBuildTrainDepot);
DEF_COMMAND(CmdBuildTrainCheckpoint);
DEF_COMMAND(CmdRenameCheckpoint);
DEF_COMMAND(CmdRemoveTrainCheckpoint);
DEF_COMMAND(CmdBuildTrainWaypoint);
DEF_COMMAND(CmdRenameWaypoint);
DEF_COMMAND(CmdRemoveTrainWaypoint);
DEF_COMMAND(CmdBuildTruckStation);
@@ -127,6 +130,7 @@ DEF_COMMAND(CmdSetRoadDriveSide);
DEF_COMMAND(CmdSetTownNameType);
DEF_COMMAND(CmdChangeDifficultyLevel);
DEF_COMMAND(CmdChangePatchSetting);
DEF_COMMAND(CmdStartStopShip);
DEF_COMMAND(CmdSellShip);
@@ -148,6 +152,7 @@ DEF_COMMAND(CmdCloneOrder);
DEF_COMMAND(CmdClearArea);
DEF_COMMAND(CmdGiveMoney);
DEF_COMMAND(CmdMoneyCheat);
DEF_COMMAND(CmdBuildCanal);
DEF_COMMAND(CmdBuildLock);
@@ -162,6 +167,8 @@ DEF_COMMAND(CmdStartScenario);
DEF_COMMAND(CmdBuildManySignals);
DEF_COMMAND(CmdReplaceVehicle);
/* The master command table */
static CommandProc * const _command_proc_table[] = {
CmdBuildRailroadTrack, /* 0 */
@@ -180,9 +187,9 @@ static CommandProc * const _command_proc_table[] = {
CmdBuildTunnel, /* 13 */
CmdRemoveFromRailroadStation, /* 14 */
CmdConvertRail, /* 15 */
CmdBuildTrainCheckpoint, /* 16 */
CmdRenameCheckpoint, /* 17 */
CmdRemoveTrainCheckpoint, /* 18 */
CmdBuildTrainWaypoint, /* 16 */
CmdRenameWaypoint, /* 17 */
CmdRemoveTrainWaypoint, /* 18 */
CmdBuildTruckStation, /* 19 */
NULL, /* 20 */
CmdBuildBusStation, /* 21 */
@@ -300,11 +307,25 @@ static CommandProc * const _command_proc_table[] = {
CmdBuildManySignals, /* 110 */
//CmdDestroyIndustry, /* 109 */
CmdDestroyCompanyHQ, /* 111 */
CmdGiveMoney, /* 112 */
CmdChangePatchSetting, /* 113 */
CmdReplaceVehicle, /* 114 */
};
/* This function range-checks a cmd, and checks if the cmd is not NULL */
bool IsValidCommand(uint cmd)
{
cmd = cmd & 0xFF;
if (cmd >= lengthof(_command_proc_table) || _command_proc_table[cmd] == NULL)
return false;
return true;
}
int32 DoCommandByTile(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
{
return DoCommand(GET_TILE_X(tile)*16, GET_TILE_Y(tile)*16, p1, p2, flags, procc);
return DoCommand(TileX(tile) * 16, TileY(tile) * 16, p1, p2, flags, procc);
}
@@ -346,8 +367,8 @@ int32 DoCommand(int x, int y, uint32 p1, uint32 p2, uint32 flags, uint procc)
}
}
// execute the command here.
_yearly_expenses_type = 0;
/* Execute the command here. All cost-relevant functions set the expenses type
* themselves with "SET_EXPENSES_TYPE(...);" at the beginning of the function */
res = proc(x, y, flags, p1, p2);
if ((uint32)res >> 16 == 0x8000) {
if (res & 0xFFFF) _error_message = res & 0xFFFF;
@@ -364,7 +385,7 @@ error:
return res;
}
int32 GetAvailableMoneyForCommand()
int32 GetAvailableMoneyForCommand(void)
{
uint pid = _current_player;
if (pid >= MAX_PLAYERS) return 0x7FFFFFFF; // max int
@@ -380,20 +401,11 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
uint32 flags;
bool notest;
int x = GET_TILE_X(tile)*16;
int y = GET_TILE_Y(tile)*16;
int x = TileX(tile) * 16;
int y = TileY(tile) * 16;
assert(_docommand_recursive == 0);
if (_networking && !(cmd & CMD_NET_INSTANT) && _pause) {
// When the game is paused, and we are in a network game
// we do not allow any commands. This is because
// of some technical reasons
ShowErrorMessage(-1, STR_MULTIPLAYER_PAUSED, x, y);
_docommand_recursive = 0;
return true;
}
_error_message = INVALID_STRING_ID;
_error_message_2 = cmd >> 16;
_additional_cash_required = 0;
@@ -412,19 +424,25 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
assert((cmd & 0xFF) < lengthof(_command_proc_table));
proc = _command_proc_table[cmd & 0xFF];
// this command is a notest command?
// Some commands have a different output in dryrun than the realrun
// e.g.: if you demolish a whole town, the dryrun would say okay.
// but by really destroying, your rating drops and at a certain point
// it will fail. so res and res2 are different
// CMD_REMOVE_ROAD: This command has special local authority
// restrictions which may cause the test run to fail (the previous
// road fragments still stay there and the town won't let you
// disconnect the road system), but the exec will succeed and this
// fact will trigger an assertion failure. --pasky
notest =
(cmd & 0xFF) == CMD_CLEAR_AREA ||
(cmd & 0xFF) == CMD_CONVERT_RAIL ||
(cmd & 0xFF) == CMD_LEVEL_LAND ||
(cmd & 0xFF) == CMD_TRAIN_GOTO_DEPOT;
if (_networking && (cmd & CMD_ASYNC)) notest = true;
(cmd & 0xFF) == CMD_REMOVE_ROAD;
_docommand_recursive = 1;
// cost estimation only?
if (_shift_pressed && _current_player == _local_player && !(cmd & CMD_DONT_NETWORK)) {
if (_shift_pressed && _current_player == _local_player && !(cmd & (CMD_NETWORK_COMMAND | CMD_SHOW_NO_ERROR))) {
// estimate the cost.
res = proc(x, y, flags, p1, p2);
if ((uint32)res >> 16 == 0x8000) {
@@ -439,39 +457,38 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
}
// unless the command is a notest command, check if it can be executed.
if (!notest) {
if (!((cmd & CMD_NO_TEST_IF_IN_NETWORK) && _networking)) {
// first test if the command can be executed.
res = proc(x,y, flags, p1, p2);
if ((uint32)res >> 16 == 0x8000) {
if (res & 0xFFFF) _error_message = res & 0xFFFF;
goto show_error;
}
// no money?
if (res != 0 && !CheckPlayerHasMoney(res)) goto show_error;
// no money? Only check if notest is off
if (!notest && res != 0 && !CheckPlayerHasMoney(res)) goto show_error;
}
// put the command in a network queue and execute it later?
if (_networking && !(cmd & CMD_DONT_NETWORK)) {
if (!(cmd & CMD_NET_INSTANT)) {
NetworkSendCommand(tile, p1, p2, cmd, callback);
#ifdef ENABLE_NETWORK
// If we are in network, and the command is not from the network
// send it to the command-queue and abort execution
if (_networking && !(cmd & CMD_NETWORK_COMMAND)) {
NetworkSend_Command(tile, p1, p2, cmd, callback);
_docommand_recursive = 0;
return true;
} else {
// Instant Command ... Relay and Process then
NetworkSendCommand(tile, p1, p2, cmd, callback);
}
}
#endif /* ENABLE_NETWORK */
// update last build coordinate of player.
if ( tile != 0 && _current_player < MAX_PLAYERS) DEREF_PLAYER(_current_player)->last_build_coordinate = tile;
// actually try and execute the command.
_yearly_expenses_type = 0;
/* Actually try and execute the command. If no cost-type is given
* use the construction one */
_yearly_expenses_type = EXPENSES_CONSTRUCTION;
res2 = proc(x,y, flags|DC_EXEC, p1, p2);
if (!notest) {
// If notest is on, it means the result of the test can be different than
// the real command.. so ignore the test
if (!notest && !((cmd & CMD_NO_TEST_IF_IN_NETWORK) && _networking)) {
assert(res == res2); // sanity check
} else {
if ((uint32)res2 >> 16 == 0x8000) {
@@ -486,7 +503,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
if (res2 != 0)
ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2);
if (_additional_cash_required) {
SET_DPARAM32(0, _additional_cash_required);
SetDParam(0, _additional_cash_required);
ShowErrorMessage(STR_0003_NOT_ENOUGH_CASH_REQUIRES, _error_message_2, x,y);
if (res2 == 0) goto callb_err;
}

View File

@@ -20,9 +20,9 @@ enum {
CMD_REMOVE_FROM_RAILROAD_STATION = 14,
CMD_CONVERT_RAIL = 15,
CMD_BUILD_TRAIN_CHECKPOINT = 16,
CMD_RENAME_CHECKPOINT = 17,
CMD_REMOVE_TRAIN_CHECKPOINT = 18,
CMD_BUILD_TRAIN_WAYPOINT = 16,
CMD_RENAME_WAYPOINT = 17,
CMD_REMOVE_TRAIN_WAYPOINT = 18,
CMD_BUILD_TRUCK_STATION = 19,
CMD_BUILD_BUS_STATION = 21,
@@ -146,6 +146,10 @@ enum {
//CMD_DESTROY_INDUSTRY = 109,
CMD_DESTROY_COMPANY_HQ = 111,
CMD_GIVE_MONEY = 112,
CMD_CHANGE_PATCH_SETTING = 113,
CMD_REPLACE_VEHICLE = 114,
};
enum {
@@ -166,9 +170,9 @@ enum {
enum {
CMD_AUTO = 0x200,
CMD_NO_WATER = 0x400,
CMD_DONT_NETWORK = 0x800, // execute the command without sending it on the network
CMD_ASYNC = 0x1000, // execute the command asynchronously without testing first in networking
CMD_NET_INSTANT = 0x2000,
CMD_NETWORK_COMMAND = 0x800, // execute the command without sending it on the network
CMD_NO_TEST_IF_IN_NETWORK = 0x1000, // When enabled, the command will bypass the no-DC_EXEC round if in network
CMD_SHOW_NO_ERROR = 0x2000,
};
//#define return_cmd_error(errcode) do { _error_message=(errcode); return CMD_ERROR; } while(0)
@@ -178,6 +182,7 @@ enum {
int32 DoCommand(int x, int y, uint32 p1, uint32 p2, uint32 flags, uint procc);
int32 DoCommandByTile(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
int32 GetAvailableMoneyForCommand();
bool IsValidCommand(uint cmd);
int32 GetAvailableMoneyForCommand(void);
#endif /* COMMAND_H */

24
configure vendored
View File

@@ -1,24 +0,0 @@
#!/bin/sh -
SDLCONFIG=`which sdl-config || which sdl11-config || which sdl12-config || echo `
if [ -n "$SDLCONFIG" ] ; then
echo "SDL config is located at: $SDLCONFIG"
sed -e"s@XX_SDL_CONFIG_PLACEHOLDER_XX@$SDLCONFIG@g" < Jamfile.next > tmp && mv tmp Jamfile
else
echo "********************************"
echo "ERROR! SDL CONFIG WAS NOT FOUND!"
echo "********************************"
exit 1
fi
echo "Configure complete. Now use 'jam' to build"
echo "Add -sWITH_PNG=<dir to png.h> to build with PNG support"
echo "Add -sWITH_ZLIB=1 to enable zlib savegame support"
echo "Add -sRELEASE=1 to build an optimized executable"
echo "Add -sWITH_BONE_NETWORKING=1 to build with BeOS BONE networking support"
echo "Add -sBEOS_MIDI=1 to enable BeOS native MIDI (libmidi.so) music output"
echo ""
echo "For people using make:"
echo "write make (or gmake)"
echo "configure have nothing to do with the makefile"

1374
console.c

File diff suppressed because it is too large Load Diff

146
console.h
View File

@@ -1,19 +1,13 @@
#ifndef CONSOLE_H
#define CONSOLE_H
// ** console ** //
enum {
ICONSOLE_OPENED=0,
ICONSOLE_CLOSED,
} _iconsole_modes;
// ** console parser ** //
enum {
ICONSOLE_VAR_NONE=0,
typedef enum _iconsole_var_types {
ICONSOLE_VAR_NONE,
ICONSOLE_VAR_BOOLEAN,
ICONSOLE_VAR_BYTE,
ICONSOLE_VAR_UINT8,
ICONSOLE_VAR_UINT16,
ICONSOLE_VAR_UINT32,
ICONSOLE_VAR_INT16,
@@ -21,47 +15,83 @@ enum {
ICONSOLE_VAR_STRING,
ICONSOLE_VAR_POINTER,
ICONSOLE_VAR_REFERENCE,
ICONSOLE_VAR_UNKNOWN,
ICONSOLE_VAR_UNKNOWN
} _iconsole_var_types;
enum {
typedef enum {
ICONSOLE_FULL,
ICONSOLE_OPENED,
ICONSOLE_CLOSED
} _iconsole_modes;
typedef enum _iconsole_hook_types {
ICONSOLE_HOOK_ACCESS,
ICONSOLE_HOOK_BEFORE_CHANGE,
ICONSOLE_HOOK_BEFORE_EXEC,
ICONSOLE_HOOK_AFTER_CHANGE,
ICONSOLE_HOOK_AFTER_EXEC,
ICONSOLE_HOOK_AFTER_EXEC
} _iconsole_hook_types;
typedef struct {
// -------------- //
struct _iconsole_var;
typedef bool (*iconsole_var_hook)(struct _iconsole_var* hook_var);
typedef struct _iconsole_var {
// --------------- //
union {
void* addr;
byte * name;
bool* bool_;
byte* byte_;
uint16* uint16_;
uint32* uint32_;
int16* int16_;
int32* int32_;
char* string_;
struct _iconsole_var* reference_;
} data;
char* name;
_iconsole_var_types type;
// -------------- //
void * hook_access;
void * hook_before_exec;
void * hook_after_exec;
iconsole_var_hook hook_access;
iconsole_var_hook hook_before_change;
iconsole_var_hook hook_after_change;
// -------------- //
struct _iconsole_var* _next;
bool _malloc;
} _iconsole_var;
struct _iconsole_cmd;
typedef bool (*iconsole_cmd_hook)(struct _iconsole_cmd* hook_cmd);
typedef _iconsole_var* (*_iconsole_cmd_addr)(byte argc, char* argv[], byte argt[]);
typedef struct _iconsole_cmd {
// -------------- //
_iconsole_cmd_addr addr;
char* name;
// -------------- //
iconsole_cmd_hook hook_access;
iconsole_cmd_hook hook_before_exec;
iconsole_cmd_hook hook_after_exec;
// -------------- //
void* _next;
} _iconsole_cmd;
typedef struct {
// --------------- //
void * addr;
const byte * name;
byte type;
// -------------- //
void * hook_access;
void * hook_before_change;
void * hook_after_change;
void IConsoleAliasRegister(const char* name, const char* cmdline);
typedef struct _iconsole_alias {
// -------------- //
char * cmdline;
char* name;
void* _next;
bool _malloc;
} _iconsole_var;
} _iconsole_alias;
_iconsole_alias* IConsoleAliasGet(const char* name);
// ** console parser ** //
_iconsole_cmd* _iconsole_cmds; // list of registred commands
_iconsole_var* _iconsole_vars; // list of registred vars
_iconsole_alias* _iconsole_aliases; // list of registred aliases
// ** console colors ** //
VARDEF byte _iconsole_color_default;
@@ -69,6 +99,7 @@ VARDEF byte _iconsole_color_error;
VARDEF byte _iconsole_color_warning;
VARDEF byte _iconsole_color_debug;
VARDEF byte _iconsole_color_commands;
VARDEF _iconsole_modes _iconsole_mode;
// ** ttd.c functions ** //
@@ -76,54 +107,53 @@ void SetDebugString(const char *s);
// ** console functions ** //
void IConsoleClearCommand();
void IConsoleInit();
void IConsoleClear();
void IConsoleFree();
void IConsoleResize();
void IConsoleSwitch();
void IConsoleClose();
void IConsoleOpen();
void IConsoleInit(void);
void IConsoleClear(void);
void IConsoleFree(void);
void IConsoleResize(void);
void IConsoleSwitch(void);
void IConsoleClose(void);
void IConsoleOpen(void);
// ** console cmd buffer ** //
void IConsoleCmdBufferAdd(const byte *cmd);
void IConsoleCmdBufferAdd(const char* cmd);
void IConsoleCmdBufferNavigate(signed char direction);
// ** console output ** //
void IConsolePrint(byte color_code, const byte* string);
void CDECL IConsolePrintF(byte color_code, const char *s, ...);
void IConsoleDebug(byte* string);
void IConsoleError(const byte* string);
void IConsoleWarning(const byte* string);
void IConsolePrint(uint16 color_code, const char* string);
void CDECL IConsolePrintF(uint16 color_code, const char* s, ...);
void IConsoleDebug(const char* string);
void IConsoleError(const char* string);
void IConsoleWarning(const char* string);
// *** Commands *** //
void IConsoleCmdRegister(const byte * name, void * addr);
_iconsole_cmd * IConsoleCmdGet(const byte * name);
void IConsoleCmdRegister(const char* name, _iconsole_cmd_addr addr);
_iconsole_cmd* IConsoleCmdGet(const char* name);
// *** Variables *** //
void IConsoleVarRegister(const byte * name, void * addr, byte type);
void IConsoleVarMemRegister(const byte * name, byte type);
void IConsoleVarInsert(_iconsole_var * var, const byte * name);
_iconsole_var * IConsoleVarGet(const byte * name);
_iconsole_var * IConsoleVarAlloc(byte type);
void IConsoleVarRegister(const char* name, void* addr, _iconsole_var_types type);
void IConsoleVarMemRegister(const char* name, _iconsole_var_types type);
void IConsoleVarInsert(_iconsole_var* item_new, const char* name);
_iconsole_var* IConsoleVarGet(const char* name);
_iconsole_var* IConsoleVarAlloc(_iconsole_var_types type);
void IConsoleVarFree(_iconsole_var* var);
void IConsoleVarSetString(_iconsole_var * var, const byte * string);
void IConsoleVarSetString(_iconsole_var* var, const char* string);
void IConsoleVarSetValue(_iconsole_var* var, int value);
void IConsoleVarDump(_iconsole_var * var, const byte * dump_desc);
void IConsoleVarDump(const _iconsole_var* var, const char* dump_desc);
// *** Parser *** //
void IConsoleCmdExec(const byte* cmdstr);
void IConsoleCmdExec(const char* cmdstr);
// ** console std lib ** //
void IConsoleStdLibRegister();
void IConsoleStdLibRegister(void);
// ** hook code ** //
void IConsoleVarHook(const byte * name, byte type, void * proc);
void IConsoleCmdHook(const byte * name, byte type, void * proc);
bool IConsoleVarHookHandle(_iconsole_var * hook_var, byte type);
bool IConsoleCmdHookHandle(_iconsole_cmd * hook_cmd, byte type);
void IConsoleVarHook(const char* name, _iconsole_hook_types type, iconsole_var_hook proc);
void IConsoleCmdHook(const char* name, _iconsole_hook_types type, iconsole_cmd_hook proc);
bool IConsoleVarHookHandle(_iconsole_var* hook_var, _iconsole_hook_types type);
bool IConsoleCmdHookHandle(_iconsole_cmd* hook_cmd, _iconsole_hook_types type);
#endif /* CONSOLE_H */

File diff suppressed because it is too large Load Diff

BIN
data/autorail.grf Normal file

Binary file not shown.

Binary file not shown.

328
dedicated.c Normal file
View File

@@ -0,0 +1,328 @@
#include "stdafx.h"
#include "ttd.h"
#include "network.h"
#include "hal.h"
#ifdef ENABLE_NETWORK
#include "gfx.h"
#include "window.h"
#include "command.h"
#include "console.h"
#ifdef WIN32
# include <windows.h> /* GetTickCount */
# include <conio.h>
#endif
#ifdef __OS2__
# include <sys/time.h> /* gettimeofday */
# include <sys/types.h>
# include <unistd.h>
# include <conio.h>
# define STDIN 0 /* file descriptor for standard input */
extern void OS2_SwitchToConsoleMode();
#endif
#ifdef UNIX
# include <sys/time.h> /* gettimeofday */
# include <sys/types.h>
# include <unistd.h>
# include <signal.h>
# define STDIN 0 /* file descriptor for standard input */
#endif
#ifdef __MORPHOS__
/* voids the fork, option will be disabled for morphos build anyway, because MorphOS
* doesn't support forking (could only implemented with lots of code changes here).
*/
int morphos_dummy_fork() { return -1; }
#define fork morphos_dummy_fork
#endif
// This file handles all dedicated-server in- and outputs
static void *_dedicated_video_mem;
#ifdef UNIX
/* We want to fork our dedicated server */
void DedicatedFork(void)
{
/* Fork the program */
_dedicated_pid = fork();
switch (_dedicated_pid) {
case -1:
perror("Unable to fork");
exit(1);
case 0:
// We're the child
/* Open the log-file to log all stuff too */
_log_file_fd = fopen(_log_file, "a");
if (!_log_file_fd) {
perror("Unable to open logfile");
exit(1);
}
/* Redirect stdout and stderr to log-file */
if (dup2(fileno(_log_file_fd), fileno(stdout)) == -1) {
perror("Re-routing stdout");
exit(1);
}
if (dup2(fileno(_log_file_fd), fileno(stderr)) == -1) {
perror("Re-routing stderr");
exit(1);
}
break;
default:
// We're the parent
printf("Loading dedicated server...\n");
printf(" - Forked to background with pid %d\n", _dedicated_pid);
exit(0);
}
}
/* Signal handlers */
static void DedicatedSignalHandler(int sig)
{
_exit_game = true;
signal(sig, DedicatedSignalHandler);
}
#endif
#ifdef WIN32
#include <time.h>
HANDLE hEvent;
static HANDLE hThread; // Thread to close
static char _win_console_thread_buffer[200];
/* Windows Console thread. Just loop and signal when input has been received */
void WINAPI CheckForConsoleInput(void)
{
while (true) {
fgets(_win_console_thread_buffer, lengthof(_win_console_thread_buffer), stdin);
SetEvent(hEvent); // signal input waiting that the line is ready
}
}
void CreateWindowsConsoleThread(void)
{
static char tbuffer[9];
/* Create event to signal when console input is ready */
hEvent = CreateEvent(NULL, false, false, _strtime(tbuffer));
if (hEvent == NULL)
error("Cannot create console event!");
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CheckForConsoleInput, 0, 0, NULL);
if (hThread == NULL)
error("Cannot create console thread!");
DEBUG(misc, 0) ("Windows console thread started...");
}
void CloseWindowsConsoleThread(void)
{
CloseHandle(hThread);
CloseHandle(hEvent);
DEBUG(misc, 0) ("Windows console thread shut down...");
}
#endif
static const char *DedicatedVideoStart(char **parm) {
_screen.width = _screen.pitch = _cur_resolution[0];
_screen.height = _cur_resolution[1];
_dedicated_video_mem = malloc(_cur_resolution[0]*_cur_resolution[1]);
_debug_net_level = 6;
_debug_misc_level = 0;
#ifdef WIN32
// For win32 we need to allocate an console (debug mode does the same)
CreateConsole();
CreateWindowsConsoleThread();
SetConsoleTitle("OpenTTD Dedicated Server");
#endif
#ifdef __OS2__
// For OS/2 we also need to switch to console mode instead of PM mode
OS2_SwitchToConsoleMode();
#endif
DEBUG(misc,0)("Loading dedicated server...");
return NULL;
}
static void DedicatedVideoStop(void)
{
#ifdef WIN32
CloseWindowsConsoleThread();
#endif
free(_dedicated_video_mem);
}
static void DedicatedVideoMakeDirty(int left, int top, int width, int height) {}
static bool DedicatedVideoChangeRes(int w, int h) { return false; }
#if defined(UNIX) || defined(__OS2__)
static bool InputWaiting(void)
{
struct timeval tv;
fd_set readfds;
byte ret;
tv.tv_sec = 0;
tv.tv_usec = 1;
FD_ZERO(&readfds);
FD_SET(STDIN, &readfds);
/* don't care about writefds and exceptfds: */
ret = select(STDIN + 1, &readfds, NULL, NULL, &tv);
if (ret > 0)
return true;
return false;
}
#else
static bool InputWaiting(void)
{
if (WaitForSingleObject(hEvent, 1) == WAIT_OBJECT_0)
return true;
return false;
}
#endif
static void DedicatedHandleKeyInput(void)
{
static char input_line[200] = "";
if (!InputWaiting())
return;
if (_exit_game)
return;
#if defined(UNIX) || defined(__OS2__)
fgets(input_line, lengthof(input_line), stdin);
#else
strncpy(input_line, _win_console_thread_buffer, lengthof(input_line));
#endif
/* XXX - strtok() does not 'forget' \n\r if it is the first character! */
strtok(input_line, "\r\n"); // Forget about the final \n (or \r)
{ /* Remove any special control characters */
uint i;
for (i = 0; i < lengthof(input_line); i++) {
if (input_line[i] == '\n' || input_line[i] == '\r') // cut missed beginning '\0'
input_line[i] = '\0';
if (input_line[i] == '\0')
break;
if (!IS_INT_INSIDE(input_line[i], ' ', 256))
input_line[i] = ' ';
}
}
IConsoleCmdExec(input_line); // execute command
}
static int DedicatedVideoMainLoop(void)
{
#ifndef WIN32
struct timeval tim;
#endif
uint32 next_tick;
uint32 cur_ticks;
#ifdef WIN32
next_tick = GetTickCount() + 30;
#else
gettimeofday(&tim, NULL);
next_tick = (tim.tv_usec / 1000) + 30 + (tim.tv_sec * 1000);
#endif
/* Signal handlers */
#ifdef UNIX
signal(SIGTERM, DedicatedSignalHandler);
signal(SIGINT, DedicatedSignalHandler);
signal(SIGQUIT, DedicatedSignalHandler);
#endif
// Load the dedicated server stuff
_is_network_server = true;
_network_dedicated = true;
_switch_mode = SM_NONE;
_network_playas = OWNER_SPECTATOR;
_local_player = OWNER_SPECTATOR;
DoCommandP(0, Random(), InteractiveRandom(), NULL, CMD_GEN_RANDOM_NEW_GAME);
// Done loading, start game!
if (!_networking) {
DEBUG(net, 1)("Dedicated server could not be launced. Aborting..");
return ML_QUIT;
}
while (true) {
InteractiveRandom(); // randomness
if (_exit_game) return ML_QUIT;
if (!_dedicated_forks)
DedicatedHandleKeyInput();
#ifdef WIN32
cur_ticks = GetTickCount();
#else
gettimeofday(&tim, NULL);
cur_ticks = (tim.tv_usec / 1000) + (tim.tv_sec * 1000);
#endif
if (cur_ticks >= next_tick) {
next_tick += 30;
GameLoop();
_screen.dst_ptr = _dedicated_video_mem;
UpdateWindows();
}
CSleep(1);
}
return ML_QUIT;
}
const HalVideoDriver _dedicated_video_driver = {
DedicatedVideoStart,
DedicatedVideoStop,
DedicatedVideoMakeDirty,
DedicatedVideoMainLoop,
DedicatedVideoChangeRes,
};
#else
static void *_dedicated_video_mem;
static const char *DedicatedVideoStart(char **parm) {
DEBUG(misc,0)("OpenTTD compiled without network-support, quiting...");
return NULL;
}
void DedicatedFork(void) {}
static void DedicatedVideoStop(void) { free(_dedicated_video_mem); }
static void DedicatedVideoMakeDirty(int left, int top, int width, int height) {}
static bool DedicatedVideoChangeRes(int w, int h) { return false; }
static int DedicatedVideoMainLoop(void) { return ML_QUIT; }
const HalVideoDriver _dedicated_video_driver = {
DedicatedVideoStart,
DedicatedVideoStop,
DedicatedVideoMakeDirty,
DedicatedVideoMainLoop,
DedicatedVideoChangeRes,
};
#endif /* ENABLE_NETWORK */

View File

@@ -1,5 +1,7 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "map.h"
#include "vehicle.h"
#include "command.h"
#include "news.h"
@@ -9,26 +11,33 @@
#include "industry.h"
#include "player.h"
#include "airport_movement.h"
#include "sound.h"
static void DisasterClearSquare(uint tile)
static void DisasterClearSquare(TileIndex tile)
{
int type;
if (!EnsureNoVehicle(tile))
return;
type = _map_type_and_height[tile] >> 4;
switch (TileType(tile)) {
case MP_RAILWAY:
if (IS_HUMAN_PLAYER(_map_owner[tile])) DoClearSquare(tile);
break;
if (type == MP_RAILWAY) {
if (IS_HUMAN_PLAYER(_map_owner[tile]))
DoClearSquare(tile);
} else if (type == MP_HOUSE) {
case MP_HOUSE: {
byte p = _current_player;
_current_player = OWNER_NONE;
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
_current_player = p;
} else if (type == MP_TREES || type == MP_CLEAR) {
break;
}
case MP_TREES:
case MP_CLEAR:
DoClearSquare(tile);
break;
default:
break;
}
}
@@ -77,7 +86,9 @@ static void InitializeDisasterVehicle(Vehicle *v, int x, int y, byte z, byte dir
v->owner = OWNER_NONE;
v->vehstatus = VS_UNCLICKABLE;
v->u.disaster.image_override = 0;
v->next_order = 0;
v->current_order.type = OT_NOTHING;
v->current_order.flags = 0;
v->current_order.station = 0;
DisasterVehicleUpdateImage(v);
VehiclePositionChanged(v);
@@ -139,7 +150,7 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
++v->tick_counter;
if (v->next_order < 2) {
if (v->current_order.station < 2) {
if (v->tick_counter&1)
return;
@@ -147,48 +158,48 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
SetDisasterVehiclePos(v, gp.x, gp.y, v->z_pos);
if (v->next_order == 1) {
if (v->current_order.station == 1) {
if (++v->age == 38) {
v->next_order = 2;
v->current_order.station = 2;
v->age = 0;
}
if ((v->tick_counter&7)==0) {
CreateEffectVehicleRel(v, 0, -17, 2, EV_SMOKE_3);
}
} else if (v->next_order == 0) {
} else if (v->current_order.station == 0) {
tile = v->tile; /**/
if (IS_TILETYPE(tile, MP_STATION) &&
if (IsTileType(tile, MP_STATION) &&
IS_BYTE_INSIDE(_map5[tile], 8, 0x43) &&
IS_HUMAN_PLAYER(_map_owner[tile])) {
v->next_order = 1;
v->current_order.station = 1;
v->age = 0;
SET_DPARAM16(0, _map2[tile]);
SetDParam(0, _map2[tile]);
AddNewsItem(STR_B000_ZEPPELIN_DISASTER_AT,
NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ACCIDENT, 0),
v->index,
0);
}
}
if (v->y_pos >= (TILES_Y+9) * 16 - 1)
if (v->y_pos >= ((int)MapSizeY() + 9) * 16 - 1)
DeleteDisasterVeh(v);
return;
}
if (v->next_order > 2) {
if (v->current_order.station > 2) {
if (++v->age <= 13320)
return;
tile = v->tile; /**/
if (IS_TILETYPE(tile, MP_STATION) &&
if (IsTileType(tile, MP_STATION) &&
IS_BYTE_INSIDE(_map5[tile], 8, 0x43) &&
IS_HUMAN_PLAYER(_map_owner[tile])) {
st = DEREF_STATION(_map2[tile]);
st = GetStation(_map2[tile]);
CLRBITS(st->airport_flags, RUNWAY_IN_block);
}
@@ -206,7 +217,7 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
if (++v->age == 1) {
CreateEffectVehicleRel(v, 0, 7, 8, EV_CRASHED_SMOKE);
SndPlayVehicleFx(0x10, v);
SndPlayVehicleFx(SND_12_EXPLOSION, v);
v->u.disaster.image_override = 0xF42;
} else if (v->age == 70) {
v->u.disaster.image_override = 0xF43;
@@ -221,16 +232,16 @@ static void DisasterTick_Zeppeliner(Vehicle *v)
EV_DEMOLISH);
}
} else if (v->age == 350) {
v->next_order = 3;
v->current_order.station = 3;
v->age = 0;
}
tile = v->tile;/**/
if (IS_TILETYPE(tile, MP_STATION) &&
if (IsTileType(tile, MP_STATION) &&
IS_BYTE_INSIDE(_map5[tile], 8, 0x43) &&
IS_HUMAN_PLAYER(_map_owner[tile])) {
st = DEREF_STATION(_map2[tile]);
st = GetStation(_map2[tile]);
SETBITS(st->airport_flags, RUNWAY_IN_block);
}
}
@@ -246,10 +257,10 @@ static void DisasterTick_UFO(Vehicle *v)
v->u.disaster.image_override = (++v->tick_counter & 8) ? 0xF45 : 0xF44;
if (v->next_order == 0) {
if (v->current_order.station == 0) {
// fly around randomly
int x = GET_TILE_X(v->dest_tile)*16;
int y = GET_TILE_Y(v->dest_tile)*16;
int x = TileX(v->dest_tile) * 16;
int y = TileY(v->dest_tile) * 16;
if (abs(x - v->x_pos) + abs(y - v->y_pos) >= 16) {
v->direction = GetDirectionTowards(v, x, y);
GetNewVehiclePos(v, &gp);
@@ -260,7 +271,7 @@ static void DisasterTick_UFO(Vehicle *v)
v->dest_tile = TILE_MASK(Random());
return;
}
v->next_order = 1;
v->current_order.station = 1;
FOR_ALL_VEHICLES(u) {
if (u->type == VEH_Road && IS_HUMAN_PLAYER(u->owner)) {
@@ -273,7 +284,7 @@ static void DisasterTick_UFO(Vehicle *v)
DeleteDisasterVeh(v);
} else {
// target a vehicle
u = &_vehicles[v->dest_tile];
u = GetVehicle(v->dest_tile);
if (u->type != VEH_Road) {
DeleteDisasterVeh(v);
return;
@@ -309,7 +320,7 @@ static void DisasterTick_UFO(Vehicle *v)
// destroy?
if (v->age > 50) {
CreateEffectVehicleRel(v, 0, 7, 8, EV_CRASHED_SMOKE);
SndPlayVehicleFx(0x10, v);
SndPlayVehicleFx(SND_12_EXPLOSION, v);
DeleteDisasterVeh(v);
}
}
@@ -318,10 +329,9 @@ static void DisasterTick_UFO(Vehicle *v)
static void DestructIndustry(Industry *i)
{
uint tile;
byte index = i - _industries;
for(tile=0; tile != TILES_X*TILES_Y; tile++) {
if (IS_TILETYPE(tile, MP_INDUSTRY) && _map2[tile] == index) {
for(tile=0; tile != MapSize(); tile++) {
if (IsTileType(tile, MP_INDUSTRY) && _map2[tile] == i->index) {
_map_owner[tile] = 0;
MarkTileDirtyByTile(tile);
}
@@ -334,7 +344,8 @@ static void DisasterTick_2(Vehicle *v)
GetNewVehiclePosResult gp;
v->tick_counter++;
v->u.disaster.image_override = (v->next_order == 1 && v->tick_counter&4) ? 0xF4F : 0;
v->u.disaster.image_override =
(v->current_order.station == 1 && v->tick_counter&4) ? 0xF4F : 0;
GetNewVehiclePos(v, &gp);
SetDisasterVehiclePos(v, gp.x, gp.y, v->z_pos);
@@ -344,11 +355,11 @@ static void DisasterTick_2(Vehicle *v)
return;
}
if (v->next_order == 2) {
if (v->current_order.station == 2) {
if (!(v->tick_counter&3)) {
Industry *i = DEREF_INDUSTRY(v->dest_tile);
int x = GET_TILE_X(i->xy)*16;
int y = GET_TILE_Y(i->xy)*16;
Industry *i = GetIndustry(v->dest_tile);
int x = TileX(i->xy) * 16;
int y = TileY(i->xy) * 16;
uint32 r = Random();
CreateEffectVehicleAbove(
@@ -358,23 +369,23 @@ static void DisasterTick_2(Vehicle *v)
EV_DEMOLISH);
if (++v->age >= 55)
v->next_order = 3;
v->current_order.station = 3;
}
} else if (v->next_order == 1) {
} else if (v->current_order.station == 1) {
if (++v->age == 112) {
Industry *i;
v->next_order = 2;
v->current_order.station = 2;
v->age = 0;
i = DEREF_INDUSTRY(v->dest_tile);
i = GetIndustry(v->dest_tile);
DestructIndustry(i);
SET_DPARAM16(0, i->town->index);
SetDParam(0, i->town->index);
AddNewsItem(STR_B002_OIL_REFINERY_EXPLOSION, NEWS_FLAGS(NM_THIN,NF_VIEWPORT|NF_TILE,NT_ACCIDENT,0), i->xy, 0);
SndPlayTileFx(0x10, i->xy);
SndPlayTileFx(SND_12_EXPLOSION, i->xy);
}
} else if (v->next_order == 0) {
} else if (v->current_order.station == 0) {
int x,y;
uint tile;
int ind;
@@ -382,17 +393,17 @@ static void DisasterTick_2(Vehicle *v)
x = v->x_pos - 15*16;
y = v->y_pos;
if ( (uint)x > (TILES_X-1) * 16-1)
if ( (uint)x > MapMaxX() * 16-1)
return;
tile = TILE_FROM_XY(x,y);
if (!IS_TILETYPE(tile, MP_INDUSTRY))
if (!IsTileType(tile, MP_INDUSTRY))
return;
v->dest_tile = ind = _map2[tile];
if (DEREF_INDUSTRY(ind)->type == IT_OIL_REFINERY) {
v->next_order = 1;
if (GetIndustry(ind)->type == IT_OIL_REFINERY) {
v->current_order.station = 1;
v->age = 0;
}
}
@@ -404,21 +415,22 @@ static void DisasterTick_3(Vehicle *v)
GetNewVehiclePosResult gp;
v->tick_counter++;
v->u.disaster.image_override = (v->next_order == 1 && v->tick_counter&4) ? 0xF53 : 0;
v->u.disaster.image_override =
(v->current_order.station == 1 && v->tick_counter&4) ? 0xF53 : 0;
GetNewVehiclePos(v, &gp);
SetDisasterVehiclePos(v, gp.x, gp.y, v->z_pos);
if (gp.x > TILES_X * 16 + 9*16 - 1) {
if (gp.x > (int)MapSizeX() * 16 + 9*16 - 1) {
DeleteDisasterVeh(v);
return;
}
if (v->next_order == 2) {
if (v->current_order.station == 2) {
if (!(v->tick_counter&3)) {
Industry *i = DEREF_INDUSTRY(v->dest_tile);
int x = GET_TILE_X(i->xy)*16;
int y = GET_TILE_Y(i->xy)*16;
Industry *i = GetIndustry(v->dest_tile);
int x = TileX(i->xy) * 16;
int y = TileY(i->xy) * 16;
uint32 r = Random();
CreateEffectVehicleAbove(
@@ -428,23 +440,23 @@ static void DisasterTick_3(Vehicle *v)
EV_DEMOLISH);
if (++v->age >= 55)
v->next_order = 3;
v->current_order.station = 3;
}
} else if (v->next_order == 1) {
} else if (v->current_order.station == 1) {
if (++v->age == 112) {
Industry *i;
v->next_order = 2;
v->current_order.station = 2;
v->age = 0;
i = DEREF_INDUSTRY(v->dest_tile);
i = GetIndustry(v->dest_tile);
DestructIndustry(i);
SET_DPARAM16(0, i->town->index);
SetDParam(0, i->town->index);
AddNewsItem(STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS, NEWS_FLAGS(NM_THIN,NF_VIEWPORT|NF_TILE,NT_ACCIDENT,0), i->xy, 0);
SndPlayTileFx(0x10, i->xy);
SndPlayTileFx(SND_12_EXPLOSION, i->xy);
}
} else if (v->next_order == 0) {
} else if (v->current_order.station == 0) {
int x,y;
uint tile;
int ind;
@@ -452,17 +464,17 @@ static void DisasterTick_3(Vehicle *v)
x = v->x_pos - 15*16;
y = v->y_pos;
if ( (uint)x > (TILES_X-1) * 16-1)
if ( (uint)x > MapMaxX() * 16-1)
return;
tile = TILE_FROM_XY(x,y);
if (!IS_TILETYPE(tile, MP_INDUSTRY))
if (!IsTileType(tile, MP_INDUSTRY))
return;
v->dest_tile = ind = _map2[tile];
if (DEREF_INDUSTRY(ind)->type == IT_FACTORY) {
v->next_order = 1;
if (GetIndustry(ind)->type == IT_FACTORY) {
v->current_order.station = 1;
v->age = 0;
}
}
@@ -494,9 +506,9 @@ static void DisasterTick_4(Vehicle *v)
v->tick_counter++;
if (v->next_order == 1) {
int x = GET_TILE_X(v->dest_tile)*16 + 8;
int y = GET_TILE_Y(v->dest_tile)*16 + 8;
if (v->current_order.station == 1) {
int x = TileX(v->dest_tile) * 16 + 8;
int y = TileY(v->dest_tile) * 16 + 8;
if (abs(v->x_pos - x) + abs(v->y_pos - y) >= 8) {
v->direction = GetDirectionTowards(v, x, y);
@@ -511,7 +523,7 @@ static void DisasterTick_4(Vehicle *v)
return;
}
v->next_order = 2;
v->current_order.station = 2;
FOR_ALL_VEHICLES(u) {
if (u->type == VEH_Train || u->type == VEH_Road) {
@@ -523,7 +535,7 @@ static void DisasterTick_4(Vehicle *v)
}
t = ClosestTownFromTile(v->dest_tile, (uint)-1);
SET_DPARAM16(0, t->index);
SetDParam(0, t->index);
AddNewsItem(STR_B004_UFO_LANDS_NEAR,
NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_ACCIDENT, 0),
v->tile,
@@ -545,10 +557,10 @@ static void DisasterTick_4(Vehicle *v)
u->next = w;
InitializeDisasterVehicle(w, -6*16, v->y_pos, 0, 5, 12);
w->vehstatus |= VS_DISASTER;
} else if (v->next_order < 1) {
} else if (v->current_order.station < 1) {
int x = GET_TILE_X(v->dest_tile)*16;
int y = GET_TILE_Y(v->dest_tile)*16;
int x = TileX(v->dest_tile) * 16;
int y = TileY(v->dest_tile) * 16;
if (abs(x - v->x_pos) + abs(y - v->y_pos) >= 16) {
v->direction = GetDirectionTowards(v, x, y);
GetNewVehiclePos(v, &gp);
@@ -560,11 +572,11 @@ static void DisasterTick_4(Vehicle *v)
v->dest_tile = TILE_MASK(Random());
return;
}
v->next_order = 1;
v->current_order.station = 1;
tile_org = tile = TILE_MASK(Random());
do {
if (IS_TILETYPE(tile, MP_RAILWAY) &&
if (IsTileType(tile, MP_RAILWAY) &&
(_map5[tile]&~3)!=0xC0 && IS_HUMAN_PLAYER(_map_owner[tile]))
break;
tile = TILE_MASK(tile+1);
@@ -587,19 +599,19 @@ static void DisasterTick_4b(Vehicle *v)
GetNewVehiclePos(v, &gp);
SetDisasterVehiclePos(v, gp.x, gp.y, v->z_pos);
if (gp.x > TILES_X * 16 + 9*16 - 1) {
if (gp.x > (int)MapSizeX() * 16 + 9*16 - 1) {
DeleteDisasterVeh(v);
return;
}
if (v->next_order == 0) {
u = &_vehicles[v->u.disaster.unk2];
if (v->current_order.station == 0) {
u = GetVehicle(v->u.disaster.unk2);
if (abs(v->x_pos - u->x_pos) > 16)
return;
v->next_order = 1;
v->current_order.station = 1;
CreateEffectVehicleRel(u, 0, 7, 8, EV_CRASHED_SMOKE);
SndPlayVehicleFx(0x10, u);
SndPlayVehicleFx(SND_12_EXPLOSION, u);
DeleteDisasterVeh(u);
@@ -639,7 +651,7 @@ static void DisasterTick_5_and_6(Vehicle *v)
if (!(v->tick_counter&1))
return;
tile = v->tile + _tileoffs_by_dir[v->direction >> 1];
tile = v->tile + TileOffsByDir(v->direction >> 1);
if (IsValidTile(tile) &&
(r=GetTileTrackStatus(tile,TRANSPORT_WATER),(byte)(r+(r >> 8)) == 0x3F) &&
!CHANCE16(1,90)) {
@@ -682,10 +694,10 @@ void OnNewDay_DisasterVehicle(Vehicle *v)
// not used
}
typedef void DisasterInitProc();
typedef void DisasterInitProc(void);
// Zeppeliner which crashes on a small airport
static void Disaster0_Init()
static void Disaster0_Init(void)
{
Vehicle *v = ForceAllocateSpecialVehicle(), *u;
Station *st;
@@ -694,16 +706,15 @@ static void Disaster0_Init()
if (v == NULL)
return;
for(st=_stations;;) {
/* Pick a random place, unless we find
a small airport */
x = TileX(Random()) * 16 + 8;
FOR_ALL_STATIONS(st) {
if (st->xy && st->airport_tile != 0 &&
st->airport_type <= 1 &&
IS_HUMAN_PLAYER(st->owner)) {
x = (GET_TILE_X(st->xy) + 2) * 16;
break;
}
if (++st == endof(_stations)) {
x = (GET_TILE_X(Random())) * 16 + 8;
x = (TileX(st->xy) + 2) * 16;
break;
}
}
@@ -719,7 +730,7 @@ static void Disaster0_Init()
}
}
static void Disaster1_Init()
static void Disaster1_Init(void)
{
Vehicle *v = ForceAllocateSpecialVehicle(), *u;
int x;
@@ -727,10 +738,10 @@ static void Disaster1_Init()
if (v == NULL)
return;
x = (GET_TILE_X(Random())) * 16 + 8;
x = TileX(Random()) * 16 + 8;
InitializeDisasterVehicle(v, x, 0, 135, 3, 2);
v->dest_tile = TILE_XY(TILES_X/2,TILES_Y/2);
v->dest_tile = TILE_XY(MapSizeX() / 2, MapSizeY() / 2);
v->age = 0;
// Allocate shadow too?
@@ -742,13 +753,15 @@ static void Disaster1_Init()
}
}
static void Disaster2_Init()
static void Disaster2_Init(void)
{
Industry *i, *found;
Vehicle *v,*u;
int x,y;
for(found=NULL,i=_industries; i != endof(_industries); i++) {
found = NULL;
FOR_ALL_INDUSTRIES(i) {
if (i->xy != 0 &&
i->type == IT_OIL_REFINERY &&
(found==NULL || CHANCE16(1,2))) {
@@ -763,8 +776,8 @@ static void Disaster2_Init()
if (v == NULL)
return;
x = (TILES_X+9) * 16 - 1;
y = GET_TILE_Y(found->xy)*16 + 37;
x = (MapSizeX() + 9) * 16 - 1;
y = TileY(found->xy) * 16 + 37;
InitializeDisasterVehicle(v,x,y, 135,1,4);
@@ -776,13 +789,15 @@ static void Disaster2_Init()
}
}
static void Disaster3_Init()
static void Disaster3_Init(void)
{
Industry *i, *found;
Vehicle *v,*u,*w;
int x,y;
for(found=NULL,i=_industries; i != endof(_industries); i++) {
found = NULL;
FOR_ALL_INDUSTRIES(i) {
if (i->xy != 0 &&
i->type == IT_FACTORY &&
(found==NULL || CHANCE16(1,2))) {
@@ -798,7 +813,7 @@ static void Disaster3_Init()
return;
x = -16 * 16;
y = GET_TILE_Y(found->xy)*16 + 37;
y = TileY(found->xy) * 16 + 37;
InitializeDisasterVehicle(v,x,y, 135,5,6);
@@ -816,7 +831,7 @@ static void Disaster3_Init()
}
}
static void Disaster4_Init()
static void Disaster4_Init(void)
{
Vehicle *v = ForceAllocateSpecialVehicle(), *u;
int x,y;
@@ -824,11 +839,11 @@ static void Disaster4_Init()
if (v == NULL)
return;
x = (GET_TILE_X(Random())) * 16 + 8;
x = TileX(Random()) * 16 + 8;
y = (TILES_X-1)*16-1;
y = MapMaxX() * 16 - 1;
InitializeDisasterVehicle(v, x, y, 135, 7, 9);
v->dest_tile = TILE_XY(TILES_X/2,TILES_Y/2);
v->dest_tile = TILE_XY(MapSizeX() / 2, MapSizeY() / 2);
v->age = 0;
// Allocate shadow too?
@@ -841,7 +856,7 @@ static void Disaster4_Init()
}
// Submarine type 1
static void Disaster5_Init()
static void Disaster5_Init(void)
{
Vehicle *v = ForceAllocateSpecialVehicle();
int x,y;
@@ -852,17 +867,17 @@ static void Disaster5_Init()
return;
r = Random();
x = (GET_TILE_X(r)) * 16 + 8;
x = TileX(r) * 16 + 8;
y = 8;
dir = 3;
if (r & 0x80000000) { y = (TILES_X-1) * 16 - 8 - 1; dir = 7; }
if (r & 0x80000000) { y = MapMaxX() * 16 - 8 - 1; dir = 7; }
InitializeDisasterVehicle(v, x, y, 0, dir,13);
v->age = 0;
}
// Submarine type 2
static void Disaster6_Init()
static void Disaster6_Init(void)
{
Vehicle *v = ForceAllocateSpecialVehicle();
int x,y;
@@ -873,32 +888,32 @@ static void Disaster6_Init()
return;
r = Random();
x = (GET_TILE_X(r)) * 16 + 8;
x = TileX(r) * 16 + 8;
y = 8;
dir = 3;
if (r & 0x80000000) { y = (TILES_X-1) * 16 - 8 - 1; dir = 7; }
if (r & 0x80000000) { y = MapMaxX() * 16 - 8 - 1; dir = 7; }
InitializeDisasterVehicle(v, x, y, 0, dir,14);
v->age = 0;
}
static void Disaster7_Init()
static void Disaster7_Init(void)
{
Industry *i;
int maxloop = 15;
int index = Random() & 0xF;
do {
for(i=_industries; i != endof(_industries); i++) {
FOR_ALL_INDUSTRIES(i) {
if (i->xy != 0 && i->type == IT_COAL_MINE && --index < 0) {
SET_DPARAM16(0, i->town->index);
SetDParam(0, i->town->index);
AddNewsItem(STR_B005_COAL_MINE_SUBSIDENCE_LEAVES,
NEWS_FLAGS(NM_THIN,NF_VIEWPORT|NF_TILE,NT_ACCIDENT,0), i->xy + TILE_XY(1,1), 0);
{
uint tile = i->xy;
int step = _tileoffs_by_dir[Random() & 3];
TileIndexDiff step = TileOffsByDir(Random() & 3);
int count = 30;
do {
DisasterClearSquare(tile);
@@ -939,7 +954,7 @@ static const DisasterYears _dis_years[8] = {
};
void DoDisaster()
static void DoDisaster(void)
{
byte buf[8];
byte year = _cur_year;
@@ -958,12 +973,12 @@ void DoDisaster()
}
static void ResetDisasterDelay()
static void ResetDisasterDelay(void)
{
_disaster_delay = (int)(Random() & 0x1FF) + 730;
}
void DisasterDailyLoop()
void DisasterDailyLoop(void)
{
if (--_disaster_delay != 0)
return;
@@ -974,7 +989,8 @@ void DisasterDailyLoop()
DoDisaster();
}
void StartupDisasters() {
void StartupDisasters(void)
{
ResetDisasterDelay();
}

View File

@@ -1,28 +1,31 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "map.h"
#include "window.h"
#include "station.h"
#include "gui.h"
#include "viewport.h"
#include "gfx.h"
#include "sound.h"
#include "command.h"
static void ShowBuildDockStationPicker();
static void ShowBuildDocksDepotPicker();
static void ShowBuildDockStationPicker(void);
static void ShowBuildDocksDepotPicker(void);
static byte _ship_depot_direction;
static void CcBuildDocks(bool success, uint tile, uint32 p1, uint32 p2)
void CcBuildDocks(bool success, uint tile, uint32 p1, uint32 p2)
{
if (success) {
SndPlayTileFx(0, tile);
SndPlayTileFx(SND_02_SPLAT, tile);
ResetObjectToPlace();
}
}
static void CcBuildCanal(bool success, uint tile, uint32 p1, uint32 p2)
void CcBuildCanal(bool success, uint tile, uint32 p1, uint32 p2)
{
if (success) { SndPlayTileFx(0, tile); }
if (success) SndPlayTileFx(SND_02_SPLAT, tile);
}
@@ -57,63 +60,52 @@ static void PlaceDocks_BuildLock(uint tile)
}
static void BuildDocksClick_Dock(Window *w)
{
if (HandlePlacePushButton(w, 2, 0xE54, 3, PlaceDocks_Dock)) ShowBuildDockStationPicker();
}
static void BuildDocksClick_Depot(Window *w)
{
if (HandlePlacePushButton(w, 3, 0x2D1, 1, PlaceDocks_Depot)) ShowBuildDocksDepotPicker();
}
static void BuildDocksClick_Buoy(Window *w)
{
HandlePlacePushButton(w, 4, 0x2BE, 1, PlaceDocks_Buoy);
}
static void BuildDocksClick_Demolish(Window *w)
{
HandlePlacePushButton(w, 5, ANIMCURSOR_DEMOLISH, 1, PlaceDocks_DemolishArea);
}
static void BuildDocksClick_Lower(Window *w)
{
HandlePlacePushButton(w, 6, ANIMCURSOR_LOWERLAND, 2, PlaceProc_LowerLand);
}
static void BuildDocksClick_Raise(Window *w)
{
HandlePlacePushButton(w, 7, ANIMCURSOR_RAISELAND, 2, PlaceProc_RaiseLand);
}
static void BuildDocksClick_Purchase(Window *w)
{
HandlePlacePushButton(w, 8, 0x12B8, 1, PlaceProc_BuyLand);
}
static void BuildDocksClick_Canal(Window *w)
{
HandlePlacePushButton(w, 9, SPR_OPENTTD_BASE + 11, 1, PlaceDocks_BuildCanal);
HandlePlacePushButton(w, 3, SPR_OPENTTD_BASE + 11, 1, PlaceDocks_BuildCanal);
}
static void BuildDocksClick_Lock(Window *w)
{
HandlePlacePushButton(w, 10, SPR_OPENTTD_BASE + 64, 1, PlaceDocks_BuildLock);
HandlePlacePushButton(w, 4, SPR_OPENTTD_BASE + 64, 1, PlaceDocks_BuildLock);
}
static void BuildDocksClick_Demolish(Window *w)
{
HandlePlacePushButton(w, 6, ANIMCURSOR_DEMOLISH, 1, PlaceDocks_DemolishArea);
}
static void BuildDocksClick_Depot(Window *w)
{
if (HandlePlacePushButton(w, 7, 0x2D1, 1, PlaceDocks_Depot)) ShowBuildDocksDepotPicker();
}
static void BuildDocksClick_Dock(Window *w)
{
if (HandlePlacePushButton(w, 8, 0xE54, 3, PlaceDocks_Dock)) ShowBuildDockStationPicker();
}
static void BuildDocksClick_Buoy(Window *w)
{
HandlePlacePushButton(w, 9, 0x2BE, 1, PlaceDocks_Buoy);
}
static void BuildDocksClick_Landscaping(Window *w)
{
ShowTerraformToolbar();
}
typedef void OnButtonClick(Window *w);
static OnButtonClick * const _build_docks_button_proc[] = {
BuildDocksClick_Dock,
BuildDocksClick_Depot,
BuildDocksClick_Buoy,
BuildDocksClick_Demolish,
BuildDocksClick_Lower,
BuildDocksClick_Raise,
BuildDocksClick_Purchase,
BuildDocksClick_Canal,
BuildDocksClick_Lock,
0,
BuildDocksClick_Demolish,
BuildDocksClick_Depot,
BuildDocksClick_Dock,
BuildDocksClick_Buoy,
BuildDocksClick_Landscaping,
};
static void BuildDocksToolbWndProc(Window *w, WindowEvent *e)
@@ -124,7 +116,21 @@ static void BuildDocksToolbWndProc(Window *w, WindowEvent *e)
break;
case WE_CLICK: {
if (e->click.widget - 2 >= 0) _build_docks_button_proc[e->click.widget - 2](w);
if (e->click.widget - 3 >= 0 && e->click.widget != 5) _build_docks_button_proc[e->click.widget - 3](w);
} break;
case WE_KEYPRESS: {
switch(e->keypress.keycode) {
case '1': BuildDocksClick_Canal(w); break;
case '2': BuildDocksClick_Lock(w); break;
case '3': BuildDocksClick_Demolish(w); break;
case '4': BuildDocksClick_Depot(w); break;
case '5': BuildDocksClick_Dock(w); break;
case '6': BuildDocksClick_Buoy(w); break;
case 'l': BuildDocksClick_Landscaping(w); break;
default:
return;
}
} break;
case WE_PLACE_OBJ:
@@ -146,7 +152,7 @@ static void BuildDocksToolbWndProc(Window *w, WindowEvent *e)
break;
case WE_ABORT_PLACE_OBJ:
w->click_state = 0;
UnclickWindowButtons(w);
SetWindowDirty(w);
w = FindWindowById(WC_BUILD_STATION, 0);
@@ -172,47 +178,67 @@ static void BuildDocksToolbWndProc(Window *w, WindowEvent *e)
}
static const Widget _build_docks_toolb_widgets[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 197, 0, 13, STR_9801_DOCK_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 21, 14, 35, 746, STR_981D_BUILD_SHIP_DOCK},
{ WWT_PANEL, 7, 22, 43, 14, 35, 748, STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING},
{ WWT_PANEL, 7, 44, 65, 14, 35, 693, STR_9834_POSITION_BUOY_WHICH_CAN},
{ WWT_PANEL, 7, 66, 87, 14, 35, 703, STR_018D_DEMOLISH_BUILDINGS_ETC},
{ WWT_PANEL, 7, 88, 109, 14, 35, 695, STR_018E_LOWER_A_CORNER_OF_LAND},
{ WWT_PANEL, 7, 110, 131, 14, 35, 694, STR_018F_RAISE_A_CORNER_OF_LAND},
{ WWT_PANEL, 7, 132, 153, 14, 35, 4791, STR_0329_PURCHASE_LAND_FOR_FUTURE},
{ WWT_PANEL, 7, 154, 175, 14, 35, SPR_OPENTTD_BASE+65, STR_BUILD_CANALS_TIP},
{ WWT_PANEL, 7, 176, 197, 14, 35, SPR_CANALS_BASE+69, STR_BUILD_LOCKS_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 145, 0, 13, STR_9801_DOCK_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_STICKYBOX, RESIZE_NONE, 7, 146, 157, 0, 13, 0x0, STR_STICKY_BUTTON},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_OPENTTD_BASE+65, STR_BUILD_CANALS_TIP},
{ WWT_PANEL, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_CANALS_BASE+69, STR_BUILD_LOCKS_TIP},
{ WWT_PANEL, RESIZE_NONE, 7, 44, 47, 14, 35, 0x0, STR_NULL},
{ WWT_PANEL, RESIZE_NONE, 7, 48, 69, 14, 35, 703, STR_018D_DEMOLISH_BUILDINGS_ETC},
{ WWT_PANEL, RESIZE_NONE, 7, 70, 91, 14, 35, 748, STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING},
{ WWT_PANEL, RESIZE_NONE, 7, 92, 113, 14, 35, 746, STR_981D_BUILD_SHIP_DOCK},
{ WWT_PANEL, RESIZE_NONE, 7, 114, 135, 14, 35, 693, STR_9834_POSITION_BUOY_WHICH_CAN},
{ WWT_PANEL, RESIZE_NONE, 7, 136, 157, 14, 35, SPR_IMG_LANDSCAPING, STR_LANDSCAPING_TOOLBAR_TIP},
{ WIDGETS_END},
};
static const WindowDesc _build_docks_toolbar_desc = {
640-197, 22, 198, 36,
640-158, 22, 158, 36,
WC_BUILD_TOOLBAR,0,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
_build_docks_toolb_widgets,
BuildDocksToolbWndProc
};
void ShowBuildDocksToolbar()
void ShowBuildDocksToolbar(void)
{
if (_current_player == OWNER_SPECTATOR) return;
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
AllocateWindowDesc(&_build_docks_toolbar_desc);
}
static void BuildDockStationWndProc(Window *w, WindowEvent *e)
{
int rad;
switch(e->event) {
case WE_PAINT: {
if (WP(w,def_d).close)
return;
w->click_state = (1<<3) << _station_show_coverage;
DrawWindowWidgets(w);
DrawStationCoverageAreaText(2, 15, (uint)-1);
if (_patches.modified_catchment) {
rad = CA_DOCK;
} else {
rad = 4;
}
if (_station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
else SetTileSelectBigSize(0, 0, 0, 0);
DrawStringCentered(74, 17, STR_3066_COVERAGE_AREA_HIGHLIGHT, 0);
DrawStationCoverageAreaText(4, 50, (uint)-1, rad);
} break;
case WE_CLICK: {
if (e->click.widget == 0) {
ResetObjectToPlace();
switch(e->click.widget) {
case 3: case 4:
_station_show_coverage = e->click.widget - 3;
SndPlayFx(SND_15_BEEP);
SetWindowDirty(w);
break;
}
} break;
@@ -225,30 +251,37 @@ static void BuildDockStationWndProc(Window *w, WindowEvent *e)
CheckRedrawStationCoverage(w);
break;
}
case WE_DESTROY:
if (!WP(w,def_d).close)
ResetObjectToPlace();
break;
}
}
static const Widget _build_dock_station_widgets[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 147, 0, 13, STR_3068_DOCK, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 147, 14, 45, 0x0, STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 147, 0, 13, STR_3068_DOCK, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 147, 14, 74, 0x0, STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 14, 73, 30, 40, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 74, 133, 30, 40, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA},
{ WIDGETS_END},
};
static const WindowDesc _build_dock_station_desc = {
-1, -1, 148, 46,
-1, -1, 148, 75,
WC_BUILD_STATION,WC_BUILD_TOOLBAR,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
_build_dock_station_widgets,
BuildDockStationWndProc
};
static void ShowBuildDockStationPicker()
static void ShowBuildDockStationPicker(void)
{
AllocateWindowDesc(&_build_dock_station_desc);
}
static void UpdateDocksDirection()
static void UpdateDocksDirection(void)
{
if (_ship_depot_direction != 0) {
SetTileSelectSize(1, 2);
@@ -272,13 +305,10 @@ static void BuildDocksDepotWndProc(Window *w, WindowEvent *e)
case WE_CLICK: {
switch(e->click.widget) {
case 0:
ResetObjectToPlace();
break;
case 3:
case 4:
_ship_depot_direction = e->click.widget - 3;
SndPlayFx(0x13);
SndPlayFx(SND_15_BEEP);
UpdateDocksDirection();
SetWindowDirty(w);
break;
@@ -289,15 +319,20 @@ static void BuildDocksDepotWndProc(Window *w, WindowEvent *e)
if (WP(w,def_d).close)
DeleteWindow(w);
break;
case WE_DESTROY:
if (!WP(w,def_d).close)
ResetObjectToPlace();
break;
}
}
static const Widget _build_docks_depot_widgets[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 203, 0, 13, STR_3800_SHIP_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 203, 14, 85, 0x0, STR_NULL},
{ WWT_PANEL, 14, 3, 100, 17, 82, 0x0, STR_3803_SELECT_SHIP_DEPOT_ORIENTATION},
{ WWT_PANEL, 14, 103, 200, 17, 82, 0x0, STR_3803_SELECT_SHIP_DEPOT_ORIENTATION},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 203, 0, 13, STR_3800_SHIP_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 203, 14, 85, 0x0, STR_NULL},
{ WWT_PANEL, RESIZE_NONE, 14, 3, 100, 17, 82, 0x0, STR_3803_SELECT_SHIP_DEPOT_ORIENTATION},
{ WWT_PANEL, RESIZE_NONE, 14, 103, 200, 17, 82, 0x0, STR_3803_SELECT_SHIP_DEPOT_ORIENTATION},
{ WIDGETS_END},
};
@@ -310,14 +345,14 @@ static const WindowDesc _build_docks_depot_desc = {
};
static void ShowBuildDocksDepotPicker()
static void ShowBuildDocksDepotPicker(void)
{
AllocateWindowDesc(&_build_docks_depot_desc);
UpdateDocksDirection();
}
void InitializeDockGui()
void InitializeDockGui(void)
{
_ship_depot_direction = 0;
}

View File

@@ -24,6 +24,7 @@ On BeOS, run ./configure and then use jam. There are a variaty of options you ca
On Windows, insert your "Transport Tycoon Deluxe for Windows 95" disk. You can use a DOS version, but your graphics will be purple. NB: Even if your version of Transport Tycoon Deluxe ran on Windows 95, it may still be the DOS version. Then run the OpenTTD installer.
On UNIX platforms; decompress your OpenTTD archive, or otherwise run the installer. You should be left with an OpenTTD directory on your system. In this directory, make a subdirectory called 'data', and into this place the sample.cat file and all the .grf files from the install CD of 'Transport Tycoon Deluxe for Windows 95".
(Alternatively you can use the TTD GRF files from the DOS version: TRG1.GRF, TRGC.GRF, TRGH.GRF, TRGI.GRF, TRGT.GRF. A few minor graphical glitches with the DOS graphics remain. E.g. the autorail button in the rail toolbar doesn't look as nice as with the Windows graphics.)
If you want MIDI music, copy the 'gm' folder from the original game directory/CD to the OpenTTD folder.
@@ -90,7 +91,7 @@ Virtually any settings - train numbers, start date, what vehicles your competito
2.11 Network Play
OpenTTD now supports rudimentary TCP/IP based network play. This is not supported on all platforms. To start a server, use the '-n' CLI switch, and start a client with '-n' and the servers IP adress. The OpenTTD network play runs over port 12345, so you may need to open this on your firewall.
See multiplayer.txt for more info.
2.12 Rail Recycling.

View File

@@ -0,0 +1,24 @@
It's gone
The main goal with the package system was to make it as simple as possible to update. The problem was that some files inside the data folder should be updated and not others. Now the data files have been moved inside OpenTTD itself and to make it even easier, the same goes for the lang dir. There will no longer be an issue where people have different versions of grf files, language files and OpenTTD.
To install simply copy OpenTTD into the folder you want
If it is your current folder with outdated grf files, you should remove
canalsw.grf
openttd.grf
opntitle.dat
signalsw.grf
trkfoundw.grf
THE TTD GRF FILES ARE STILL NEEDED!
They need to be inside a folder called "data" in the same folder as OpenTTD. Create it if you have none. It should contain:
sample.cat
trg1r.grf
trgcr.grf
trghr.grf
trgir.grf
trgtr.grf
(Alternatively you can use the TTD GRF files from the DOS version: TRG1.GRF, TRGC.GRF, TRGH.GRF, TRGI.GRF, TRGT.GRF. A few minor graphical glitches with the DOS graphics remain. E.g. the autorail button in the rail toolbar doesn't look as nice as with the Windows graphics.)
You should also use the data folder to add any custom grf files if you like

View File

@@ -2,10 +2,8 @@ Since you are reading this, OpenTTD have crashed. This file tells you how
to fix the most common problems or make to make a bug report, that the
developers can use to track down the problem
The first thing you need to do is to get the error message. You can access OSX's build-in log by double-clicking Crash_Log_Opener. OTTD will do that if that file is present in the same folder as OTTD and is not renamed. However, major crashes can prevent the autoopen feature and you have to do it manually then
If Crash_Log_Opener doesn't work you can view the log by opening Console inside Applications/utilities.
If you use the Console app, you should look at the buttom of the console.log window
If it is an assert, OpenTTD will open the console for you, if it is truly a crash, you have to do it yourself. The Console is located at /Applications/Utilities/Console.
The problem is near the button of the page
The problems are as follows:
NOTE: build from source means to download the source and compile

View File

@@ -31,7 +31,7 @@ You can undo changes to a file with
3.) Required data files:
Copy the following files from the WINDOWS version of Transport Tycoon Deluxe to openttd/data/
Copy the following files from Transport Tycoon Deluxe to openttd/data/
sample.cat
trg1r.grf
trgcr.grf
@@ -39,6 +39,8 @@ Copy the following files from the WINDOWS version of Transport Tycoon Deluxe to
trgir.grf
trgtr.grf
(Alternatively you can use the TTD GRF files from the DOS version: TRG1.GRF, TRGC.GRF, TRGH.GRF, TRGI.GRF, TRGT.GRF. A few minor graphical glitches with the DOS graphics remain. E.g. the autorail button in the rail toolbar doesn't look as nice as with the Windows graphics.)
4.) Compiling and running:

118
docs/Readme_OS2.txt Normal file
View File

@@ -0,0 +1,118 @@
OpenTTD: OS/2 version
=====================
OpenTTD has been ported to work on OS/2 4.x or later (including
eComStation). The game should work as well as it does on Windows
or other platforms: the main issues you may encounter are graphics
card problems, but that is really the fault of SDL.
=========================
USING OPENTTD FOR OS/2
=========================
LIBRARIES REQUIRED FOR END USERS
--------------------------------
SDL.DLL (SDL 1.2.7) and FSLib.dll are required to use this program:
these can be downloaded from the Files section at
http://sourceforge.net/projects/openttd/ - see "os2-useful.zip".
(Note that a newer version of SDL is now available at
ftp://ftp.netlabs.org/pub/sdl/sdl-dev-os2-2004-12-22.zip which may
help solve some problems).
Note that to actually play the game, I have found in my own
experience that a version of the Scitech Display Drivers or its later
incarnation (see www.scitech.com) are necessary for it to work. If
you have trouble with your native drivers, try the Scitech drivers
and see if they help the problem.
KNOWN ISSUES
------------
- If an error occurs during loading, the OS/2 error message window
is not always displayed.
A NOTE ABOUT MUSIC
------------------
OpenTTD includes a music driver which uses the MCI MIDI system. Unfortunately,
due to the lack of proper MIDI hardware myself, I have been unable to test it,
but during testing, I found that when MIDI was enabled, I got no sound
effects. I therefore decided to DISABLE music by default.
To enable music, start OpenTTD with the command line:
openttd -m os2
If I hear enough responses that both music and sound work together (it might
just be my system), I'll have the defaults changed.
A NOTE ABOUT DEDICATED MULTIPLAYER SERVERS
------------------------------------------
To start a dedicated multiplayer server, you should run the dedicated.cmd
file. This enables OpenTTD to open up a VIO console window to display
its output and gather any necessary input. Running "openttd -D"
directly will result in the console not being displayed. You may
still pass any other parameters ('-D' is already passed) to
dedicated.cmd.
=========================
BUILDING THE OS/2 VERSION
=========================
Compiler
--------
Open Watcom 1.3 was used to build OpenTTD (earlier versions will
NOT work). See http://www.openwatcom.org/ to download it. It may
also be possible to build OpenTTD under OS/2: I attempted this
before using Open Watcom, but found the tools available for OS/2
at the time to be a bit more tricky to get working.
Due to complexities in my set-up, I actually used the Win32 version
of Open Watcom to initially compile OpenTTD for OS/2. There should
be no reason of course why the OS/2 version cannot be used.
Libraries Required
------------------
The following libraries are required. To build zlib and libpng, I
simply added the required files (watch out for sample programs, etc)
to an IDE project file and built a library. Do not use the makefiles
provided, they are not designed for Watcom (apart from SDL):
- zlib
http://www.zlib.org/ - contains a makefile for OS/2, but is out
of date and uses EMX
- libpng
http://www.libpng.org/ - contains an EMX/gcc makefile
- SDL for OS/2
For 0.3.5, I used ftp://ftp.netlabs.org/pub/sdl/SDL-1.2.7-src-20040908a.zip -
take SDL.dll and SDL.lib from the src/ directory. Note that 20041222 is
out now, which is recommended for stability updates.
If you do not wish to build the libraries yourself, pre-built versions
can be downloaded from the Files section at
http://sourceforge.net/projects/openttd/ - see "os2-useful.zip".
Compiling
---------
To compile, open the os/os2/openttd.wpj file in the IDE and first build
the strgen.exe target. This will build the .lng file generator, and will
also attempt to build all the language files (plus the table\strings.h
file which is required for openttd.exe to be built). Once strgen.exe and
the language files are built successfully, you can build the openttd.exe
target.
Contact Information
-------------------
If you have any questions regarding OS/2 issues, please contact me
(owen@owenrudge.net) and I'll try to help you out. For general OpenTTD
issues, see the Contacting section of readme.txt.
- Owen Rudge, 26th December 2004

View File

@@ -1,89 +1,105 @@
Compilung OpenTTD using MS VC6.0
Compiling OpenTTD using Microsoft Visual C++ 6.0
Step 1
------------------
Downloaded:
Useful.zip http://sourceforge.net/project/showfiles.php?group_id=103924&package_id=114307&release_id=228633
SDL.zip http://www.libsdl.org/release/SDL-1.2.7-win32.zip
DirectX7.0 SDK http://www.tt-forums.net/download.php?id=15989
(or alternatively the latest DirectX SDK from Microsoft)
afxres.h http://www-d0.fnal.gov/d0dist/dist/packages/d0ve/devel/windows/AFXRES.H
---Step 1
Download the following files:
* Useful.zip (http://sourceforge.net/project/showfiles.php?group_id=103924&package_id=114307&release_id=228633)
* SDL-1.2.8-VC6.zip (http://www.libsdl.org/release/SDL-devel-1.2.8-VC6.zip)
* DirectX7.0 SDK (http://www.tt-forums.net/download.php?id=15989) (or alternatively the latest DirectX SDK from Microsoft)
* afxres.h (http://www-d0.fnal.gov/d0dist/dist/packages/d0ve/devel/windows/AFXRES.H)
...and of course the newest source from svn://svn.openttd.com/trunk
(The alpha version of the new map array can be found at svn://svn.openttd.com/branch/map)
You have to have and SVN-client to download the source:
* Command line version (http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91)
* TortoiseSVN (http://tortoisesvn.tigris.org/download.html)
Step 2
------------------
Put the newly downloaded files in the VC lib and include directories
(Where D:\program files\ is your local location of VC)
---Step 2
Put the newly downloaded files in the VC lib and include directories (Where C:\program files\ is your local location of VC)
* zconf.h [useful.zip]
* zlib.h [useful.zip]
* png.h [useful.zip]
* pngconf.h [useful.zip]
* afxres.h
in
D:\Program Files\Microsoft Visual Studio\VC98\Include
* zlibstat.lib [usefull.zip]
* SDL.lib [SDL.zip
* libpng.lib [usefull.zip]
in
D:\Program Files\Microsoft Visual Studio\VC98\Lib
You can also make custum directories, for libraries (.lib) and includes/header files (.h) and
add it to the VC paths via:
C:\Program Files\Microsoft Visual Studio\VC98\Include
and
* zlibstat.lib [useful.zip]
* SDL.lib [SDL.zip]
* libpng.lib [useful.zip]
in
C:\Program Files\Microsoft Visual Studio\VC98\Lib
---Step 3: DirectX SDK
(This should work with the latest DirectX SDK as well.) The installation with DirectX 7 was odd, so you'd better use the version available via the forum, see also the download link on top.
There are 2 folder in the compressed file: Include and Lib
Copy all files from Include folder to
C:\Program Files\Microsoft Visual Studio\VC98\Include
and all files from Lib folder to
C:\Program Files\Microsoft Visual Studio\VC98\Lib
You can also make custom directories, for libraries (.lib) and includes/header files (.h) and add it to the VC paths via:
Tools -> Options -> Directories -> show directories for:
a) include files (the include dir: D:\Program Files\Microsoft Visual Studio\VC98\DirectX 7 SDK\include )
b) library files (the lib dir, D:\Program Files\Microsoft Visual Studio\VC98\DirectX 7 SDK\lib )
a) include files (the include dir: C:\Program Files\Microsoft Visual Studio\VC98\DirectX 7 SDK\include )
b) library files (the lib dir, C:\Program Files\Microsoft Visual Studio\VC98\DirectX 7 SDK\lib )
Step 3: DirextX SDK
------------------
(This should work with the latest DirectX SDK as well.)
The installation with DirectX 7 was odd, so you'd better use the version available via the forum, see also
the download link on top.
---Step 4
Copy the DirectX 7 SDK files, leaving the directory stucture intact, to the directory:
D:\Program Files\Microsoft Visual Studio\VC98\
thus resulting in
D:\Program Files\Microsoft Visual Studio\VC98\DirectX 7 SDK\include and
D:\Program Files\Microsoft Visual Studio\VC98\DirectX 7 SDK\lib
Copy the following files from Transport Tycoon Deluxe to the data folder
Step 3.1
Add these two folders to the search path of VC.
In VC6.0: Tools -> Options -> Directories -> show directories for:
a) include files (the include dir: D:\Program Files\Microsoft Visual Studio\VC98\DirectX 7 SDK\include )
b) libraru files (the lib dir, D:\Program Files\Microsoft Visual Studio\VC98\DirectX 7 SDK\lib )
* sample.cat
* trg1r.grf
* trgcr.grf
* trghr.grf
* trgir.grf
* trgtr.grf
Step 4
-----------------
Copy the following files from the WINDOWS version of Transport Tycoon Deluxe to the data folder
sample.cat
trg1r.grf
trgcr.grf
trghr.grf
trgir.grf
trgtr.grf
---Step 5
Open trunk/ttd.dsw
Build menu > Set active configuration > Select: "ttd - Win32 Release with PNG"
Step 5
-----------------
Compile...
Step 6
-----------------
Now it should work, it worked for me :)
Go ahead and make that patch!
From r1319 you can compile branch/map in Debug mode (by Bociusz)
Happy Hacking!
If it's not working, and you checked that you using the newest SVN (!) report to Bociusz on IRC (irc://irc.freenode.net/#openttd)
Go ahead and make that patch! Happy Hacking! :)
Originally written by Dribbel
------------------
written by Dribbel
Project file updating by Bociusz

View File

@@ -1,8 +1,12 @@
OPENTTD INGAME CONSOLE DOCUMENTATION
====================================
http://openttd.rulez.org/wiki2/index.php/OpenTTDDevBlackBook
http://wiki.openttd.org/index.php/OpenTTDDevBlackBook
for detailed information
*** WARNING **
This document is out of date
*** WARNING **
HOTKEY: BACKQUOTE (aka tilde, the key left to "1")
COMMANDS:
@@ -40,13 +44,13 @@ VARIABLES:
VARIABLE HANDLING:
------------------
*developer = 0
*developer ++
developer = 0
developer ++
*temp_string = test
*temp_string = "my little"
temp_string = test
temp_string = "my little"
printf "%s world" *temp_string
printf "%s world" temp_string
---------------------------------------------------

View File

@@ -135,6 +135,8 @@ map5 bits 7 and 6 set: railway depot / checkpoints
<br>
<li>map_owner: <a href="#OwnershipInfo">owner</a> of the depot / checkpoint</li>
<li>map3_lo bits 0..3 = <a href="#TrackType">track type</a></li>
<li>map3_lo bit 4 = use custom sprite (valid only for the checkpoint)</li>
<li>map3_hi = custom station id</li>
</ul>
</td></tr>
@@ -368,6 +370,8 @@ exit towards: <tt>47</tt> - NE, <tt>48</tt> - SE, <tt>49</tt> - SW, <tt>4A</tt>
<li>map_owner: <a href="#OwnershipInfo">owner</a> of the station</li>
<li>map2: index into the <a href="#_StationArray">array of stations</a></li>
<li>map3_lo bits 0..3: <a href="#TrackType">track type</a> for railway stations, must be 0 for all the other stations</li>
<li>map3_lo bit 4 = use custom sprite (valid only railway stations FOR NOW)</li>
<li>map3_hi = custom station id</li>
</ul>
</td></tr>

View File

@@ -1,70 +1,112 @@
Multiplayer Manual for OpenTTD
----------------------------------------
Multiplayer Manual for OpenTTD (0.3.5)
=======================================
1. Starting a Server
---------------------
- Click "multiplayer" on the startup screen
- Click "start server"
- Type in a game name
- Select the type of game ('LAN/Internet' or 'Internet (advertise)'. With the last one
other people are able to see you online. Else they need your IP and port to join)
- Click "start game" ,"load game" or "load scenario"
- Start playing
- click "multiplayer" on the startup screen
- click "start server"
- type in a game name
- click "start game" ,"load game" or "load scenario"
2. Connecting to a Server
--------------------------
- click "multiplayer" on the startup screen
- Click "multiplayer" on the startup screen
- if you want to connect to any network game in your LAN click "find server"
- If you want to connect to any network game in your LAN click on 'LAN', then on
'Find Server'
- If you want to see which servers all online on the Internet, click on 'Internet'
and 'Find Server'
- if there were more then one server
- If there were more then one server
- select one in the list below the buttons
- click on "join game".
- click on 'join game'
- if you want to play over the internet you should have the ip of the game server you want connect to.
- click direct connect
- If you want to play and you have the ip or hostname of the game server you want connect to.
- click add server
- type in the ip address or hostname
- if you want to add a port use :<port>
- if you want to connect as an special player use #<player-no>
- Now you can select a company and press: "Join company", to help that company
- Or you can press "Spectate game", to spectate the game
- Or you can press "New company", and start your own company (if there are slots free)
- You see a progressbar how far you are with joining the server.
- Happy playing
3. Connecting to a Server over the Console
-------------------------------------------
- open the console and type in the following command:
- Open the console and type in the following command:
]connect <ip/host>:<port>#<player-no>
4. Playing Internet-Games
--------------------------
- since OpenTTD 0.3.4 you can also play internet games over higher latency connections.
- to do this the gameservers sync frequency should be highered to a decent value.
- open the console [on the server]
- type in the following command:
- Since OpenTTD 0.3.5 the network protocol has been rewritten and is very stable, even over slow connections.
] *net_sync_freq = <4-80>
- Server with a red dot behind it have a different version then you have. You will not be able to join those servers.
default value: 4
- It can happen that a connection is that slow, or you have that many clients connected to your server, that your clients start to loose their connection. Some things you can do about it:
- this is lowering the sync frequency of the server and your game should be less laggy.
- this is a server variable: it has nothing to do with the clients
- net_frame_freq:
change it in console with: net_frame_freq = <number>
the number should be between the 0 and 10, not much higher. It indicates the delay between clicking and showing up. The higher, the more you notice it, but the less bandwidth you use.
A good value for Internet-games is 2 or 3.
- you can also change when the clients ready packet is sent if you still have lags.
- open the console
- type in the following command:
- net_sync_freq:
change it in console with: net_sync_freq = <number>
the number should be between the 50 and 1000, not much lower, not much higer. It indicates the time between sync-frames. A sync-frame is a frame which checks if all clients are still in sync. When the value it too high, clients can desync in 1960, but the server detects it in 1970. Not really handy. The lower the value, the more bandwidth it uses.
] *net_ready_ahead = <1-8>
default value: 1
- in that way your client is sending its "i am ready for next sync" a bit earlier
thats quite good for games where some players have higher latencies than the others.
- this is a client variable: it has nothing to do with the server
- to change the client timeout time
- open the console [on the server]
- type in the following command:
] *net_client_timeout = <30-x>
default value: 300
- warning: a too low value will disconnect your clients if they have a short lag
NB: changing net_frame_freq has more effect on the bandwidth then net_sync_freq. You should never change net_sync_freq!
5. Tips for servers
--------------------
- You can launch a dedicated server by adding -D as parameter
- In UNIX like systems, you can fork your dedicated server by adding -f as parameter
- You can automaticly clean companies that do not have a client connected to them, for, let's say,
3 years. You can do this via: 'set autoclean_companies' and 'set autoclean_protected' and
'set autoclean_unprotected'. Unprotected removes a password from a company when it is
not used for more then the defined amount of months.
- You can also do this manually via the console: 'reset_company'.
Both ways, the company will go bankrupt.
- You can let your server automaticly restart a map when, let's say, year 2030 is reached.
See 'set restart_game_date' for detail.
- If you want to be on the server-list, enable Advertising. To do this, select 'Internet (advertise)'
in the Start Server menu, or type in console: 'set server_advertise 1'.
- You can protect your server with a password via the console: 'set server_pw', or via the
Start Server menu.
- When you have many clients connected to your server via Internet, watch your bandwidth (if
you have any limit on it, set by your ISP). 1 client uses +/- 3 kb/s up and down. To decrease
this amount, set 'net_frame_freq' to 1 for example. This will reduce it to 1.5 kb/s per client.
6. Some useful things
----------------------
- You can protect your company so nobody else can join uninvited. To do this, check your Company Screen
- You can give other players some money via the ClientList (under the 'head' in the mainbar).
- You can chat with other players via ENTER or via SHIFT+T or via the ClientList
- Servers can now kick players, so don't make them use it!
- From 0.3.5, desyncs should not happen anymore
- From 0.3.5, patch-settings are also synced. You can now play without deleting openttd.cfg, and with, for example, extra large trains enabled.

50
docs/openttd.6 Normal file
View File

@@ -0,0 +1,50 @@
.\" Hey, EMACS: -*- nroff -*-
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH OPENTTD 6 "September 16, 2004"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
openttd \- An open source clone of the Microprose game "Transport Tycoon Deluxe"
.SH SYNOPSIS
.B openttd
.RI [ options ]
.br
.SH DESCRIPTION
Unfortunately, there is no real manpage for openttd yet. Hopefully someone
will write one soon. For now you should use
.B openttd -h
for more information, or check our Wiki manual: http://wiki.openttd.org/
.PP
.\" TeX users may be more comfortable with the \fB<whatever>\fP and
.\" \fI<whatever>\fP escape sequences to invoke bold face and italics,
.\" respectively.
.\" \fBopenttd\fP is a program that...
.SH OPTIONS
Wouldn't we like to have something here?
.\" below are commented out, to serve as layout examples for when somebody
.\" does actually fill this page
.\" .TP
.\" .B \-h, \-\-help
.\" Show summary of options.
.\" .TP
.\" .B \-v, \-\-version
.\" Show version of program.
.\" .SH SEE ALSO
.\" .BR bar (1),
.\" .BR baz (1).
.br
.SH AUTHOR
This manual page was written by Matthijs Kooijman <matthijs@katherina.student.utwente.nl>,
for the Debian project (but may be used by others).

View File

@@ -1,5 +1,6 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "viewport.h"
#include "command.h"
@@ -22,7 +23,7 @@ static int32 ClearTile_Dummy(uint tile, byte flags) {
}
static void GetAcceptedCargo_Dummy(uint tile, AcceptedCargo *ac)
static void GetAcceptedCargo_Dummy(uint tile, AcceptedCargo ac)
{
/* not used */
}

448
economy.c
View File

@@ -1,5 +1,7 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "map.h"
#include "news.h"
#include "player.h"
#include "station.h"
@@ -12,6 +14,34 @@
#include "industry.h"
#include "town.h"
#include "network.h"
#include "sound.h"
#include "engine.h"
#include "network_data.h"
// get a mask of the allowed currencies depending on the year
uint GetMaskOfAllowedCurrencies(void)
{
int i;
uint mask = 0;
for (i = 0; i != lengthof(_currency_specs); i++) {
uint16 to_euro = _currency_specs[i].to_euro;
if (i == 23) mask |= (1 << 23); // always allow custom currency
if (to_euro != CF_NOEURO && to_euro != CF_ISEURO && _cur_year >= (to_euro-MAX_YEAR_BEGIN_REAL)) continue;
if (_cur_year < (2000-MAX_YEAR_BEGIN_REAL) && (to_euro == CF_ISEURO)) continue;
mask |= (1 << i);
}
return mask;
}
void CheckSwitchToEuro(void)
{
if (_currency_specs[_opt.currency].to_euro != CF_NOEURO &&
_currency_specs[_opt.currency].to_euro != CF_ISEURO &&
_cur_year >= (_currency_specs[_opt.currency].to_euro-MAX_YEAR_BEGIN_REAL)) {
_opt.currency = 2; // this is the index of euro above.
AddNewsItem(STR_EURO_INTRODUCE, NEWS_FLAGS(NM_NORMAL,0,NT_ECONOMY,0), 0, 0);
}
}
void UpdatePlayerHouse(Player *p, uint score)
{
@@ -75,10 +105,9 @@ int64 CalculateCompanyValue(Player *p) {
}
}
if (p->player_money > 0)
value += p->money64; // add real money value
value += p->money64 - p->current_loan; // add real money value
return value;
return max(value, 1);
}
// if update is set to true, the economy is updated with this score
@@ -99,7 +128,7 @@ int UpdateCompanyRatingAndValue(Player *p, bool update)
FOR_ALL_VEHICLES(v) {
if (v->owner != owner)
continue;
if ((v->type == VEH_Train && v->subtype == 0) ||
if ((v->type == VEH_Train && v->subtype == TS_Front_Engine) ||
v->type == VEH_Road ||
(v->type == VEH_Aircraft && v->subtype<=2) ||
v->type == VEH_Ship) {
@@ -136,7 +165,7 @@ int UpdateCompanyRatingAndValue(Player *p, bool update)
PlayerEconomyEntry *pee;
int numec;
int32 min_income;
uint32 max_income;
int32 max_income;
numec = min(p->num_valid_stat_ent, 12);
if (numec != 0) {
@@ -240,7 +269,7 @@ void ChangeOwnershipOfPlayerItems(byte old_player, byte new_player)
for(s=_subsidies; s != endof(_subsidies); s++) {
if (s->cargo_type != 0xff && s->age >= 12) {
Station *st = DEREF_STATION(s->to);
Station *st = GetStation(s->to);
if (st->owner == old_player)
s->cargo_type = 0xff;
}
@@ -281,7 +310,7 @@ void ChangeOwnershipOfPlayerItems(byte old_player, byte new_player)
// Determine Ids for the new vehicles
FOR_ALL_VEHICLES(v) {
if (v->owner == new_player) {
if (v->type == VEH_Train && v->subtype == 0)
if (v->type == VEH_Train && v->subtype == TS_Front_Engine)
num_train++;
else if (v->type == VEH_Road)
num_road++;
@@ -301,7 +330,7 @@ void ChangeOwnershipOfPlayerItems(byte old_player, byte new_player)
DeleteVehicle(v);
} else {
v->owner = new_player;
if (v->type == VEH_Train && v->subtype == 0)
if (v->type == VEH_Train && v->subtype == TS_Front_Engine)
v->unitnumber = ++num_train;
else if (v->type == VEH_Road)
v->unitnumber = ++num_road;
@@ -319,7 +348,7 @@ void ChangeOwnershipOfPlayerItems(byte old_player, byte new_player)
uint tile = 0;
do {
ChangeTileOwner(tile, old_player, new_player);
} while (++tile != TILES_X * TILES_Y);
} while (++tile != MapSize());
}
// Change color of existing windows
@@ -331,6 +360,24 @@ void ChangeOwnershipOfPlayerItems(byte old_player, byte new_player)
}
}
{
Player *p;
uint i;
/* Check for shares */
FOR_ALL_PLAYERS(p) {
for(i = 0; i < 4; i++) {
/* 'Sell' the share if this player has any */
if (p->share_owners[i] == _current_player)
p->share_owners[i] = 0xFF;
}
}
p = DEREF_PLAYER(_current_player);
/* Sell all the shares that people have on this company */
for(i = 0; i < 4; i++)
p->share_owners[i] = 0xFF;
}
_current_player = old;
MarkWholeScreenDirty();
@@ -343,6 +390,7 @@ static void PlayersCheckBankrupt(Player *p)
int owner;
int64 val;
// If the player has money again, it does not go bankrupt
if (p->player_money >= 0) {
p->quarters_of_bankrupcy = 0;
return;
@@ -352,46 +400,77 @@ static void PlayersCheckBankrupt(Player *p)
owner = p->index;
if (p->quarters_of_bankrupcy == 2) {
year_2:
switch (p->quarters_of_bankrupcy) {
case 2:
AddNewsItem( (StringID)(owner + 16),
NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
} else if (p->quarters_of_bankrupcy == 3) {
if (IS_HUMAN_PLAYER(owner))
goto year_2;
val = CalculateCompanyValue(p);
if (val == 0) goto year_4;
p->bankrupt_value = val;
p->bankrupt_asked = 1 << owner;
p->bankrupt_timeout = 0;
} else if (p->quarters_of_bankrupcy == 4) {
year_4:
DeletePlayerWindows(owner);
break;
case 3: {
/* XXX - In multiplayer, should we ask other players if it wants to take
over when it is a human company? -- TrueLight */
if (IS_HUMAN_PLAYER(owner)) {
// what does this code do??
InitNewsItemStructs();
DeleteWindowById(WC_NEWS_WINDOW, 0);
AddNewsItem( (StringID)(owner + 16),
NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
break;
}
// Check if the company has any value.. if not, declare it bankrupt
// right now
val = CalculateCompanyValue(p);
if (val > 0) {
p->bankrupt_value = val;
p->bankrupt_asked = 1 << owner; // Don't ask the owner
p->bankrupt_timeout = 0;
break;
}
// Else, falltrue to case 4...
}
case 4: {
// Close everything the owner has open
DeletePlayerWindows(owner);
// Show bankrupt news
SET_DPARAM16(0, p->name_1);
SET_DPARAM32(1, p->name_2);
SetDParam(0, p->name_1);
SetDParam(1, p->name_2);
AddNewsItem( (StringID)(owner + 16*3), NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
if (IS_HUMAN_PLAYER(owner)) {
// If the player is human, and it is no network play, leave the player playing
if (IS_HUMAN_PLAYER(owner) && !_networking) {
p->bankrupt_asked = 255;
p->bankrupt_timeout = 0x456;
} else {
#ifdef ENABLE_NETWORK
if (IS_HUMAN_PLAYER(owner) && _network_server) {
// If we are the server, make sure it is clear that his player is no
// longer with us!
NetworkClientInfo *ci;
NetworkClientState *cs;
/* Find all clients that were in control of this company */
FOR_ALL_CLIENTS(cs) {
ci = DEREF_CLIENT_INFO(cs);
if ((ci->client_playas-1) == owner) {
ci->client_playas = OWNER_SPECTATOR;
// Send the new info to all the clients
NetworkUpdateClientInfo(_network_own_client_index);
}
}
}
// Make sure the player no longer controls the company
if (IS_HUMAN_PLAYER(owner) && owner == _local_player) {
// Switch the player to spectator..
_local_player = OWNER_SPECTATOR;
}
#endif /* ENABLE_NETWORK */
// Convert everything the player owns to NO_OWNER
p->money64 = p->player_money = 100000000;
ChangeOwnershipOfPlayerItems(owner, 0xFF); // 255 is no owner
// Register the player as not-active
p->is_active = false;
}
}
}
}
void DrawNewsBankrupcy(Window *w)
{
@@ -403,8 +482,8 @@ void DrawNewsBankrupcy(Window *w)
DrawPlayerFace(p->face, p->player_color, 2, 23);
GfxFillRect(3, 23, 3+91, 23+118, 0x4323);
SET_DPARAM16(0, p->president_name_1);
SET_DPARAM32(1, p->president_name_2);
SetDParam(0, p->president_name_1);
SetDParam(1, p->president_name_2);
DrawStringMultiCenter(49, 148, STR_7058_PRESIDENT, 94);
@@ -412,8 +491,8 @@ void DrawNewsBankrupcy(Window *w)
case 1:
DrawStringCentered(w->width>>1, 1, STR_7056_TRANSPORT_COMPANY_IN_TROUBLE, 0);
SET_DPARAM16(0, p->name_1);
SET_DPARAM32(1, p->name_2);
SetDParam(0, p->name_1);
SetDParam(1, p->name_2);
DrawStringMultiCenter(
((w->width - 101) >> 1) + 98,
@@ -427,10 +506,10 @@ void DrawNewsBankrupcy(Window *w)
DrawStringCentered(w->width>>1, 1, STR_7059_TRANSPORT_COMPANY_MERGER, 0);
COPY_IN_DPARAM(0,WP(w,news_d).ni->params, 2);
SET_DPARAM16(2, p->name_1);
SET_DPARAM32(3, p->name_2);
SetDParam(2, p->name_1);
SetDParam(3, p->name_2);
price = WP(w,news_d).ni->params[2];
SET_DPARAM32(4, price);
SetDParam(4, price);
DrawStringMultiCenter(
((w->width - 101) >> 1) + 98,
90,
@@ -451,8 +530,8 @@ void DrawNewsBankrupcy(Window *w)
case 4:
DrawStringCentered(w->width>>1, 1, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED, 0);
SET_DPARAM16(0, p->name_1);
SET_DPARAM32(1, p->name_2);
SetDParam(0, p->name_1);
SetDParam(1, p->name_2);
COPY_IN_DPARAM(2,WP(w,news_d).ni->params, 2);
DrawStringMultiCenter(
((w->width - 101) >> 1) + 98,
@@ -472,29 +551,29 @@ StringID GetNewsStringBankrupcy(NewsItem *ni)
switch(ni->string_id >> 4) {
case 1:
SET_DPARAM16(0, STR_7056_TRANSPORT_COMPANY_IN_TROUBLE);
SET_DPARAM16(1, STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED);
SET_DPARAM16(2, p->name_1);
SET_DPARAM32(3, p->name_2);
SetDParam(0, STR_7056_TRANSPORT_COMPANY_IN_TROUBLE);
SetDParam(1, STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED);
SetDParam(2, p->name_1);
SetDParam(3, p->name_2);
return STR_02B6;
case 2:
SET_DPARAM16(0, STR_7059_TRANSPORT_COMPANY_MERGER);
SET_DPARAM16(1, STR_705A_HAS_BEEN_SOLD_TO_FOR);
SetDParam(0, STR_7059_TRANSPORT_COMPANY_MERGER);
SetDParam(1, STR_705A_HAS_BEEN_SOLD_TO_FOR);
COPY_IN_DPARAM(2,ni->params, 2);
SET_DPARAM16(4, p->name_1);
SET_DPARAM32(5, p->name_2);
SetDParam(4, p->name_1);
SetDParam(5, p->name_2);
COPY_IN_DPARAM(6,ni->params + 2, 1);
return STR_02B6;
case 3:
SET_DPARAM16(0, STR_705C_BANKRUPT);
SET_DPARAM16(1, STR_705D_HAS_BEEN_CLOSED_DOWN_BY);
SetDParam(0, STR_705C_BANKRUPT);
SetDParam(1, STR_705D_HAS_BEEN_CLOSED_DOWN_BY);
COPY_IN_DPARAM(2,ni->params, 2);
return STR_02B6;
case 4:
SET_DPARAM16(0, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED);
SET_DPARAM16(1, STR_705F_STARTS_CONSTRUCTION_NEAR);
SET_DPARAM16(2, p->name_1);
SET_DPARAM32(3, p->name_2);
SetDParam(0, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED);
SetDParam(1, STR_705F_STARTS_CONSTRUCTION_NEAR);
SetDParam(2, p->name_1);
SetDParam(3, p->name_2);
COPY_IN_DPARAM(4,ni->params, 2);
return STR_02B6;
default:
@@ -505,7 +584,7 @@ StringID GetNewsStringBankrupcy(NewsItem *ni)
return 0;
}
static void PlayersGenStatistics()
static void PlayersGenStatistics(void)
{
Station *st;
Player *p;
@@ -554,7 +633,7 @@ static void AddSingleInflation(int32 *value, uint16 *frac, int32 amt)
*value += (int32)(tmp >> 16) + (low >> 16);
}
static void AddInflation()
static void AddInflation(void)
{
int i;
int32 inf = _economy.infl_amount * 54;
@@ -578,11 +657,12 @@ static void AddInflation()
}
InvalidateWindowClasses(WC_BUILD_VEHICLE);
InvalidateWindowClasses(WC_REPLACE_VEHICLE);
InvalidateWindowClasses(WC_VEHICLE_DETAILS);
InvalidateWindow(WC_PAYMENT_RATES, 0);
}
static void PlayersPayInterest()
static void PlayersPayInterest(void)
{
Player *p;
int interest = _economy.interest_rate * 54;
@@ -601,7 +681,7 @@ static void PlayersPayInterest()
}
}
static void HandleEconomyFluctuations()
static void HandleEconomyFluctuations(void)
{
if (_opt.diff.economy == 0)
return;
@@ -677,7 +757,7 @@ static const int32 _price_base[NUM_PRICES] = {
1000000, // build_industry
};
void StartupEconomy()
void StartupEconomy(void)
{
int i;
@@ -713,50 +793,50 @@ Pair SetupSubsidyDecodeParam(Subsidy *s, bool mode)
Pair tp;
/* if mode is false, convert into plural */
SET_DPARAM16(0, _cargoc.names_s[s->cargo_type] + (mode?0:32));
SetDParam(0, _cargoc.names_s[s->cargo_type] + (mode?0:32));
if (s->age < 12) {
if (!(s->cargo_type == CT_PASSENGERS || s->cargo_type == CT_MAIL)) {
SET_DPARAM16(1, STR_2029);
i = DEREF_INDUSTRY(s->from);
SetDParam(1, STR_2029);
i = GetIndustry(s->from);
tile = i->xy;
SET_DPARAM16(2, i->town->townnametype);
SET_DPARAM32(3, i->town->townnameparts);
SetDParam(2, i->town->townnametype);
SetDParam(3, i->town->townnameparts);
SET_DPARAM16(4, i->type + STR_4802_COAL_MINE);
SetDParam(4, i->type + STR_4802_COAL_MINE);
if (s->cargo_type != CT_GOODS && s->cargo_type != CT_FOOD) {
SET_DPARAM16(5, STR_2029);
i = DEREF_INDUSTRY(s->to);
SetDParam(5, STR_2029);
i = GetIndustry(s->to);
tile2 = i->xy;
SET_DPARAM16(8, i->type + STR_4802_COAL_MINE);
SET_DPARAM16(6, i->town->townnametype);
SET_DPARAM32(7, i->town->townnameparts);
SetDParam(8, i->type + STR_4802_COAL_MINE);
SetDParam(6, i->town->townnametype);
SetDParam(7, i->town->townnameparts);
} else {
t = DEREF_TOWN(s->to);
t = GetTown(s->to);
tile2 = t->xy;
SET_DPARAM16(5, t->townnametype);
SET_DPARAM32(6, t->townnameparts);
SetDParam(5, t->townnametype);
SetDParam(6, t->townnameparts);
}
} else {
t = DEREF_TOWN(s->from);
t = GetTown(s->from);
tile = t->xy;
SET_DPARAM16(1, t->townnametype);
SET_DPARAM32(2, t->townnameparts);
SetDParam(1, t->townnametype);
SetDParam(2, t->townnameparts);
t = DEREF_TOWN(s->to);
t = GetTown(s->to);
tile2 = t->xy;
SET_DPARAM16(3, t->townnametype);
SET_DPARAM32(4, t->townnameparts);
SetDParam(3, t->townnametype);
SetDParam(4, t->townnameparts);
}
} else {
st = DEREF_STATION(s->from);
st = GetStation(s->from);
tile = st->xy;
SET_DPARAM16(1, st->index);
SetDParam(1, st->index);
st = DEREF_STATION(s->to);
st = GetStation(s->to);
tile2 = st->xy;
SET_DPARAM16(2, st->index);
SetDParam(2, st->index);
}
tp.a = tile;
@@ -765,7 +845,7 @@ Pair SetupSubsidyDecodeParam(Subsidy *s, bool mode)
return tp;
}
void DeleteSubsidyWithIndustry(byte index)
void DeleteSubsidyWithIndustry(uint16 index)
{
Subsidy *s;
@@ -778,7 +858,7 @@ void DeleteSubsidyWithIndustry(byte index)
}
}
void DeleteSubsidyWithStation(byte index)
void DeleteSubsidyWithStation(uint16 index)
{
Subsidy *s;
bool dirty = false;
@@ -808,11 +888,11 @@ static void FindSubsidyPassengerRoute(FoundRoute *fr)
fr->distance = (uint)-1;
fr->from = from = DEREF_TOWN(InteractiveRandomRange(_total_towns));
fr->from = from = GetTown(RandomRange(_total_towns));
if (from->xy == 0 || from->population < 400)
return;
fr->to = to = DEREF_TOWN(InteractiveRandomRange(_total_towns));
fr->to = to = GetTown(RandomRange(_total_towns));
if (from==to || to->xy == 0 || to->population < 400 || to->pct_pass_transported > 42)
return;
@@ -827,12 +907,12 @@ static void FindSubsidyCargoRoute(FoundRoute *fr)
fr->distance = (uint)-1;
fr->from = i = DEREF_INDUSTRY(InteractiveRandomRange(_total_industries));
fr->from = i = GetIndustry(RandomRange(_total_industries));
if (i->xy == 0)
return;
// Randomize cargo type
if (InteractiveRandom()&1 && i->produced_cargo[1] != 0xFF) {
if (Random()&1 && i->produced_cargo[1] != 0xFF) {
cargo = i->produced_cargo[1];
trans = i->pct_transported[1];
total = i->total_production[1];
@@ -852,7 +932,7 @@ static void FindSubsidyCargoRoute(FoundRoute *fr)
if (cargo == CT_GOODS || cargo == CT_FOOD) {
// The destination is a town
Town *t = DEREF_TOWN(InteractiveRandomRange(_total_towns));
Town *t = GetTown(RandomRange(_total_towns));
// Only want big towns
if (t->xy == 0 || t->population < 900)
@@ -861,7 +941,7 @@ static void FindSubsidyCargoRoute(FoundRoute *fr)
fr->to = t;
} else {
// The destination is an industry
Industry *i2 = DEREF_INDUSTRY(InteractiveRandomRange(_total_industries));
Industry *i2 = GetIndustry(RandomRange(_total_industries));
// The industry must accept the cargo
if (i == i2 || i2->xy == 0 ||
@@ -909,7 +989,7 @@ void RemoteSubsidyAdd(Subsidy *s_new)
InvalidateWindow(WC_SUBSIDIES_LIST, 0);
}
static void SubsidyMonthlyHandler()
static void SubsidyMonthlyHandler(void)
{
Subsidy *s;
Pair pair;
@@ -928,7 +1008,7 @@ static void SubsidyMonthlyHandler()
s->cargo_type = 0xFF;
modified = true;
} else if (s->age == 2*12-1) {
st = DEREF_STATION(s->to);
st = GetStation(s->to);
if (st->owner == _local_player) {
pair = SetupSubsidyDecodeParam(s, 1);
AddNewsItem(STR_202F_SUBSIDY_WITHDRAWN_SERVICE, NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_SUBSIDIES, 0), pair.a, pair.b);
@@ -940,10 +1020,8 @@ static void SubsidyMonthlyHandler()
}
}
if ((_networking) && (!_networking_server)) return;
// 25% chance to go on
if (ICHANCE16(1,4)) {
if (CHANCE16(1,4)) {
// Find a free slot
s = _subsidies;
while (s->cargo_type != 0xFF) {
@@ -963,13 +1041,12 @@ static void SubsidyMonthlyHandler()
FindSubsidyCargoRoute(&fr);
if (fr.distance <= 70) {
s->cargo_type = fr.cargo;
s->from = (Industry*)fr.from - _industries;
s->to = (fr.cargo == CT_GOODS || fr.cargo == CT_FOOD) ? ((Town*)fr.to)->index : (Industry*)fr.to - _industries;
s->from = ((Industry*)fr.from)->index;
s->to = (fr.cargo == CT_GOODS || fr.cargo == CT_FOOD) ? ((Town*)fr.to)->index : ((Industry*)fr.to)->index;
add_subsidy:
if (!CheckSubsidyDuplicate(s)) {
s->age = 0;
pair = SetupSubsidyDecodeParam(s, 0);
if (_networking_server) NetworkSendEvent(NET_EVENT_SUBSIDY,sizeof(Subsidy),s);
AddNewsItem(STR_2030_SERVICE_SUBSIDY_OFFERED, NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_SUBSIDIES, 0), pair.a, pair.b);
modified = true;
break;
@@ -985,12 +1062,14 @@ no_add:;
static const byte _subsidies_desc[] = {
SLE_VAR(Subsidy,cargo_type, SLE_UINT8),
SLE_VAR(Subsidy,age, SLE_UINT8),
SLE_VAR(Subsidy,from, SLE_UINT8),
SLE_VAR(Subsidy,to, SLE_UINT8),
SLE_CONDVAR(Subsidy,from, SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
SLE_CONDVAR(Subsidy,from, SLE_UINT16, 5, 255),
SLE_CONDVAR(Subsidy,to, SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
SLE_CONDVAR(Subsidy,to, SLE_UINT16, 5, 255),
SLE_END()
};
static void Save_SUBS()
static void Save_SUBS(void)
{
int i;
Subsidy *s;
@@ -1004,7 +1083,7 @@ static void Save_SUBS()
}
}
static void Load_SUBS()
static void Load_SUBS(void)
{
int index;
while ((index = SlIterateArray()) != -1)
@@ -1048,7 +1127,7 @@ static void DeliverGoodsToIndustry(TileIndex xy, byte cargo_type, int num_pieces
* the cargo */
best = NULL;
u = _patches.station_spread + 8;
for(ind = _industries; ind != endof(_industries); ind++) {
FOR_ALL_INDUSTRIES(ind) {
if (ind->xy != 0 && (cargo_type == ind->accepts_cargo[0] || cargo_type
== ind->accepts_cargo[1] || cargo_type == ind->accepts_cargo[2]) &&
ind->produced_cargo[0] != 0xFF &&
@@ -1088,18 +1167,18 @@ static bool CheckSubsidised(Station *from, Station *to, byte cargo_type)
/* Check distance from source */
if (cargo_type == CT_PASSENGERS || cargo_type == CT_MAIL) {
xy = DEREF_TOWN(s->from)->xy;
xy = GetTown(s->from)->xy;
} else {
xy = (DEREF_INDUSTRY(s->from))->xy;
xy = (GetIndustry(s->from))->xy;
}
if (GetTileDist1D(xy, from->xy) > 9)
continue;
/* Check distance from dest */
if (cargo_type == CT_PASSENGERS || cargo_type == CT_MAIL || cargo_type == CT_GOODS || cargo_type == CT_FOOD) {
xy = DEREF_TOWN(s->to)->xy;
xy = GetTown(s->to)->xy;
} else {
xy = (DEREF_INDUSTRY(s->to))->xy;
xy = (GetIndustry(s->to))->xy;
}
if (GetTileDist1D(xy, to->xy) > 9)
@@ -1115,8 +1194,8 @@ static bool CheckSubsidised(Station *from, Station *to, byte cargo_type)
INJECT_DPARAM(2);
p = DEREF_PLAYER(_current_player);
SET_DPARAM16(0, p->name_1);
SET_DPARAM32(1, p->name_2);
SetDParam(0, p->name_1);
SetDParam(1, p->name_2);
AddNewsItem(
STR_2031_SERVICE_SUBSIDY_AWARDED + _opt.diff.subsidy_multiplier,
NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_SUBSIDIES, 0),
@@ -1145,8 +1224,8 @@ static int32 DeliverGoods(int num_pieces, byte cargo_type, byte source, byte des
}
// Get station pointers.
s_from = DEREF_STATION(source);
s_to = DEREF_STATION(dest);
s_from = GetStation(source);
s_to = GetStation(dest);
// Check if a subsidy applies.
subsidised = CheckSubsidised(s_from, s_to, cargo_type);
@@ -1197,6 +1276,59 @@ static int32 DeliverGoods(int num_pieces, byte cargo_type, byte source, byte des
return profit;
}
/*
* Returns true if Vehicle v should wait loading because other vehicle is
* already loading the same cargo type
* v = vehicle to load, u = GetFirstInChain(v)
*/
static bool LoadWait(const Vehicle *v, const Vehicle *u) {
const Vehicle *w;
const Vehicle *x;
bool has_any_cargo = false;
if (!(u->current_order.flags & OF_FULL_LOAD)) return false;
for (w = u; w != NULL; w = w->next) {
if (w->cargo_count != 0) {
if (v->cargo_type == w->cargo_type &&
u->last_station_visited == w->cargo_source)
return false;
has_any_cargo = true;
}
}
FOR_ALL_VEHICLES(x) {
if ((x->type != VEH_Train || x->subtype == TS_Front_Engine) && // for all locs
u->last_station_visited == x->last_station_visited && // at the same station
!(x->vehstatus & VS_STOPPED) && // not stopped
x->current_order.type == OT_LOADING && // loading
u != x) { // not itself
bool other_has_any_cargo = false;
bool has_space_for_same_type = false;
bool other_has_same_type = false;
for (w = x; w != NULL; w = w->next) {
if (w->cargo_count < w->cargo_cap && v->cargo_type == w->cargo_type)
has_space_for_same_type = true;
if (w->cargo_count != 0) {
if (v->cargo_type == w->cargo_type &&
u->last_station_visited == w->cargo_source)
other_has_same_type = true;
other_has_any_cargo = true;
}
}
if (has_space_for_same_type) {
if (other_has_same_type) return true;
if (other_has_any_cargo && !has_any_cargo) return true;
}
}
}
return false;
}
int LoadUnloadVehicle(Vehicle *v)
{
int profit = 0;
@@ -1208,17 +1340,19 @@ int LoadUnloadVehicle(Vehicle *v)
GoodsEntry *ge;
int t;
uint count, cap;
byte old_player;
bool completely_empty = true;
assert((v->next_order&0x1F) == OT_LOADING);
assert(v->current_order.type == OT_LOADING);
v->cur_speed = 0;
old_player = _current_player;
_current_player = v->owner;
st = DEREF_STATION(last_visited = v->last_station_visited);
st = GetStation(last_visited = v->last_station_visited);
for(;;) {
if (v->cargo_cap == 0)
goto next_vehicle;
for (; v != NULL; v = v->next) {
if (v->cargo_cap == 0) continue;
ge = &st->goods[v->cargo_type];
@@ -1230,7 +1364,7 @@ int LoadUnloadVehicle(Vehicle *v)
profit += DeliverGoods(v->cargo_count, v->cargo_type, v->cargo_source, last_visited, v->cargo_days);
result |= 1;
v->cargo_count = 0;
} else if (u->next_order & OF_UNLOAD) {
} else if (u->current_order.flags & OF_UNLOAD) {
/* unload goods and let it wait at the station */
st->time_since_unload = 0;
@@ -1250,11 +1384,13 @@ int LoadUnloadVehicle(Vehicle *v)
result |= 2;
v->cargo_count = 0;
}
if (v->cargo_count != 0)
completely_empty = false;
}
/* don't pick up goods that we unloaded */
if (u->next_order & OF_UNLOAD)
goto next_vehicle;
if (u->current_order.flags & OF_UNLOAD) continue;
/* update stats */
ge->days_since_pickup = 0;
@@ -1269,6 +1405,22 @@ int LoadUnloadVehicle(Vehicle *v)
// has capacity for it, load it on the vehicle.
if ((count=ge->waiting_acceptance & 0xFFF) != 0 &&
(cap = v->cargo_cap - v->cargo_count) != 0) {
if (v->cargo_count == 0)
TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
/* Skip loading this vehicle if another train/vehicle is already handling
* the same cargo type at this station */
if (_patches.improved_load && LoadWait(v,u)) continue;
/* TODO: Regarding this, when we do gradual loading, we
* should first unload all vehicles and then start
* loading them. Since this will cause
* VEHICLE_TRIGGER_EMPTY to be called at the time when
* the whole vehicle chain is really totally empty, the
* @completely_empty assignment can then be safely
* removed; that's how TTDPatch behaves too. --pasky */
completely_empty = false;
if (cap > count) cap = count;
v->cargo_count += cap;
ge->waiting_acceptance -= cap;
@@ -1281,10 +1433,6 @@ int LoadUnloadVehicle(Vehicle *v)
result |= 2;
st->last_vehicle = v->index;
}
next_vehicle:;
if (!(v = v->next))
break;
}
v = u;
@@ -1301,6 +1449,10 @@ next_vehicle:;
v->load_unload_time_rem = unloading_time;
if (completely_empty) {
TriggerVehicle(v, VEHICLE_TRIGGER_EMPTY);
}
if (result != 0) {
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
@@ -1312,16 +1464,17 @@ next_vehicle:;
SubtractMoneyFromPlayer(-profit);
if (_current_player == _local_player)
SndPlayVehicleFx(0x12, v);
SndPlayVehicleFx(SND_14_CASHTILL, v);
ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, -profit);
}
}
_current_player = old_player;
return result;
}
void PlayersMonthlyLoop()
void PlayersMonthlyLoop(void)
{
PlayersGenStatistics();
if (_patches.inflation)
@@ -1339,9 +1492,9 @@ static void DoAcquireCompany(Player *p)
int i,pi;
int64 value;
SET_DPARAM16(0, p->name_1);
SET_DPARAM32(1, p->name_2);
SET_DPARAM32(2, p->bankrupt_value);
SetDParam(0, p->name_1);
SetDParam(1, p->name_2);
SetDParam(2, p->bankrupt_value);
AddNewsItem( (StringID)(_current_player + 16*2), NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
// original code does this a little bit differently
@@ -1366,8 +1519,11 @@ static void DoAcquireCompany(Player *p)
p->is_active = false;
DeletePlayerWindows(pi);
RebuildVehicleLists(); //Updates the open windows to add the newly acquired vehicles to the lists
}
extern int GetAmountOwnedBy(Player *p, byte owner);
int32 CmdBuyShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
Player *p;
@@ -1378,6 +1534,24 @@ int32 CmdBuyShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2)
SET_EXPENSES_TYPE(EXPENSES_OTHER);
p = DEREF_PLAYER(p1);
if (_cur_year - p->inaugurated_year < 6) {
_error_message = STR_7080_PROTECTED;
return CMD_ERROR;
}
/* Check if buying shares is allowed (protection against modified clients */
if (!_patches.allow_shares)
return CMD_ERROR;
/* Those lines are here for network-protection (clients can be slow) */
if (GetAmountOwnedBy(p, OWNER_SPECTATOR) == 0)
return 0;
/* We can not buy out a real player in networking */
if (GetAmountOwnedBy(p, OWNER_SPECTATOR) == 1 && !p->is_ai)
return 0;
cost = CalculateCompanyValue(p) >> 2;
if (flags & DC_EXEC) {
b = p->share_owners;
@@ -1405,6 +1579,14 @@ int32 CmdSellShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2)
SET_EXPENSES_TYPE(EXPENSES_OTHER);
p = DEREF_PLAYER(p1);
/* Check if selling shares is allowed (protection against modified clients */
if (!_patches.allow_shares)
return CMD_ERROR;
/* Those lines are here for network-protection (clients can be slow) */
if (GetAmountOwnedBy(p, _current_player) == 0)
return 0;
/* adjust it a little to make it less profitable to sell and buy */
cost = CalculateCompanyValue(p) >> 2;
cost = -(cost - (cost >> 7));
@@ -1430,14 +1612,14 @@ int32 CmdBuyCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2)
}
// Prices
static void SaveLoad_PRIC()
static void SaveLoad_PRIC(void)
{
SlArray(&_price, NUM_PRICES, SLE_INT32);
SlArray(&_price_frac, NUM_PRICES, SLE_UINT16);
}
// Cargo payment rates
static void SaveLoad_CAPR()
static void SaveLoad_CAPR(void)
{
SlArray(&_cargo_payment_rates, NUM_CARGO, SLE_INT32);
SlArray(&_cargo_payment_rates_frac, NUM_CARGO, SLE_UINT16);
@@ -1454,7 +1636,7 @@ static const byte _economy_desc[] = {
};
// Economy variables
static void SaveLoad_ECMY()
static void SaveLoad_ECMY(void)
{
SlObject(&_economy, &_economy_desc);
}

View File

@@ -18,8 +18,8 @@ VARDEF Economy _economy;
typedef struct Subsidy {
byte cargo_type;
byte age;
byte from;
byte to;
uint16 from;
uint16 to;
} Subsidy;
@@ -68,8 +68,8 @@ void UpdatePlayerHouse(Player *p, uint score);
VARDEF Subsidy _subsidies[MAX_PLAYERS];
Pair SetupSubsidyDecodeParam(Subsidy *s, bool mode);
void DeleteSubsidyWithIndustry(byte index);
void DeleteSubsidyWithStation(byte index);
void DeleteSubsidyWithIndustry(uint16 index);
void DeleteSubsidyWithStation(uint16 index);
void RemoteSubsidyAdd(Subsidy *s_new);
int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, byte cargo_type);

457
engine.c
View File

@@ -1,12 +1,15 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "engine.h"
#include "table/engines.h"
#include "gfx.h"
#include "player.h"
#include "command.h"
#include "vehicle.h"
#include "news.h"
#include "saveload.h"
#include "sprite.h"
#define UPDATE_PLAYER_RAILTYPE(e,p) if ((byte)(e->railtype + 1) > p->max_railtype) p->max_railtype = e->railtype + 1;
@@ -47,7 +50,7 @@ byte _local_cargo_id_landscape[NUM_CID] = {
void ShowEnginePreviewWindow(int engine);
void DeleteCustomEngineNames()
void DeleteCustomEngineNames(void)
{
uint i;
StringID old;
@@ -61,13 +64,13 @@ void DeleteCustomEngineNames()
_vehicle_design_names &= ~1;
}
void LoadCustomEngineNames()
void LoadCustomEngineNames(void)
{
// XXX: not done */
DEBUG(misc, 1) ("LoadCustomEngineNames: not done");
}
static void SetupEngineNames()
static void SetupEngineNames(void)
{
uint i;
@@ -78,7 +81,7 @@ static void SetupEngineNames()
LoadCustomEngineNames();
}
static void AdjustAvailAircraft()
static void AdjustAvailAircraft(void)
{
uint16 date = _date;
byte avail = 0;
@@ -105,21 +108,47 @@ static void CalcEngineReliability(Engine *e)
uint max = e->reliability_max;
e->reliability = (int)age * (int)(e->reliability_final - max) / e->duration_phase_3 + max;
} else {
e->player_avail = _patches.never_expire_vehicles ? -1 : 0;
// time's up for this engine
// make it either available to all players (if never_expire_vehicles is enabled and if it was available earlier)
// or disable this engine completely
e->player_avail = (_patches.never_expire_vehicles && e->player_avail)? -1 : 0;
e->reliability = e->reliability_final;
}
}
void StartupEngines()
void AddTypeToEngines(void)
{
Engine *e;
uint32 counter = 0;
for(e=_engines; e != endof(_engines); e++, counter++) {
e->type = VEH_Train;
if (counter >= ROAD_ENGINES_INDEX) {
e->type = VEH_Road;
if (counter >= SHIP_ENGINES_INDEX) {
e->type = VEH_Ship;
if (counter >= AIRCRAFT_ENGINES_INDEX) {
e->type = VEH_Aircraft;
if (counter >= TOTAL_NUM_ENGINES) {
e->type = VEH_Special;
}
}
}
}
}
}
void StartupEngines(void)
{
Engine *e;
const EngineInfo *ei;
uint32 r;
uint32 r, counter = 0;
SetupEngineNames();
for(e=_engines, ei=_engine_info; e != endof(_engines); e++, ei++, counter++) {
for(e=_engines, ei=_engine_info; e != endof(_engines); e++,ei++) {
e->age = 0;
e->railtype = ei->railtype_climates >> 4;
e->flags = 0;
@@ -159,6 +188,12 @@ void StartupEngines()
e->flags |= ENGINE_AVAILABLE;
e->player_avail = 0;
}
/* This sets up type for the engine
It is needed if you want to ask the engine what type it is
It should hopefully be the same as when you ask a vehicle what it is
but using this, you can ask what type an engine number is
even if it is not a vehicle (yet)*/
}
AdjustAvailAircraft();
@@ -172,7 +207,7 @@ uint32 _engine_refit_masks[256];
struct WagonOverride {
byte *train_id;
int trains;
struct SpriteSuperSet superset;
struct SpriteGroup group;
};
static struct WagonOverrides {
@@ -180,7 +215,7 @@ static struct WagonOverrides {
struct WagonOverride *overrides;
} _engine_wagon_overrides[256];
void SetWagonOverrideSprites(byte engine, struct SpriteSuperSet *superset,
void SetWagonOverrideSprites(byte engine, struct SpriteGroup *group,
byte *train_id, int trains)
{
struct WagonOverrides *wos;
@@ -192,19 +227,24 @@ void SetWagonOverrideSprites(byte engine, struct SpriteSuperSet *superset,
wos->overrides_count * sizeof(struct WagonOverride));
wo = &wos->overrides[wos->overrides_count - 1];
wo->superset = *superset;
/* FIXME: If we are replacing an override, release original SpriteGroup
* to prevent leaks. But first we need to refcount the SpriteGroup.
* --pasky */
wo->group = *group;
wo->trains = trains;
wo->train_id = malloc(trains);
memcpy(wo->train_id, train_id, trains);
}
static struct SpriteSuperSet *GetWagonOverrideSpriteSet(byte engine, byte overriding_engine)
static struct SpriteGroup *GetWagonOverrideSpriteSet(byte engine, byte overriding_engine)
{
struct WagonOverrides *wos = &_engine_wagon_overrides[engine];
int i;
// XXX: This could turn out to be a timesink on profiles. We could always just
// dedicate 65535 bytes for an [engine][train] trampoline.
// XXX: This could turn out to be a timesink on profiles. We could
// always just dedicate 65535 bytes for an [engine][train] trampoline
// for O(1). Or O(logMlogN) and searching binary tree or smt. like
// that. --pasky
for (i = 0; i < wos->overrides_count; i++) {
struct WagonOverride *wo = &wos->overrides[i];
@@ -212,7 +252,7 @@ static struct SpriteSuperSet *GetWagonOverrideSpriteSet(byte engine, byte overri
for (j = 0; j < wo->trains; j++) {
if (wo->train_id[j] == overriding_engine)
return &wo->superset;
return &wo->group;
}
}
return NULL;
@@ -224,44 +264,263 @@ byte _engine_original_sprites[256];
// (It isn't and shouldn't be like this in the GRF files since new cargo types
// may appear in future - however it's more convenient to store it like this in
// memory. --pasky)
static struct SpriteSuperSet _engine_custom_sprites[256][NUM_CID];
static struct SpriteGroup _engine_custom_sprites[256][NUM_CID];
void SetCustomEngineSprites(byte engine, byte cargo, struct SpriteSuperSet *superset)
void SetCustomEngineSprites(byte engine, byte cargo, struct SpriteGroup *group)
{
assert(superset->sprites_per_set == 4 || superset->sprites_per_set == 8);
_engine_custom_sprites[engine][cargo] = *superset;
/* FIXME: If we are replacing an override, release original SpriteGroup
* to prevent leaks. But first we need to refcount the SpriteGroup.
* --pasky */
_engine_custom_sprites[engine][cargo] = *group;
}
int GetCustomEngineSprite(byte engine, uint16 overriding_engine, byte cargo,
byte loaded, byte in_motion, byte direction)
typedef struct RealSpriteGroup *(*resolve_callback)(struct SpriteGroup *spritegroup,
struct Vehicle *veh,
void *callback); /* XXX data pointer used as function pointer */
static struct RealSpriteGroup *
ResolveVehicleSpriteGroup(struct SpriteGroup *spritegroup, struct Vehicle *veh,
resolve_callback callback)
{
struct SpriteSuperSet *superset = &_engine_custom_sprites[engine][cargo];
//debug("spgt %d", spritegroup->type);
switch (spritegroup->type) {
case SGT_REAL:
return &spritegroup->g.real;
case SGT_DETERMINISTIC: {
struct DeterministicSpriteGroup *dsg = &spritegroup->g.determ;
struct SpriteGroup *target;
int value = -1;
//debug("[%p] Having fun resolving variable %x", veh, dsg->variable);
if ((dsg->variable >> 6) == 0) {
/* General property */
value = GetDeterministicSpriteValue(dsg->variable);
} else {
/* Vehicle-specific property. */
if (veh == NULL) {
/* We are in a purchase list of something,
* and we are checking for something undefined.
* That means we should get the first target
* (NOT the default one). */
if (dsg->num_ranges > 0) {
target = &dsg->ranges[0].group;
} else {
target = dsg->default_group;
}
return callback(target, NULL, callback);
}
if (dsg->var_scope == VSG_SCOPE_PARENT) {
/* First engine in the vehicle chain */
if (veh->type == VEH_Train)
veh = GetFirstVehicleInChain(veh);
}
if (dsg->variable == 0x40) {
if (veh->type == VEH_Train) {
Vehicle *u = GetFirstVehicleInChain(veh);
byte chain_before = 0, chain_after = 0;
while (u != veh) {
u = u->next;
chain_before++;
}
while (u->next != NULL) {
u = u->next;
chain_after++;
};
value = chain_before << 16 | chain_after << 8
| (chain_before + chain_after + 1);
} else {
value = 1; /* 1 vehicle in the chain */
}
} else {
// TTDPatch runs on little-endian arch;
// Variable is 0x80 + offset in TTD's vehicle structure
switch (dsg->variable - 0x80) {
#define veh_prop(id_, value_) case (id_): value = (value_); break
veh_prop(0x00, veh->type);
veh_prop(0x01, veh->subtype);
veh_prop(0x04, veh->index);
veh_prop(0x05, veh->index & 0xFF);
/* XXX? Is THIS right? */
veh_prop(0x0A, PackOrder(&veh->current_order));
veh_prop(0x0B, PackOrder(&veh->current_order) & 0xff);
veh_prop(0x0C, veh->num_orders);
veh_prop(0x0D, veh->cur_order_index);
veh_prop(0x10, veh->load_unload_time_rem);
veh_prop(0x11, veh->load_unload_time_rem & 0xFF);
veh_prop(0x12, veh->date_of_last_service);
veh_prop(0x13, veh->date_of_last_service & 0xFF);
veh_prop(0x14, veh->service_interval);
veh_prop(0x15, veh->service_interval & 0xFF);
veh_prop(0x16, veh->last_station_visited);
veh_prop(0x17, veh->tick_counter);
veh_prop(0x18, veh->max_speed);
veh_prop(0x19, veh->max_speed & 0xFF);
veh_prop(0x1F, veh->direction);
veh_prop(0x28, veh->cur_image);
veh_prop(0x29, veh->cur_image & 0xFF);
veh_prop(0x32, veh->vehstatus);
veh_prop(0x33, veh->vehstatus);
veh_prop(0x34, veh->cur_speed);
veh_prop(0x35, veh->cur_speed & 0xFF);
veh_prop(0x36, veh->subspeed);
veh_prop(0x37, veh->acceleration);
veh_prop(0x39, veh->cargo_type);
veh_prop(0x3A, veh->cargo_cap);
veh_prop(0x3B, veh->cargo_cap & 0xFF);
veh_prop(0x3C, veh->cargo_count);
veh_prop(0x3D, veh->cargo_count & 0xFF);
veh_prop(0x3E, veh->cargo_source); // Probably useless; so what
veh_prop(0x3F, veh->cargo_days);
veh_prop(0x40, veh->age);
veh_prop(0x41, veh->age & 0xFF);
veh_prop(0x42, veh->max_age);
veh_prop(0x43, veh->max_age & 0xFF);
veh_prop(0x44, veh->build_year);
veh_prop(0x45, veh->unitnumber);
veh_prop(0x46, veh->engine_type);
veh_prop(0x47, veh->engine_type & 0xFF);
veh_prop(0x48, veh->spritenum);
veh_prop(0x49, veh->day_counter);
veh_prop(0x4A, veh->breakdowns_since_last_service);
veh_prop(0x4B, veh->breakdown_ctr);
veh_prop(0x4C, veh->breakdown_delay);
veh_prop(0x4D, veh->breakdown_chance);
veh_prop(0x4E, veh->reliability);
veh_prop(0x4F, veh->reliability & 0xFF);
veh_prop(0x50, veh->reliability_spd_dec);
veh_prop(0x51, veh->reliability_spd_dec & 0xFF);
veh_prop(0x52, veh->profit_this_year);
veh_prop(0x53, veh->profit_this_year & 0xFFFFFF);
veh_prop(0x54, veh->profit_this_year & 0xFFFF);
veh_prop(0x55, veh->profit_this_year & 0xFF);
veh_prop(0x56, veh->profit_last_year);
veh_prop(0x57, veh->profit_last_year & 0xFF);
veh_prop(0x58, veh->profit_last_year);
veh_prop(0x59, veh->profit_last_year & 0xFF);
/* veh_prop(0x5A, veh->next_in_chain_old);
veh_prop(0x5B, veh->next_in_chain_old & 0xFF);*/
veh_prop(0x5C, veh->value);
veh_prop(0x5D, veh->value & 0xFFFFFF);
veh_prop(0x5E, veh->value & 0xFFFF);
veh_prop(0x5F, veh->value & 0xFF);
veh_prop(0x60, veh->string_id);
veh_prop(0x61, veh->string_id & 0xFF);
/* 00h..07h=sub image? 40h=in tunnel; actually some kind of status
* aircraft: >=13h when in flight
* train, ship: 80h=in depot
* rv: 0feh=in depot */
/* TODO veh_prop(0x62, veh->???); */
/* TODO: The rest is per-vehicle, I hope no GRF file looks so far.
* But they won't let us have an easy ride so surely *some* GRF
* file does. So someone needs to do this too. --pasky */
#undef veh_prop
}
}
}
target = value != -1 ? EvalDeterministicSpriteGroup(dsg, value) : dsg->default_group;
//debug("Resolved variable %x: %d, %p", dsg->variable, value, callback);
return callback(target, veh, callback);
}
case SGT_RANDOMIZED: {
struct RandomizedSpriteGroup *rsg = &spritegroup->g.random;
if (veh == NULL) {
/* Purchase list of something. Show the first one. */
assert(rsg->num_groups > 0);
//debug("going for %p: %d", rsg->groups[0], rsg->groups[0].type);
return callback(&rsg->groups[0], NULL, callback);
}
if (rsg->var_scope == VSG_SCOPE_PARENT) {
/* First engine in the vehicle chain */
if (veh->type == VEH_Train)
veh = GetFirstVehicleInChain(veh);
}
return callback(EvalRandomizedSpriteGroup(rsg, veh->random_bits), veh, callback);
}
default:
error("I don't know how to handle such a spritegroup %d!", spritegroup->type);
return NULL;
}
}
static struct SpriteGroup *GetVehicleSpriteGroup(byte engine, Vehicle *v)
{
struct SpriteGroup *group;
uint16 overriding_engine = -1;
byte cargo = CID_PURCHASE;
if (v != NULL) {
overriding_engine = v->type == VEH_Train ? v->u.rail.first_engine : -1;
cargo = _global_cargo_id[_opt.landscape][v->cargo_type];
}
group = &_engine_custom_sprites[engine][cargo];
if (overriding_engine != 0xffff) {
struct SpriteGroup *overset;
overset = GetWagonOverrideSpriteSet(engine, overriding_engine);
if (overset) group = overset;
}
return group;
}
int GetCustomEngineSprite(byte engine, Vehicle *v, byte direction)
{
struct SpriteGroup *group;
struct RealSpriteGroup *rsg;
byte cargo = CID_PURCHASE;
byte loaded = 0;
bool in_motion = 0;
int totalsets, spriteset;
int r;
if (overriding_engine != 0xffff) {
struct SpriteSuperSet *overset;
if (v != NULL) {
int capacity = v->cargo_cap;
overset = GetWagonOverrideSpriteSet(engine, overriding_engine);
if (overset) superset = overset;
cargo = _global_cargo_id[_opt.landscape][v->cargo_type];
if (capacity == 0) capacity = 1;
loaded = (v->cargo_count * 100) / capacity;
in_motion = (v->cur_speed != 0);
}
if (!superset->sprites_per_set && cargo != 29) {
// This superset is empty but perhaps there'll be a default one.
superset = &_engine_custom_sprites[engine][29];
group = GetVehicleSpriteGroup(engine, v);
rsg = ResolveVehicleSpriteGroup(group, v, (resolve_callback) ResolveVehicleSpriteGroup);
if (rsg->sprites_per_set == 0 && cargo != 29) { /* XXX magic number */
// This group is empty but perhaps there'll be a default one.
rsg = ResolveVehicleSpriteGroup(&_engine_custom_sprites[engine][29], v,
(resolve_callback) ResolveVehicleSpriteGroup);
}
if (!superset->sprites_per_set) {
// This superset is empty. This function users should therefore
if (!rsg->sprites_per_set) {
// This group is empty. This function users should therefore
// look up the sprite number in _engine_original_sprites.
return 0;
}
direction %= 8;
if (superset->sprites_per_set == 4)
if (rsg->sprites_per_set == 4)
direction %= 4;
totalsets = in_motion ? superset->loaded_count : superset->loading_count;
totalsets = in_motion ? rsg->loaded_count : rsg->loading_count;
// My aim here is to make it possible to visually determine absolutely
// empty and totally full vehicles. --pasky
@@ -278,11 +537,91 @@ int GetCustomEngineSprite(byte engine, uint16 overriding_engine, byte cargo,
spriteset--;
}
r = (in_motion ? superset->loaded[spriteset] : superset->loading[spriteset]) + direction;
r = (in_motion ? rsg->loaded[spriteset] : rsg->loading[spriteset]) + direction;
return r;
}
// Global variables are evil, yes, but we would end up with horribly overblown
// calling convention otherwise and this should be 100% reentrant.
static byte _vsg_random_triggers;
static byte _vsg_bits_to_reseed;
extern int _custom_sprites_base;
static struct RealSpriteGroup *
TriggerVehicleSpriteGroup(struct SpriteGroup *spritegroup, struct Vehicle *veh,
resolve_callback callback)
{
if (spritegroup->type == SGT_RANDOMIZED)
_vsg_bits_to_reseed |= RandomizedSpriteGroupTriggeredBits(&spritegroup->g.random,
_vsg_random_triggers,
&veh->waiting_triggers);
return ResolveVehicleSpriteGroup(spritegroup, veh, callback);
}
static void DoTriggerVehicle(Vehicle *veh, enum VehicleTrigger trigger, byte base_random_bits, bool first)
{
struct RealSpriteGroup *rsg;
byte new_random_bits;
_vsg_random_triggers = trigger;
_vsg_bits_to_reseed = 0;
rsg = TriggerVehicleSpriteGroup(GetVehicleSpriteGroup(veh->engine_type, veh), veh,
(resolve_callback) TriggerVehicleSpriteGroup);
if (rsg->sprites_per_set == 0 && veh->cargo_type != 29) { /* XXX magic number */
// This group turned out to be empty but perhaps there'll be a default one.
rsg = TriggerVehicleSpriteGroup(&_engine_custom_sprites[veh->engine_type][29], veh,
(resolve_callback) TriggerVehicleSpriteGroup);
}
new_random_bits = Random();
veh->random_bits &= ~_vsg_bits_to_reseed;
veh->random_bits |= (first ? new_random_bits : base_random_bits) & _vsg_bits_to_reseed;
switch (trigger) {
case VEHICLE_TRIGGER_NEW_CARGO:
/* All vehicles in chain get ANY_NEW_CARGO trigger now.
* So we call it for the first one and they will recurse. */
/* Indexing part of vehicle random bits needs to be
* same for all triggered vehicles in the chain (to get
* all the random-cargo wagons carry the same cargo,
* i.e.), so we give them all the NEW_CARGO triggered
* vehicle's portion of random bits. */
assert(first);
DoTriggerVehicle(GetFirstVehicleInChain(veh), VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false);
break;
case VEHICLE_TRIGGER_DEPOT:
/* We now trigger the next vehicle in chain recursively.
* The random bits portions may be different for each
* vehicle in chain. */
if (veh->next != NULL)
DoTriggerVehicle(veh->next, trigger, 0, true);
break;
case VEHICLE_TRIGGER_EMPTY:
/* We now trigger the next vehicle in chain
* recursively. The random bits portions must be same
* for each vehicle in chain, so we give them all
* first chained vehicle's portion of random bits. */
if (veh->next != NULL)
DoTriggerVehicle(veh->next, trigger, first ? new_random_bits : base_random_bits, false);
break;
case VEHICLE_TRIGGER_ANY_NEW_CARGO:
/* Now pass the trigger recursively to the next vehicle
* in chain. */
assert(!first);
if (veh->next != NULL)
DoTriggerVehicle(veh->next, VEHICLE_TRIGGER_ANY_NEW_CARGO, base_random_bits, false);
break;
}
}
void TriggerVehicle(Vehicle *veh, enum VehicleTrigger trigger)
{
DoTriggerVehicle(veh, trigger, 0, true);
}
static char *_engine_custom_names[256];
void SetCustomEngineName(int engine, char *name)
@@ -294,7 +633,8 @@ StringID GetCustomEngineName(int engine)
{
if (!_engine_custom_names[engine])
return _engine_name_strings[engine];
strcpy(_userstring, _engine_custom_names[engine]);
strncpy(_userstring, _engine_custom_names[engine], USERSTRING_LEN);
_userstring[USERSTRING_LEN - 1] = '\0';
return STR_SPEC_USERSTRING;
}
@@ -311,9 +651,10 @@ void AcceptEnginePreview(Engine *e, int player)
e->preview_player = 0xFF;
InvalidateWindowClasses(WC_BUILD_VEHICLE);
InvalidateWindowClasses(WC_REPLACE_VEHICLE);
}
void EnginesDailyLoop()
void EnginesDailyLoop(void)
{
Engine *e;
int i,num;
@@ -328,7 +669,7 @@ void EnginesDailyLoop()
for(e=_engines,i=0; i!=TOTAL_NUM_ENGINES; e++,i++) {
if (e->flags & ENGINE_INTRODUCING) {
if (e->flags & ENGINE_PREVIEWING) {
if (!--e->preview_wait) {
if (e->preview_player != 0xFF && !--e->preview_wait) {
e->flags &= ~ENGINE_PREVIEWING;
DeleteWindowById(WC_ENGINE_PREVIEW, i);
e->preview_player++;
@@ -377,7 +718,13 @@ int32 CmdWantEnginePreview(int x, int y, uint32 flags, uint32 p1, uint32 p2)
return 0;
}
void NewVehicleAvailable(Engine *e)
// Determine if an engine type is a wagon (and not a loco)
static bool IsWagon(byte index)
{
return index < NUM_TRAIN_ENGINES && RailVehInfo(index)->flags & RVI_WAGON;
}
static void NewVehicleAvailable(Engine *e)
{
Vehicle *v;
Player *p;
@@ -387,34 +734,37 @@ void NewVehicleAvailable(Engine *e)
// prevent that player from getting future intro periods for a while.
if (e->flags&ENGINE_INTRODUCING) {
FOR_ALL_PLAYERS(p) {
uint block_preview = p->block_preview;
if (!HASBIT(e->player_avail,p->index))
continue;
for(v=_vehicles;;) {
/* We assume the user did NOT build it.. prove me wrong ;) */
p->block_preview = 20;
FOR_ALL_VEHICLES(v) {
if (v->type == VEH_Train || v->type == VEH_Road || v->type == VEH_Ship ||
(v->type == VEH_Aircraft && v->subtype <= 2)) {
if (v->owner == p->index && v->engine_type == index) break;
}
if (++v == endof(_vehicles)) {
p->block_preview = 20;
if (v->owner == p->index && v->engine_type == index) {
/* The user did prove me wrong, so restore old value */
p->block_preview = block_preview;
break;
}
}
}
}
}
e->flags = (e->flags & ~ENGINE_INTRODUCING) | ENGINE_AVAILABLE;
InvalidateWindowClasses(WC_BUILD_VEHICLE);
InvalidateWindowClasses(WC_REPLACE_VEHICLE);
// Now available for all players
e->player_avail = (byte)-1;
// Do not introduce new rail wagons
if ((byte)index < NUM_TRAIN_ENGINES) {
const RailVehicleInfo *rvi = &_rail_vehicle_info[index];
if(rvi->flags & RVI_WAGON)
if (IsWagon(index))
return;
}
// make maglev / monorail available
FOR_ALL_PLAYERS(p) {
@@ -433,7 +783,7 @@ void NewVehicleAvailable(Engine *e)
}
}
void EnginesMonthlyLoop()
void EnginesMonthlyLoop(void)
{
Engine *e;
@@ -451,6 +801,9 @@ void EnginesMonthlyLoop()
} else if (!(e->flags & (ENGINE_AVAILABLE|ENGINE_INTRODUCING)) && _date >= e->intro_date) {
// Introduction date has passed.. show introducing dialog to one player.
e->flags |= ENGINE_INTRODUCING;
// Do not introduce new rail wagons
if (!IsWagon(e - _engines))
e->preview_player = 1; // Give to the player with the highest rating.
}
}
@@ -462,7 +815,7 @@ int32 CmdRenameEngine(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
StringID str;
str = AllocateName((byte*)_decode_parameters, 0);
str = AllocateNameUnique((byte*)_decode_parameters, 0);
if (str == 0)
return CMD_ERROR;
@@ -525,7 +878,7 @@ static const byte _engine_desc[] = {
SLE_END()
};
static void Save_ENGN()
static void Save_ENGN(void)
{
Engine *e;
int i;
@@ -535,7 +888,7 @@ static void Save_ENGN()
}
}
static void Load_ENGN()
static void Load_ENGN(void)
{
int index;
while ((index = SlIterateArray()) != -1) {
@@ -543,7 +896,7 @@ static void Load_ENGN()
}
}
static void LoadSave_ENGS()
static void LoadSave_ENGS(void)
{
SlArray(_engine_name_strings, lengthof(_engine_name_strings), SLE_STRINGID);
}

103
engine.h
View File

@@ -1,6 +1,8 @@
#ifndef ENGINE_H
#define ENGINE_H
#include "sprite.h"
typedef struct RailVehicleInfo {
byte image_index;
byte flags; /* 1=multihead engine, 2=wagon */
@@ -25,6 +27,27 @@ typedef struct ShipVehicleInfo {
byte refittable;
} ShipVehicleInfo;
typedef struct AircraftVehicleInfo {
byte image_index;
byte base_cost;
byte running_cost;
byte subtype;
byte sfx;
byte acceleration;
byte max_speed;
byte mail_capacity;
uint16 passenger_capacity;
} AircraftVehicleInfo;
typedef struct RoadVehicleInfo {
byte image_index;
byte base_cost;
byte running_cost;
byte sfx;
byte max_speed;
byte capacity;
byte cargo_type;
} RoadVehicleInfo;
typedef struct EngineInfo {
uint16 base_intro;
@@ -47,6 +70,7 @@ typedef struct Engine {
byte preview_wait;
byte railtype;
byte player_avail;
byte type; // type, ie VEH_Road, VEH_Train, etc. Same as in vehicle.h
} Engine;
@@ -56,21 +80,10 @@ enum {
};
void StartupEngines();
void AddTypeToEngines(void);
void StartupEngines(void);
struct SpriteSuperSet {
// XXX: Would anyone ever need more than 16 spritesets? Maybe we should
// use even less, now we take whole 8kb for custom sprites table, oh my!
byte sprites_per_set; // means number of directions - 4 or 8
// Loaded = in motion, loading = not moving
// Each superset contains several spritesets, for various loading stages
byte loaded_count;
uint16 loaded[16]; // sprite ids
byte loading_count;
uint16 loading[16]; // sprite ids
};
extern byte _global_cargo_id[NUM_LANDSCAPE][NUM_CARGO];
enum {
CID_DEFAULT = 29,
@@ -83,15 +96,23 @@ extern byte _local_cargo_id_landscape[NUM_CID];
extern uint32 _engine_refit_masks[256];
extern byte _engine_original_sprites[256];
void SetWagonOverrideSprites(byte engine, struct SpriteSuperSet *superset, byte *train_id, int trains);
void SetCustomEngineSprites(byte engine, byte cargo, struct SpriteSuperSet *superset);
void SetWagonOverrideSprites(byte engine, struct SpriteGroup *group, byte *train_id, int trains);
void SetCustomEngineSprites(byte engine, byte cargo, struct SpriteGroup *group);
// loaded is in percents, overriding_engine 0xffff is none
int GetCustomEngineSprite(byte engine, uint16 overriding_engine, byte cargo, byte loaded, byte in_motion, byte direction);
#define GetCustomVehicleSprite(v, direction) \
GetCustomEngineSprite(v->engine_type, v->type == VEH_Train ? v->u.rail.first_engine : -1, \
_global_cargo_id[_opt.landscape][v->cargo_type], \
((v->cargo_count + 1) * 100) / (v->cargo_cap + 1), \
!!v->cur_speed, direction);
int GetCustomEngineSprite(byte engine, Vehicle *v, byte direction);
#define GetCustomVehicleSprite(v, direction) GetCustomEngineSprite(v->engine_type, v, direction)
#define GetCustomVehicleIcon(et, direction) GetCustomEngineSprite(et, NULL, direction)
enum VehicleTrigger {
VEHICLE_TRIGGER_NEW_CARGO = 1,
// Externally triggered only for the first vehicle in chain
VEHICLE_TRIGGER_DEPOT = 2,
// Externally triggered only for the first vehicle in chain, only if whole chain is empty
VEHICLE_TRIGGER_EMPTY = 4,
// Not triggered externally (called for the whole chain if we got NEW_CARGO)
VEHICLE_TRIGGER_ANY_NEW_CARGO = 8,
};
void TriggerVehicle(Vehicle *veh, enum VehicleTrigger trigger);
void SetCustomEngineName(int engine, char *name);
StringID GetCustomEngineName(int engine);
@@ -109,8 +130,8 @@ void DrawAircraftEngineInfo(int engine, int x, int y, int maxw);
void AcceptEnginePreview(Engine *e, int player);
void LoadCustomEngineNames();
void DeleteCustomEngineNames();
void LoadCustomEngineNames(void);
void DeleteCustomEngineNames(void);
enum {
@@ -121,17 +142,45 @@ enum {
NUM_ROAD_ENGINES = 88,
NUM_SHIP_ENGINES = 11,
NUM_AIRCRAFT_ENGINES = 41,
TOTAL_NUM_ENGINES = NUM_NORMAL_RAIL_ENGINES+NUM_MONORAIL_ENGINES+NUM_MAGLEV_ENGINES+NUM_ROAD_ENGINES+NUM_SHIP_ENGINES+NUM_AIRCRAFT_ENGINES,
TOTAL_NUM_ENGINES = NUM_TRAIN_ENGINES + NUM_ROAD_ENGINES + NUM_SHIP_ENGINES + NUM_AIRCRAFT_ENGINES,
AIRCRAFT_ENGINES_INDEX = NUM_TRAIN_ENGINES + NUM_ROAD_ENGINES + NUM_SHIP_ENGINES,
SHIP_ENGINES_INDEX = NUM_TRAIN_ENGINES + NUM_ROAD_ENGINES,
ROAD_ENGINES_INDEX = NUM_TRAIN_ENGINES,
};
VARDEF Engine _engines[TOTAL_NUM_ENGINES];
#define DEREF_ENGINE(i) (&_engines[i])
VARDEF StringID _engine_name_strings[TOTAL_NUM_ENGINES];
/* Access Vehicle Data */
//#include "table/engines.h"
extern EngineInfo _engine_info[TOTAL_NUM_ENGINES];
extern RailVehicleInfo _rail_vehicle_info[];
#define ship_vehicle_info(e) _ship_vehicle_info[e - SHIP_ENGINES_INDEX]
extern ShipVehicleInfo _ship_vehicle_info[];
extern RailVehicleInfo _rail_vehicle_info[NUM_TRAIN_ENGINES];
extern ShipVehicleInfo _ship_vehicle_info[NUM_SHIP_ENGINES];
extern AircraftVehicleInfo _aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES];
extern RoadVehicleInfo _road_vehicle_info[NUM_ROAD_ENGINES];
static inline RailVehicleInfo *RailVehInfo(uint e)
{
assert(e < lengthof(_rail_vehicle_info));
return &_rail_vehicle_info[e];
}
static inline ShipVehicleInfo *ShipVehInfo(uint e)
{
assert(e - SHIP_ENGINES_INDEX < lengthof(_ship_vehicle_info));
return &_ship_vehicle_info[e - SHIP_ENGINES_INDEX];
}
static inline AircraftVehicleInfo *AircraftVehInfo(uint e)
{
assert(e - AIRCRAFT_ENGINES_INDEX < lengthof(_aircraft_vehicle_info));
return &_aircraft_vehicle_info[e - AIRCRAFT_ENGINES_INDEX];
}
static inline RoadVehicleInfo *RoadVehInfo(uint e)
{
assert(e - ROAD_ENGINES_INDEX < lengthof(_road_vehicle_info));
return &_road_vehicle_info[e - ROAD_ENGINES_INDEX];
}
#endif

View File

@@ -1,6 +1,6 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "window.h"
#include "gui.h"
#include "viewport.h"
@@ -9,20 +9,19 @@
#include "command.h"
#include "news.h"
void DrawShipEngine(int x, int y, int engine, uint32 image_ormod);
void DrawShipEngineInfo(int engine, int x, int y, int maxw);
StringID GetEngineCategoryName(byte engine)
static StringID GetEngineCategoryName(byte engine)
{
if (engine < NUM_NORMAL_RAIL_ENGINES)
if (engine < NUM_TRAIN_ENGINES) {
switch (_engines[engine].railtype) {
case 0:
return STR_8102_RAILROAD_LOCOMOTIVE;
if (engine < NUM_NORMAL_RAIL_ENGINES + NUM_MONORAIL_ENGINES)
case 1:
return STR_8106_MONORAIL_LOCOMOTIVE;
if (engine < NUM_TRAIN_ENGINES)
case 2:
return STR_8107_MAGLEV_LOCOMOTIVE;
}
}
if (engine < NUM_TRAIN_ENGINES + NUM_ROAD_ENGINES)
return STR_8103_ROAD_VEHICLE;
@@ -34,11 +33,11 @@ StringID GetEngineCategoryName(byte engine)
}
static const Widget _engine_preview_widgets[] = {
{ WWT_TEXTBTN, 5, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 5, 11, 299, 0, 13, STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_IMGBTN, 5, 0, 299, 14, 191, 0x0, STR_NULL},
{ WWT_PUSHTXTBTN, 5, 85, 144, 172, 183, STR_00C9_NO, STR_NULL},
{ WWT_PUSHTXTBTN, 5, 155, 214, 172, 183, STR_00C8_YES, STR_NULL},
{ WWT_TEXTBTN, RESIZE_NONE, 5, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 5, 11, 299, 0, 13, STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_IMGBTN, RESIZE_NONE, 5, 0, 299, 14, 191, 0x0, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 5, 85, 144, 172, 183, STR_00C9_NO, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 5, 155, 214, 172, 183, STR_00C8_YES, STR_NULL},
{ WIDGETS_END},
};
@@ -69,7 +68,7 @@ static void EnginePreviewWndProc(Window *w, WindowEvent *e)
DrawWindowWidgets(w);
engine = w->window_number;
SET_DPARAM16(0, GetEngineCategoryName(engine));
SetDParam(0, GetEngineCategoryName(engine));
DrawStringMultiCenter(150, 44, STR_8101_WE_HAVE_JUST_DESIGNED_A, 296);
DrawStringCentered(w->width >> 1, 80, GetCustomEngineName(engine), 0x10);
@@ -121,12 +120,12 @@ void DrawNewsNewTrainAvail(Window *w)
DrawNewsBorder(w);
engine = WP(w,news_d).ni->string_id;
SET_DPARAM16(0, GetEngineCategoryName(engine));
SetDParam(0, GetEngineCategoryName(engine));
DrawStringMultiCenter(w->width >> 1, 20, STR_8859_NEW_NOW_AVAILABLE, w->width - 2);
GfxFillRect(25, 56, w->width - 25, w->height - 2, 10);
SET_DPARAM16(0, GetCustomEngineName(engine));
SetDParam(0, GetCustomEngineName(engine));
DrawStringMultiCenter(w->width >> 1, 57, STR_885A, w->width - 2);
DrawTrainEngine(w->width >> 1, 88, engine, 0);
@@ -137,9 +136,9 @@ void DrawNewsNewTrainAvail(Window *w)
StringID GetNewsStringNewTrainAvail(NewsItem *ni)
{
int engine = ni->string_id;
SET_DPARAM16(0, STR_8859_NEW_NOW_AVAILABLE);
SET_DPARAM16(1, GetEngineCategoryName(engine));
SET_DPARAM16(2, GetCustomEngineName(engine));
SetDParam(0, STR_8859_NEW_NOW_AVAILABLE);
SetDParam(1, GetEngineCategoryName(engine));
SetDParam(2, GetCustomEngineName(engine));
return STR_02B6;
}
@@ -154,7 +153,7 @@ void DrawNewsNewAircraftAvail(Window *w)
DrawStringMultiCenter(w->width >> 1, 20, STR_A02C_NEW_AIRCRAFT_NOW_AVAILABLE, w->width - 2);
GfxFillRect(25, 56, w->width - 25, w->height - 2, 10);
SET_DPARAM16(0, GetCustomEngineName(engine));
SetDParam(0, GetCustomEngineName(engine));
DrawStringMultiCenter(w->width >> 1, 57, STR_A02D, w->width - 2);
DrawAircraftEngine(w->width >> 1, 93, engine, 0);
@@ -165,8 +164,8 @@ void DrawNewsNewAircraftAvail(Window *w)
StringID GetNewsStringNewAircraftAvail(NewsItem *ni)
{
int engine = ni->string_id;
SET_DPARAM16(0, STR_A02C_NEW_AIRCRAFT_NOW_AVAILABLE);
SET_DPARAM16(1, GetCustomEngineName(engine));
SetDParam(0, STR_A02C_NEW_AIRCRAFT_NOW_AVAILABLE);
SetDParam(1, GetCustomEngineName(engine));
return STR_02B6;
}
@@ -180,7 +179,7 @@ void DrawNewsNewRoadVehAvail(Window *w)
DrawStringMultiCenter(w->width >> 1, 20, STR_9028_NEW_ROAD_VEHICLE_NOW_AVAILABLE, w->width - 2);
GfxFillRect(25, 56, w->width - 25, w->height - 2, 10);
SET_DPARAM16(0, GetCustomEngineName(engine));
SetDParam(0, GetCustomEngineName(engine));
DrawStringMultiCenter(w->width >> 1, 57, STR_9029, w->width - 2);
DrawRoadVehEngine(w->width >> 1, 88, engine, 0);
@@ -191,8 +190,8 @@ void DrawNewsNewRoadVehAvail(Window *w)
StringID GetNewsStringNewRoadVehAvail(NewsItem *ni)
{
int engine = ni->string_id;
SET_DPARAM16(0, STR_9028_NEW_ROAD_VEHICLE_NOW_AVAILABLE);
SET_DPARAM16(1, GetCustomEngineName(engine));
SetDParam(0, STR_9028_NEW_ROAD_VEHICLE_NOW_AVAILABLE);
SetDParam(1, GetCustomEngineName(engine));
return STR_02B6;
}
@@ -207,7 +206,7 @@ void DrawNewsNewShipAvail(Window *w)
DrawStringMultiCenter(w->width >> 1, 20, STR_982C_NEW_SHIP_NOW_AVAILABLE, w->width - 2);
GfxFillRect(25, 56, w->width - 25, w->height - 2, 10);
SET_DPARAM16(0, GetCustomEngineName(engine));
SetDParam(0, GetCustomEngineName(engine));
DrawStringMultiCenter(w->width >> 1, 57, STR_982D, w->width - 2);
DrawShipEngine(w->width >> 1, 93, engine, 0);
@@ -218,7 +217,7 @@ void DrawNewsNewShipAvail(Window *w)
StringID GetNewsStringNewShipAvail(NewsItem *ni)
{
int engine = ni->string_id;
SET_DPARAM16(0, STR_982C_NEW_SHIP_NOW_AVAILABLE);
SET_DPARAM16(1, GetCustomEngineName(engine));
SetDParam(0, STR_982C_NEW_SHIP_NOW_AVAILABLE);
SetDParam(1, GetCustomEngineName(engine));
return STR_02B6;
}

View File

@@ -12,12 +12,13 @@
#include <errno.h>
#ifndef EXTERNAL_PLAYER
#define EXTERNAL_PLAYER "/usr/bin/timidity"
#define EXTERNAL_PLAYER "timidity"
#endif
static pid_t _pid;
static void extmidi_kill(void) {
static void extmidi_kill(void)
{
if (_pid > 0) {
kill(_pid, SIGKILL);
while (waitpid(_pid, NULL, WNOHANG) != _pid);
@@ -25,17 +26,19 @@ static void extmidi_kill(void) {
_pid = 0;
}
static char *extmidi_start(char **parm) {
static char *extmidi_start(char **parm)
{
_pid = 0;
return NULL;
}
static void extmidi_stop(void) {
static void extmidi_stop(void)
{
extmidi_kill();
}
static void extmidi_play_song(const char *filename) {
static void extmidi_play_song(const char *filename)
{
extmidi_kill();
_pid = fork();
@@ -47,35 +50,31 @@ static void extmidi_play_song(const char *filename) {
if (_pid == 0) {
#if defined(MIDI_ARG)
execl(EXTERNAL_PLAYER, "extmidi", MIDI_ARG, filename, NULL);
execlp(EXTERNAL_PLAYER, "extmidi", MIDI_ARG, filename, NULL);
#else
execl(EXTERNAL_PLAYER, "extmidi", filename, NULL);
execlp(EXTERNAL_PLAYER, "extmidi", filename, NULL);
#endif
fprintf(stderr, "extmidi: couldn't execl: %s\n", strerror(errno));
exit(0);
}
usleep(500);
if (_pid == waitpid(_pid, NULL, WNOHANG)) {
fprintf(stderr, "extmidi: play song failed\n");
_pid = 0;
usleep(5000);
}
}
static void extmidi_stop_song(void) {
static void extmidi_stop_song(void)
{
extmidi_kill();
}
static bool extmidi_is_playing(void) {
static bool extmidi_is_playing(void)
{
if (_pid == 0)
return 0;
@@ -87,7 +86,8 @@ static bool extmidi_is_playing(void) {
return 1;
}
static void extmidi_set_volume(byte vol) {
static void extmidi_set_volume(byte vol)
{
fprintf(stderr, "extmidi: set volume not implemented\n");
}
@@ -99,5 +99,6 @@ const HalMusicDriver _extmidi_music_driver = {
extmidi_is_playing,
extmidi_set_volume,
};
#endif /* __MORPHOS__ */
#endif /* __BEOS__ */

View File

@@ -1,6 +1,7 @@
#include "stdafx.h"
#include "ttd.h"
#if defined(UNIX)
#include "fileio.h"
#if defined(UNIX) || defined(__OS2__)
#include <ctype.h> // required for tolower()
#endif
@@ -21,7 +22,7 @@ typedef struct {
static Fio _fio;
// Get current position in file
uint32 FioGetPos()
uint32 FioGetPos(void)
{
return _fio.pos + (_fio.buffer - _fio.buffer_start) - FIO_BUFFER_SIZE;
}
@@ -42,7 +43,7 @@ void FioSeekToFile(uint32 pos)
FioSeekTo(pos & 0xFFFFFF, SEEK_SET);
}
byte FioReadByte()
byte FioReadByte(void)
{
if (_fio.buffer == _fio.buffer_end) {
_fio.pos += FIO_BUFFER_SIZE;
@@ -64,13 +65,13 @@ void FioSkipBytes(int n)
}
uint16 FioReadWord()
uint16 FioReadWord(void)
{
byte b = FioReadByte();
return (FioReadByte() << 8) | b;
}
uint32 FioReadDword()
uint32 FioReadDword(void)
{
uint b = FioReadWord();
return (FioReadWord() << 16) | b;
@@ -83,16 +84,20 @@ void FioReadBlock(void *ptr, uint size)
fread(ptr, 1, size, _fio.cur_fh);
}
void FioCloseAll()
static inline void FioCloseFile(int slot)
{
if (_fio.handles[slot] != NULL) {
fclose(_fio.handles[slot]);
_fio.handles[slot] = NULL;
}
}
void FioCloseAll(void)
{
int i;
for(i=0; i!=lengthof(_fio.handles); i++) {
if (_fio.handles[i] != NULL) {
fclose(_fio.handles[i]);
_fio.handles[i] = NULL;
}
}
for (i = 0; i != lengthof(_fio.handles); i++)
FioCloseFile(i);
}
void FioOpenFile(int slot, const char *filename)
@@ -110,12 +115,23 @@ void FioOpenFile(int slot, const char *filename)
for(s=buf + strlen(_path.data_dir) - 1; *s != 0; s++)
*s = tolower(*s);
f = fopen(buf, "rb");
#if defined SECOND_DATA_DIR
// tries in the 2nd data directory
if (f == NULL) {
sprintf(buf, "%s%s", _path.second_data_dir, filename);
for(s=buf + strlen(_path.second_data_dir) - 1; *s != 0; s++)
*s = tolower(*s);
f = fopen(buf, "rb");
}
#endif
}
#endif
if (f == NULL)
error("Cannot open file '%s'", buf);
FioCloseFile(slot); // if file was opened before, close it
_fio.handles[slot] = f;
FioSeekToFile(slot << 24);
}

View File

@@ -3,11 +3,11 @@
void FioSeekTo(uint32 pos, int mode);
void FioSeekToFile(uint32 pos);
uint32 FioGetPos();
byte FioReadByte();
uint16 FioReadWord();
uint32 FioReadDword();
void FioCloseAll();
uint32 FioGetPos(void);
byte FioReadByte(void);
uint16 FioReadWord(void);
uint32 FioReadDword(void);
void FioCloseAll(void);
void FioOpenFile(int slot, const char *filename);
void FioReadBlock(void *ptr, uint size);
void FioSkipBytes(int n);

View File

@@ -1,8 +1,6 @@
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include "network.h"
/* vehicle.c */
/* window.c */
@@ -18,12 +16,12 @@ void DoClearSquare(uint tile);
void CDECL ModifyTile(uint tile, uint flags, ...);
void SetMapExtraBits(uint tile, byte flags);
uint GetMapExtraBits(uint tile);
void RunTileLoop();
void RunTileLoop(void);
uint GetPartialZ(int x, int y, int corners);
uint GetSlopeZ(int x, int y);
uint32 GetTileTrackStatus(uint tile, TransportType mode);
void GetAcceptedCargo(uint tile, AcceptedCargo *ac);
void GetAcceptedCargo(uint tile, AcceptedCargo ac);
void ChangeTileOwner(uint tile, byte old_player, byte new_player);
void AnimateTile(uint tile);
void ClickTile(uint tile);
@@ -37,29 +35,35 @@ enum {
bool IsValidTile(uint tile);
static inline Point RemapCoords(int x, int y, int z)
{
#if !defined(NEW_ROTATION)
static Point FORCEINLINE RemapCoords(int x, int y, int z) { Point pt = { (y-x)*2, y + x -z }; return pt; }
Point pt;
pt.x = (y - x) * 2;
pt.y = y + x - z;
#else
static Point FORCEINLINE RemapCoords(int x, int y, int z) { Point pt = { (x + y)*2, x - y -z }; return pt; }
Point pt;
pt.x = (x + y) * 2;
pt.y = x - y - z;
#endif
return pt;
}
static Point FORCEINLINE RemapCoords2(int x, int y) { return RemapCoords(x, y, GetSlopeZ(x, y)); }
static inline Point RemapCoords2(int x, int y)
{
return RemapCoords(x, y, GetSlopeZ(x, y));
}
/* game.c */
byte *GetString(byte *buffr, uint16 string);
void InjectDparam(int amount);
int32 GetParamInt32();
int GetParamInt16();
int GetParamInt8();
int GetParamUint16();
int32 GetParamInt32(void);
int GetParamInt16(void);
int GetParamInt8(void);
int GetParamUint16(void);
/* sound.c */
void SndPlayTileFx(int sound, TileIndex tile);
void SndPlayVehicleFx(int sound, Vehicle *v);
void SndPlayFx(int sound);
/* clear_land.c */
void DrawHillyLandTile(TileInfo *ti);
void DrawClearLandTile(TileInfo *ti, byte set);
@@ -71,6 +75,7 @@ void StationPickerDrawSprite(int x, int y, int railtype, int image);
/* track_land.c */
void DrawTrainDepotSprite(int x, int y, int image, int railtype);
void DrawWaypointSprite(int x, int y, int image, int railtype);
/* road_land.c */
void DrawRoadDepotSprite(int x, int y, int image);
@@ -91,15 +96,34 @@ StringID GetPlayerNameString(byte player, byte index);
void ShowInfo(const char *str);
void CDECL ShowInfoF(const char *str, ...);
void NORETURN CDECL error(const char *str, ...);
void memswap(void *a, void *b, size_t size);
/* ttd.c */
uint32 Random();
// **************
// * Warning: DO NOT enable this unless you understand what it does
// *
// * If enabled, in a network game all randoms will be dumped to the
// * stdout if the first client joins (or if you are a client). This
// * is to help finding desync problems.
// *
// * Warning: DO NOT enable this unless you understand what it does
// **************
//#define RANDOM_DEBUG
#ifdef RANDOM_DEBUG
#define Random() DoRandom(__LINE__, __FILE__)
uint32 DoRandom(int line, const char *file);
#define RandomRange(max) DoRandomRange(max, __LINE__, __FILE__)
uint DoRandomRange(uint max, int line, const char *file);
#else
uint32 Random(void);
uint RandomRange(uint max);
#endif
void InitPlayerRandoms();
void InitPlayerRandoms(void);
uint32 InteractiveRandom(); /* Used for random sequences that are not the same on the other end of the multiplayer link */
uint32 InteractiveRandom(void); /* Used for random sequences that are not the same on the other end of the multiplayer link */
uint InteractiveRandomRange(uint max);
void SetDate(uint date);
@@ -107,15 +131,21 @@ void SetDate(uint date);
void DrawPlayerFace(uint32 face, int color, int x, int y);
/* texteff.c */
void MoveAllTextEffects();
void MoveAllTextEffects(void);
void AddTextEffect(StringID msg, int x, int y, uint16 duration);
void InitTextEffects();
void InitTextEffects(void);
void DrawTextEffects(DrawPixelInfo *dpi);
void InitTextMessage(void);
void DrawTextMessage(void);
void CDECL AddTextMessage(uint16 color, uint8 duration, const char *message, ...);
void UndrawTextMessage(void);
void TextMessageDailyLoop(void);
bool AddAnimatedTile(uint tile);
void DeleteAnimatedTile(uint tile);
void AnimateAnimatedTiles();
void InitializeAnimatedTiles();
void AnimateAnimatedTiles(void);
void InitializeAnimatedTiles(void);
/* tunnelbridge_cmd.c */
bool CheckTunnelInWay(uint tile, int z);
@@ -123,49 +153,23 @@ bool CheckBridge_Stuff(byte bridge_type, int bridge_len);
uint32 GetBridgeLength(TileIndex begin, TileIndex end);
int CalcBridgeLenCostFactor(int x);
/* network.c */
typedef void CommandCallback(bool success, uint tile, uint32 p1, uint32 p2);
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd);
void NetworkReceive();
void NetworkSend();
void NetworkProcessCommands();
void NetworkListen();
void NetworkInitialize();
void NetworkShutdown();
void NetworkSendCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback);
void NetworkSendEvent(uint16 type, uint16 data_len, void * data);
void NetworkStartSync(bool fcreset);
void NetworkClose(bool client);
void NetworkSendReadyPacket();
void NetworkSendSyncPackets();
void NetworkSendFrameSyncPackets();
bool NetworkCheckClientReady();
void NetworkIPListInit();
void NetworkCoreInit();
void NetworkCoreShutdown();
void NetworkCoreDisconnect();
void NetworkCoreLoop(bool incomming);
bool NetworkCoreConnectGame(const byte* b, unsigned short port);
bool NetworkCoreConnectGameStruct(NetworkGameList * item);
bool NetworkCoreStartGame();
void NetworkLobbyShutdown();
void NetworkLobbyInit();
void NetworkGameListClear();
NetworkGameList * NetworkGameListAdd();
void NetworkGameListFromLAN();
void NetworkGameListFromInternet();
NetworkGameList * NetworkGameListItem(uint16 index);
void NetworkGameFillDefaults();
void NetworkGameChangeDate(uint16 newdate);
/* network.c */
void NetworkUDPClose(void);
void NetworkStartUp(void);
void NetworkShutDown(void);
void NetworkGameLoop(void);
void NetworkUDPGameLoop(void);
bool NetworkServerStart(void);
bool NetworkClientConnectGame(const byte* host, unsigned short port);
void NetworkReboot(void);
void NetworkDisconnect(void);
void NetworkSend_Command(uint32 tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback);
/* misc_cmd.c */
void PlaceTreesRandomly();
void PlaceTreesRandomly(void);
uint GetTileDist(TileIndex xy1, TileIndex xy2);
uint GetTileDist1D(TileIndex xy1, TileIndex xy2);
@@ -178,11 +182,16 @@ void InitializeLandscapeVariables(bool only_constants);
/* misc.c */
void DeleteName(StringID id);
byte *GetName(int id, byte *buff);
StringID AllocateName(const byte *name, byte skip);
// AllocateNameUnique also tests if the name used is not used anywere else
// and if it is used, it returns an error.
#define AllocateNameUnique(name, skip) RealAllocateName(name, skip, true)
#define AllocateName(name, skip) RealAllocateName(name, skip, false)
StringID RealAllocateName(const byte *name, byte skip, bool check_double);
void ConvertDayToYMD(YearMonthDay *ymd, uint16 date);
uint ConvertYMDToDay(uint year, uint month, uint day);
uint ConvertIntDate(uint date);
void CSleep(int milliseconds);
/* misc functions */
@@ -192,11 +201,12 @@ void InvalidateWindow(byte cls, WindowNumber number);
void InvalidateWindowWidget(byte cls, WindowNumber number, byte widget_index);
void InvalidateWindowClasses(byte cls);
void DeleteWindowById(WindowClass cls, WindowNumber number);
void DeleteWindowByClass(WindowClass cls);
void SetObjectToPlaceWnd(int icon, byte mode, Window *w);
void SetObjectToPlace(int icon, byte mode, byte window_class, uint16 window_num);
void SetObjectToPlace(int icon, byte mode, WindowClass window_class, WindowNumber window_num);
void ResetObjectToPlace();
void ResetObjectToPlace(void);
bool ScrollWindowToTile(TileIndex tile, Window * w);
bool ScrollWindowTo(int x, int y, Window * w);
@@ -204,11 +214,11 @@ bool ScrollWindowTo(int x, int y, Window * w);
bool ScrollMainWindowToTile(TileIndex tile);
bool ScrollMainWindowTo(int x, int y);
void DrawSprite(uint32 img, int x, int y);
uint GetCorrectTileHeight(TileIndex tile);
bool EnsureNoVehicle(TileIndex tile);
bool EnsureNoVehicleZ(TileIndex tile, byte z);
void MarkAllViewportsDirty(int left, int top, int right, int bottom);
void ShowCostOrIncomeAnimation(int x, int y, int z, int32 cost);
void MarkWholeScreenDirty();
void DrawFoundation(TileInfo *ti, uint f);
@@ -218,11 +228,14 @@ void ChangeTownRating(Town *t, int add, int max);
uint GetRoadBitsByTile(TileIndex tile);
int GetTownRadiusGroup(Town *t, uint tile);
int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, byte cargo_type);
void ShowRenameSignWindow(SignStruct *ss);
void ShowRenameCheckpointWindow(Checkpoint *cp);
void ShowNetworkChatQueryWindow(byte desttype, byte dest);
void ShowNetworkGiveMoneyWindow(byte player);
void ShowNetworkNeedGamePassword(void);
void ShowNetworkNeedCompanyPassword(void);
void ShowRenameWaypointWindow(Waypoint *cp);
int FindFirstBit(uint32 x);
void ShowHighscoreTable(int tbl);
void ShowHighscoreTable(int difficulty, int8 rank);
void ShowEndGameChart(void);
TileIndex AdjustTileCoordRandomly(TileIndex a, byte rng);
enum SaveOrLoadResult {
@@ -239,11 +252,11 @@ enum SaveOrLoadMode {
int SaveOrLoad(const char *filename, int mode);
void AfterLoadTown();
void AskExitGame();
void AskExitToGameMenu();
void AfterLoadTown(void);
void AskExitGame(void);
void AskExitToGameMenu(void);
void RedrawAutosave();
void RedrawAutosave(void);
StringID RemapOldStringID(StringID s);
@@ -258,29 +271,25 @@ enum {
};
void ShowSaveLoadDialog(int mode);
void ttd_strlcpy(char *dst, const char *src, size_t len);
void ttd_strlcpy(char *dst, const char *src, size_t size);
void ttd_strlcat(char *dst, const char *src, size_t size);
// callback from drivers that is called if the game size changes dynamically
void GameSizeChanged();
bool MakeScreenshot();
bool MakeWorldScreenshot(int left, int top, int width, int height, int zoom);
void GameSizeChanged(void);
bool FileExists(const char *filename);
bool ReadLanguagePack(int index);
void InitializeLanguagePacks();
void InitializeLanguagePacks(void);
byte *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize);
int GetLanguageList(char **languages, int max);
const char *GetScreenshotFormatDesc(int i);
void InitializeScreenshotFormats();
void SetScreenshotFormat(int i);
void CheckSwitchToEuro();
void CheckSwitchToEuro(void);
void LoadFromConfig();
void SaveToConfig();
void LoadFromConfig(void);
void SaveToConfig(void);
int ttd_main(int argc, char* argv[]);
byte GetOSVersion();
byte GetOSVersion(void);
void DeterminePaths();
void DeterminePaths(void);
char * CDECL str_fmt(const char *str, ...);
#endif /* FUNCTIONS_H */

192
gfx.c
View File

@@ -5,7 +5,6 @@
#include "hal.h"
static void GfxMainBlitter(byte *sprite, int x, int y, int mode);
void GfxInitPalettes();
static int _stringwidth_out;
static byte _cursor_backup[64*64];
@@ -17,17 +16,18 @@ static byte _string_colorremap[3];
static byte _dirty_blocks[DIRTY_BYTES_PER_LINE * MAX_SCREEN_HEIGHT / 8];
static void memcpy_pitch(void *d, void *s, int w, int h, int spitch, int dpitch)
void memcpy_pitch(void *d, void *s, int w, int h, int spitch, int dpitch)
{
byte *dp = (byte*)d;
byte *sp = (byte*)s;
assert(h >= 0);
if (h != 0) do {
for (; h != 0; --h) {
memcpy(dp, sp, w);
dp += dpitch;
sp += spitch;
} while (--h);
}
}
@@ -41,12 +41,13 @@ void GfxScroll(int left, int top, int width, int height, int xo, int yo) {
if (_cursor.visible)
UndrawMouseCursor();
UndrawTextMessage();
p = _screen.pitch;
if (yo > 0 || (yo == 0 && xo > 0)) {
if (yo > 0) {
// Calculate pointers
dst = _screen.dst_ptr + (top+height-1) * p + (left+width-1);
dst = _screen.dst_ptr + (top + height - 1) * p + left;
src = dst - yo * p;
// Decrease height and increase top
@@ -56,31 +57,21 @@ void GfxScroll(int left, int top, int width, int height, int xo, int yo) {
// Adjust left & width
if (xo >= 0) {
dst += xo;
left += xo;
src -= xo;
width -= xo;
} else {
dst += xo;
src -= xo;
width += xo;
}
// Offset pointers to fit into the memmove call
dst += -width + 1;
src += -width + 1;
ht = height;
do {
memmove(dst, src, width);
for (ht = height; ht > 0; --ht) {
memcpy(dst, src, width);
src -= p;
dst -= p;
} while (--ht);
// This part of the screen is now dirty.
_video_driver->make_dirty(left, top, width, height);
}
} else {
// Calculate pointers to mem.
// Calculate pointers
dst = _screen.dst_ptr + top * p + left;
src = dst - yo * p;
@@ -98,23 +89,24 @@ void GfxScroll(int left, int top, int width, int height, int xo, int yo) {
width += xo;
}
ht = height;
do {
memcpy(dst, src, width);
// the y-displacement may be 0 therefore we have to use memmove,
// because source and destination may overlap
for (ht = height; ht > 0; --ht) {
memmove(dst, src, width);
src += p;
dst += p;
} while (--ht);
}
}
// This part of the screen is now dirty.
_video_driver->make_dirty(left, top, width, height);
}
}
void GfxFillRect(int left, int top, int right, int bottom, int color) {
DrawPixelInfo *dpi = _cur_dpi;
byte *dst,*ctab;
const int otop = top;
const int oleft = left;
if (dpi->zoom != 0)
return;
@@ -159,19 +151,17 @@ void GfxFillRect(int left, int top, int right, int bottom, int color) {
} while (--bottom);
}
} else {
byte bo = 0;
byte bo = (oleft - left + dpi->left + otop - top + dpi->top) & 1;
do {
int i;
byte b = (bo^=1);
for(i=0; i!=right;i++)
if ((b^=1) != 0)
for (i = (bo ^= 1); i < right; i += 2)
dst[i] = (byte)color;
dst += dpi->pitch;
} while (--bottom);
} while (--bottom > 0);
}
}
void GfxSetPixel(int x, int y, int color)
static void GfxSetPixel(int x, int y, int color)
{
DrawPixelInfo *dpi = _cur_dpi;
if ((x-=dpi->left) < 0 || x>=dpi->width || (y-=dpi->top)<0 || y>=dpi->height)
@@ -265,7 +255,7 @@ enum {
/* returns right coordinate */
int DrawString(int x, int y, uint16 str, byte color)
int DrawString(int x, int y, uint16 str, uint16 color)
{
GetString(str_buffr, str);
assert(strlen(str_buffr) < sizeof(str_buffr) - 1);
@@ -273,7 +263,7 @@ int DrawString(int x, int y, uint16 str, byte color)
}
void DrawStringRightAligned(int x, int y, uint16 str, byte color)
void DrawStringRightAligned(int x, int y, uint16 str, uint16 color)
{
GetString(str_buffr, str);
assert(strlen(str_buffr) < sizeof(str_buffr) - 1);
@@ -281,7 +271,7 @@ void DrawStringRightAligned(int x, int y, uint16 str, byte color)
}
int DrawStringCentered(int x, int y, uint16 str, byte color)
int DrawStringCentered(int x, int y, uint16 str, uint16 color)
{
int w;
@@ -294,13 +284,14 @@ int DrawStringCentered(int x, int y, uint16 str, byte color)
return w;
}
void DrawStringCenterUnderline(int x, int y, uint16 str, byte color)
void DrawStringCenterUnderline(int x, int y, uint16 str, uint16 color)
{
int w = DrawStringCentered(x, y, str, color);
GfxFillRect(x-(w>>1), y+10, x-(w>>1)+w, y+10, _string_colorremap[1]);
}
uint32 FormatStringLinebreaks(byte *str, int maxw) {
static uint32 FormatStringLinebreaks(byte *str, int maxw)
{
int num = 0;
int base = _stringwidth_base;
int w;
@@ -483,12 +474,15 @@ void DrawFrameRect(int left, int top, int right, int bottom, int ctab, int flags
}
}
int DoDrawString(const byte *string, int x, int y, byte color) {
int DoDrawString(const byte *string, int x, int y, uint16 real_color) {
DrawPixelInfo *dpi = _cur_dpi;
int base = _stringwidth_base;
byte c, *b;
byte c;
byte color;
int xo = x, yo = y;
color = real_color & 0xFF;
if (color != 0xFE) {
if (x >= dpi->left + dpi->width ||
x + _screen.width*2 <= dpi->left ||
@@ -498,9 +492,13 @@ int DoDrawString(const byte *string, int x, int y, byte color) {
if (color != 0xFF) {
switch_color:;
b = GetSpritePtr(674);
_string_colorremap[1] = b[color*2+8];
_string_colorremap[2] = b[color*2+9];
if (real_color & IS_PALETTE_COLOR) {
_string_colorremap[1] = color;
_string_colorremap[2] = 215;
} else {
_string_colorremap[1] = _string_colormap[color].text;
_string_colorremap[2] = _string_colormap[color].shadow;
}
_color_remap_ptr = _string_colorremap;
}
}
@@ -1437,7 +1435,7 @@ static void GfxMainBlitter(byte *sprite, int x, int y, int mode)
byte *src = bp.sprite_org;
signed char b;
bp.sprite += (dst - src);
bp.sprite = dst + (bp.sprite - bp.sprite_org);
while (totpix != 0) {
assert(totpix > 0);
@@ -1465,8 +1463,8 @@ static void GfxMainBlitter(byte *sprite, int x, int y, int mode)
}
}
void GfxScalePalette(int pal, byte scaling)
#if 0
static void GfxScalePalette(int pal, byte scaling)
{
byte *dst, *src;
size_t count;
@@ -1484,30 +1482,39 @@ void GfxScalePalette(int pal, byte scaling)
src += 3;
} while (--count);
}
#endif
void GfxInitPalettes()
void DoPaletteAnimations(void);
void GfxInitPalettes(void)
{
memcpy(_cur_palette, _palettes[0], 256*3);
int pal = _use_dos_palette?1:0;
memcpy(_cur_palette, _palettes[pal], 256*3);
_pal_first_dirty = 0;
_pal_last_dirty = 255;
DoPaletteAnimations();
}
#define EXTR(p,q) (((uint16)(_timer_counter * (p)) * (q)) >> 16)
#define EXTR2(p,q) (((uint16)(~_timer_counter * (p)) * (q)) >> 16)
#define COPY_TRIPLET do {d[0]=s[0+j]; d[1]=s[1+j]; d[2]=s[2+j];d+=3;}while(0)
void DoPaletteAnimations()
void DoPaletteAnimations(void)
{
const byte *s;
byte *d;
/* Amount of colors to be rotated.
* A few more for the DOS palette, because the water colors are
* 245-254 for DOS and 217-226 for Windows. */
int c = _use_dos_palette?38:28;
int j;
int i;
const ExtraPaletteValues *ev = &_extra_palette_values;
byte old_val[28*3];
byte old_val[114]; // max(c*(38:28)) = 114
d = _cur_palette + 217*3;
memcpy(old_val, d, 28*3);
memcpy(old_val, d, c*3);
// Dark blue water
s = ev->a;
@@ -1576,14 +1583,37 @@ void DoPaletteAnimations()
if (j == 3*4) j = 0;
}
if (memcmp(old_val, _cur_palette + 217*3, 28*3)) {
// Animate water for old DOS graphics
if(_use_dos_palette) {
// Dark blue water DOS
s = ev->a;
if (_opt.landscape == LT_CANDY) s = ev->ac;
j = EXTR(320,5) * 3;
for(i=0; i!=5; i++) {
COPY_TRIPLET;
j+=3;
if (j == 15) j = 0;
}
// Glittery water DOS
s = ev->b;
if (_opt.landscape == LT_CANDY) s = ev->bc;
j = EXTR(128, 15) * 3;
for(i=0; i!=5; i++) {
COPY_TRIPLET;
j += 9;
if (j >= 45) j -= 45;
}
}
if (memcmp(old_val, _cur_palette + 217*3, c*3)) {
if (_pal_first_dirty > 217) _pal_first_dirty = 217;
if (_pal_last_dirty < 217+29-1) _pal_last_dirty = 217+29-1;
if (_pal_last_dirty < 217+c) _pal_last_dirty = 217+c;
}
}
void LoadStringWidthTable()
void LoadStringWidthTable(void)
{
int i;
byte *b;
@@ -1604,7 +1634,7 @@ void LoadStringWidthTable()
}
}
void ScreenSizeChanged()
void ScreenSizeChanged(void)
{
// check the dirty rect
if (_invalid_rect.right >= _screen.width) _invalid_rect.right = _screen.width;
@@ -1614,7 +1644,7 @@ void ScreenSizeChanged()
_cursor.visible = false;
}
void UndrawMouseCursor()
void UndrawMouseCursor(void)
{
if (_cursor.visible) {
_cursor.visible = false;
@@ -1627,7 +1657,7 @@ void UndrawMouseCursor()
}
}
void DrawMouseCursor()
void DrawMouseCursor(void)
{
int x,y,w,h;
@@ -1654,13 +1684,13 @@ void DrawMouseCursor()
_cursor.draw_pos.y = y;
_cursor.draw_size.y = h;
assert(w*h < sizeof(_cursor_backup));
assert(w*h < (int) sizeof(_cursor_backup));
// Make backup of stuff below cursor
memcpy_pitch(
_cursor_backup,
_screen.dst_ptr + _cursor.draw_pos.x + _cursor.draw_pos.y * _screen.pitch,
_cursor.draw_size.x, _cursor.draw_size.y, _screen.width, _cursor.draw_size.x);
_cursor.draw_size.x, _cursor.draw_size.y, _screen.pitch, _cursor.draw_size.x);
// Draw cursor on screen
_cur_dpi = &_screen;
@@ -1672,7 +1702,8 @@ void DrawMouseCursor()
_cursor.dirty = false;
}
void DbgScreenRect(int left, int top, int right, int bottom)
#if defined(_DEBUG)
static void DbgScreenRect(int left, int top, int right, int bottom)
{
DrawPixelInfo dp,*old;
@@ -1682,6 +1713,7 @@ void DbgScreenRect(int left, int top, int right, int bottom)
GfxFillRect(left, top, right-1, bottom-1, rand() & 255);
_cur_dpi = old;
}
#endif
extern bool _dbg_screen_rect;
@@ -1696,6 +1728,7 @@ void RedrawScreenRect(int left, int top, int right, int bottom)
UndrawMouseCursor();
}
}
UndrawTextMessage();
#if defined(_DEBUG)
if (_dbg_screen_rect)
@@ -1707,12 +1740,12 @@ void RedrawScreenRect(int left, int top, int right, int bottom)
_video_driver->make_dirty(left, top, right-left, bottom-top);
}
void DrawDirtyBlocks()
void DrawDirtyBlocks(void)
{
byte *b = _dirty_blocks;
int x=0,y=0;
int w = (_screen.width + 63) & ~63;
int h = _screen.height;
const int w = (_screen.width + 63) & ~63;
const int h = (_screen.height + 7) & ~7;
do {
if (*b != 0) {
@@ -1813,7 +1846,7 @@ void SetDirtyBlocks(int left, int top, int right, int bottom)
} while (--height);
}
void MarkWholeScreenDirty()
void MarkWholeScreenDirty(void)
{
SetDirtyBlocks(0, 0, _screen.width, _screen.height);
}
@@ -1882,7 +1915,7 @@ static void SetCursorSprite(uint cursor)
cv->dirty = true;
}
static void SwitchAnimatedCursor()
static void SwitchAnimatedCursor(void)
{
CursorVars *cv = &_cursor;
const uint16 *cur;
@@ -1898,7 +1931,8 @@ static void SwitchAnimatedCursor()
SetCursorSprite(sprite);
}
void CursorTick() {
void CursorTick(void)
{
CursorVars *cv = &_cursor;
if (cv->animate_timeout && !--cv->animate_timeout)
SwitchAnimatedCursor();
@@ -1928,3 +1962,23 @@ bool ChangeResInGame(int w, int h)
_cur_resolution[1] = h;
return true;
}
void ToggleFullScreen(const bool full_screen)
{
_fullscreen = full_screen;
/* use preset resolutions, not _screen.height and _screen.width. On windows for example
if Desktop-size is 1280x1024, and gamesize is also 1280x1024, _screen.height will be
only 1000 because of possible start-bar. For this reason you cannot switch to
fullscreen mode from this resolution. Use of preset resolution will fix this */
if (!_video_driver->change_resolution(_cur_resolution[0], _cur_resolution[1]))
_fullscreen ^= true; // switching resolution failed, put back full_screen to original status
}
uint16 GetDrawStringPlayerColor(byte player)
{
// Get the color for DrawString-subroutines which matches the color
// of the player
if (player == OWNER_SPECTATOR || player == OWNER_SPECTATOR - 1)
return 1;
return (_color_list[_player_colors[player]].window_color_1b) | IS_PALETTE_COLOR;
}

37
gfx.h
View File

@@ -42,24 +42,25 @@ typedef struct CursorVars {
void RedrawScreenRect(int left, int top, int right, int bottom);
void GfxScroll(int left, int top, int width, int height, int xo, int yo);
int DrawStringCentered(int x, int y, uint16 str, byte color);
int DrawString(int x, int y, uint16 str, byte color);
void DrawStringCenterUnderline(int x, int y, uint16 str, byte color);
int DoDrawString(const byte *string, int x, int y, byte color);
void DrawStringRightAligned(int x, int y, uint16 str, byte color);
int DrawStringCentered(int x, int y, uint16 str, uint16 color);
int DrawString(int x, int y, uint16 str, uint16 color);
void DrawStringCenterUnderline(int x, int y, uint16 str, uint16 color);
int DoDrawString(const byte *string, int x, int y, uint16 color);
void DrawStringRightAligned(int x, int y, uint16 str, uint16 color);
void GfxFillRect(int left, int top, int right, int bottom, int color);
void GfxDrawLine(int left, int top, int right, int bottom, int color);
void DrawFrameRect(int left, int top, int right, int bottom, int color, int flags);
uint16 GetDrawStringPlayerColor(byte player);
int GetStringWidth(const byte *str);
void LoadStringWidthTable();
void LoadStringWidthTable(void);
void DrawStringMultiCenter(int x, int y, uint16 str, int maxw);
void DrawStringMultiLine(int x, int y, uint16 str, int maxw);
void DrawDirtyBlocks();
void DrawDirtyBlocks(void);
void SetDirtyBlocks(int left, int top, int right, int bottom);
void MarkWholeScreenDirty();
void MarkWholeScreenDirty(void);
void GfxInitPalettes();
void GfxInitPalettes(void);
bool FillDrawPixelInfo(DrawPixelInfo *n, DrawPixelInfo *o, int left, int top, int width, int height);
@@ -69,15 +70,16 @@ void DrawOverlappedWindowForAll(int left, int top, int right, int bottom);
/* spritecache.c */
byte *GetSpritePtr(uint sprite);
void GfxInitSpriteMem(byte *ptr, uint32 size);
void GfxLoadSprites();
void GfxLoadSprites(void);
void SetMouseCursor(uint cursor);
void SetAnimatedMouseCursor(const uint16 *table);
void CursorTick();
void DrawMouseCursor();
void ScreenSizeChanged();
void UndrawMouseCursor();
void CursorTick(void);
void DrawMouseCursor(void);
void ScreenSizeChanged(void);
void UndrawMouseCursor(void);
bool ChangeResInGame(int w, int h);
void ToggleFullScreen(const bool full_screen);
typedef struct {
int xoffs, yoffs;
@@ -98,6 +100,8 @@ VARDEF CursorVars _cursor;
VARDEF int _pal_first_dirty;
VARDEF int _pal_last_dirty;
VARDEF bool _use_dos_palette;
/* spritecache.c */
//enum { NUM_SPRITES = 0x1320 };
//enum { NUM_SPRITES = 0x1500 };
@@ -107,4 +111,9 @@ enum { NUM_SPRITES = 0x3500 }; // 1500 + space for custom GRF sets
extern byte _palettes[4][256 * 3];
VARDEF byte _cur_palette[768];
typedef enum StringColorFlags {
IS_PALETTE_COLOR = 0x100, // color value is already a real palette color index, not an index of a StringColor
} StringColorFlags;
#endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

90
gui.h
View File

@@ -4,36 +4,37 @@
#include "window.h"
/* main_gui.c */
void SetupColorsAndInitialWindow();
void SetupColorsAndInitialWindow(void);
void CcPlaySound10(bool success, uint tile, uint32 p1, uint32 p2);
void PlaceProc_Sign(uint tile);
/* settings_gui.c */
void ShowGameOptions();
void ShowGameDifficulty();
void ShowPatchesSelection();
void ShowGameOptions(void);
void ShowGameDifficulty(void);
void ShowPatchesSelection(void);
void ShowNewgrf(void);
void ShowCustCurrency(void);
/* graph_gui.c */
void ShowOperatingProfitGraph();
void ShowIncomeGraph();
void ShowDeliveredCargoGraph();
void ShowPerformanceHistoryGraph();
void ShowCompanyValueGraph();
void ShowCargoPaymentRates();
void ShowCompanyLeagueTable();
void ShowPerformanceRatingDetail();
void ShowOperatingProfitGraph(void);
void ShowIncomeGraph(void);
void ShowDeliveredCargoGraph(void);
void ShowPerformanceHistoryGraph(void);
void ShowCompanyValueGraph(void);
void ShowCargoPaymentRates(void);
void ShowCompanyLeagueTable(void);
void ShowPerformanceRatingDetail(void);
/* news_gui.c */
void ShowLastNewsMessage();
void ShowMessageOptions();
void ShowMessageHistory();
void ShowLastNewsMessage(void);
void ShowMessageOptions(void);
void ShowMessageHistory(void);
/* traintoolb_gui.c */
void ShowBuildRailToolbar(int index, int button);
void PlaceProc_BuyLand(uint tile);
/* train_gui.c */
void ShowPlayerTrains(int player);
void ShowPlayerTrains(int player, int station);
void ShowTrainViewWindow(Vehicle *v);
void ShowTrainDetailsWindow(Vehicle *v);
void ShowOrdersWindow(Vehicle *v);
@@ -41,35 +42,35 @@ void ShowOrdersWindow(Vehicle *v);
void ShowRoadVehViewWindow(Vehicle *v);
/* road_gui.c */
void ShowBuildRoadToolbar();
void ShowBuildRoadScenToolbar();
void ShowPlayerRoadVehicles(int player);
void ShowBuildRoadToolbar(void);
void ShowBuildRoadScenToolbar(void);
void ShowPlayerRoadVehicles(int player, int station);
/* dock_gui.c */
void ShowBuildDocksToolbar();
void ShowPlayerShips(int player);
void ShowBuildDocksToolbar(void);
void ShowPlayerShips(int player, int station);
void ShowShipViewWindow(Vehicle *v);
/* aircraft_gui.c */
void ShowBuildAirToolbar();
void ShowPlayerAircraft(int player);
void ShowBuildAirToolbar(void);
void ShowPlayerAircraft(int player, int station);
/* terraform_gui.c */
void PlaceProc_DemolishArea(uint tile);
void PlaceProc_LowerLand(uint tile);
void PlaceProc_RaiseLand(uint tile);
void PlaceProc_LevelLand(uint tile);
void ShowTerraformToolbar();
void ShowTerraformToolbar(void);
/* misc_gui.c */
void PlaceLandBlockInfo();
void ShowAboutWindow();
void ShowBuildTreesToolbar();
void ShowBuildTreesScenToolbar();
void ShowTownDirectory();
void ShowIndustryDirectory();
void ShowSubsidiesList();
void PlaceLandBlockInfo(void);
void ShowAboutWindow(void);
void ShowBuildTreesToolbar(void);
void ShowBuildTreesScenToolbar(void);
void ShowTownDirectory(void);
void ShowIndustryDirectory(void);
void ShowSubsidiesList(void);
void ShowPlayerStations(int player);
void ShowPlayerFinances(int player);
void ShowPlayerCompany(int player);
@@ -77,25 +78,32 @@ void ShowPlayerCompany(int player);
void ShowEstimatedCostOrIncome(int32 cost, int x, int y);
void ShowErrorMessage(StringID msg_1, StringID msg_2, int x, int y);
void DrawStationCoverageAreaText(int sx, int sy, uint mask);
void DrawStationCoverageAreaText(int sx, int sy, uint mask,int rad);
void CheckRedrawStationCoverage(Window *w);
void ShowSmallMap();
void ShowExtraViewPortWindow();
void ShowSmallMap(void);
void ShowExtraViewPortWindow(void);
void SetVScrollCount(Window *w, int num);
void SetVScroll2Count(Window *w, int num);
void SetHScrollCount(Window *w, int num);
int HandleEditBoxKey(Window *w, int wid, WindowEvent *we);
void ShowCheatWindow();
void AskForNewGameToStart();
void ShowCheatWindow(void);
void AskForNewGameToStart(void);
void DrawEditBox(Window *w, int wid);
void HandleEditBox(Window *w, int wid);
void BuildFileList(void);
void SetFiosType(const byte fiostype);
/* FIOS_TYPE_FILE, FIOS_TYPE_OLDFILE etc. different colours */
static const byte _fios_colors[] = {13, 9, 9, 6, 5, 6, 5};
/* network gui */
void ShowNetworkGameWindow();
void ShowNetworkGameWindow(void);
void ShowChatWindow(StringID str, StringID caption, int maxlen, int maxwidth, byte window_class, uint16 window_number);
/* bridge_gui.c */
void ShowBuildBridgeWindow(uint start, uint end, byte type);
@@ -107,9 +115,9 @@ enum {
};
bool DoZoomInOutWindow(int how, Window * w);
void ShowBuildIndustryWindow();
void ShowBuildIndustryWindow(void);
void ShowQueryString(StringID str, StringID caption, int maxlen, int maxwidth, byte window_class, uint16 window_number);
void ShowMusicWindow();
void ShowMusicWindow(void);
/* main_gui.c */
VARDEF byte _newspaper_flag;

32
hal.h
View File

@@ -3,14 +3,14 @@
typedef struct {
char *(*start)(char **parm);
void (*stop)();
void (*stop)(void);
} HalCommonDriver;
typedef struct {
const char *(*start)(char **parm);
void (*stop)();
void (*stop)(void);
void (*make_dirty)(int left, int top, int width, int height);
int (*main_loop)();
int (*main_loop)(void);
bool (*change_resolution)(int w, int h);
} HalVideoDriver;
@@ -21,16 +21,16 @@ enum {
typedef struct {
char *(*start)(char **parm);
void (*stop)();
void (*stop)(void);
} HalSoundDriver;
typedef struct {
char *(*start)(char **parm);
void (*stop)();
void (*stop)(void);
void (*play_song)(const char *filename);
void (*stop_song)();
bool (*is_song_playing)();
void (*stop_song)(void);
bool (*is_song_playing)(void);
void (*set_volume)(byte vol);
} HalMusicDriver;
@@ -71,13 +71,19 @@ extern const HalMusicDriver _extmidi_music_driver;
extern const HalMusicDriver _bemidi_music_driver;
#endif
#if defined(__OS2__)
extern const HalMusicDriver _os2_music_driver;
#endif
extern const HalVideoDriver _dedicated_video_driver;
enum DriverType {
VIDEO_DRIVER = 0,
SOUND_DRIVER = 1,
MUSIC_DRIVER = 2,
};
extern void GameLoop();
extern void GameLoop(void);
extern bool _dbg_screen_rect;
void LoadDriver(int driver, const char *name);
@@ -119,6 +125,12 @@ enum {
FIOS_TYPE_OLD_SCENARIO = 6,
};
// Variables to display file lists
FiosItem *_fios_list;
int _fios_num;
int _saveload_mode;
// get the name of an oldstyle savegame
void GetOldSaveGameName(char *title, const char *file);
// get the name of an oldstyle scenario
@@ -129,7 +141,7 @@ FiosItem *FiosGetSavegameList(int *num, int mode);
// Get a list of scenarios
FiosItem *FiosGetScenarioList(int *num, int mode);
// Free the list of savegames
void FiosFreeSavegameList();
void FiosFreeSavegameList(void);
// Browse to. Returns a filename w/path if we reached a file.
char *FiosBrowseTo(const FiosItem *item);
// Get descriptive texts.
@@ -141,6 +153,6 @@ void FiosDelete(const char *name);
// Make a filename from a name
void FiosMakeSavegameName(char *buf, const char *name);
void CreateConsole();
void CreateConsole(void);
#endif /* HAL_H */

View File

@@ -23,11 +23,25 @@ struct Industry {
byte color_map;
byte last_prod_year;
byte was_cargo_delivered;
uint16 index;
};
VARDEF int _total_industries; // For the AI: the amount of industries active
VARDEF Industry _industries[90];
#define DEREF_INDUSTRY(i) (&_industries[i])
VARDEF uint _industries_size;
VARDEF uint16 *_industry_sort;
static inline Industry *GetIndustry(uint index)
{
assert(index < _industries_size);
return &_industries[index];
}
#define FOR_ALL_INDUSTRIES(i) for(i = _industries; i != &_industries[_industries_size]; i++)
VARDEF bool _industry_sort_dirty;
void DeleteIndustry(Industry *is);

View File

@@ -1,5 +1,7 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "map.h"
#include "viewport.h"
#include "command.h"
#include "industry.h"
@@ -8,6 +10,7 @@
#include "news.h"
#include "saveload.h"
#include "economy.h"
#include "sound.h"
byte _industry_sound_ctr;
TileIndex _industry_sound_tile;
@@ -46,7 +49,7 @@ typedef struct DrawIndustrySpec4Struct {
typedef struct IndustryTileTable {
TileIndexDiff ti;
TileIndexDiffC ti;
byte map5;
} IndustryTileTable;
@@ -227,7 +230,7 @@ static void IndustryDrawTileProc3(TileInfo *ti)
AddChildSpriteScreen(0x128B, 5,
_industry_anim_offs_2[_map3_lo[ti->tile]]);
}
AddChildSpriteScreen(0x30B928A, 3, 67);
AddChildSpriteScreen(4746, 3, 67);
}
static void IndustryDrawTileProc4(TileInfo *ti)
@@ -279,7 +282,7 @@ static void DrawTile_Industry(TileInfo *ti)
uint32 image, ormod;
/* Pointer to industry */
ind = DEREF_INDUSTRY(_map2[ti->tile]);
ind = GetIndustry(_map2[ti->tile]);
ormod = (ind->color_map+0x307)<<16;
/* Retrieve pointer to the draw industry tile struct */
@@ -306,7 +309,7 @@ static void DrawTile_Industry(TileInfo *ti)
if (image&0x8000 && (image & 0xFFFF0000) == 0)
image |= ormod;
if (!(_display_opt & DO_TRANS_BUILDINGS))
if (_display_opt & DO_TRANS_BUILDINGS)
image = (image & 0x3FFF) | 0x3224000;
AddSortableSpriteToDraw(image,
@@ -317,7 +320,7 @@ static void DrawTile_Industry(TileInfo *ti)
dits->dz,
z);
if (!(_display_opt & DO_TRANS_BUILDINGS))
if (_display_opt & DO_TRANS_BUILDINGS)
return;
}
@@ -338,45 +341,36 @@ static uint GetSlopeTileh_Industry(TileInfo *ti) {
return 0;
}
static void GetAcceptedCargo_Industry(uint tile, AcceptedCargo *ac)
static void GetAcceptedCargo_Industry(uint tile, AcceptedCargo ac)
{
int m5 = _map5[tile];
int a;
a = _industry_map5_accepts_1[m5];
if (a >= 0) {
ac->type_1 = a;
ac->amount_1 = (a == 0) ? 1 : 8;
}
if (a >= 0) ac[a] = (a == 0) ? 1 : 8;
a = _industry_map5_accepts_2[m5];
if (a >= 0) {
ac->type_2 = a;
ac->amount_2 = 8;
}
if (a >= 0) ac[a] = 8;
a = _industry_map5_accepts_3[m5];
if (a >= 0) {
ac->type_3 = a;
ac->amount_3 = 8;
}
if (a >= 0) ac[a] = 8;
}
static void GetTileDesc_Industry(uint tile, TileDesc *td)
{
Industry *i = DEREF_INDUSTRY(_map2[tile]);
Industry *i = GetIndustry(_map2[tile]);
td->owner = i->owner;
td->str = STR_4802_COAL_MINE + i->type;
if ((_map_owner[tile] & 0x80) == 0) {
SET_DPARAMX16(td->dparam, 0, td->str);
SetDParamX(td->dparam, 0, td->str);
td->str = STR_2058_UNDER_CONSTRUCTION;
}
}
static int32 ClearTile_Industry(uint tile, byte flags)
{
Industry *i = DEREF_INDUSTRY(_map2[tile]);
Industry *i = GetIndustry(_map2[tile]);
/* * water can destroy industries
* in editor you can bulldoze industries
@@ -386,7 +380,7 @@ static int32 ClearTile_Industry(uint tile, byte flags)
if ((_current_player != OWNER_WATER && _game_mode != GM_EDITOR &&
!_cheats.magic_bulldozer.value) ||
(_current_player == OWNER_WATER && i->type == IT_OIL_RIG) ) {
SET_DPARAM16(0, STR_4802_COAL_MINE + i->type);
SetDParam(0, STR_4802_COAL_MINE + i->type);
return_cmd_error(STR_4800_IN_THE_WAY);
}
@@ -401,9 +395,11 @@ static int32 ClearTile_Industry(uint tile, byte flags)
int32 CmdDestroyIndustry(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
uint tile = TILE_FROM_XY(x,y);
Industry *i = DEREF_INDUSTRY((uint16)p1);
Industry *i = GetIndustry((uint16)p1);
Town *t = ClosestTownFromTile(tile, (uint)-1); // find closest town to penaltize (ALWAYS penaltize)
SET_EXPENSES_TYPE(EXPENSES_OTHER);
// check if you're allowed to remove the industry. Minimum amount
// of ratings to remove the industry depends on difficulty setting
if (!CheckforTownRating(tile, flags, t, INDUSTRY_REMOVE))
@@ -412,7 +408,7 @@ int32 CmdDestroyIndustry(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC) {
DeleteIndustry(i);
CreateEffectVehicleAbove(x + 8,y + 8, 2, EV_DEMOLISH);
ChangeTownRating(t, -1500, -1000); // penalty is 1500
ChangeTownRating(t, RATING_INDUSTRY_DOWN_STEP, RATING_INDUSTRY_MINIMUM);
}
return (_price.build_industry >> 5) * _industry_type_costs[i->type]*2;
@@ -427,14 +423,14 @@ static const byte _industry_min_cargo[] = {
5, 5, 5, 5, 5,
};
void TransportIndustryGoods(uint tile)
static void TransportIndustryGoods(uint tile)
{
Industry *i;
int type;
uint cw, am;
byte m5;
i = DEREF_INDUSTRY(_map2[tile]);
i = GetIndustry(_map2[tile]);
type = i->type;
cw = min(i->cargo_waiting[0], 255);
@@ -480,8 +476,8 @@ static void AnimateTile_Industry(uint tile)
m = _map3_lo[tile] + 1;
switch(m & 7) {
case 2: SndPlayTileFx(45, tile); break;
case 6: SndPlayTileFx(41, tile); break;
case 2: SndPlayTileFx(SND_2D_RIP_2, tile); break;
case 6: SndPlayTileFx(SND_29_RIP, tile); break;
}
if (m >= 96) {
@@ -499,7 +495,7 @@ static void AnimateTile_Industry(uint tile)
m = _map3_lo[tile];
if (_industry_anim_offs[m] == 0xFF) {
SndPlayTileFx(48, tile);
SndPlayTileFx(SND_30_CARTOON_SOUND, tile);
}
if (++m >= 70) {
@@ -545,11 +541,11 @@ static void AnimateTile_Industry(uint tile)
m = _map3_lo[tile] + 1;
if (m == 1) {
SndPlayTileFx(44, tile);
SndPlayTileFx(SND_2C_MACHINERY, tile);
} else if (m == 23) {
SndPlayTileFx(43, tile);
SndPlayTileFx(SND_2B_COMEDY_HIT, tile);
} else if (m == 28) {
SndPlayTileFx(42, tile);
SndPlayTileFx(SND_2A_EXTRACT_AND_POP, tile);
}
if (m >= 50 && (m=0,++_map3_hi[tile] >= 8)) {
@@ -602,7 +598,7 @@ static void AnimateTile_Industry(uint tile)
if (state < 0x20 || state >= 0x180) {
if (! (_map_owner[tile] & 0x40)) {
_map_owner[tile] |= 0x40;
SndPlayTileFx(9, tile);
SndPlayTileFx(SND_0B_MINING_MACHINERY, tile);
}
if (state & 7)
return;
@@ -632,7 +628,7 @@ static void AnimateTile_Industry(uint tile)
static void MakeIndustryTileBiggerCase8(uint tile)
{
TileInfo ti;
FindLandscapeHeight(&ti, GET_TILE_X(tile)*16, GET_TILE_Y(tile)*16);
FindLandscapeHeight(&ti, TileX(tile) * 16, TileY(tile) * 16);
CreateEffectVehicle(ti.x + 15, ti.y + 14, ti.z + 59 + (ti.tileh != 0 ? 8 : 0), EV_INDUSTRYSMOKE);
}
@@ -691,13 +687,13 @@ static void TileLoopIndustryCase161(uint tile)
49, 59, 60, 65,
};
SndPlayTileFx(46, tile);
SndPlayTileFx(SND_2E_EXTRACT_AND_POP, tile);
dir = Random() & 3;
v = CreateEffectVehicleAbove(
GET_TILE_X(tile)*16 + _tileloop_ind_case_161[dir + 0],
GET_TILE_Y(tile)*16 + _tileloop_ind_case_161[dir + 4],
TileX(tile) * 16 + _tileloop_ind_case_161[dir + 0],
TileY(tile) * 16 + _tileloop_ind_case_161[dir + 4],
_tileloop_ind_case_161[dir + 8],
EV_INDUSTRY_SMOKE
);
@@ -777,18 +773,18 @@ static void TileLoop_Industry(uint tile)
case 10:
if (CHANCE16(1,3)) {
SndPlayTileFx(10, tile);
SndPlayTileFx(SND_0C_ELECTRIC_SPARK, tile);
AddAnimatedTile(tile);
}
break;
case 49: {
CreateEffectVehicleAbove(GET_TILE_X(tile)*16 + 6, GET_TILE_Y(tile)*16 + 6, 43, EV_SMOKE_3);
CreateEffectVehicleAbove(TileX(tile) * 16 + 6, TileY(tile) * 16 + 6, 43, EV_SMOKE_3);
} break;
case 143: {
Industry *i = DEREF_INDUSTRY(_map2[tile]);
Industry *i = GetIndustry(_map2[tile]);
if (i->was_cargo_delivered) {
i->was_cargo_delivered = false;
if ((_map3_hi[tile]|_map3_lo[tile]) != 0)
@@ -827,7 +823,7 @@ static uint32 GetTileTrackStatus_Industry(uint tile, TransportType mode)
static void GetProducedCargo_Industry(uint tile, byte *b)
{
Industry *i = DEREF_INDUSTRY(_map2[tile]);
Industry *i = GetIndustry(_map2[tile]);
b[0] = i->produced_cargo[0];
b[1] = i->produced_cargo[1];
}
@@ -839,51 +835,53 @@ static void ChangeTileOwner_Industry(uint tile, byte old_player, byte new_player
void DeleteIndustry(Industry *i)
{
int index = i - _industries;
BEGIN_TILE_LOOP(tile_cur, i->width, i->height, i->xy);
if (IS_TILETYPE(tile_cur, MP_INDUSTRY)) {
if (_map2[tile_cur] == (byte)index) {
if (IsTileType(tile_cur, MP_INDUSTRY)) {
if (_map2[tile_cur] == i->index) {
DoClearSquare(tile_cur);
}
} else if (IS_TILETYPE(tile_cur, MP_STATION) && _map5[tile_cur] == 0x4B) {
} else if (IsTileType(tile_cur, MP_STATION) && _map5[tile_cur] == 0x4B) {
DeleteOilRig(tile_cur);
}
END_TILE_LOOP(tile_cur, i->width, i->height, i->xy);
i->xy = 0;
_industry_sort_dirty = true;
DeleteSubsidyWithIndustry(index);
DeleteWindowById(WC_INDUSTRY_VIEW, index);
DeleteSubsidyWithIndustry(i->index);
DeleteWindowById(WC_INDUSTRY_VIEW, i->index);
InvalidateWindow(WC_INDUSTRY_DIRECTORY, 0);
}
static const byte _plantfarmfield_type[] = {1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6};
static bool IsBadFarmFieldTile(uint tile)
static bool IsBadFarmFieldTile(TileIndex tile)
{
if (IS_TILETYPE(tile,MP_CLEAR)) {
switch (TileType(tile)) {
case MP_CLEAR: {
byte m5 = _map5[tile] & 0x1C;
if (m5 == 0xC || m5 == 0x10)
return true;
return m5 == 0xC || m5 == 0x10;
}
case MP_TREES:
return false;
} else if (IS_TILETYPE(tile,MP_TREES)) {
return false;
} else {
default:
return true;
}
}
static bool IsBadFarmFieldTile2(uint tile)
static bool IsBadFarmFieldTile2(TileIndex tile)
{
if (IS_TILETYPE(tile,MP_CLEAR)) {
switch (TileType(tile)) {
case MP_CLEAR: {
byte m5 = _map5[tile] & 0x1C;
if (m5 == 0x10)
return true;
return m5 == 0x10;
}
case MP_TREES:
return false;
} else if (IS_TILETYPE(tile,MP_TREES)) {
return false;
} else {
default:
return true;
}
}
@@ -895,7 +893,7 @@ static void SetupFarmFieldFence(uint tile, int size, byte type, int direction)
do {
tile = TILE_MASK(tile);
if (IS_TILETYPE(tile, MP_CLEAR) || IS_TILETYPE(tile, MP_TREES)) {
if (IsTileType(tile, MP_CLEAR) || IsTileType(tile, MP_TREES)) {
or = type;
if (or == 1 && (uint16)Random() <= 9362) or = 2;
@@ -976,7 +974,9 @@ static void MaybePlantFarmField(Industry *i)
{
uint tile;
if (CHANCE16(1,8)) {
tile = TileAddWrap(i->xy, ((i->width>>1) + Random() % 31 - 16), ((i->height>>1) + Random() % 31 - 16));
int x = (i->width>>1) + Random() % 31 - 16;
int y = (i->height>>1) + Random() % 31 - 16;
tile = TileAddWrap(i->xy, x, y);
if (tile != TILE_WRAPPED)
PlantFarmField(tile);
}
@@ -984,7 +984,12 @@ static void MaybePlantFarmField(Industry *i)
static void ChopLumberMillTrees(Industry *i)
{
static const TileIndexDiff _chop_dir[4] = { TILE_XY(0,1), TILE_XY(1,0), TILE_XY(0,-1), TILE_XY(-1,0) };
static const TileIndexDiffC _chop_dir[] = {
{ 0, 1},
{ 1, 0},
{ 0, -1},
{-1, 0}
};
uint tile = i->xy;
int dir, a, j;
@@ -998,21 +1003,24 @@ static void ChopLumberMillTrees(Industry *i)
j = a;
do {
tile = TILE_MASK(tile);
if (IS_TILETYPE(tile, MP_TREES)) {
if (IsTileType(tile, MP_TREES)) {
uint old_player = _current_player;
/* found a tree */
_current_player = OWNER_NONE;
_industry_sound_ctr = 1;
_industry_sound_tile = tile;
SndPlayTileFx(56, tile);
SndPlayTileFx(SND_38_CHAINSAW, tile);
DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
SetMapExtraBits(tile, 0);
i->cargo_waiting[0] = min(0xffff, i->cargo_waiting[0] + 45);
_current_player = old_player;
return;
}
tile += _chop_dir[dir];
tile += ToTileIndexDiff(_chop_dir[dir]);
} while (--j);
}
tile -= TILE_XY(1,1);
@@ -1022,19 +1030,19 @@ static void ChopLumberMillTrees(Industry *i)
static const byte _industry_sounds[37][2] = {
{0},
{0},
{1,38},
{1, SND_28_SAWMILL},
{0},
{0},
{0},
{1,1},
{1,1},
{1, SND_03_FACTORY_WHISTLE},
{1, SND_03_FACTORY_WHISTLE},
{0},
{3,34},
{3, SND_24_SHEEP},
{0},
{0},
{0},
{0},
{1,38},
{1, SND_28_SAWMILL},
{0},
{0},
{0},
@@ -1043,7 +1051,7 @@ static const byte _industry_sounds[37][2] = {
{0},
{0},
{0},
{1,1},
{1, SND_03_FACTORY_WHISTLE},
{0},
{0},
{0},
@@ -1052,7 +1060,7 @@ static const byte _industry_sounds[37][2] = {
{0},
{0},
{0},
{1,51},
{1, SND_33_PLASTIC_MINE},
{0},
{0},
{0},
@@ -1088,7 +1096,7 @@ static void ProduceIndustryGoods(Industry *i)
}
}
void OnTick_Industry()
void OnTick_Industry(void)
{
Industry *i;
@@ -1096,17 +1104,17 @@ void OnTick_Industry()
_industry_sound_ctr++;
if (_industry_sound_ctr == 75) {
SndPlayTileFx(55, _industry_sound_tile);
SndPlayTileFx(SND_37_BALLOON_SQUEAK, _industry_sound_tile);
} else if (_industry_sound_ctr == 160) {
_industry_sound_ctr = 0;
SndPlayTileFx(54, _industry_sound_tile);
SndPlayTileFx(SND_36_CARTOON_CRASH, _industry_sound_tile);
}
}
if (_game_mode == GM_EDITOR)
return;
for(i=_industries; i != endof(_industries); i++) {
FOR_ALL_INDUSTRIES(i) {
if (i->xy != 0)
ProduceIndustryGoods(i);
}
@@ -1141,8 +1149,8 @@ static bool CheckNewIndustry_Oilwell(uint tile, int type)
if (type != IT_OIL_RIG && _game_mode == GM_EDITOR)
return true;
x = GET_TILE_X(tile);
y = GET_TILE_Y(tile);
x = TileX(tile);
y = TileY(tile);
if ( x < 15 || y < 15 || x > 238 || y > 238)
return true;
@@ -1213,10 +1221,10 @@ static CheckNewIndustryProc * const _check_new_industry_procs[] = {
static bool CheckSuitableIndustryPos(uint tile)
{
int x = GET_TILE_X(tile);
int y = GET_TILE_Y(tile);
uint x = TileX(tile);
uint y = TileY(tile);
if ( x < 2 || y < 2 || x > TILE_X_MAX - 3 || y > TILE_Y_MAX - 3) {
if ( x < 2 || y < 2 || x > MapMaxX() - 3 || y > MapMaxY() - 3) {
_error_message = STR_0239_SITE_UNSUITABLE;
return false;
}
@@ -1234,7 +1242,7 @@ static Town *CheckMultipleIndustryInTown(uint tile, int type)
if (_patches.multiple_industry_per_town)
return t;
for(i=_industries; i != endof(_industries); i++) {
FOR_ALL_INDUSTRIES(i) {
if (i->xy != 0 &&
i->type == (byte)type &&
i->town == t) {
@@ -1279,7 +1287,7 @@ static bool CheckIfIndustryTilesAreFree(uint tile, const IndustryTileTable *it,
_error_message = STR_0239_SITE_UNSUITABLE;
do {
cur_tile = tile + it->ti;
cur_tile = tile + ToTileIndexDiff(it->ti);
if (!IsValidTile(cur_tile)) {
if (it->map5 == 0xff)
continue;
@@ -1352,7 +1360,7 @@ do_clear:
}
}
}
} while ( (++it)->ti != -0x8000);
} while ((++it)->ti.x != -0x80);
return true;
}
@@ -1367,12 +1375,15 @@ static bool CheckIfTooCloseToIndustry(uint tile, int type)
if (_patches.same_industry_close && (spec->accepts_cargo[0] == 0xFF) )
return true;
for(i=_industries; i != endof(_industries); i++) {
FOR_ALL_INDUSTRIES(i) {
// check if an industry that accepts the same goods is nearby
if (i->xy != 0 &&
(GetTileDist1D(tile, i->xy) <= 14) &&
spec->accepts_cargo[0] != 0xFF &&
spec->accepts_cargo[0] == i->accepts_cargo[0]) {
spec->accepts_cargo[0] == i->accepts_cargo[0] &&
!(_game_mode == GM_EDITOR &&
_patches.same_industry_close &&
_patches.multiple_industry_per_town)) {
_error_message = STR_INDUSTRY_TOO_CLOSE;
return false;
}
@@ -1388,14 +1399,15 @@ static bool CheckIfTooCloseToIndustry(uint tile, int type)
return true;
}
static Industry *AllocateIndustry()
static Industry *AllocateIndustry(void)
{
Industry *i;
for(i=_industries; i != endof(_industries); i++) {
FOR_ALL_INDUSTRIES(i) {
if (i->xy == 0) {
int index = i - _industries;
if (index > _total_industries) _total_industries++;
if (i->index > _total_industries)
_total_industries = i->index;
return i;
}
}
@@ -1455,24 +1467,24 @@ static void DoCreateNewIndustry(Industry *i, uint tile, int type, const Industry
i->prod_level = 0x10;
do {
cur_tile = tile + it->ti;
cur_tile = tile + ToTileIndexDiff(it->ti);
if (it->map5 != 0xFF) {
byte size;
size = GET_TILE_X((TileIndex)it->ti);
size = it->ti.x;
if (size > i->width) i->width = size;
size = GET_TILE_Y((TileIndex)it->ti);
size = it->ti.y;
if (size > i->height)i->height = size;
DoCommandByTile(cur_tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
_map_type_and_height[cur_tile] = (_map_type_and_height[cur_tile]&~0xF0) | (MP_INDUSTRY<<4);
SetTileType(cur_tile, MP_INDUSTRY);
_map5[cur_tile] = it->map5;
_map2[cur_tile] = i - _industries;
_map2[cur_tile] = i->index;
_map_owner[cur_tile] = _generating_world ? 0x1E : 0; /* maturity */
}
} while ( (++it)->ti != -0x8000);
} while ((++it)->ti.x != -0x80);
i->width++;
i->height++;
@@ -1480,7 +1492,9 @@ static void DoCreateNewIndustry(Industry *i, uint tile, int type, const Industry
if (i->type == IT_FARM || i->type == IT_FARM_2) {
tile = i->xy + TILE_XY((i->width >> 1), (i->height >> 1));
for(j=0; j!=50; j++) {
uint new_tile = TileAddWrap(tile, Random() % 31 - 16, Random() % 31 - 16);
int x = Random() % 31 - 16;
int y = Random() % 31 - 16;
uint new_tile = TileAddWrap(tile, x, y);
if (new_tile != TILE_WRAPPED)
PlantFarmField(new_tile);
}
@@ -1584,6 +1598,8 @@ static void PlaceInitialIndustry(byte type, int amount)
if (_opt.diff.number_industries != 0)
{
byte old_player = _current_player;
_current_player = OWNER_NONE;
assert(num > 0);
do {
@@ -1593,10 +1609,12 @@ static void PlaceInitialIndustry(byte type, int amount)
break;
} while (--i != 0);
} while (--num);
_current_player = old_player;
}
}
void GenerateIndustries()
void GenerateIndustries(void)
{
const byte *b;
@@ -1643,10 +1661,10 @@ static void ExtChangeIndustryProduction(Industry *i)
mag = abs(percent);
if (mag >= 10) {
SET_DPARAM16(3, mag);
SET_DPARAM16(0,_cargoc.names_s[i->produced_cargo[j]]);
SET_DPARAM16(1, i->town->index);
SET_DPARAM16(2, i->type + STR_4802_COAL_MINE);
SetDParam(3, mag);
SetDParam(0,_cargoc.names_s[i->produced_cargo[j]]);
SetDParam(1, i->town->index);
SetDParam(2, i->type + STR_4802_COAL_MINE);
AddNewsItem(percent>=0 ? STR_INDUSTRY_PROD_GOUP : STR_INDUSTRY_PROD_GODOWN,
NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_ECONOMY, 0),
i->xy + TILE_XY(1,1), 0);
@@ -1656,8 +1674,8 @@ static void ExtChangeIndustryProduction(Industry *i)
if (closeit) {
i->prod_level = 0;
SET_DPARAM16(1, i->type + STR_4802_COAL_MINE);
SET_DPARAM16(0, i->town->index);
SetDParam(1, i->type + STR_4802_COAL_MINE);
SetDParam(0, i->town->index);
AddNewsItem(_industry_close_strings[i->type], NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_ECONOMY, 0), i->xy + TILE_XY(1,1), 0);
}
}
@@ -1699,7 +1717,7 @@ static void UpdateIndustryStatistics(Industry *i)
if ( i->produced_cargo[0] != 0xFF || i->produced_cargo[1] != 0xFF )
InvalidateWindow(WC_INDUSTRY_VIEW, i - _industries);
InvalidateWindow(WC_INDUSTRY_VIEW, i->index);
if (i->prod_level == 0)
DeleteIndustry(i);
@@ -1728,7 +1746,6 @@ static void MaybeNewIndustry(uint32 r)
return;
j = 2000;
_current_player = OWNER_NONE;
for(;;) {
i = CreateNewIndustry(TILE_MASK(Random()), type);
if (i != NULL)
@@ -1737,8 +1754,8 @@ static void MaybeNewIndustry(uint32 r)
return;
}
SET_DPARAM16(0, type + STR_4802_COAL_MINE);
SET_DPARAM16(1, i->town->index);
SetDParam(0, type + STR_4802_COAL_MINE);
SetDParam(1, i->town->index);
AddNewsItem( STR_482D_NEW_UNDER_CONSTRUCTION + (type == IT_FOREST), NEWS_FLAGS(NM_THIN,NF_VIEWPORT|NF_TILE,NT_ECONOMY,0), i->xy, 0);
}
@@ -1790,23 +1807,25 @@ close_industry:
i->prod_level = 0;
str = _industry_close_strings[type];
add_news:
SET_DPARAM16(1, type + STR_4802_COAL_MINE);
SET_DPARAM16(0, i->town->index);
SetDParam(1, type + STR_4802_COAL_MINE);
SetDParam(0, i->town->index);
AddNewsItem(str, NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_TILE, NT_ECONOMY, 0), i->xy + TILE_XY(1,1), 0);
}
}
}
void IndustryMonthlyLoop()
void IndustryMonthlyLoop(void)
{
Industry *i;
byte old_player = _current_player;
_current_player = OWNER_NONE;
for(i=_industries; i != endof(_industries); i++) {
FOR_ALL_INDUSTRIES(i) {
if (i->xy != 0)
UpdateIndustryStatistics(i);
}
i = DEREF_INDUSTRY(RandomRange(lengthof(_industries)));
i = GetIndustry(RandomRange(_industries_size));
if (i->xy == 0) {
uint32 r;
@@ -1815,15 +1834,26 @@ void IndustryMonthlyLoop()
} else if (!_patches.smooth_economy) {
MaybeCloseIndustry(i);
}
_current_player = old_player;
// production-change
_industry_sort_dirty = true;
InvalidateWindow(WC_INDUSTRY_DIRECTORY, 0);
}
void InitializeIndustries()
void InitializeIndustries(void)
{
memset(_industries, 0, sizeof(_industries));
Industry *i;
int j;
memset(_industries, 0, sizeof(_industries[0]) * _industries_size);
j = 0;
FOR_ALL_INDUSTRIES(i)
i->index = j++;
_total_industries = 0;
_industry_sort_dirty = true;
}
@@ -1875,27 +1905,28 @@ static const byte _industry_desc[] = {
SLE_END()
};
static void Save_INDY()
static void Save_INDY(void)
{
Industry *ind;
int i;
// Write the vehicles
for(ind=_industries,i=0; i!=lengthof(_industries); ind++,i++) {
FOR_ALL_INDUSTRIES(ind) {
if (ind->xy != 0) {
SlSetArrayIndex(i);
SlSetArrayIndex(ind->index);
SlObject(ind, _industry_desc);
}
}
}
static void Load_INDY()
static void Load_INDY(void)
{
int index;
_total_industries = 0;
while ((index = SlIterateArray()) != -1) {
SlObject(DEREF_INDUSTRY(index), _industry_desc);
if (index + 1 > _total_industries)
_total_industries = index + 1;
Industry *i = GetIndustry(index);
SlObject(i, _industry_desc);
if (index > _total_industries) _total_industries = index;
}
}

View File

@@ -1,5 +1,7 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "map.h"
//#include "gui.h"
#include "window.h"
#include "gfx.h"
@@ -17,6 +19,10 @@ static const byte _build_industry_types[4][12] = {
extern const byte _industry_type_costs[37];
static void UpdateIndustryProduction(Industry *i);
extern void DrawArrowButtons(int x, int y, int state);
extern void ShowQueryString(StringID str, StringID caption, int maxlen, int maxwidth, byte window_class, uint16 window_number);
static void BuildIndustryWndProc(Window *w, WindowEvent *e)
{
switch(e->event) {
@@ -25,7 +31,7 @@ static void BuildIndustryWndProc(Window *w, WindowEvent *e)
if (_thd.place_mode == 1 && _thd.window_class == WC_BUILD_INDUSTRY) {
int ind_type = _build_industry_types[_opt.landscape][WP(w,def_d).data_1];
SET_DPARAM32(0, (_price.build_industry >> 5) * _industry_type_costs[ind_type]);
SetDParam(0, (_price.build_industry >> 5) * _industry_type_costs[ind_type]);
DrawStringCentered(85, w->height - 21, STR_482F_COST, 0);
}
break;
@@ -51,130 +57,130 @@ static void BuildIndustryWndProc(Window *w, WindowEvent *e)
}
static const Widget _build_industry_land0_widgets[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 169, 14, 115, 0x0, STR_NULL},
{ WWT_CLOSEBOX, 14, 2, 167, 16, 27, STR_0241_POWER_STATION, STR_0263_CONSTRUCT_POWER_STATION},
{ WWT_CLOSEBOX, 14, 2, 167, 29, 40, STR_0242_SAWMILL, STR_0264_CONSTRUCT_SAWMILL},
{ WWT_CLOSEBOX, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, 14, 2, 167, 55, 66, STR_0246_FACTORY, STR_0268_CONSTRUCT_FACTORY},
{ WWT_CLOSEBOX, 14, 2, 167, 68, 79, STR_0247_STEEL_MILL, STR_0269_CONSTRUCT_STEEL_MILL},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 169, 14, 115, 0x0, STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 16, 27, STR_0241_POWER_STATION, STR_0263_CONSTRUCT_POWER_STATION},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 29, 40, STR_0242_SAWMILL, STR_0264_CONSTRUCT_SAWMILL},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 55, 66, STR_0246_FACTORY, STR_0268_CONSTRUCT_FACTORY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 68, 79, STR_0247_STEEL_MILL, STR_0269_CONSTRUCT_STEEL_MILL},
{ WIDGETS_END},
};
static const Widget _build_industry_land1_widgets[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 169, 14, 115, 0x0, STR_NULL},
{ WWT_CLOSEBOX, 14, 2, 167, 16, 27, STR_0241_POWER_STATION, STR_0263_CONSTRUCT_POWER_STATION},
{ WWT_CLOSEBOX, 14, 2, 167, 29, 40, STR_024C_PAPER_MILL, STR_026E_CONSTRUCT_PAPER_MILL},
{ WWT_CLOSEBOX, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, 14, 2, 167, 55, 66, STR_024D_FOOD_PROCESSING_PLANT,STR_026F_CONSTRUCT_FOOD_PROCESSING},
{ WWT_CLOSEBOX, 14, 2, 167, 68, 79, STR_024E_PRINTING_WORKS, STR_0270_CONSTRUCT_PRINTING_WORKS},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 169, 14, 115, 0x0, STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 16, 27, STR_0241_POWER_STATION, STR_0263_CONSTRUCT_POWER_STATION},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 29, 40, STR_024C_PAPER_MILL, STR_026E_CONSTRUCT_PAPER_MILL},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 55, 66, STR_024D_FOOD_PROCESSING_PLANT,STR_026F_CONSTRUCT_FOOD_PROCESSING},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 68, 79, STR_024E_PRINTING_WORKS, STR_0270_CONSTRUCT_PRINTING_WORKS},
{ WIDGETS_END},
};
static const Widget _build_industry_land2_widgets[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 169, 14, 115, 0x0, STR_NULL},
{ WWT_CLOSEBOX, 14, 2, 167, 16, 27, STR_0250_LUMBER_MILL, STR_0273_CONSTRUCT_LUMBER_MILL_TO},
{ WWT_CLOSEBOX, 14, 2, 167, 29, 40, STR_024D_FOOD_PROCESSING_PLANT,STR_026F_CONSTRUCT_FOOD_PROCESSING},
{ WWT_CLOSEBOX, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, 14, 2, 167, 55, 66, STR_0246_FACTORY, STR_0268_CONSTRUCT_FACTORY},
{ WWT_CLOSEBOX, 14, 2, 167, 68, 79, STR_0254_WATER_TOWER, STR_0277_CONSTRUCT_WATER_TOWER_CAN},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 169, 14, 115, 0x0, STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 16, 27, STR_0250_LUMBER_MILL, STR_0273_CONSTRUCT_LUMBER_MILL_TO},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 29, 40, STR_024D_FOOD_PROCESSING_PLANT,STR_026F_CONSTRUCT_FOOD_PROCESSING},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 55, 66, STR_0246_FACTORY, STR_0268_CONSTRUCT_FACTORY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 68, 79, STR_0254_WATER_TOWER, STR_0277_CONSTRUCT_WATER_TOWER_CAN},
{ WIDGETS_END},
};
static const Widget _build_industry_land3_widgets[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 169, 14, 115, 0x0, STR_NULL},
{ WWT_CLOSEBOX, 14, 2, 167, 16, 27, STR_0258_CANDY_FACTORY, STR_027B_CONSTRUCT_CANDY_FACTORY},
{ WWT_CLOSEBOX, 14, 2, 167, 29, 40, STR_025B_TOY_SHOP, STR_027E_CONSTRUCT_TOY_SHOP},
{ WWT_CLOSEBOX, 14, 2, 167, 42, 53, STR_025C_TOY_FACTORY, STR_027F_CONSTRUCT_TOY_FACTORY},
{ WWT_CLOSEBOX, 14, 2, 167, 55, 66, STR_025E_FIZZY_DRINK_FACTORY, STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 169, 14, 115, 0x0, STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 16, 27, STR_0258_CANDY_FACTORY, STR_027B_CONSTRUCT_CANDY_FACTORY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 29, 40, STR_025B_TOY_SHOP, STR_027E_CONSTRUCT_TOY_SHOP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 42, 53, STR_025C_TOY_FACTORY, STR_027F_CONSTRUCT_TOY_FACTORY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 55, 66, STR_025E_FIZZY_DRINK_FACTORY, STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY},
{ WIDGETS_END},
};
static const Widget _build_industry_land0_widgets_extra[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY,STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 169, 14, 187, 0x0, STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY,STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 169, 14, 187, 0x0, STR_NULL},
{ WWT_CLOSEBOX, 14, 2, 167, 16, 27, STR_0241_POWER_STATION,STR_0263_CONSTRUCT_POWER_STATION},
{ WWT_CLOSEBOX, 14, 2, 167, 29, 40, STR_0242_SAWMILL, STR_0264_CONSTRUCT_SAWMILL},
{ WWT_CLOSEBOX, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, 14, 2, 167, 55, 66, STR_0246_FACTORY, STR_0268_CONSTRUCT_FACTORY},
{ WWT_CLOSEBOX, 14, 2, 167, 68, 79, STR_0247_STEEL_MILL, STR_0269_CONSTRUCT_STEEL_MILL},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 16, 27, STR_0241_POWER_STATION,STR_0263_CONSTRUCT_POWER_STATION},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 29, 40, STR_0242_SAWMILL, STR_0264_CONSTRUCT_SAWMILL},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 55, 66, STR_0246_FACTORY, STR_0268_CONSTRUCT_FACTORY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 68, 79, STR_0247_STEEL_MILL, STR_0269_CONSTRUCT_STEEL_MILL},
{ WWT_CLOSEBOX, 14, 2, 167, 84, 95, STR_0240_COAL_MINE, STR_CONSTRUCT_COAL_MINE_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 97, 108, STR_0243_FOREST, STR_CONSTRUCT_FOREST_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 110, 121, STR_0245_OIL_RIG, STR_CONSTRUCT_OIL_RIG_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 123, 134, STR_0248_FARM, STR_CONSTRUCT_FARM_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 136, 147, STR_024A_OIL_WELLS, STR_CONSTRUCT_OIL_WELLS_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 149, 160, STR_0249_IRON_ORE_MINE, STR_CONSTRUCT_IRON_ORE_MINE_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 84, 95, STR_0240_COAL_MINE, STR_CONSTRUCT_COAL_MINE_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 97, 108, STR_0243_FOREST, STR_CONSTRUCT_FOREST_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 110, 121, STR_0245_OIL_RIG, STR_CONSTRUCT_OIL_RIG_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 123, 134, STR_0248_FARM, STR_CONSTRUCT_FARM_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 136, 147, STR_024A_OIL_WELLS, STR_CONSTRUCT_OIL_WELLS_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 149, 160, STR_0249_IRON_ORE_MINE, STR_CONSTRUCT_IRON_ORE_MINE_TIP},
{ WIDGETS_END},
};
static const Widget _build_industry_land1_widgets_extra[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 169, 14, 174, 0x0, STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 169, 14, 174, 0x0, STR_NULL},
{ WWT_CLOSEBOX, 14, 2, 167, 16, 27, STR_0241_POWER_STATION, STR_0263_CONSTRUCT_POWER_STATION},
{ WWT_CLOSEBOX, 14, 2, 167, 29, 40, STR_024C_PAPER_MILL, STR_026E_CONSTRUCT_PAPER_MILL},
{ WWT_CLOSEBOX, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, 14, 2, 167, 55, 66, STR_024D_FOOD_PROCESSING_PLANT,STR_026F_CONSTRUCT_FOOD_PROCESSING},
{ WWT_CLOSEBOX, 14, 2, 167, 68, 79, STR_024E_PRINTING_WORKS, STR_0270_CONSTRUCT_PRINTING_WORKS},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 16, 27, STR_0241_POWER_STATION, STR_0263_CONSTRUCT_POWER_STATION},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 29, 40, STR_024C_PAPER_MILL, STR_026E_CONSTRUCT_PAPER_MILL},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 55, 66, STR_024D_FOOD_PROCESSING_PLANT,STR_026F_CONSTRUCT_FOOD_PROCESSING},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 68, 79, STR_024E_PRINTING_WORKS, STR_0270_CONSTRUCT_PRINTING_WORKS},
{ WWT_CLOSEBOX, 14, 2, 167, 81+3, 92+3, STR_0240_COAL_MINE, STR_CONSTRUCT_COAL_MINE_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 94+3, 105+3, STR_0243_FOREST, STR_CONSTRUCT_FOREST_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 107+3, 118+3, STR_0248_FARM, STR_CONSTRUCT_FARM_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 120+3, 131+3, STR_024A_OIL_WELLS, STR_CONSTRUCT_OIL_WELLS_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 133+3, 144+3, STR_024F_GOLD_MINE, STR_CONSTRUCT_GOLD_MINE_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 81+3, 92+3, STR_0240_COAL_MINE, STR_CONSTRUCT_COAL_MINE_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 94+3, 105+3, STR_0243_FOREST, STR_CONSTRUCT_FOREST_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 107+3, 118+3, STR_0248_FARM, STR_CONSTRUCT_FARM_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 120+3, 131+3, STR_024A_OIL_WELLS, STR_CONSTRUCT_OIL_WELLS_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 133+3, 144+3, STR_024F_GOLD_MINE, STR_CONSTRUCT_GOLD_MINE_TIP},
{ WIDGETS_END},
};
static const Widget _build_industry_land2_widgets_extra[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 169, 14, 200, 0x0, STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 169, 14, 200, 0x0, STR_NULL},
{ WWT_CLOSEBOX, 14, 2, 167, 16, 27, STR_0250_LUMBER_MILL, STR_0273_CONSTRUCT_LUMBER_MILL_TO},
{ WWT_CLOSEBOX, 14, 2, 167, 29, 40, STR_024D_FOOD_PROCESSING_PLANT,STR_026F_CONSTRUCT_FOOD_PROCESSING},
{ WWT_CLOSEBOX, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, 14, 2, 167, 55, 66, STR_0246_FACTORY, STR_0268_CONSTRUCT_FACTORY},
{ WWT_CLOSEBOX, 14, 2, 167, 68, 79, STR_0254_WATER_TOWER, STR_0277_CONSTRUCT_WATER_TOWER_CAN},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 16, 27, STR_0250_LUMBER_MILL, STR_0273_CONSTRUCT_LUMBER_MILL_TO},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 29, 40, STR_024D_FOOD_PROCESSING_PLANT,STR_026F_CONSTRUCT_FOOD_PROCESSING},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 42, 53, STR_0244_OIL_REFINERY, STR_0266_CONSTRUCT_OIL_REFINERY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 55, 66, STR_0246_FACTORY, STR_0268_CONSTRUCT_FACTORY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 68, 79, STR_0254_WATER_TOWER, STR_0277_CONSTRUCT_WATER_TOWER_CAN},
{ WWT_CLOSEBOX, 14, 2, 167, 81+3, 92+3, STR_024A_OIL_WELLS,STR_CONSTRUCT_OIL_WELLS_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 94+3, 105+3, STR_0255_DIAMOND_MINE, STR_CONSTRUCT_DIAMOND_MINE_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 107+3, 118+3, STR_0256_COPPER_ORE_MINE, STR_CONSTRUCT_COPPER_ORE_MINE_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 120+3, 131+3, STR_0248_FARM, STR_CONSTRUCT_FARM_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 133+3, 144+3, STR_0251_FRUIT_PLANTATION, STR_CONSTRUCT_FRUIT_PLANTATION_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 146+3, 157+3, STR_0252_RUBBER_PLANTATION,STR_CONSTRUCT_RUBBER_PLANTATION_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 159+3, 170+3, STR_0253_WATER_SUPPLY, STR_CONSTRUCT_WATER_SUPPLY_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 81+3, 92+3, STR_024A_OIL_WELLS,STR_CONSTRUCT_OIL_WELLS_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 94+3, 105+3, STR_0255_DIAMOND_MINE, STR_CONSTRUCT_DIAMOND_MINE_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 107+3, 118+3, STR_0256_COPPER_ORE_MINE, STR_CONSTRUCT_COPPER_ORE_MINE_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 120+3, 131+3, STR_0248_FARM, STR_CONSTRUCT_FARM_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 133+3, 144+3, STR_0251_FRUIT_PLANTATION, STR_CONSTRUCT_FRUIT_PLANTATION_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 146+3, 157+3, STR_0252_RUBBER_PLANTATION,STR_CONSTRUCT_RUBBER_PLANTATION_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 159+3, 170+3, STR_0253_WATER_SUPPLY, STR_CONSTRUCT_WATER_SUPPLY_TIP},
{ WIDGETS_END},
};
static const Widget _build_industry_land3_widgets_extra[] = {
{ WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, 7, 0, 169, 14, 187, 0x0, STR_NULL},
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 169, 0, 13, STR_0314_FUND_NEW_INDUSTRY, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 7, 0, 169, 14, 187, 0x0, STR_NULL},
{ WWT_CLOSEBOX, 14, 2, 167, 16, 27, STR_0258_CANDY_FACTORY, STR_027B_CONSTRUCT_CANDY_FACTORY},
{ WWT_CLOSEBOX, 14, 2, 167, 29, 40, STR_025B_TOY_SHOP, STR_027E_CONSTRUCT_TOY_SHOP},
{ WWT_CLOSEBOX, 14, 2, 167, 42, 53, STR_025C_TOY_FACTORY, STR_027F_CONSTRUCT_TOY_FACTORY},
{ WWT_CLOSEBOX, 14, 2, 167, 55, 66, STR_025E_FIZZY_DRINK_FACTORY, STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 16, 27, STR_0258_CANDY_FACTORY, STR_027B_CONSTRUCT_CANDY_FACTORY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 29, 40, STR_025B_TOY_SHOP, STR_027E_CONSTRUCT_TOY_SHOP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 42, 53, STR_025C_TOY_FACTORY, STR_027F_CONSTRUCT_TOY_FACTORY},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 55, 66, STR_025E_FIZZY_DRINK_FACTORY, STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY},
{ WWT_CLOSEBOX, 14, 2, 167, 68+3, 79+3, STR_0257_COTTON_CANDY_FOREST,STR_CONSTRUCT_COTTON_CANDY_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 81+3, 92+3, STR_0259_BATTERY_FARM, STR_CONSTRUCT_BATTERY_FARM_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 94+3, 105+3, STR_025A_COLA_WELLS, STR_CONSTRUCT_COLA_WELLS_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 107+3, 118+3, STR_025D_PLASTIC_FOUNTAINS,STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 120+3, 131+3, STR_025F_BUBBLE_GENERATOR, STR_CONSTRUCT_BUBBLE_GENERATOR_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 133+3, 144+3, STR_0260_TOFFEE_QUARRY, STR_CONSTRUCT_TOFFEE_QUARRY_TIP},
{ WWT_CLOSEBOX, 14, 2, 167, 146+3, 157+3, STR_0261_SUGAR_MINE, STR_CONSTRUCT_SUGAR_MINE_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 68+3, 79+3, STR_0257_COTTON_CANDY_FOREST,STR_CONSTRUCT_COTTON_CANDY_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 81+3, 92+3, STR_0259_BATTERY_FARM, STR_CONSTRUCT_BATTERY_FARM_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 94+3, 105+3, STR_025A_COLA_WELLS, STR_CONSTRUCT_COLA_WELLS_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 107+3, 118+3, STR_025D_PLASTIC_FOUNTAINS,STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 120+3, 131+3, STR_025F_BUBBLE_GENERATOR, STR_CONSTRUCT_BUBBLE_GENERATOR_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 133+3, 144+3, STR_0260_TOFFEE_QUARRY, STR_CONSTRUCT_TOFFEE_QUARRY_TIP},
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 2, 167, 146+3, 157+3, STR_0261_SUGAR_MINE, STR_CONSTRUCT_SUGAR_MINE_TIP},
{ WIDGETS_END},
};
@@ -258,68 +264,130 @@ static const WindowDesc * const _industry_window_desc[2][4] = {
},
};
void ShowBuildIndustryWindow()
void ShowBuildIndustryWindow(void)
{
AllocateWindowDescFront(_industry_window_desc[_patches.build_rawmaterial_ind][_opt.landscape],0);
}
#define NEED_ALTERB (_game_mode == GM_EDITOR && i->accepts_cargo[0] == CT_INVALID)
static void IndustryViewWndProc(Window *w, WindowEvent *e)
{
Industry *i;
StringID str;
// WP(w,vp2_d).data_1 is for the editbox line
// WP(w,vp2_d).data_2 is for the clickline
// WP(w,vp2_d).data_3 is for the click pos (left or right)
switch(e->event) {
case WE_PAINT:
case WE_PAINT: {
const Industry *i;
StringID str;
// in editor, use bulldoze to destroy industry
// Destroy Industry button costing money removed per request of dominik
//w->disabled_state = (_patches.extra_dynamite && !_networking && _game_mode != GM_EDITOR) ? 0 : (1 << 6);
i = DEREF_INDUSTRY(w->window_number);
SET_DPARAM16(0, i->town->index);
SET_DPARAM16(1, i->type + STR_4802_COAL_MINE);
i = GetIndustry(w->window_number);
SetDParam(0, i->town->index);
SetDParam(1, i->type + STR_4802_COAL_MINE);
DrawWindowWidgets(w);
if (i->accepts_cargo[0] != 0xFF) {
SET_DPARAM16(0, _cargoc.names_s[i->accepts_cargo[0]]);
if (i->accepts_cargo[0] != CT_INVALID) {
SetDParam(0, _cargoc.names_s[i->accepts_cargo[0]]);
str = STR_4827_REQUIRES;
if (i->accepts_cargo[1] != 0xFF) {
SET_DPARAM16(1, _cargoc.names_s[i->accepts_cargo[1]]);
if (i->accepts_cargo[1] != CT_INVALID) {
SetDParam(1, _cargoc.names_s[i->accepts_cargo[1]]);
str++;
if (i->accepts_cargo[2] != 0xFF) {
SET_DPARAM16(2, _cargoc.names_s[i->accepts_cargo[2]]);
if (i->accepts_cargo[2] != CT_INVALID) {
SetDParam(2, _cargoc.names_s[i->accepts_cargo[2]]);
str++;
}
}
DrawString(2, 107, str, 0);
}
if (i->produced_cargo[0] != 0xFF) {
if (i->produced_cargo[0] != CT_INVALID) {
DrawString(2, 117, STR_482A_PRODUCTION_LAST_MONTH, 0);
SET_DPARAM16(1, i->total_production[0]);
SET_DPARAM16(0, _cargoc.names_long_s[i->produced_cargo[0]] + ((i->total_production[0]!=1)<<5));
SET_DPARAM16(2, i->pct_transported[0] * 100 >> 8);
DrawString(4, 127, STR_482B_TRANSPORTED, 0);
SetDParam(1, i->total_production[0]);
SetDParam(0, _cargoc.names_long_s[i->produced_cargo[0]] + ((i->total_production[0]!=1)<<5));
SetDParam(2, i->pct_transported[0] * 100 >> 8);
DrawString(4 + (NEED_ALTERB ? 30 : 0), 127, STR_482B_TRANSPORTED, 0);
// Let's put out those buttons..
if (NEED_ALTERB)
DrawArrowButtons(5, 127, (WP(w,vp2_d).data_2 == 1 ? WP(w,vp2_d).data_3 : 0));
if (i->produced_cargo[1] != 0xFF) {
SET_DPARAM16(1, i->total_production[1]);
SET_DPARAM16(0, _cargoc.names_long_s[i->produced_cargo[1]] + ((i->total_production[1]!=1)<<5));
SET_DPARAM16(2, i->pct_transported[1] * 100 >> 8);
DrawString(4, 137, STR_482B_TRANSPORTED, 0);
if (i->produced_cargo[1] != CT_INVALID) {
SetDParam(1, i->total_production[1]);
SetDParam(0, _cargoc.names_long_s[i->produced_cargo[1]] + ((i->total_production[1]!=1)<<5));
SetDParam(2, i->pct_transported[1] * 100 >> 8);
DrawString(4 + (NEED_ALTERB ? 30 : 0), 137, STR_482B_TRANSPORTED, 0);
// Let's put out those buttons..
if (NEED_ALTERB)
DrawArrowButtons(5, 137, (WP(w,vp2_d).data_2 == 2 ? WP(w,vp2_d).data_3 : 0));
}
}
DrawWindowViewport(w);
}
break;
case WE_CLICK:
case WE_CLICK: {
Industry *i;
switch(e->click.widget) {
case 5:
i = DEREF_INDUSTRY(w->window_number);
ScrollMainWindowToTile(i->xy + TILE_XY(1,1));
case 5: {
int line;
int x;
byte b;
i = GetIndustry(w->window_number);
// We should only work in editor
if (_game_mode != GM_EDITOR)
return;
// And if the industry is raw-material producer
if (i->accepts_cargo[0] != CT_INVALID)
return;
x = e->click.pt.x;
line = (e->click.pt.y - 127) / 10;
if (e->click.pt.y >= 127 && IS_INT_INSIDE(line, 0, 2) && i->produced_cargo[line]) {
if (IS_INT_INSIDE(x, 5, 25) ) {
// clicked buttons
if (x < 15) {
// decrease
i->production_rate[line] /= 2;
if (i->production_rate[line] < 4)
i->production_rate[line] = 4;
} else {
// increase
b = i->production_rate[line] * 2;
if (i->production_rate[line] >= 128)
b=255;
i->production_rate[line] = b;
}
UpdateIndustryProduction(i);
SetWindowDirty(w);
w->flags4 |= 5 << WF_TIMEOUT_SHL;
WP(w,vp2_d).data_2 = line+1;
WP(w,vp2_d).data_3 = (x < 15 ? 1 : 2);
} else if (IS_INT_INSIDE(x, 34, 160)) {
// clicked the text
WP(w,vp2_d).data_1 = line;
SetDParam(0, i->production_rate[line] * 8);
ShowQueryString(STR_CONFIG_PATCHES_INT32,
STR_CONFIG_GAME_PRODUCTION,
10, 100, w->window_class,
w->window_number);
}
}
}
break;
case 6:
i = GetIndustry(w->window_number);
ScrollMainWindowToTile(i->xy + TILE_XY(1,1));
break;
case 7:
// Destroy Industry button costing money removed per request of dominik
//i = DEREF_INDUSTRY(w->window_number);
//i = GetIndustry(w->window_number);
/* passing only i->xy is not safe if industry has a weird shape like:
_ X X
X X X
@@ -329,27 +397,61 @@ static void IndustryViewWndProc(Window *w, WindowEvent *e)
//DoCommandP(i->xy, w->window_number, 0, CcPlaySound10, CMD_DESTROY_INDUSTRY | CMD_MSG(STR_00B5_CAN_T_CLEAR_THIS_AREA));
break;
}
}
break;
case WE_TIMEOUT:
WP(w,vp2_d).data_2 = 0;
WP(w,vp2_d).data_3 = 0;
SetWindowDirty(w);
break;
case WE_ON_EDIT_TEXT:
if (*e->edittext.str) {
Industry *i;
int val;
int line;
i = GetIndustry(w->window_number);
line = WP(w,vp2_d).data_1;
val = atoi(e->edittext.str);
if (!IS_INT_INSIDE(val, 32, 2040)) {
if (val < 32) val = 32;
else val = 2040;
}
i->production_rate[line] = (byte)(val / 8);
UpdateIndustryProduction(i);
SetWindowDirty(w);
}
}
}
static void UpdateIndustryProduction(Industry *i)
{
if (i->produced_cargo[0] != CT_INVALID)
i->total_production[0] = 8 * i->production_rate[0];
if (i->produced_cargo[1] != CT_INVALID)
i->total_production[1] = 8 * i->production_rate[1];
}
static const Widget _industry_view_widgets[] = {
{ WWT_TEXTBTN, 9, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 9, 11, 259, 0, 13, STR_4801, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_IMGBTN, 9, 0, 259, 14, 105, 0x0, STR_NULL},
{ WWT_6, 9, 2, 257, 16, 103, 0x0, STR_NULL},
{ WWT_IMGBTN, 9, 0, 259, 106, 147, 0x0, STR_NULL},
{ WWT_PUSHTXTBTN, 9, 0, 129, 148, 159, STR_00E4_LOCATION, STR_482C_CENTER_THE_MAIN_VIEW_ON},
{ WWT_IMGBTN, 9, 130, 259, 148, 159, 0x0, STR_NULL},
{ WWT_TEXTBTN, RESIZE_NONE, 9, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 9, 11, 247, 0, 13, STR_4801, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_STICKYBOX, RESIZE_NONE, 9, 248, 259, 0, 13, 0x0, STR_STICKY_BUTTON},
{ WWT_IMGBTN, RESIZE_NONE, 9, 0, 259, 14, 105, 0x0, STR_NULL},
{ WWT_6, RESIZE_NONE, 9, 2, 257, 16, 103, 0x0, STR_NULL},
{ WWT_IMGBTN, RESIZE_NONE, 9, 0, 259, 106, 147, 0x0, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 9, 0, 129, 148, 159, STR_00E4_LOCATION, STR_482C_CENTER_THE_MAIN_VIEW_ON},
{ WWT_IMGBTN, RESIZE_NONE, 9, 130, 259, 148, 159, 0x0, STR_NULL},
// Destroy Industry button costing money removed per request of dominik
//{ WWT_PUSHTXTBTN, 9, 130, 259, 148, 159, STR_INDUSTRYDIR_DESTROY, STR_482C_DESTROY_INDUSTRY},
//{ WWT_PUSHTXTBTN, RESIZE_NONE, 9, 130, 259, 148, 159, STR_INDUSTRYDIR_DESTROY, STR_482C_DESTROY_INDUSTRY},
{ WIDGETS_END},
};
static const WindowDesc _industry_view_desc = {
-1, -1, 260, 160,
WC_INDUSTRY_VIEW,0,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON,
_industry_view_widgets,
IndustryViewWndProc
};
@@ -362,29 +464,33 @@ void ShowIndustryViewWindow(int industry)
w = AllocateWindowDescFront(&_industry_view_desc, industry);
if (w) {
w->flags4 |= WF_DISABLE_VP_SCROLL;
i = DEREF_INDUSTRY(w->window_number);
WP(w,vp2_d).data_1 = 0;
WP(w,vp2_d).data_2 = 0;
WP(w,vp2_d).data_3 = 0;
i = GetIndustry(w->window_number);
AssignWindowViewport(w, 3, 17, 0xFE, 0x56, i->xy + TILE_XY(1,1), 1);
}
}
static const Widget _industry_directory_widgets[] = {
{ WWT_TEXTBTN, 13, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, 13, 11, 507, 0, 13, STR_INDUSTRYDIR_CAPTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PUSHTXTBTN, 13, 0, 100, 14, 25, STR_SORT_BY_NAME, STR_SORT_TIP},
{ WWT_PUSHTXTBTN, 13, 101, 200, 14, 25, STR_SORT_BY_TYPE, STR_SORT_TIP},
{ WWT_PUSHTXTBTN, 13, 201, 300, 14, 25, STR_SORT_BY_PRODUCTION, STR_SORT_TIP},
{ WWT_PUSHTXTBTN, 13, 301, 400, 14, 25, STR_SORT_BY_TRANSPORTED, STR_SORT_TIP},
{ WWT_PANEL, 13, 401, 496, 14, 25, 0x0, STR_NULL},
{ WWT_IMGBTN, 13, 0, 496, 26, 189, 0x0, STR_200A_TOWN_NAMES_CLICK_ON_NAME},
{ WWT_SCROLLBAR, 13, 497, 507, 14, 189, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
{ WWT_TEXTBTN, RESIZE_NONE, 13, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 13, 11, 495, 0, 13, STR_INDUSTRYDIR_CAPTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_STICKYBOX, RESIZE_NONE, 13, 496, 507, 0, 13, 0x0, STR_STICKY_BUTTON},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 0, 100, 14, 25, STR_SORT_BY_NAME, STR_SORT_ORDER_TIP},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 101, 200, 14, 25, STR_SORT_BY_TYPE, STR_SORT_ORDER_TIP},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 201, 300, 14, 25, STR_SORT_BY_PRODUCTION, STR_SORT_ORDER_TIP},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 13, 301, 400, 14, 25, STR_SORT_BY_TRANSPORTED, STR_SORT_ORDER_TIP},
{ WWT_PANEL, RESIZE_NONE, 13, 401, 495, 14, 25, 0x0, STR_NULL},
{ WWT_IMGBTN, RESIZE_BOTTOM, 13, 0, 495, 26, 189, 0x0, STR_200A_TOWN_NAMES_CLICK_ON_NAME},
{ WWT_SCROLLBAR, RESIZE_BOTTOM, 13, 496, 507, 14, 177, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
{ WWT_RESIZEBOX, RESIZE_TB, 13, 496, 507, 178, 189, 0x0, STR_RESIZE_BUTTON},
{ WIDGETS_END},
};
static byte _industry_sort[lengthof(_industries)];
static uint _num_industry_sort;
static char _bufcache[96];
static byte _last_industry_idx;
static uint16 _last_industry_idx;
static byte _industry_sort_order;
@@ -392,8 +498,8 @@ static int CDECL GeneralIndustrySorter(const void *a, const void *b)
{
char buf1[96];
byte val;
Industry *i = DEREF_INDUSTRY(*(const byte*)a);
Industry *j = DEREF_INDUSTRY(*(const byte*)b);
Industry *i = GetIndustry(*(const uint16*)a);
Industry *j = GetIndustry(*(const uint16*)b);
int r = 0;
switch (_industry_sort_order >> 1) {
@@ -434,12 +540,12 @@ static int CDECL GeneralIndustrySorter(const void *a, const void *b)
// default to string sorting if they are otherwise equal
if (r == 0) {
SET_DPARAM32(0, i->town->townnameparts);
SetDParam(0, i->town->townnameparts);
GetString(buf1, i->town->townnametype);
if ( (val=*(const byte*)b) != _last_industry_idx) {
if ( (val=*(const uint16*)b) != _last_industry_idx) {
_last_industry_idx = val;
SET_DPARAM32(0, j->town->townnameparts);
SetDParam(0, j->town->townnameparts);
GetString(_bufcache, j->town->townnametype);
}
r = strcmp(buf1, _bufcache);
@@ -449,19 +555,24 @@ static int CDECL GeneralIndustrySorter(const void *a, const void *b)
return r;
}
static void MakeSortedIndustryList()
static void MakeSortedIndustryList(void)
{
Industry *i;
int n = 0, index = 0;
int n = 0;
for(i=_industries; i != endof(_industries); i++) {
if(i->xy) _industry_sort[n++] = index;
index++;
/* Create array for sorting */
_industry_sort = realloc(_industry_sort, _industries_size * sizeof(_industry_sort[0]));
if (_industry_sort == NULL)
error("Could not allocate memory for the industry-sorting-list");
FOR_ALL_INDUSTRIES(i) {
if(i->xy)
_industry_sort[n++] = i->index;
}
_num_industry_sort = n;
_last_industry_idx = 255; // used for "cache"
_last_industry_idx = 0xFFFF; // used for "cache"
qsort(_industry_sort, n, 1, GeneralIndustrySorter);
qsort(_industry_sort, n, sizeof(_industry_sort[0]), GeneralIndustrySorter);
DEBUG(misc, 1) ("Resorting Industries list...");
}
@@ -490,68 +601,68 @@ static void IndustryDirectoryWndProc(Window *w, WindowEvent *e)
n = 0;
while (p < _num_industry_sort) {
i = DEREF_INDUSTRY(_industry_sort[p]);
SET_DPARAM16(0, i->town->index);
SET_DPARAM16(1, i->type + STR_4802_COAL_MINE);
i = GetIndustry(_industry_sort[p]);
SetDParam(0, i->town->index);
SetDParam(1, i->type + STR_4802_COAL_MINE);
if (i->produced_cargo[0] != 0xFF) {
SET_DPARAM16(3, i->total_production[0]);
SET_DPARAM16(2, _cargoc.names_long_s[i->produced_cargo[0]] + ((i->total_production[0]!=1)<<5));
SetDParam(3, i->total_production[0]);
SetDParam(2, _cargoc.names_long_s[i->produced_cargo[0]] + ((i->total_production[0]!=1)<<5));
if (i->produced_cargo[1] != 0xFF) {
SET_DPARAM16(5, i->total_production[1]);
SET_DPARAM16(4, _cargoc.names_long_s[i->produced_cargo[1]] + ((i->total_production[1]!=1)<<5));
SET_DPARAM16(6, i->pct_transported[0] * 100 >> 8);
SET_DPARAM16(7, i->pct_transported[1] * 100 >> 8);
SetDParam(5, i->total_production[1]);
SetDParam(4, _cargoc.names_long_s[i->produced_cargo[1]] + ((i->total_production[1]!=1)<<5));
SetDParam(6, i->pct_transported[0] * 100 >> 8);
SetDParam(7, i->pct_transported[1] * 100 >> 8);
DrawString(4, 28+n*10, STR_INDUSTRYDIR_ITEM_TWO, 0);
} else {
SET_DPARAM16(4, i->pct_transported[0] * 100 >> 8);
SetDParam(4, i->pct_transported[0] * 100 >> 8);
DrawString(4, 28+n*10, STR_INDUSTRYDIR_ITEM, 0);
}
} else {
DrawString(4, 28+n*10, STR_INDUSTRYDIR_ITEM_NOPROD, 0);
}
p++;
if (++n == 16)
if (++n == w->vscroll.cap)
break;
}
} break;
case WE_CLICK:
switch(e->click.widget) {
case 2: {
case 3: {
_industry_sort_order = _industry_sort_order==0 ? 1 : 0;
_industry_sort_dirty = true;
SetWindowDirty(w);
} break;
case 3: {
case 4: {
_industry_sort_order = _industry_sort_order==2 ? 3 : 2;
_industry_sort_dirty = true;
SetWindowDirty(w);
} break;
case 4: {
case 5: {
_industry_sort_order = _industry_sort_order==4 ? 5 : 4;
_industry_sort_dirty = true;
SetWindowDirty(w);
} break;
case 5: {
case 6: {
_industry_sort_order = _industry_sort_order==6 ? 7 : 6;
_industry_sort_dirty = true;
SetWindowDirty(w);
} break;
case 7: {
case 8: {
int y = (e->click.pt.y - 28) / 10;
byte p;
uint16 p;
Industry *c;
if (!IS_INT_INSIDE(y, 0, 16))
if (!IS_INT_INSIDE(y, 0, w->vscroll.cap))
return;
p = y + w->vscroll.pos;
if (p < _num_industry_sort) {
c = DEREF_INDUSTRY(_industry_sort[p]);
c = GetIndustry(_industry_sort[p]);
ScrollMainWindowToTile(c->xy);
}
} break;
@@ -561,6 +672,10 @@ static void IndustryDirectoryWndProc(Window *w, WindowEvent *e)
case WE_4:
SetWindowDirty(w);
break;
case WE_RESIZE:
w->vscroll.cap += e->sizing.diff.y / 10;
break;
}
}
@@ -569,14 +684,14 @@ static void IndustryDirectoryWndProc(Window *w, WindowEvent *e)
static const WindowDesc _industry_directory_desc = {
-1, -1, 508, 190,
WC_INDUSTRY_DIRECTORY,0,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
_industry_directory_widgets,
IndustryDirectoryWndProc
};
void ShowIndustryDirectory()
void ShowIndustryDirectory(void)
{
/* Industry List */
Window *w;
@@ -584,6 +699,8 @@ void ShowIndustryDirectory()
w = AllocateWindowDescFront(&_industry_directory_desc, 0);
if (w) {
w->vscroll.cap = 16;
w->resize.height = w->height - 6 * 10; // minimum 10 items
w->resize.step_height = 10;
SetWindowDirty(w);
}
}

View File

@@ -1,6 +1,6 @@
#include "stdafx.h"
#include "ttd.h"
#include "table/strings.h"
#include "window.h"
#include "gui.h"
#include "viewport.h"
@@ -8,9 +8,9 @@
#include "player.h"
#include "command.h"
#include "console.h"
#include "network.h"
extern void MakeNewGame();
extern void StartScenario();
extern void SwitchMode(int new_mode);
/*
static void ShowSelectTutorialWindow()
@@ -19,32 +19,34 @@ static void ShowSelectTutorialWindow()
*/
static const Widget _select_game_widgets[] = {
{ WWT_CAPTION, 13, 0, 335, 0, 13, STR_0307_OPENTTD, STR_NULL},
{ WWT_IMGBTN, 13, 0, 335, 14, 196, 0x0, STR_NULL},
{ WWT_PUSHTXTBTN, 12, 10, 167, 22, 33, STR_0140_NEW_GAME, STR_02FB_START_A_NEW_GAME},
{ WWT_PUSHTXTBTN, 12, 168, 325, 22, 33, STR_0141_LOAD_GAME, STR_02FC_LOAD_A_SAVED_GAME_FROM},
//{ WWT_PUSHTXTBTN, 12, 10, 167, 177, 188, STR_0142_TUTORIAL_DEMONSTRATION, STR_02FD_VIEW_DEMONSTRATIONS_TUTORIALS},
{ WWT_PUSHTXTBTN, 12, 10, 167, 177, 188, STR_CONFIG_PATCHES, STR_CONFIG_PATCHES_TIP},
{ WWT_PUSHTXTBTN, 12, 10, 167, 40, 51, STR_0220_CREATE_SCENARIO,STR_02FE_CREATE_A_CUSTOMIZED_GAME},
{ WWT_PUSHTXTBTN, 12, 10, 167, 136, 147, STR_SINGLE_PLAYER, STR_02FF_SELECT_SINGLE_PLAYER_GAME},
{ WWT_PUSHTXTBTN, 12, 168, 325, 136, 147, STR_MULTIPLAYER, STR_0300_SELECT_TWO_PLAYER_GAME},
{ WWT_PUSHTXTBTN, 12, 10, 167, 159, 170, STR_0148_GAME_OPTIONS, STR_0301_DISPLAY_GAME_OPTIONS},
{ WWT_PUSHTXTBTN, 12, 168, 325, 159, 170, STR_01FE_DIFFICULTY, STR_0302_DISPLAY_DIFFICULTY_OPTIONS},
{ WWT_PUSHTXTBTN, 12, 168, 325, 40, 51, STR_029A_PLAY_SCENARIO, STR_0303_START_A_NEW_GAME_USING},
{ WWT_PUSHTXTBTN, 12, 168, 325, 177, 188, STR_0304_QUIT, STR_0305_LEAVE_OPENTTD},
{ WWT_PANEL_2, 12, 10, 85, 69, 122, 0x1312, STR_030E_SELECT_TEMPERATE_LANDSCAPE},
{ WWT_PANEL_2, 12, 90, 165, 69, 122, 0x1314, STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE},
{ WWT_PANEL_2, 12, 170, 245, 69, 122, 0x1316, STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE},
{ WWT_PANEL_2, 12, 250, 325, 69, 122, 0x1318, STR_0311_SELECT_TOYLAND_LANDSCAPE},
{ WWT_CAPTION, RESIZE_NONE, 13, 0, 335, 0, 13, STR_0307_OPENTTD, STR_NULL},
{ WWT_IMGBTN, RESIZE_NONE, 13, 0, 335, 14, 196, 0x0, STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 10, 167, 22, 33, STR_0140_NEW_GAME, STR_02FB_START_A_NEW_GAME},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 168, 325, 22, 33, STR_0141_LOAD_GAME, STR_02FC_LOAD_A_SAVED_GAME},
//{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 10, 167, 177, 188, STR_0142_TUTORIAL_DEMONSTRATION, STR_02FD_VIEW_DEMONSTRATIONS_TUTORIALS},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 10, 167, 177, 188, STR_CONFIG_PATCHES, STR_CONFIG_PATCHES_TIP},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 10, 167, 40, 51, STR_0220_CREATE_SCENARIO,STR_02FE_CREATE_A_CUSTOMIZED_GAME},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 10, 167, 136, 147, STR_SINGLE_PLAYER, STR_02FF_SELECT_SINGLE_PLAYER_GAME},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 168, 325, 136, 147, STR_MULTIPLAYER, STR_0300_SELECT_MULTIPLAYER_GAME},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 10, 167, 159, 170, STR_0148_GAME_OPTIONS, STR_0301_DISPLAY_GAME_OPTIONS},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 168, 325, 159, 170, STR_01FE_DIFFICULTY, STR_0302_DISPLAY_DIFFICULTY_OPTIONS},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 168, 325, 40, 51, STR_029A_PLAY_SCENARIO, STR_0303_START_A_NEW_GAME_USING},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 168, 325, 177, 188, STR_0304_QUIT, STR_0305_QUIT_OPENTTD},
{ WWT_PANEL_2, RESIZE_NONE, 12, 10, 85, 69, 122, 0x1312, STR_030E_SELECT_TEMPERATE_LANDSCAPE},
{ WWT_PANEL_2, RESIZE_NONE, 12, 90, 165, 69, 122, 0x1314, STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE},
{ WWT_PANEL_2, RESIZE_NONE, 12, 170, 245, 69, 122, 0x1316, STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE},
{ WWT_PANEL_2, RESIZE_NONE, 12, 250, 325, 69, 122, 0x1318, STR_0311_SELECT_TOYLAND_LANDSCAPE},
{ WIDGETS_END},
};
extern void HandleOnEditText(WindowEvent *e);
extern void HandleOnEditTextCancel(void);
static void SelectGameWndProc(Window *w, WindowEvent *e) {
switch(e->event) {
case WE_PAINT:
w->click_state = (w->click_state & ~(0xC0) & ~(0xF << 12)) | (1 << (_new_opt.landscape+12)) | (!_networking?(1<<6):(1<<7));
w->disabled_state = _networking ? 0x30 : 0;
SET_DPARAM16(0, STR_6801_EASY + _new_opt.diff_level);
w->click_state = (w->click_state & ~(0xC0) & ~(0xF << 12)) | (1 << (_new_opt.landscape+12)) | (1<<6);
SetDParam(0, STR_6801_EASY + _new_opt.diff_level);
DrawWindowWidgets(w);
break;
@@ -54,17 +56,15 @@ static void SelectGameWndProc(Window *w, WindowEvent *e) {
case 3: ShowSaveLoadDialog(SLD_LOAD_GAME); break;
case 4: ShowPatchesSelection(); break;
case 5: DoCommandP(0, InteractiveRandom(), 0, NULL, CMD_CREATE_SCENARIO); break;
case 6:
if (_networking)
DoCommandP(0, 0, 0, NULL, CMD_SET_SINGLE_PLAYER);
break;
case 7:
#ifdef ENABLE_NETWORK
if (!_network_available) {
ShowErrorMessage(-1, STR_NETWORK_ERR_NOTAVAILABLE, 0, 0);
} else {
} else
ShowNetworkGameWindow();
ShowErrorMessage(-1, TEMP_STRING_NO_NETWORK, 0, 0);
}
#else
ShowErrorMessage(-1 ,STR_NETWORK_ERR_NOTAVAILABLE, 0, 0);
#endif /* ENABLE_NETWORK */
break;
case 8: ShowGameOptions(); break;
case 9: ShowGameDifficulty(); break;
@@ -79,7 +79,11 @@ static void SelectGameWndProc(Window *w, WindowEvent *e) {
case WKC_BACKQUOTE: IConsoleSwitch(); break;
}
break;
case WE_ON_EDIT_TEXT: HandleOnEditText(e); break;
case WE_ON_EDIT_TEXT_CANCEL: HandleOnEditTextCancel(); break;
}
}
static const WindowDesc _select_game_desc = {
@@ -90,7 +94,7 @@ static const WindowDesc _select_game_desc = {
SelectGameWndProc
};
void ShowSelectGameWindow()
void ShowSelectGameWindow(void)
{
AllocateWindowDesc(&_select_game_desc);
}
@@ -128,9 +132,7 @@ int32 CmdGenRandomNewGame(int x, int y, uint32 flags, uint32 p1, uint32 p2)
_random_seeds[0][0] = p1;
_random_seeds[0][1] = p2;
if (_networking) { NetworkStartSync(true); }
MakeNewGame();
SwitchMode(SM_NEWGAME);
return 0;
}
@@ -169,19 +171,17 @@ int32 CmdStartScenario(int x, int y, uint32 flags, uint32 p1, uint32 p2)
_random_seeds[0][0] = p1;
_random_seeds[0][1] = p2;
if (_networking) { NetworkStartSync(true); }
StartScenario();
SwitchMode(SM_START_SCENARIO);
return 0;
}
static const Widget _ask_abandon_game_widgets[] = {
{ WWT_TEXTBTN, 4, 0, 10, 0, 13, STR_00C5, STR_NULL},
{ WWT_CAPTION, 4, 11, 179, 0, 13, STR_00C7_QUIT, STR_NULL},
{ WWT_IMGBTN, 4, 0, 179, 14, 91, 0x0, STR_NULL},
{ WWT_TEXTBTN, 12, 25, 84, 72, 83, STR_00C9_NO, STR_NULL},
{ WWT_TEXTBTN, 12, 95, 154, 72, 83, STR_00C8_YES, STR_NULL},
{ WWT_TEXTBTN, RESIZE_NONE, 4, 0, 10, 0, 13, STR_00C5, STR_NULL},
{ WWT_CAPTION, RESIZE_NONE, 4, 11, 179, 0, 13, STR_00C7_QUIT, STR_NULL},
{ WWT_IMGBTN, RESIZE_NONE, 4, 0, 179, 14, 91, 0x0, STR_NULL},
{ WWT_TEXTBTN, RESIZE_NONE, 12, 25, 84, 72, 83, STR_00C9_NO, STR_NULL},
{ WWT_TEXTBTN, RESIZE_NONE, 12, 95, 154, 72, 83, STR_00C8_YES, STR_NULL},
{ WIDGETS_END},
};
@@ -190,15 +190,19 @@ static void AskAbandonGameWndProc(Window *w, WindowEvent *e) {
case WE_PAINT:
DrawWindowWidgets(w);
#if defined(_WIN32)
SET_DPARAM16(0, STR_0133_WINDOWS);
SetDParam(0, STR_0133_WINDOWS);
#elif defined(__APPLE__)
SET_DPARAM16(0, STR_0135_OSX);
SetDParam(0, STR_0135_OSX);
#elif defined(__BEOS__)
SET_DPARAM16(0, STR_OSNAME_BEOS);
SetDParam(0, STR_OSNAME_BEOS);
#elif defined(__MORPHOS__)
SET_DPARAM16(0, STR_OSNAME_MORPHOS);
SetDParam(0, STR_OSNAME_MORPHOS);
#elif defined(__AMIGA__)
SetDParam(0, STR_OSNAME_AMIGAOS);
#elif defined(__OS2__)
SetDParam(0, STR_OSNAME_OS2);
#else
SET_DPARAM16(0, STR_0134_UNIX);
SetDParam(0, STR_0134_UNIX);
#endif
DrawStringMultiCenter(0x5A, 0x26, STR_00CA_ARE_YOU_SURE_YOU_WANT_TO, 178);
return;
@@ -228,18 +232,18 @@ static const WindowDesc _ask_abandon_game_desc = {
AskAbandonGameWndProc
};
void AskExitGame()
void AskExitGame(void)
{
AllocateWindowDescFront(&_ask_abandon_game_desc, 0);
}
static const Widget _ask_quit_game_widgets[] = {
{ WWT_TEXTBTN, 4, 0, 10, 0, 13, STR_00C5, STR_NULL},
{ WWT_CAPTION, 4, 11, 179, 0, 13, STR_0161_QUIT_GAME, STR_NULL},
{ WWT_IMGBTN, 4, 0, 179, 14, 91, 0x0, STR_NULL},
{ WWT_TEXTBTN, 12, 25, 84, 72, 83, STR_00C9_NO, STR_NULL},
{ WWT_TEXTBTN, 12, 95, 154, 72, 83, STR_00C8_YES, STR_NULL},
{ WWT_TEXTBTN, RESIZE_NONE, 4, 0, 10, 0, 13, STR_00C5, STR_NULL},
{ WWT_CAPTION, RESIZE_NONE, 4, 11, 179, 0, 13, STR_0161_QUIT_GAME, STR_NULL},
{ WWT_IMGBTN, RESIZE_NONE, 4, 0, 179, 14, 91, 0x0, STR_NULL},
{ WWT_TEXTBTN, RESIZE_NONE, 12, 25, 84, 72, 83, STR_00C9_NO, STR_NULL},
{ WWT_TEXTBTN, RESIZE_NONE, 12, 95, 154, 72, 83, STR_00C8_YES, STR_NULL},
{ WIDGETS_END},
};
@@ -263,6 +267,12 @@ static void AskQuitGameWndProc(Window *w, WindowEvent *e) {
break;
}
break;
case WE_KEYPRESS: /* Return to main menu on pressing 'Enter' */
if (e->keypress.keycode == WKC_RETURN)
_switch_mode = SM_MENU;
break;
}
}
@@ -275,7 +285,7 @@ static const WindowDesc _ask_quit_game_desc = {
};
void AskExitToGameMenu()
void AskExitToGameMenu(void)
{
AllocateWindowDescFront(&_ask_quit_game_desc, 0);
}

75
known-bugs.txt Normal file
View File

@@ -0,0 +1,75 @@
README
------------------------------------------------------------------------
All bugs listed below are marked as known. Please do not submit any bugs
that are the same as these. If you do, don't act surprised, because
we WILL flame you!!
There is an experimental AI included in the game which you can enable
from the "Configure Patches" window. All bugs related to this AI should
go to: http://www.tt-forums.net/viewtopic.php?t=9576
Of course if you have more knowledge about any of these bugs, have more
specifics, we welcome you to report them. React to the given bug indicated
by the number below on http://sourceforge.net/tracker/?group_id=103924&atid=636365
If the the bug report is closed, it has been fixed, which then can be verified
in the latest SVN version.
Bugs for 0.3.6
------------------------------------------------------------------------
URL: http://sourceforge.net/tracker/?atid=636365&group_id=103924&func=browse
-1108615 Catchment area mis-behaving
-1108610 console logging file type
-1108442 autorenew takes precedence over autoreplace
-1107889 server crash and assertion error
-1106356 re-offered prototypes
-1104670 Vans in the depot
-1104519 train pathfinding with new patch
-1104105 script error (r1547)
-1103068 game crashes after reversing train in deport
-1101874 load savegames (and autosave) with dedicated server
-1099694 incorrect player colors
-1099233 production down before it's working
-1098696 Airport shadow remains after crashing
-1098238 Crash after lone wagon sighting
-1093191 2 problems with multiplayer savegames
-1085486 Subsidies: Only count when station is in right suburb
-1083710 Reverse train in depot crashes OpenTTD
-1074610 overtaking at signals bug
-1060686 changing (load) order doesn't take effect immediately
-1053339 depot/station looping
-1033300 signal bug
-1030918 Negative city population
-1024703 Infinite access of A: when saving and no disk in drive
-997251 Realistic acceleration: Trains don't slow down in curves
-996503 Sound volume bug
-992677 BeOS MIDI does not initialise on newer BeOS releases
-985475 Different kinds of signals in same tile?
-978372 Inconsistent stopping
-968036 Ship blocked at the edge
Minor Bugs for 0.3.6
------------------------------------------------------------------------
URL: http://sourceforge.net/tracker/?atid=669662&group_id=103924&func=browse
-1106889 Chat Interface enhancements
-1104968 void order message
-1104358 train lost message - history
-1102174 Bug if 3 people buy 25% shares in one company
-1099429 show vehicle speed, text too long
-1090495 Bridges and straight lakesides
-1087407 wrong message in history
-1084620 Minor bug considering buses/trucks
-1034310 color mauve in diagrams
-1031184 Smoke visible through tunnel
-1030661 It's possible to build a tunnel under oil wells
-1009171 Canals and locks at sea level cause flooding
-993516 Canal + bouy -> wrong graphics.
-987891 Large UFO destruction bug
-987884 farm fences
-987883 Aircraft landing/taking off
-987880 company league table updating
-985924 aircraft taxi speed
-980276 Overflow in factory directory
-976824 transmitter base
-941694 Clipping problems stations/vehicles on slopes
-936997 Stationname too long to fit in trainwindow bug

View File

@@ -1,19 +1,12 @@
#include "stdafx.h"
#include "ttd.h"
#include "map.h"
#include <stdarg.h>
#include "gfx.h"
#include "viewport.h"
#include "command.h"
#include "vehicle.h"
byte _map_type_and_height[TILES_X * TILES_Y];
byte _map5[TILES_X * TILES_Y];
byte _map3_lo[TILES_X * TILES_Y];
byte _map3_hi[TILES_X * TILES_Y];
byte _map_owner[TILES_X * TILES_Y];
byte _map2[TILES_X * TILES_Y];
byte _map_extra_bits[TILES_X * TILES_Y/4];
extern const TileTypeProcs
_tile_type_clear_procs,
_tile_type_rail_procs,
@@ -52,20 +45,20 @@ uint GetTileSlope(uint tile, int *h)
uint a,b,c,d,min;
int r;
if (GET_TILE_X(tile) == TILE_X_MAX || GET_TILE_Y(tile) == TILE_Y_MAX) {
if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) {
if (h)
*h = 0;
return 0;
}
assert(tile < TILES_X * TILES_Y && GET_TILE_X(tile) != TILE_X_MAX && GET_TILE_Y(tile) != TILE_Y_MAX);
assert(tile < MapSize() && TileX(tile) != MapMaxX() && TileY(tile) != MapMaxY());
min = a = _map_type_and_height[tile] & 0xF;
b = _map_type_and_height[tile+TILE_XY(1,0)] & 0xF;
min = a = TileHeight(tile);
b = TileHeight(tile + TILE_XY(1,0));
if (min >= b) min = b;
c = _map_type_and_height[tile+TILE_XY(0,1)] & 0xF;
c = TileHeight(tile + TILE_XY(0,1));
if (min >= c) min = c;
d = _map_type_and_height[tile+TILE_XY(1,1)] & 0xF;
d = TileHeight(tile + TILE_XY(1,1));
if (min >= d) min = d;
r = 0;
@@ -89,10 +82,9 @@ int GetTileZ(uint tile)
void FindLandscapeHeightByTile(TileInfo *ti, uint tile)
{
if (GET_TILE_X(tile) == TILE_X_MAX ||
GET_TILE_Y(tile) == TILE_Y_MAX) {
if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) {
ti->tileh = 0;
ti->type = MP_STRANGE;
ti->type = MP_VOID;
ti->tile = 0;
ti->map5 = 0;
ti->z = 0;
@@ -101,7 +93,7 @@ void FindLandscapeHeightByTile(TileInfo *ti, uint tile)
ti->tile = tile;
ti->map5 = _map5[tile];
ti->type = GET_TILETYPE(tile);
ti->type = TileType(tile);
ti->tileh = GetTileSlope(tile, &ti->z);
// ti->z = min * 8;
}
@@ -114,9 +106,9 @@ void FindLandscapeHeight(TileInfo *ti, uint x, uint y)
ti->x = x;
ti->y = y;
if (x >= TILE_X_MAX*16-1 || y >= TILE_Y_MAX*16-1) {
if (x >= MapMaxX() * 16 - 1 || y >= MapMaxY() * 16 - 1) {
ti->tileh = 0;
ti->type = MP_STRANGE;
ti->type = MP_VOID;
ti->tile = 0;
ti->map5 = 0;
ti->z = 0;
@@ -242,7 +234,7 @@ uint GetSlopeZ(int x, int y)
// direction=true: check for foundation in east and south corner
// direction=false: check for foundation in west and south corner
bool hasFoundation(TileInfo *ti, bool direction)
static bool hasFoundation(TileInfo *ti, bool direction)
{
bool south, other; // southern corner and east/west corner
uint slope = _tile_type_procs[ti->type]->get_slope_tileh_proc(ti);
@@ -303,28 +295,28 @@ void DoClearSquare(uint tile)
uint32 GetTileTrackStatus(uint tile, TransportType mode)
{
return _tile_type_procs[GET_TILETYPE(tile)]->get_tile_track_status_proc(tile, mode);
return _tile_type_procs[TileType(tile)]->get_tile_track_status_proc(tile, mode);
}
void ChangeTileOwner(uint tile, byte old_player, byte new_player)
{
_tile_type_procs[GET_TILETYPE(tile)]->change_tile_owner_proc(tile, old_player, new_player);
_tile_type_procs[TileType(tile)]->change_tile_owner_proc(tile, old_player, new_player);
}
void GetAcceptedCargo(uint tile, AcceptedCargo *ac)
void GetAcceptedCargo(uint tile, AcceptedCargo ac)
{
memset(ac, 0, sizeof(AcceptedCargo));
_tile_type_procs[GET_TILETYPE(tile)]->get_accepted_cargo_proc(tile, ac);
_tile_type_procs[TileType(tile)]->get_accepted_cargo_proc(tile, ac);
}
void AnimateTile(uint tile)
{
_tile_type_procs[GET_TILETYPE(tile)]->animate_tile_proc(tile);
_tile_type_procs[TileType(tile)]->animate_tile_proc(tile);
}
void ClickTile(uint tile)
{
_tile_type_procs[GET_TILETYPE(tile)]->click_tile_proc(tile);
_tile_type_procs[TileType(tile)]->click_tile_proc(tile);
}
void DrawTile(TileInfo *ti)
@@ -334,7 +326,7 @@ void DrawTile(TileInfo *ti)
void GetTileDesc(uint tile, TileDesc *td)
{
_tile_type_procs[GET_TILETYPE(tile)]->get_tile_desc_proc(tile, td);
_tile_type_procs[TileType(tile)]->get_tile_desc_proc(tile, td);
}
/* Clear a piece of landscape
@@ -348,7 +340,7 @@ int32 CmdLandscapeClear(int x, int y, uint32 flags, uint32 p1, uint32 p2)
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
tile = TILE_FROM_XY(x,y);
return _tile_type_procs[GET_TILETYPE(tile)]->clear_tile_proc(tile, flags);
return _tile_type_procs[TileType(tile)]->clear_tile_proc(tile, flags);
}
// p1 = end tile
@@ -359,9 +351,11 @@ int32 CmdClearArea(int ex, int ey, uint32 flags, uint32 p1, uint32 p2)
int x,y;
bool success = false;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
// make sure sx,sy are smaller than ex,ey
sx = GET_TILE_X(p1)*16;
sy = GET_TILE_Y(p1)*16;
sx = TileX(p1) * 16;
sy = TileY(p1) * 16;
if (ex < sx) intswap(ex, sx);
if (ey < sy) intswap(ey, sy);
@@ -406,7 +400,7 @@ void CDECL ModifyTile(uint tile, uint flags, ...)
va_start(va, flags);
if ((i = (flags >> 8) & 0xF) != 0) {
_map_type_and_height[tile] = (_map_type_and_height[tile]&~0xF0)|((i-1) << 4);
SetTileType(tile, i - 1);
}
if (flags & (MP_MAP2_CLEAR | MP_MAP2)) {
@@ -451,15 +445,16 @@ void SetMapExtraBits(uint tile, byte bits)
uint GetMapExtraBits(uint tile)
{
assert(tile < MapSize());
return (_map_extra_bits[tile >> 2] >> (tile & 3) * 2) & 3;
}
#define TILELOOP_BITS 4
#define TILELOOP_SIZE (1 << TILELOOP_BITS)
#define TILELOOP_ASSERTMASK ((TILELOOP_SIZE-1) + ((TILELOOP_SIZE-1) << TILE_X_BITS))
#define TILELOOP_CHKMASK (((1 << (TILE_X_BITS - TILELOOP_BITS))-1) << TILELOOP_BITS)
#define TILELOOP_ASSERTMASK ((TILELOOP_SIZE-1) + ((TILELOOP_SIZE-1) << MapLogX()))
#define TILELOOP_CHKMASK (((1 << (MapLogX() - TILELOOP_BITS))-1) << TILELOOP_BITS)
void RunTileLoop()
void RunTileLoop(void)
{
uint tile;
uint count;
@@ -467,56 +462,59 @@ void RunTileLoop()
tile = _cur_tileloop_tile;
assert( (tile & ~TILELOOP_ASSERTMASK) == 0);
count = (TILES_X/TILELOOP_SIZE) * (TILES_Y/TILELOOP_SIZE);
count = (MapSizeX() / TILELOOP_SIZE) * (MapSizeY() / TILELOOP_SIZE);
do {
_tile_type_procs[GET_TILETYPE(tile)]->tile_loop_proc(tile);
_tile_type_procs[TileType(tile)]->tile_loop_proc(tile);
if ( GET_TILE_X(tile) < TILES_X - TILELOOP_SIZE) {
if (TileX(tile) < MapSizeX() - TILELOOP_SIZE) {
tile += TILELOOP_SIZE; /* no overflow */
} else {
tile = TILE_MASK(tile - TILELOOP_SIZE * (TILES_X/TILELOOP_SIZE-1) + TILE_XY(0, TILELOOP_SIZE)); /* x would overflow, also increase y */
tile = TILE_MASK(tile - TILELOOP_SIZE * (MapSizeX() / TILELOOP_SIZE-1) + TILE_XY(0, TILELOOP_SIZE)); /* x would overflow, also increase y */
}
} while (--count);
assert( (tile & ~TILELOOP_ASSERTMASK) == 0);
tile += 9;
if (tile & TILELOOP_CHKMASK)
tile = (tile + TILES_X) & TILELOOP_ASSERTMASK;
tile = (tile + MapSizeX()) & TILELOOP_ASSERTMASK;
_cur_tileloop_tile = tile;
}
void InitializeLandscape()
void InitializeLandscape(void)
{
int i;
uint map_size = MapSize();
uint i;
memset(_map_owner, OWNER_NONE, sizeof(_map_owner));
memset(_map2, 0, sizeof(_map2));
memset(_map3_lo, 0, sizeof(_map3_lo));
memset(_map3_hi, 0, sizeof(_map3_hi));
memset(_map_extra_bits, 0, sizeof(_map_extra_bits));
memset(_map_type_and_height, MP_WATER << 4, sizeof(_map_type_and_height));
memset(_map_owner, OWNER_NONE, map_size);
memset(_map2, 0, map_size * sizeof(uint16));
memset(_map3_lo, 0, map_size);
memset(_map3_hi, 0, map_size);
memset(_map_extra_bits, 0, map_size / 4);
memset(_map_type_and_height, MP_CLEAR << 4, map_size);
for(i=0; i!=TILES_Y-1; i++)
memset(_map_type_and_height + i*TILES_X, 0, TILES_X-1);
// create void tiles on the border
for (i = 0; i != MapMaxY(); i++)
_map_type_and_height[ i * MapSizeX() + MapMaxY() ] = MP_VOID << 4;
memset(_map_type_and_height + MapMaxY() * MapSizeX(), MP_VOID << 4, MapSizeX());
memset(_map5, 3, sizeof(_map5));
memset(_map5, 3, map_size);
}
void ConvertGroundTilesIntoWaterTiles()
void ConvertGroundTilesIntoWaterTiles(void)
{
uint tile = 0;
int h;
while(true) {
if (IS_TILETYPE(tile, MP_CLEAR) && GetTileSlope(tile, &h) == 0 && h == 0) {
_map_type_and_height[tile] = MP_WATER << 4;
if (IsTileType(tile, MP_CLEAR) && GetTileSlope(tile, &h) == 0 && h == 0) {
SetTileType(tile, MP_WATER);
_map5[tile] = 0;
_map_owner[tile] = OWNER_WATER;
}
tile++;
if (GET_TILE_X(tile) == TILE_X_MAX) {
tile += TILE_XY(-TILE_X_MAX, 1);
if (GET_TILE_Y(tile) == TILE_Y_MAX)
if (TileX(tile) == MapMaxX()) {
tile += TILE_XY(-(int)MapMaxX(), 1);
if (TileY(tile) == MapMaxY())
break;
}
}
@@ -528,7 +526,7 @@ static const byte _genterrain_tbl_2[5] = { 0, 0, 0, 0, 33 };
static void GenerateTerrain(int type, int flag)
{
uint32 r;
int x,y;
uint x,y;
int w,h;
byte *p,*tile;
byte direction;
@@ -536,8 +534,8 @@ static void GenerateTerrain(int type, int flag)
r = Random();
p = GetSpritePtr((((r >> 24) * _genterrain_tbl_1[type]) >> 8) + _genterrain_tbl_2[type] + 4845);
x = r & TILE_X_MAX;
y = (r >> TILE_X_BITS) & TILE_Y_MAX;
x = r & MapMaxX();
y = (r >> MapLogX()) & MapMaxY();
if (x < 2 || y < 2)
@@ -569,10 +567,10 @@ static void GenerateTerrain(int type, int flag)
}
}
if (x + w >= TILE_X_MAX-1)
if (x + w >= MapMaxX() - 1)
return;
if (y + h >= TILE_Y_MAX-1)
if (y + h >= MapMaxY() - 1)
return;
tile = &_map_type_and_height[TILE_XY(x,y)];
@@ -629,41 +627,37 @@ static void GenerateTerrain(int type, int flag)
#include "table/genland.h"
static void CreateDesertOrRainForest()
static void CreateDesertOrRainForest(void)
{
uint tile;
const TileIndexDiff *data;
byte mt;
const TileIndexDiffC *data;
int i;
tile = 0;
do {
data = _make_desert_or_rainforest_data;
do {
if ((i = *data++) == MDORD_LAST) {
SetMapExtraBits(tile, 1);
break;
for (tile = 0; tile != MapSize(); ++tile) {
for (data = _make_desert_or_rainforest_data;
data != endof(_make_desert_or_rainforest_data); ++data) {
TileIndex t = tile + ToTileIndexDiff(*data);
if (TileHeight(t) >= 4 || IsTileType(t, MP_WATER)) break;
}
if (data == endof(_make_desert_or_rainforest_data))
SetMapExtraBits(tile, 1);
}
mt = _map_type_and_height[TILE_MASK(tile + i)];
} while ((mt & 0xC) == 0 && (mt >> 4) != MP_WATER);
} while (++tile != TILES_X*TILES_Y);
for(i=0; i!=256; i++)
RunTileLoop();
tile = 0;
do {
data = _make_desert_or_rainforest_data;
do {
if ((i = *data++) == MDORD_LAST) {
SetMapExtraBits(tile, 2);
break;
for (tile = 0; tile != MapSize(); ++tile) {
for (data = _make_desert_or_rainforest_data;
data != endof(_make_desert_or_rainforest_data); ++data) {
TileIndex t = TILE_MASK(tile + ToTileIndexDiff(*data));
if (IsTileType(t, MP_CLEAR) && (_map5[t] & 0x1c) == 0x14) break;
}
if (data == endof(_make_desert_or_rainforest_data))
SetMapExtraBits(tile, 2);
}
} while ( !IS_TILETYPE(TILE_MASK(tile+i), MP_CLEAR) || (_map5[TILE_MASK(tile + i)]&0x1C) != 0x14);
} while (++tile != TILES_X*TILES_Y);
}
void GenerateLandscape()
void GenerateLandscape(void)
{
int i,flag;
uint32 r;
@@ -712,15 +706,15 @@ void GenerateLandscape()
CreateDesertOrRainForest();
}
void OnTick_Town();
void OnTick_Trees();
void OnTick_Station();
void OnTick_Industry();
void OnTick_Town(void);
void OnTick_Trees(void);
void OnTick_Station(void);
void OnTick_Industry(void);
void OnTick_Players();
void OnTick_Train();
void OnTick_Players(void);
void OnTick_Train(void);
void CallLandscapeTick()
void CallLandscapeTick(void)
{
OnTick_Town();
OnTick_Trees();
@@ -737,8 +731,8 @@ TileIndex AdjustTileCoordRandomly(TileIndex a, byte rng)
uint32 r = Random();
return TILE_XY(
GET_TILE_X(a) + ((byte)r * rn * 2 >> 8) - rn,
GET_TILE_Y(a) + ((byte)(r>>8) * rn * 2 >> 8) - rn
TileX(a) + ((byte)r * rn * 2 >> 8) - rn,
TileY(a) + ((byte)(r >> 8) * rn * 2 >> 8) - rn
);
}
@@ -750,12 +744,12 @@ TileIndex AdjustTileCoordRandomly(TileIndex a, byte rng)
// the result will be tile + TILE_XY(addx, addy)
uint TileAddWrap(TileIndex tile, int addx, int addy)
{
int x, y;
x = GET_TILE_X(tile) + addx;
y = GET_TILE_Y(tile) + addy;
uint x, y;
x = TileX(tile) + addx;
y = TileY(tile) + addy;
// Are we about to wrap?
if (x > 0 && x < TILE_X_MAX && y > 0 && y < TILE_Y_MAX)
if (x < MapMaxX() && y < MapMaxY())
return tile + TILE_XY(addx, addy);
return TILE_WRAPPED;
@@ -763,5 +757,5 @@ uint TileAddWrap(TileIndex tile, int addx, int addy)
bool IsValidTile(uint tile)
{
return (tile < TILES_X * TILE_Y_MAX && GET_TILE_X(tile) != TILE_X_MAX);
return (tile < MapSizeX() * MapMaxY() && TileX(tile) != MapMaxX());
}

View File

@@ -186,13 +186,8 @@ STR_00B4_CAN_T_DO_THIS :{WHITE}Can't do this....
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Can't clear this area....
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
STR_00B7_VERSION :{BLACK}OpenTTD version {REV}
STR_00B8_ORIGINAL_DESIGN_PROGRAM :{BLACK}Original design by Chris Sawyer
STR_00B9_ORIGINAL_GRAPHICS :{BLACK}Graphics by Simon Foster
STR_SPECIAL_THANKS :{BLACK}Special thanks go out to:
STR_SPECIAL_THANKS_SIGNALS :{BLACK}<7D> Pre-Signals and Semaphores {COPYRIGHT} 2003 Michael Blunck
STR_SPECIAL_THANKS_CANALS :{BLACK}<7D> Foundations for Tracks on Slopes {COPYRIGHT} Marcin Grzegorczyk
STR_SPECIAL_THANKS_FOUNDATIONS :{BLACK}<7D> Canal/Lock graphics {COPYRIGHT} 2003-2004 George
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2004 The OpenTTD team
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2005 The OpenTTD team
STR_TRANSLATED_BY :{BLACK} Translator(s) -
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
@@ -310,6 +305,8 @@ STR_0134_UNIX :Unix
STR_0135_OSX :OSX
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_0139_IMPERIAL_MILES :Imperial (miles)
STR_013A_METRIC_KILOMETERS :Metric (kilometers)
@@ -352,7 +349,8 @@ STR_015E_QUIT_GAME :Quit game
STR_015F_QUIT :Quit
STR_0160_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Are you sure you want to quit this game ?
STR_0161_QUIT_GAME :{WHITE}Quit Game
STR_SORT_TIP :{BLACK}Select sorting order
STR_SORT_ORDER_TIP :{BLACK}Select sorting order descending/ascending
STR_SORT_CRITERIA_TIP :{BLACK}Select sorting criteria
SRT_SORT_BY :{BLACK}Sort by
STR_SORT_BY_POPULATION :{BLACK}Population
@@ -390,7 +388,7 @@ STR_016E :{TINYFONT}{STRING}{} {STRING}
STR_016F :{TINYFONT}{STRING}{} {STRING}{}{NUMU16}
STR_0170 :{TINYFONT}{STRING}-
STR_0171_PAUSE_GAME :{BLACK}Pause game
STR_0172_SAVE_GAME_ABANDON_GAME :{BLACK}Save game, abandon game, quit
STR_0172_SAVE_GAME_ABANDON_GAME :{BLACK}Save game, quit game, quit
STR_0173_DISPLAY_LIST_OF_COMPANY :{BLACK}Display list of company's stations
STR_0174_DISPLAY_MAP :{BLACK}Display map
STR_0175_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Display map, town directory
@@ -417,6 +415,8 @@ STR_0189 :{BLACK}{SMALLDOWNARROW}
STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}Can't change servicing interval...
STR_018B_CLOSE_WINDOW :{BLACK}Close window
STR_018C_WINDOW_TITLE_DRAG_THIS :{BLACK}Window title - drag this to move window
STR_STICKY_BUTTON :{BLACK}Mark this window as undeletable for the 'Close All Windows' key
STR_RESIZE_BUTTON :{BLACK}Click and drag to resize this window
STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolish buildings etc. on a square of land
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Lower a corner of land
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}Raise a corner of land
@@ -495,6 +495,8 @@ STR_01CD_SELECT_TUTORIAL_DEMONSTRATION :{WHITE}Select Tutorial/Demonstration
STR_01CE_CARGO_ACCEPTED :{BLACK}Cargo accepted: {LTBLUE}{STRING}
STR_01CF_CARGO_ACCEPTED :{BLACK}Cargo accepted: {LTBLUE}{STRING}, {STRING}
STR_01D0_CARGO_ACCEPTED :{BLACK}Cargo accepted: {LTBLUE}{STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_4 :{BLACK}Cargo accepted: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_5 :{BLACK}Cargo accepted: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}, {STRING}
############ range for cargo acecpted ends
STR_01D1_8 :({COMMA8}/8 {STRING})
@@ -537,7 +539,7 @@ STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Select 'new style music' program
STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Select 'Custom 1' (user-defined) program
STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Select 'Custom 2' (user-defined) program
STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Clear current program (Custom1 or Custom2 only)
STR_01F9_SAVE_MUSIC_SETTINGS_TO :{BLACK}Save music settings to disk
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Save music settings
STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Click on music track to add to current program (Custom1 or Custom2 only)
STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Toggle program shuffle on/off
STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Show music track selection window
@@ -562,7 +564,8 @@ STR_020D_CHANGES_OF_CARGO_ACCEPTANCE :{YELLOW}Changes of cargo acceptance
STR_020E_SUBSIDIES :{YELLOW}Subsidies
STR_020F_GENERAL_INFORMATION :{YELLOW}General information
STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO :{WHITE}...too far from previous destination
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Top companies who reached 2050{}({STRING} Level)
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Top companies who reached {NUMU16}{}({STRING} Level)
STR_TOP_COMPANIES_NETWORK_GAME :{BIGFONT}{BLACK}Company League Table in {NUMU16}
STR_0212 :{BIGFONT}{COMMA16}.
STR_0213_BUSINESSMAN :Businessman
STR_0214_ENTREPRENEUR :Entrepreneur
@@ -571,9 +574,10 @@ STR_0216_CAPITALIST :Capitalist
STR_0217_MAGNATE :Magnate
STR_0218_MOGUL :Mogul
STR_0219_TYCOON_OF_THE_CENTURY :Tycoon of the Century
STR_021A :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} achieves '{STRING}' status!
STR_021C_OF_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} of {STRING} achieves '{STRING}' status!
STR_HIGHSCORE_NAME :{BIGFONT}{STRING}, {STRING}
STR_HIGHSCORE_STATS :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BLACK}{BIGFONT}{STRING} achieves '{STRING}' status!
STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{STRING} of {STRING} achieves '{STRING}' status!
STR_021D :{BLACK}
STR_021E :{WHITE}
STR_021F :{BLUE}{COMMA16}
@@ -722,7 +726,7 @@ STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}Vehicle design names
STR_02BD :{BLACK}{STRING}
STR_02BE_DEFAULT :Default
STR_02BF_CUSTOM :Custom
STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK :{BLACK}Save custom names to disk
STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Save custom names
STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}Vehicle design names selection
STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Save customized vehicle design names to disk
@@ -733,6 +737,8 @@ STR_02C5_DIFFICULTY_SETTINGS :Difficulty settings
STR_02C6_DIFFICULTY_SETTINGS :Difficulty settings
STR_02C7_CONFIG_PATCHES :Configure patches
STR_02C8_CONFIG_PATCHES :Configure patches
STR_NEWGRF_SETTINGS :Newgrf settings
STR_NEWGRF_SETTINGS2 :Newgrf settings
STR_GAMEOPTMENU_0A :
STR_GAMEOPTMENU_0B :
STR_02C9_TOWN_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Town names displayed
@@ -741,8 +747,8 @@ STR_02CB_STATION_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Station names displayed
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Station names displayed
STR_02CD_SIGNS_DISPLAYED :{CHECKMARK}{SETX 12}Signs displayed
STR_02CE_SIGNS_DISPLAYED :{SETX 12}Signs displayed
STR_CHECKPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Checkpoints displayed
STR_CHECKPOINTS_DISPLAYED2 :{SETX 12}Checkpoints displayed
STR_WAYPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Waypoints displayed
STR_WAYPOINTS_DISPLAYED2 :{SETX 12}Waypoints displayed
STR_02CF_FULL_ANIMATION :{CHECKMARK}{SETX 12}Full animation
STR_02D0_FULL_ANIMATION :{SETX 12}Full animation
STR_02D1_FULL_DETAIL :{CHECKMARK}{SETX 12}Full detail
@@ -765,13 +771,14 @@ STR_02DC_DISPLAY_SUBSIDIES :{BLACK}Display subsidies
STR_02DD_SUBSIDIES :Subsidies
STR_02DE_MAP_OF_WORLD :Map of world
STR_EXTRA_VIEW_PORT :Extra viewport
STR_02DF_TOWN_DIRECTORY :Town directory
STR_TOWN_POPULATION :{BLACK}World population: {COMMA32}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA16}
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copy to viewport
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copy the location of the global view to this viewport
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Paste from viewport
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Paste the location of this viewport to the global view
STR_02DF_TOWN_DIRECTORY :Town directory
STR_02E0_CURRENCY_UNITS :{BLACK}Currency units
STR_02E1 :{BLACK}{SKIP}{STRING}
STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}Currency units selection
@@ -795,16 +802,16 @@ STR_02F8_EVERY_3_MONTHS :Every 3 months
STR_02F9_EVERY_6_MONTHS :Every 6 months
STR_02FA_EVERY_12_MONTHS :Every 12 months
STR_02FB_START_A_NEW_GAME :{BLACK}Start a new game
STR_02FC_LOAD_A_SAVED_GAME_FROM :{BLACK}Load a saved game from disk
STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Load a saved game
STR_02FD_VIEW_DEMONSTRATIONS_TUTORIALS :{BLACK}View demonstrations/tutorials
STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Create a customized game world/scenario
STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Select single-player game
STR_0300_SELECT_TWO_PLAYER_GAME :{BLACK}Select two-player game
STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}Select multiplayer game of 2-8 players
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Display game options
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Display difficulty options
STR_0303_START_A_NEW_GAME_USING :{BLACK}Start a new game, using a customized scenario
STR_0304_QUIT :{BLACK}Quit
STR_0305_LEAVE_OPENTTD :{BLACK}Leave 'OpenTTD', and quit
STR_0305_QUIT_OPENTTD :{BLACK}Quit 'OpenTTD'
STR_0306_VIEW_DEMONSTRATION_TUTORIAL :{BLACK}View demonstration/tutorial
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...can only be built in towns
@@ -820,7 +827,7 @@ STR_0313_FUND_NEW_INDUSTRY :Fund new industry
############ range ends here
STR_0314_FUND_NEW_INDUSTRY :{WHITE}Fund new industry
STR_0315 :{STRING}
STR_JUST_STRING :{STRING}
STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...can only be built in towns
STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...can only be built in rainforest areas
STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...can only be built in desert areas
@@ -842,51 +849,58 @@ STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ENGLISH :English
STR_TOWNNAME_ORIGINAL_ENGLISH :English
STR_TOWNNAME_FRENCH :French
STR_TOWNNAME_GERMAN :German
STR_TOWNNAME_AMERICAN :American
STR_TOWNNAME_ADDITIONAL_ENGLISH :English (Additional)
STR_TOWNNAME_LATIN_AMERICAN :Latin-American
STR_TOWNNAME_SILLY :Silly
STR_TOWNNAME_SWEDISH :Swedish
STR_TOWNNAME_DUTCH :Dutch
STR_TOWNNAME_FINNISH :Finnish
STR_TOWNNAME_POLISH :Polish
STR_TOWNNAME_CZECH :Czech
STR_TOWNNAME_SLOVAKISH :Slovakish
STR_TOWNNAME_NORWEGIAN :Norwegian
STR_TOWNNAME_HUNGARIAN :Hungarian
STR_TOWNNAME_AUSTRIAN :Austrian
STR_TOWNNAME_ROMANIAN :Romanian
STR_TOWNNAME_CZECH :Czech
STR_TOWNNAME_SWISS :Swiss
############ end of townname region
STR_CURR_POUNDS :Pounds ({POUNDSIGN})
STR_CURR_DOLLARS :Dollars ($)
STR_CURR_FF :Franc (FF)
STR_CURR_DM :Deutschmark (DM)
STR_CURR_GBP :Pounds ({POUNDSIGN})
STR_CURR_USD :Dollars ($)
STR_CURR_EUR :Euro (<28>)
STR_CURR_YEN :Yen ({YENSIGN})
STR_CURR_PT :Peseta (Pt)
STR_CURR_FT :Hungarian Forint (Ft)
STR_CURR_ZL :Polish Zloty (zl)
STR_CURR_ATS :Austrian Shilling (ATS)
STR_CURR_BEF :Belgian Franc (BEF)
STR_CURR_DKK :Danish Krone (DKK)
STR_CURR_FIM :Finnish Markka (FIM)
STR_CURR_GRD :Greek Drachma (GRD)
STR_CURR_CHF :Swiss Franc (CHF)
STR_CURR_NLG :Dutch Guilder (NLG)
STR_CURR_ITL :Italian Lira (ITL)
STR_CURR_SEK :Swedish Krona (SEK)
STR_CURR_RUR :Russian Rubel (rur)
STR_CURR_CZK :Czech Koruna (CZK)
STR_CURR_DEM :Deutschmark (DEM)
STR_CURR_DKK :Danish Krone (DKK)
STR_CURR_ESP :Peseta (ESP)
STR_CURR_FIM :Finnish Markka (FIM)
STR_CURR_FRF :Franc (FRF)
STR_CURR_GRD :Greek Drachma (GRD)
STR_CURR_HUF :Hungarian Forint (HUF)
STR_CURR_ISK :Icelandic Krona (ISK)
STR_CURR_ITL :Italian Lira (ITL)
STR_CURR_NLG :Dutch Guilder (NLG)
STR_CURR_NOK :Norwegian Krone (NOK)
STR_CURR_PLN :Polish Zloty (PLN)
STR_CURR_ROL :Romanian Leu (Lei)
STR_CURR_EUR :Euro (<28>)
STR_CURR_RUR :Russian Rubel (rur)
STR_CURR_SEK :Swedish Krona (SEK)
STR_CURR_CUSTOM :Custom...
STR_OPTIONS_LANG :{BLACK}Language
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}Select the interface language to use
STR_OPTIONS_FULLSCREEN :{BLACK}Fullscreen
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Check this box to play OpenTTD fullscreen mode
STR_OPTIONS_RES :{BLACK}Screen resolution
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_RES_TIP :{BLACK}Select the screen resolution to use
@@ -966,11 +980,13 @@ STR_CONFIG_PATCHES_OFF :Off
STR_CONFIG_PATCHES_ON :On
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Show vehicle speed in status bar: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Allow building on slopes and coasts: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Allow removal of more town-owned roads, bridges, tunnels, etc: {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Allow more realistically sized catchment areas: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Allow removal of more town-owned roads, bridges, etc: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Enable building very long trains: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Enable realistic acceleration for trains: {ORANGE}{STRING}
STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Join train stations built next to each other: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Leave station when any cargo is full, if 'full load': {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Use improved loading algorithm: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflation: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Deliver cargo to a station only when there is a demand: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Allow building very long bridges: {ORANGE}{STRING}
@@ -1003,6 +1019,7 @@ STR_CONFIG_PATCHES_AUTORENEW_VEHICLE :{LTBLUE}Autorenew vehicle when it gets
STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Autorenew when vehice is {ORANGE}{STRING}{LTBLUE} months before/after max age
STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Autorenew minimum needed money for renew: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Duration of error message: {ORANGE}{STRING}
STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Show town population in the town name label: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Invisible trees (with transparent buildings): {ORANGE}{STRING}
STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}Snow line height: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Max station spread: {ORANGE}{STRING} {RED}Warning: High setting slows game
@@ -1028,15 +1045,20 @@ STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Default service interval for air
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED :{LTBLUE}Default service interval for aircraft: {ORANGE}disabled
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Default service interval for ships: {ORANGE}{STRING} days
STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Default service interval for ships: {ORANGE}disabled
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Disable servicing when breakdowns set to none: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_DATE :{LTBLUE}Colored news appears in: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STARTING_DATE :{LTBLUE}Starting date: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENDING_DATE :{LTBLUE}End game in: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Enable smooth economy (more, smaller changes)
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Allow buying shares from other companies
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}When dragging place signals every: {ORANGE}{STRING} tile(s)
STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Position of main toolbar: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Left
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :Centre
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :Right
STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Window snap radius: {ORANGE}{STRING} px
STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Window snap radius: {ORANGE}disabled
STR_CONFIG_PATCHES_GUI :{BLACK}Interface
STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Construction
@@ -1069,24 +1091,28 @@ STR_CHEAT_NO_JETCRASH :{LTBLUE}Jetplanes will not crash (frequently) on sma
STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Switch climate: {ORANGE} {STRING}
STR_CHEAT_CHANGE_DATE :{LTBLUE}Change date: {ORANGE} {DATE_SHORT}
STR_HEADING_FOR_CHECKPOINT :{LTBLUE}Heading for {CHECKPOINT}
STR_HEADING_FOR_CHECKPOINT_VEL :{LTBLUE}Heading for {CHECKPOINT}, {VELOCITY}
STR_HEADING_FOR_WAYPOINT :{LTBLUE}Heading for {WAYPOINT}
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Heading for {WAYPOINT}, {VELOCITY}
STR_GO_TO_CHECKPOINT :Go via {CHECKPOINT}
STR_GO_TO_WAYPOINT :Go via {WAYPOINT}
STR_GO_NON_STOP_TO_WAYPOINT :Go non-stop via {WAYPOINT}
STR_CHECKPOINTNAME_CITY :Checkpoint {TOWN}
STR_CHECKPOINTNAME_CITY_SERIAL :Checkpoint {TOWN} #{COMMA16}
STR_LANDINFO_CHECKPOINT :Checkpoint
STR_WAYPOINTNAME_CITY :Waypoint {TOWN}
STR_WAYPOINTNAME_CITY_SERIAL :Waypoint {TOWN} #{COMMA16}
STR_LANDINFO_WAYPOINT :Waypoint
STR_CHECKPOINT_VIEWPORT :{WHITE}{CHECKPOINT}
STR_CHECKPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{CHECKPOINT}
STR_CHECKPOINT_RAW :{CHECKPOINT}
STR_EDIT_CHECKPOINT_NAME :{WHITE}Edit checkpoint name
STR_WAYPOINT :{WHITE}Waypoint
STR_WAYPOINT_GRAPHICS_TIP :{BLACK}Select waypoint type
STR_CANT_CHANGE_CHECKPOINT_NAME :{WHITE}Can't change checkpoint name...
STR_CONVERT_RAIL_TO_CHECKPOINT_TIP :{BLACK}Convert rail to checkpoint
STR_CANT_BUILD_TRAIN_CHECKPOINT :{WHITE}Can't build train checkpoint here...
STR_CANT_REMOVE_TRAIN_CHECKPOINT :{WHITE}Can't remove train checkpoint here...
STR_WAYPOINT_VIEWPORT :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{WAYPOINT}
STR_WAYPOINT_RAW :{WAYPOINT}
STR_EDIT_WAYPOINT_NAME :{WHITE}Edit waypoint name
STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Can't change waypoint name...
STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}Convert rail to waypoint
STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Can't build train waypoint here...
STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Can't remove train waypoint here...
STR_BUILD_AUTORAIL_TIP :{BLACK}Build railroad track using the Autorail mode
@@ -1099,6 +1125,7 @@ STR_MANY_RANDOM_INDUSTRIES :{BLACK}Many random industries
STR_RANDOM_INDUSTRIES_TIP :{BLACK}Cover the map with randomly placed industries
STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Can't generate industries...
STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}Open the landscaping toolbar to raise/lower land, plant trees, etc.
STR_LANDSCAPING_TOOLBAR :{WHITE}Landscaping
STR_LEVEL_LAND_TOOLTIP :{BLACK}Level land
@@ -1114,6 +1141,8 @@ STR_CANT_BUILD_LOCKS :{WHITE}Can't build locks here...
STR_BUILD_LOCKS_TIP :{BLACK}Build locks
STR_LANDINFO_LOCK :Lock
STR_BUOY_IS_IN_USE :{WHITE}... buoy is in use!
STR_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUMU16}x{NUMU16} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Can't remove part of station...
@@ -1165,43 +1194,51 @@ STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Select type of cargo for train to c
STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Refit train to carry highlighted cargo type
STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Can't refit train...
STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Service intervals are in percents: {ORANGE}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Change production
TEMP_AI_IN_PROGRESS :{WHITE}Welcome to this new AI, in progress. You can expect problems. When you do, make a screenshot and post it at the forum. Enjoy!
TEMP_AI_ACTIVATED :{WHITE}Warning: this new AI is still alpha! Currently, only trucks and busses work!
############ network gui strings
TEMP_STRING_NO_NETWORK :{WHITE}Network interface is not fully working yet!{}Some options work, but others like lobby, etc. don't. Just so you know.
STR_NETWORK_MULTIPLAYER :{WHITE}Multiplayer
STR_NETWORK_FIND_SERVER :{BLACK}Find server
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Search network for a server
STR_NETWORK_DIRECT_CONNECT :{BLACK}Direct connect
STR_NETWORK_ENTER_IP :{BLACK}Enter the IP address of the server
STR_NETWORK_DIRECT_CONNECT_TIP :{BLACK}Connect to a known IP
STR_NETWORK_START_SERVER :{BLACK}Start server
STR_NETWORK_START_SERVER_TIP :{BLACK}Start an own server
STR_NETWORK_PLAYER_NAME :{BLACK}Player name:
STR_NETWORK_ENTER_NAME_TIP :{BLACK}This is the name other players will identify you by
STR_NETWORK_CONNECTION :{BLACK}Connection:
STR_NETWORK_CONNECTION_TIP :{BLACK}Choose between an internet game or a local area nework game
STR_NETWORK_SELECT_CONNECTION :{BLACK}Select connection type:
STR_NETWORK_CONNECTION_TYPE_TIP :{BLACK}Chose between an internet game or a local area nework game
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_START_SERVER :{BLACK}Start server
STR_NETWORK_START_SERVER_TIP :{BLACK}Start an own server
STR_NETWORK_GAME_NAME :{BLACK}Name
STR_NETWORK_GAME_NAME_TIP :{BLACK}Name of the game
STR_NETWORK_PLAYERS :{BLACK}#/#
STR_NETWORK_PLAYERS_TIP :{BLACK}Players currently in this game / Maximum number of players
STR_NETWORK_MAP_SIZE :{BLACK}Size
STR_NETWORK_MAP_SIZE_TIP :{BLACK}Size of the map
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Language, server version, etc.
STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Click a game from the list to select it
STR_NETWORK_PLAYERS_VAL :{BLACK}{COMMA8}/{COMMA8}
STR_NETWORK_FIND_SERVER :{BLACK}Find server
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Search network for a server
STR_NETWORK_ADD_SERVER :{BLACK}Add server
STR_NETWORK_ADD_SERVER_TIP :{BLACK}Adds a server to the list which will always be checked for running games.
STR_NETWORK_ENTER_IP :{BLACK}Enter the IP address of the server
STR_NETWORK_CLIENTS_ONLINE :{BLACK}{COMMA16}/{COMMA16}
STR_NETWORK_CLIENTS_CAPTION :{BLACK}Clients
STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Clients online / clients max
STR_NETWORK_GAME_INFO :{SILVER}GAME INFO
STR_ORANGE :{ORANGE}{STRING}
STR_NETWORK_CLIENTS :{SILVER}Clients: {WHITE}{COMMA8} / {COMMA8}
STR_NETWORK_LANGUAGE :{SILVER}Language: {WHITE}{STRING}
STR_NETWORK_TILESET :{SILVER}Tileset: {WHITE}{STRING}
STR_NETWORK_MAP_SIZE :{SILVER}Map size: {WHITE}{COMMA16}x{COMMA16}
STR_NETWORK_SERVER_VERSION :{SILVER}Server version: {WHITE}{STRING}
STR_NETWORK_SERVER_ADDRESS :{SILVER}Server address: {WHITE}{STRING} : {NUMU16}
STR_NETWORK_START_DATE :{SILVER}Start date: {WHITE}{DATE_SHORT}
STR_NETWORK_CURRENT_DATE :{SILVER}Current date: {WHITE}{DATE_SHORT}
STR_NETWORK_PASSWORD :{SILVER}Password protected!
STR_NETWORK_SERVER_OFFLINE :{SILVER}SERVER OFFLINE
STR_NETWORK_SERVER_FULL :{SILVER}SERVER FULL
STR_NETWORK_VERSION_MISMATCH :{SILVER}VERSION MISMATCH
STR_NETWORK_JOIN_GAME :{BLACK}Join game
@@ -1210,20 +1247,30 @@ STR_NETWORK_START_GAME_WINDOW :{WHITE}Start new game
STR_NETWORK_NEW_GAME_NAME :{BLACK}Game name:
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}The game name will be displayed to other players in the multiplayer game selection menu
STR_NETWORK_PASSWORD :{BLACK}Password:
STR_NETWORK_SET_PASSWORD :{BLACK}Set password
STR_NETWORK_PASSWORD_TIP :{BLACK}Protect your game with a password if you don't want other people to join it
STR_NETWORK_SELECT_MAP :{BLACK}Select a map:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Which map do you want to play?
STR_NETWORK_NUMBER_OF_PLAYERS :{BLACK}Number of players:
STR_NETWORK_NUMBER_OF_PLAYERS_TIP :{BLACK}Chose a maximum number of players. Not all slots need to be filled.
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_PLAYERS :2 players
STR_NETWORK_3_PLAYERS :3 players
STR_NETWORK_4_PLAYERS :4 players
STR_NETWORK_5_PLAYERS :5 players
STR_NETWORK_6_PLAYERS :6 players
STR_NETWORK_7_PLAYERS :7 players
STR_NETWORK_8_PLAYERS :8 players
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximum allowed clients:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Choose a maximum number of clients. Not all slots need to be filled.
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (advertise)
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_CLIENTS :2 clients
STR_NETWORK_3_CLIENTS :3 clients
STR_NETWORK_4_CLIENTS :4 clients
STR_NETWORK_5_CLIENTS :5 clients
STR_NETWORK_6_CLIENTS :6 clients
STR_NETWORK_7_CLIENTS :7 clients
STR_NETWORK_8_CLIENTS :8 clients
STR_NETWORK_9_CLIENTS :9 clients
STR_NETWORK_10_CLIENTS :10 clients
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Language spoken:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Other players will know which language is spoken on the server.
STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Start Game
STR_NETWORK_START_GAME_TIP :{BLACK}Start a new network game from a random map, or scenario
STR_NETWORK_LOAD_GAME :{BLACK}Load Game
@@ -1231,17 +1278,62 @@ STR_NETWORK_LOAD_GAME_TIP :{BLACK}Resume an earlier saved multiplayer game (
STR_NETWORK_LOAD_SCENARIO :{BLACK}Load Scenario
STR_NETWORK_LOAD_SCENARIO_TIP :{BLACK}Start a new network game from a scenario
############ Leave those lines in this order!!
STR_NETWORK_LANG_ANY :Any
STR_NETWORK_LANG_ENGLISH :English
STR_NETWORK_LANG_GERMAN :German
STR_NETWORK_LANG_FRENCH :French
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Multiplayer game lobby
STR_NETWORK_SEND :{BLACK}Send
STR_NETWORK_SEND_TIP :{BLACK}Send a message to the other players
STR_NETWORK_COMPANY_NAME :{BLACK}Company name:
STR_NETWORK_COMPANY_NAME_TIP :{BLACK}Change the name of your company. Hit enter to apply changes
STR_NETWORK_SPECTATE_GAME :{BLACK}Spectate game
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Watch the game as a spectator
STR_NETWORK_PREPARE_TO_JOIN :{BLACK}Preparing to join: {ORANGE}{STRING}
STR_NETWORK_COMPANY_LIST_TIP :{BLACK}A list of all companies currently in this game. You can either join one or start a
STR_NETWORK_NEW_COMPANY :{BLACK}New company
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Open a new company
STR_NETWORK_READY :{BLACK}Ready
STR_NETWORK_SPECTATE_GAME :{BLACK}Watch game
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Watch the game as a spectator
STR_NETWORK_JOIN_COMPANY :{BLACK}Join company
STR_NETWORK_JOIN_COMPANY_TIP :{BLACK}Help managing this company
STR_NETWORK_REFRESH :{BLACK}Refresh server
STR_NETWORK_REFRESH_TIP :{BLACK}Refresh the server info
STR_NETWORK_COMPANY_INFO :{SILVER}COMPANY INFO
STR_NETWORK_COMPANY_NAME :{SILVER}Company name: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguration: {WHITE}{NUMU16}
STR_NETWORK_VALUE :{SILVER}Company value: {WHITE}{CURRENCY64}
STR_NETWORK_CURRENT_BALANCE :{SILVER}Current balance: {WHITE}{CURRENCY64}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Last year's income: {WHITE}{CURRENCY64}
STR_NETWORK_PERFORMANCE :{SILVER}Performance: {WHITE}{NUMU16}
STR_NETWORK_VEHICLES :{SILVER}Vehicles: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_STATIONS :{SILVER}Stations: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_PLAYERS :{SILVER}Players: {WHITE}{STRING}
STR_NETWORK_CONNECTING :{WHITE}Connecting...
############ Leave those lines in this order!!
STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Connecting..
STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Authorizing..
STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Waiting..
STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Downloading map..
STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Processing data..
STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registering..
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Fetching game info..
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Fetching company info..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{INT32} client(s) in front of us
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{INT32} / {INT32} kbytes downloaded so far
STR_NETWORK_DISCONNECT :{BLACK}Disconnect
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Enter your text message to send
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password
STR_NETWORK_CLIENT_LIST :{WHITE}Client List
STR_NETWORK_ERR_NOTAVAILABLE :{WHITE} No network devices found or compiled without ENABLE_NETWORK
STR_NETWORK_ERR_NOSERVER :{WHITE} Could not find any network games
@@ -1249,7 +1341,57 @@ STR_NETWORK_ERR_NOCONNECTION :{WHITE} The server didn't answer the request
STR_NETWORK_ERR_DESYNC :{WHITE} Network-Game synchronization failed.
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} Network-Game connection lost.
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Could not load server-savegame.
STR_NETWORK_ERR_SERVER_START :{WHITE} Could not start the server.
STR_NETWORK_ERR_CLIENT_START :{WHITE} Could not connect.
STR_NETWORK_ERR_TIMEOUT :{WHITE} Connection #{NUMU16} timed out.
STR_NETWORK_ERR_SERVER_ERROR :{WHITE} We made a protocol-error and our connection is closed.
STR_NETWORK_ERR_WRONG_REVISION :{WHITE} The revision of this client does not match the revision of the server.
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Wrong password.
STR_NETWORK_ERR_SERVER_FULL :{WHITE} The server is full
STR_NETWORK_ERR_SERVER_BANNED :{WHITE} You are banned from this server
STR_NETWORK_ERR_KICKED :{WHITE} You are kicked out of the server
STR_NETWORK_ERR_CHEATER :{WHITE} Cheating is not allowed on this server
STR_NETWORK_ERR_LEFT :has left the game
############ Leave those lines in this order!!
STR_NETWORK_ERR_CLIENT_GENERAL :general error
STR_NETWORK_ERR_CLIENT_DESYNC :desync error
STR_NETWORK_ERR_CLIENT_SAVEGAME :could not load map
STR_NETWORK_ERR_CLIENT_CONNECTION_LOST :connection lost
STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR :protocol error
STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :not authorized
STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :received strange packet
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :wrong revision
STR_NETWORK_ERR_CLIENT_NAME_IN_USE :name already in use
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :wrong game-password
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :wrong player-id in DoCommand
STR_NETWORK_ERR_CLIENT_KICKED :kicked by server
STR_NETWORK_ERR_CLIENT_CHEATER :was trying to use a cheat
############ End of leave-in-this-order
STR_NETWORK_CLIENT_JOINED :has joined the game
STR_NETWORK_GIVE_MONEY :gave you some money ({CURRENCY})
STR_NETWORK_GAVE_MONEY_AWAY :you gave {STRING} some money ({CURRENCY})
STR_NETWORK_CHAT_COMPANY :[Team] {STRING}:
STR_NETWORK_CHAT_TO_COMPANY :[Team] To {STRING}:
STR_NETWORK_CHAT_CLIENT :[Private] {STRING}:
STR_NETWORK_CHAT_TO_CLIENT :[Private] To {STRING}:
STR_NETWORK_CHAT_ALL :[All] {STRING}:
STR_NETWORK_NAME_CHANGE :has changed his name to
STR_NETWORK_SERVER_SHUTDOWN :{WHITE} The server closed the session
STR_NETWORK_SERVER_REBOOT :{WHITE} The server is restarting...{}Please wait...
STR_NETWORK_SERVER :Server
STR_NETWORK_CLIENT :Client
STR_NETWORK_CLIENTLIST_NONE :(none)
STR_NETWORK_CLIENTLIST_KICK :Kick
STR_NETWORK_CLIENTLIST_GIVE_MONEY :Give money
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Speak to all
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Speak to company
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private message
STR_NETWORK_SEND :{BLACK}Send
############ end network gui strings
@@ -1347,6 +1489,7 @@ STR_1818_ROAD_RAIL_LEVEL_CROSSING :Road/rail level crossing
##id 0x2000
STR_2000_TOWNS :{WHITE}Towns
STR_TOWN_LABEL_POP :{WHITE}{STRING} ({COMMA32})
STR_2001 :{WHITE}{STRING}
STR_2002 :{TINYFONT}{BLACK}{STRING}
STR_2003 :{TINYFONT}{WHITE}{STRING}
@@ -1363,7 +1506,7 @@ STR_200D_PASSENGERS_LAST_MONTH_MAX :{BLACK}Passengers last month: {ORANGE}{CO
STR_200E_MAIL_LAST_MONTH_MAX :{BLACK}Mail last month: {ORANGE}{COMMA16}{BLACK} max: {ORANGE}{COMMA16}
STR_200F_TALL_OFFICE_BLOCK :Tall office block
STR_2010_OFFICE_BLOCK :Office block
STR_2011_SMALL_BLOCK_OF_FLATS :Small block of flats
STR_2011_SMALL_BLOCK_OF_FLATS :Small block of apartments
STR_2012_CHURCH :Church
STR_2013_LARGE_OFFICE_BLOCK :Large office block
STR_2014_TOWN_HOUSES :Town houses
@@ -1402,7 +1545,7 @@ STR_2034_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Service subsidy awarded to
STR_2035_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN} local authority refuses to allow another airport to be built in this town
STR_2036_COTTAGES :Cottages
STR_2037_HOUSES :Houses
STR_2038_FLATS :Flats
STR_2038_FLATS :Apartments
STR_2039_TALL_OFFICE_BLOCK :Tall office block
STR_203A_SHOPS_AND_OFFICES :Shops and offices
STR_203B_SHOPS_AND_OFFICES :Shops and offices
@@ -1460,7 +1603,7 @@ STR_280C_CAN_T_CHANGE_SIGN_NAME :{WHITE}Can't change sign name...
STR_280D_SELECT_TREE_TYPE_TO_PLANT :{BLACK}Select tree type to plant
STR_280E_TREES :Trees
STR_280F_RAINFOREST :Rainforest
STR_2810_CACTUS_PLANTS :Cactus Plants
STR_2810_CACTUS_PLANTS :Cactuses
##id 0x3000
STR_3000_RAIL_STATION_SELECTION :{WHITE}Rail Station Selection
@@ -1937,6 +2080,9 @@ STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Rebuild company headquarters elsewh
STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Can't build company headquarters...
STR_7072_VIEW_HQ :{BLACK}View HQ
STR_RELOCATE_HQ :{BLACK}Relocate HQ
STR_COMPANY_PASSWORD :{BLACK}Password
STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Password-protect your company to prevent unauthorised users from joining.
STR_SET_COMPANY_PASSWORD :Set company password
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}World Recession!{}{}Financial experts fear worst as economy slumps!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recession Over!{}{}Upturn in trade gives confidence to industries as economy strengthens!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Toggle large/small window size
@@ -1950,6 +2096,7 @@ STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Can't sell 25% share in this company
STR_707D_OWNED_BY :{WHITE}({COMMA16}% owned by {STRING})
STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA16}% owned by {STRING}{} {COMMA16}% owned by {STRING})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{STRING} has been taken over by {STRING}!
STR_7080_PROTECTED :{WHITE}This company does not trade shares yet...
##id 0x8000
STR_8000_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Steam)
@@ -2248,7 +2395,7 @@ STR_8813_FROM :{LTBLUE}{CARGO} from {STATION}
STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}Train {COMMA16} is waiting in depot
STR_8815_NEW_VEHICLES :{BLACK}New Vehicles
STR_8816 :{BLACK}-
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Cost: {GOLD}{CURRENCY}{BLACK} Weight: {GOLD}{COMMA16}t{}{BLACK}Speed: {GOLD}{VELOCITY}{BLACK} Power: {GOLD}{COMMA16}hp{}{BLACK}Running Cost: {GOLD}{CURRENCY}/yr{}{BLACK}Capacity: {GOLD}{STRING}{}{BLACK}Designed: {GOLD}{NUMU16}{BLACK} Life: {GOLD}{COMMA16} years{}{BLACK}Max. Reliability: {GOLD}{COMMA8}%
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Cost: {GOLD}{CURRENCY}{BLACK} Weight: {GOLD}{COMMA16}t{}{BLACK}Speed: {GOLD}{VELOCITY}{BLACK} Power: {GOLD}{COMMA32}hp{}{BLACK}Running Cost: {GOLD}{CURRENCY}/yr{}{BLACK}Capacity: {GOLD}{STRING}{}{BLACK}Designed: {GOLD}{NUMU16}{BLACK} Life: {GOLD}{COMMA16} years{}{BLACK}Max. Reliability: {GOLD}{COMMA8}%
STR_8818_INFORMATION :{BLACK}Information
STR_8819_TRAIN_TOO_LONG :{WHITE}Train too long
STR_881A_TRAINS_CAN_ONLY_BE_ALTERED :{WHITE}Trains can only be altered when stopped inside a depot
@@ -2475,7 +2622,7 @@ STR_GO_TO_SHIP_DEPOT :Go to {TOWN} Ship Depot
SERVICE_AT_SHIP_DEPOT :Service at {TOWN} Ship Depot
##id 0xA000
STR_A000_AIRPORT_CONSTRUCT :{WHITE}Airport Construct.
STR_A000_AIRPORTS :{WHITE}Airports
STR_A001_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Can't build airport here...
STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} Aircraft Hangar
STR_A003_NEW_AIRCRAFT :{BLACK}New Aircraft
@@ -2529,6 +2676,7 @@ STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Can't name aircraft...
STR_A032_NAME_AIRCRAFT :{BLACK}Name aircraft
STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Citizens celebrate . . .{}First aircraft arrives at {STATION}!
STR_A034_PLANE_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Plane Crash!{}{COMMA16} die in fireball at {STATION}
STR_PLANE_CRASH_OUT_OF_FUEL :{BLACK}{BIGFONT}Plane Crash!{}Aircraft ran out of fuel, {COMMA16} die in fireball!
STR_A035_DESTINATIONS :{TINYFONT}{BLACK}Destinations:
STR_A036 :{TINYFONT}{BLACK}{STATION}
STR_A037_RENAME :{BLACK}Rename
@@ -2563,8 +2711,8 @@ STR_MULTIPLAYER_PAUSED :{WHITE}Game is paused.{}Command cannot be executed
STR_PERFORMANCE_DETAIL :{WHITE}Detail performance rating
STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detail
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}{TINYFONT}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}{TINYFONT}({INT32}/{INT32})
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA32}/{COMMA32})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{INT32}%
SET_PERFORMANCE_DETAIL_INT :{BLACK}{INT32}
############ Those following lines need to be in this order!!
@@ -2590,3 +2738,61 @@ STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Amount of cash on hand
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Do you have a high loan?
STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Total points out of possible points
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Newgrf settings
STR_NEWGRF_APPLY_CHANGES :{BLACK}Apply changes
STR_NEWGRF_SET_PARAMETERS :{BLACK}Set parameters
STR_NEWGRF_TIP :{BLACK}A list of all the Newgrf sets that you have installed. Click a set to change the settings.
STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}There are currently no newgrf files installed! Please refer to the manual for instructions to install new graphics.
STR_NEWGRF_FILENAME :{BLACK}Filename:
STR_NEWGRF_GRF_ID :{BLACK}GRF ID:
STR_CURRENCY_WINDOW :{WHITE}Custom currency
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Exchange rate: {ORANGE}{CURRENCY} = {POUNDSIGN} {COMMA16}
STR_CURRENCY_SEPARATOR :{LTBLUE}Separator:
STR_CURRENCY_PREFIX :{LTBLUE}Prefix:
STR_CURRENCY_SUFFIX :{LTBLUE}Suffix:
STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Switch to Euro: {ORANGE}{INT32}
STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Switch to Euro: {ORANGE}never
STR_CURRENCY_PREVIEW :{LTBLUE}Preview: {ORANGE}{CURRENCY}
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Change custom currency parameter
STR_TRAIN :{BLACK}{TRAIN}
STR_LORRY :{BLACK}{LORRY}
STR_PLANE :{BLACK}{PLANE}
STR_SHIP :{BLACK}{SHIP}
STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA16} Trains
STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA16} Road Vehicles
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA16} Aircraft
STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA16} Ships
STR_SCHEDULED_TRAINS_TIP :{BLACK}Show all trains which have this station on their schedule
STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Show all road vehicles which have this station on their schedule
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Show all aircraft which have this station on their schedule
STR_SCHEDULED_SHIPS_TIP :{BLACK}Show all ships which have this station on their schedule
STR_REPLACE_VEHICLES :{BLACK}Replace Vehicles
STR_REPLACE_VEHICLES_WHITE :{WHITE}Replace Vehicles
STR_REPLACE_VEHICLES_START :{BLACK}Start Replacing Vehicles
STR_REPLACE_VEHICLES_STOP :{BLACK}Stop Replacing Vehicles
STR_NOT_REPLACING :{BLACK}Not replacing
STR_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}No vehicle selected
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Select the engine type to replace
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Select the new engine type you would like to use in place of the left selected engine type
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Press to stop the replacement of the engine type selected on the left
STR_REPLACE_HELP_START_BUTTON :{BLACK}Press to begin replacement of the left selected engine type with the right selected engine type
STR_REPLACE_HELP_RAILTYPE :{BLACK}Choose the railtype you want to replace engines for
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Displays which engine the left selected engine is being replaced with, if any
STR_REPLACE_HELP :{BLACK}This allows you to replace one engine type with another type, when trains of the original type enter a depot
STR_SHORT_DATE :{WHITE}{DATE_TINY}
############ Lists rail types
STR_RAIL_VEHICLES :Rail Vehicles
STR_MONORAIL_VEHICLES :Monorail Vehicles
STR_MAGLEV_VEHICLES :Maglev Vehicles
############ End of list of rail types
STR_TINY_BLACK :{BLACK}{TINYFONT}{COMMA16}

2795
lang/catalan.txt Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -25,13 +25,13 @@ STR_0013_LIVESTOCK :Kv
STR_0014_GOODS :Stykgods
STR_0015_GRAIN :Korn
STR_0016_WOOD :Tr<54>
STR_0017_IRON_ORE :Jern Malm
STR_0017_IRON_ORE :Jernmalm
STR_0018_STEEL :St<53>l
STR_0019_VALUABLES :V<>rdigendstande
STR_001A_COPPER_ORE :Kobber Malm
STR_0019_VALUABLES :V<>rdigenstande
STR_001A_COPPER_ORE :Kobbermalm
STR_001B_MAIZE :Majs
STR_001C_FRUIT :Frugt
STR_001D_DIAMONDS :Diamands
STR_001D_DIAMONDS :Diamander
STR_001E_FOOD :Mad
STR_001F_PAPER :Papir
STR_0020_GOLD :Guld
@@ -57,10 +57,10 @@ STR_0033_LIVESTOCK :Kv
STR_0034_GOODS :Stykgods
STR_0035_GRAIN :Korn
STR_0036_WOOD :Tr<54>
STR_0037_IRON_ORE :Jern Malm
STR_0037_IRON_ORE :Jernmalm
STR_0038_STEEL :St<53>l
STR_0039_VALUABLES :V<>rdigendstand
STR_003A_COPPER_ORE :Kobber Malm
STR_003A_COPPER_ORE :Kobbermalm
STR_003B_MAIZE :Majs
STR_003C_FRUIT :Frugt
STR_003D_DIAMOND :Diamand
@@ -186,13 +186,8 @@ STR_00B4_CAN_T_DO_THIS :{WHITE}Det kan jeg ikke....
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Kan ikke rydde omr<6D>det....
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, Alle retigheder reserveret
STR_00B7_VERSION :{BLACK}OpenTTD version {REV}
STR_00B8_ORIGINAL_DESIGN_PROGRAM :{BLACK}Originalt design af Chris Sawyer
STR_00B9_ORIGINAL_GRAPHICS :{BLACK}Grafik af Simon Foster
STR_SPECIAL_THANKS :{BLACK}En speciel tak g<>r til:
STR_SPECIAL_THANKS_SIGNALS :{BLACK}<7D> Forsignal og armsignal grafik {COPYRIGHT} 2003 Michael Blunck
STR_SPECIAL_THANKS_CANALS :{BLACK}<7D> Fundament for skinner p<> skr<6B>ninger {COPYRIGHT} Marcin Grzegorczyk
STR_SPECIAL_THANKS_FOUNDATIONS :{BLACK}<7D> Kanal/Sluse grafik {COPYRIGHT} 2003-2004 George
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2004 The OpenTTD team
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2005 The OpenTTD team
STR_TRANSLATED_BY :{BLACK} Overs<72>tter(e) -
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
@@ -229,7 +224,7 @@ STR_00E4_LOCATION :{BLACK}Placering
STR_00E5_CONTOURS :Konturer
STR_00E6_VEHICLES :K<>ret<65>jer
STR_00E7_INDUSTRIES :Industrier
STR_00E8_ROUTES :Router
STR_00E8_ROUTES :Ruter
STR_00E9_VEGETATION :Vegetation
STR_00EA_OWNERS :Ejere
STR_00EB_ROADS :{BLACK}{TINYFONT}Veje
@@ -246,7 +241,7 @@ STR_00F5_TRAINS :{BLACK}{TINYFONT}Toge
STR_00F6_ROAD_VEHICLES :{BLACK}{TINYFONT}Lastbiler
STR_00F7_SHIPS :{BLACK}{TINYFONT}Skibe
STR_00F8_AIRCRAFT :{BLACK}{TINYFONT}Fly
STR_00F9_TRANSPORT_ROUTES :{BLACK}{TINYFONT}Transport Router
STR_00F9_TRANSPORT_ROUTES :{BLACK}{TINYFONT}Transport Ruter
STR_00FA_COAL_MINE :{BLACK}{TINYFONT}Kulmine
STR_00FB_POWER_STATION :{BLACK}{TINYFONT}Kraftv<74>rk
STR_00FC_FOREST :{BLACK}{TINYFONT}Skov
@@ -310,6 +305,8 @@ STR_0134_UNIX :Unix
STR_0135_OSX :OSX
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_0139_IMPERIAL_MILES :Imperial (miles)
STR_013A_METRIC_KILOMETERS :Meter (kilometer)
@@ -342,6 +339,7 @@ STR_0157_PERFORMANCE_HISTORY_GRAPH :Graf over pr
STR_0158_COMPANY_VALUE_GRAPH :Graf over selskabsv<73>rdi
STR_0159_CARGO_PAYMENT_RATES :Graf over last udbetalingsrater
STR_015A_COMPANY_LEAGUE_TABLE :Selskabsoversigt
STR_PERFORMANCE_DETAIL_MENU :Pr<50>stations oversigt
############ range for menu ends
STR_015B_OPENTTD :{WHITE}OpenTTD
@@ -351,9 +349,14 @@ STR_015E_QUIT_GAME :Afslut Spil
STR_015F_QUIT :Afslut
STR_0160_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Er du sikker p<> du vil afslutte dette spil ?
STR_0161_QUIT_GAME :{WHITE}Afslut Spil
STR_SORT_TIP :{BLACK}V<>lg sorteringsorden
STR_SORT_ORDER_TIP :{BLACK}V<>lg sorteringsorden (faldende/stigende)
STR_SORT_CRITERIA_TIP :{BLACK}V<>lg sortering kriterie
SRT_SORT_BY :{BLACK}Sorter efter
STR_SORT_BY_POPULATION :{BLACK}Indbyggertal
STR_SORT_BY_PRODUCTION :{BLACK}Produktion
STR_SORT_BY_TYPE :{BLACK}Type
STR_SORT_BY_TRANSPORTED :{BLACK}Transporteret
STR_SORT_BY_NAME :{BLACK}Navn
STR_SORT_BY_DROPDOWN_NAME :Navn
STR_SORT_BY_DATE :{BLACK}Dato
@@ -412,6 +415,8 @@ STR_0189 :{BLACK}{SMALLDOWNARROW}
STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}Kan ikke <20>ndre service interval...
STR_018B_CLOSE_WINDOW :{BLACK}Luk vindue
STR_018C_WINDOW_TITLE_DRAG_THIS :{BLACK}Vindue title - tr<74>k her for at flytte vindue
STR_STICKY_BUTTON :{BLACK}Marker dette vindue som ulukkeligt af 'Luk ALLE vinduer' tasten
STR_RESIZE_BUTTON :{BLACK}Klik og tr<74>k for at <20>ndre vinduets st<73>rrelse
STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}nedriver bygning osv. p<> et stykke land
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}S<>nk et hj<68>rne af landet
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}H<>v et hj<68>rne af landet
@@ -431,7 +436,7 @@ STR_019A_YEARS :{COMMA16}
STR_019B_YEARS :{RED}{COMMA16} <20>r ({COMMA16})
############ range for service numbers ends
STR_019C_ROAD_VEHICLE :Lastbil
STR_019C_ROAD_VEHICLE :Vejk<EFBFBD>ret<EFBFBD>j
STR_019D_AIRCRAFT :Fly
STR_019E_SHIP :Skibe
STR_019F_TRAIN :Tog
@@ -490,6 +495,8 @@ STR_01CD_SELECT_TUTORIAL_DEMONSTRATION :{WHITE}V
STR_01CE_CARGO_ACCEPTED :{BLACK}Accepteret last: {LTBLUE}{STRING}
STR_01CF_CARGO_ACCEPTED :{BLACK}Accepteret last: {LTBLUE}{STRING}, {STRING}
STR_01D0_CARGO_ACCEPTED :{BLACK}Accepteret last: {LTBLUE}{STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_4 :{BLACK}Accepteret last: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_5 :{BLACK}Accepteret last: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}, {STRING}
############ range for cargo acecpted ends
STR_01D1_8 :({COMMA8}/8 {STRING})
@@ -532,7 +539,7 @@ STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}V
STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}V<>lg 'Custom 1' (brugerdefineret) programmet
STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Select 'Custom 2' (brugerdefineret) programmet
STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Ryd det valgte program (G<>lder kun Custom1/Custom2)
STR_01F9_SAVE_MUSIC_SETTINGS_TO :{BLACK}Gem musik indstillinger til disken
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Gem ops<EFBFBD>tning for musik
STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Klik p<> et musiknummer for at tilf<6C>je det til programlisten (Kun for Custom1/Custom2)
STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Skift mellem tilf<6C>ldig afspilning af/p<>
STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Vis musiknummer valg vinduet
@@ -557,7 +564,8 @@ STR_020D_CHANGES_OF_CARGO_ACCEPTANCE :{YELLOW}
STR_020E_SUBSIDIES :{YELLOW}Special aftaler
STR_020F_GENERAL_INFORMATION :{YELLOW}General information
STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO :{WHITE}...for langt fra forrige destination
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Bedste firmaer der n<>ede til <20>r 2050{}({STRING} Level)
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Bedste virksomheder, som har n<>et {NUMU16}{}({STRING} Niveau)
STR_TOP_COMPANIES_NETWORK_GAME :{BIGFONT}{BLACK}Selskabsoversigt i {NUMU16}
STR_0212 :{BIGFONT}{COMMA16}.
STR_0213_BUSINESSMAN :Forretningsmand
STR_0214_ENTREPRENEUR :Entrepren<65>r
@@ -566,9 +574,10 @@ STR_0216_CAPITALIST :Kapitalist
STR_0217_MAGNATE :Magnat
STR_0218_MOGUL :Mogul
STR_0219_TYCOON_OF_THE_CENTURY :<3A>rhundredes Matador
STR_021A :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} opn<70>r '{STRING}' status!
STR_021C_OF_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} af {STRING} opn<EFBFBD>r '{STRING}' status!
STR_HIGHSCORE_NAME :{BIGFONT}{STRING}, {STRING}
STR_HIGHSCORE_STATS :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BLACK}{BIGFONT}{STRING} f<EFBFBD>r '{STRING}' status!
STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{STRING} fra {STRING} f<>r '{STRING}' status!
STR_021D :{BLACK}
STR_021E :{WHITE}
STR_021F :{BLUE}{COMMA16}
@@ -717,7 +726,7 @@ STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}K
STR_02BD :{BLACK}{STRING}
STR_02BE_DEFAULT :Standard
STR_02BF_CUSTOM :Brugerdefineret
STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK :{BLACK}Gem brugerdefinerede navne til disken
STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Gem ikke standard navne
STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}K<>ret<65>jsdesignnavne valg
STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Gem brugerdefinerede k<>ret<65>jsdesignnavne til disken
@@ -728,6 +737,8 @@ STR_02C5_DIFFICULTY_SETTINGS :Sv
STR_02C6_DIFFICULTY_SETTINGS :Sv<53>rhedsgrad
STR_02C7_CONFIG_PATCHES :Indstil patches
STR_02C8_CONFIG_PATCHES :Indstil patches
STR_NEWGRF_SETTINGS :Newgrf indstillinger
STR_NEWGRF_SETTINGS2 :Newgrf indstillinger
STR_GAMEOPTMENU_0A :
STR_GAMEOPTMENU_0B :
STR_02C9_TOWN_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Bynavne vist
@@ -736,8 +747,8 @@ STR_02CB_STATION_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Stationsnavne vist
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Stationsnavne vist
STR_02CD_SIGNS_DISPLAYED :{CHECKMARK}{SETX 12}Skilte vist
STR_02CE_SIGNS_DISPLAYED :{SETX 12}Skilte vist
STR_CHECKPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Checkpoints vist
STR_CHECKPOINTS_DISPLAYED2 :{SETX 12}Checkpoints vist
STR_WAYPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Kontrolsteder vist
STR_WAYPOINTS_DISPLAYED2 :{SETX 12}Kontrolsteder vist
STR_02CF_FULL_ANIMATION :{CHECKMARK}{SETX 12}Fuld animation
STR_02D0_FULL_ANIMATION :{SETX 12}Fuld animation
STR_02D1_FULL_DETAIL :{CHECKMARK}{SETX 12}Fuld detalje
@@ -760,12 +771,14 @@ STR_02DC_DISPLAY_SUBSIDIES :{BLACK}Vis specialaftaler
STR_02DD_SUBSIDIES :Specialaftaler
STR_02DE_MAP_OF_WORLD :Kort over verden
STR_EXTRA_VIEW_PORT :Flere lokalitetsvinduer
STR_02DF_TOWN_DIRECTORY :Byoversigt
STR_TOWN_POPULATION :{BLACK}Verdens befolkning: {COMMA32}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Lokalitetsvinduer {COMMA16}
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}G<> til lokalitetsvindue
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Hent lokalitet fra global visning
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Hent fra lokalitetsvindue
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopier lokaliteten af dette vindue til det globale vindue
STR_02DF_TOWN_DIRECTORY :Byoversigt
STR_02E0_CURRENCY_UNITS :{BLACK}Valutaenhed
STR_02E1 :{BLACK}{SKIP}{STRING}
STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}Valutaenhed selection
@@ -789,16 +802,16 @@ STR_02F8_EVERY_3_MONTHS :Hver 3. m
STR_02F9_EVERY_6_MONTHS :Hver 6. m<>ned
STR_02FA_EVERY_12_MONTHS :Hver 12. m<>ned
STR_02FB_START_A_NEW_GAME :{BLACK}Start et nyt spil
STR_02FC_LOAD_A_SAVED_GAME_FROM :{BLACK}Hent et gemt spil fra disken
STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Hent et gemt spil
STR_02FD_VIEW_DEMONSTRATIONS_TUTORIALS :{BLACK}Se demonstrationer/tutorials
STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Lav en brugerdefineret verden/scenarie
STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}V<>lg singleplayer spil
STR_0300_SELECT_TWO_PLAYER_GAME :{BLACK}V<>lg tospiller spil
STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}V<>lg flerspiller spil med 2-8 spillere
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Vis spilindstillinger
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Vis sv<73>rhedsgrad indstillinger
STR_0303_START_A_NEW_GAME_USING :{BLACK}Start et nyt spil, med et brugerdefineret scenarie
STR_0304_QUIT :{BLACK}Afslut
STR_0305_LEAVE_OPENTTD :{BLACK}Forlad 'OpenTTD', og aflsut
STR_0305_QUIT_OPENTTD :{BLACK}Afslut 'OpenTTD'
STR_0306_VIEW_DEMONSTRATION_TUTORIAL :{BLACK}Se demonstration/tutorial
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan kun bygges i byer
@@ -814,7 +827,7 @@ STR_0313_FUND_NEW_INDUSTRY :Opf
############ range ends here
STR_0314_FUND_NEW_INDUSTRY :{WHITE}Opf<70>r ny industri
STR_0315 :{STRING}
STR_JUST_STRING :{STRING}
STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kan kun bygges i byer
STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...kan kun bygges i regnskovsomr<6D>der
STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...kan kun bygges i <20>rkenomr<6D>der
@@ -836,10 +849,10 @@ STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ENGLISH :Engelske
STR_TOWNNAME_ORIGINAL_ENGLISH :Engelske
STR_TOWNNAME_FRENCH :Franske
STR_TOWNNAME_GERMAN :Tyske
STR_TOWNNAME_AMERICAN :Amerikanske
STR_TOWNNAME_ADDITIONAL_ENGLISH :Engelske (ekstra)
STR_TOWNNAME_LATIN_AMERICAN :Latin-Amerikanske
STR_TOWNNAME_SILLY :Fjollede
STR_TOWNNAME_SWEDISH :Svenske
@@ -847,37 +860,47 @@ STR_TOWNNAME_DUTCH :Hollandske
STR_TOWNNAME_FINNISH :Finske
STR_TOWNNAME_POLISH :Polske
STR_TOWNNAME_SLOVAKISH :Slovakiske
STR_TOWNNAME_NORWEGIAN :Norske
STR_TOWNNAME_HUNGARIAN :Ungarske
STR_TOWNNAME_AUSTRIAN :<3A>strigske
STR_TOWNNAME_ROMANIAN :Rum<75>nske
STR_TOWNNAME_CZECH :Tjekkiske
STR_TOWNNAME_SWISS :Schweiziske
############ end of townname region
STR_CURR_POUNDS :Pund ({POUNDSIGN})
STR_CURR_DOLLARS :Dollar ($)
STR_CURR_FF :Franc (FF)
STR_CURR_DM :Deutschmark (DM)
STR_CURR_GBP :Pund ({POUNDSIGN})
STR_CURR_USD :Dollar ($)
STR_CURR_EUR :Euro (<28>)
STR_CURR_YEN :Yen ({YENSIGN})
STR_CURR_PT :Peseta (Pt)
STR_CURR_FT :Ungarsk Forint (Ft)
STR_CURR_ZL :Polsk Zloty (zl)
STR_CURR_ATS :<3A>strisk Shilling (ATS)
STR_CURR_BEF :Belgisk Franc (BEF)
STR_CURR_DKK :Danske Kroner (DKK)
STR_CURR_FIM :Finske Markka (FIM)
STR_CURR_GRD :Gr<47>ske Drachmer (GRD)
STR_CURR_CHF :Sweiziske Franc (CHF)
STR_CURR_NLG :Hollandske Guilder (NLG)
STR_CURR_ITL :Italienske Lire (ITL)
STR_CURR_SEK :Svenske Kroner (SEK)
STR_CURR_RUR :Russiske Rubel (rur)
STR_CURR_CZK :Tjekkiske Koruna (CZK)
STR_CURR_DEM :Deutschmark (DEM)
STR_CURR_DKK :Danske Kroner (DKK)
STR_CURR_ESP :Peseta (ESP)
STR_CURR_FIM :Finske Markka (FIM)
STR_CURR_FRF :Franc (FRF)
STR_CURR_GRD :Gr<47>ske Drachmer (GRD)
STR_CURR_HUF :Ungarnske Forint (HUF)
STR_CURR_ISK :Islandske Kroner (ISK)
STR_CURR_ITL :Italienske Lire (ITL)
STR_CURR_NLG :Hollandske Guilder (NLG)
STR_CURR_NOK :Norske Kroner (NOK)
STR_CURR_EUR :Euro (<28>)
STR_CURR_PLN :Polske Zloty (PLN)
STR_CURR_ROL :Rum<75>nske Lei
STR_CURR_RUR :Russiske Rubel (rur)
STR_CURR_SEK :Svenske Kroner (SEK)
STR_CURR_CUSTOM :Brugerdefineret...
STR_OPTIONS_LANG :{BLACK}Sprog
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}V<>lg sprog til brugerfladen
STR_OPTIONS_FULLSCREEN :{BLACK}Fuld sk<73>rm
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Afkryds for at spille OpenTTD i fuld sk<73>rm
STR_OPTIONS_RES :{BLACK}Sk<53>rmopl<70>sning
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_RES_TIP :{BLACK}V<>lg sk<73>rmopl<70>sning
@@ -941,8 +964,13 @@ STR_SHIP_HAS_INVALID_ENTRY :{WHITE}Skib {COMMA16} har en ugyldig havn i sin
STR_AIRCRAFT_HAS_TOO_FEW_ORDERS :{WHITE}Fly {COMMA16} har for f<> ordre i sin flyveplan
STR_AIRCRAFT_HAS_VOID_ORDER :{WHITE}Fly {COMMA16} har en ugyldig ordre
STR_AIRCRAFT_HAS_DUPLICATE_ENTRY :{WHITE}Fly {COMMA16} har dobbelt ordre
STR_AIRCRAFT_HAS_INVALID_ENTRY :{WHITE}Fly {COMMA16} har en ugyldig station i sin flyveplan
# end of order system
STR_TRAIN_AUTORENEW_FAILED :{WHITE}Automatisk fornyelse mislykkedes p<> tog {COMMA16} (ikke penge nok)
STR_ROADVEHICLE_AUTORENEW_FAILED :{WHITE}Automatisk fornyelse mislykkedes p<> lastbil {COMMA16} (ikke penge nok)
STR_SHIP_AUTORENEW_FAILED :{WHITE}Automatisk fornyelse mislykkedes p<> skib {COMMA16} (ikke penge nok)
STR_AIRCRAFT_AUTORENEW_FAILED :{WHITE}Automatisk fornyelse mislykkedes p<> fly {COMMA16} (ikke penge nok)
STR_CONFIG_PATCHES :{BLACK}Indstil Patches
STR_CONFIG_PATCHES_TIP :{BLACK}Indstil Patchesne
@@ -952,11 +980,14 @@ STR_CONFIG_PATCHES_OFF :Fra
STR_CONFIG_PATCHES_ON :Til
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Vis k<>ret<65>jets fart i statusbaren: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Tillad bygning p<> skr<6B>ninger og kyster: {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Tillad mere realistisk st<73>rrelse p<> stationernes opland: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Tillad nedriving af industribygninger, flere veje, osv: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Aktiver bygning af meget lange tog: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Aktiver realistisk acceleration af tog: {ORANGE}{STRING}
STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Foren togstationer der bygges ved siden af hinanden: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Forlad stationen hvis en slags last bliver fyldt, hvis 'fuld last': {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Brug forbedret indl<64>snings algoritme: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflation: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Aflever kun last til en station hvis der er en foresp<73>rgsel: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Tillad bygning af meget lange broer: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GOTODEPOT :{LTBLUE}Tillad go til depot ordrer: {ORANGE}{STRING}
@@ -976,9 +1007,20 @@ STR_CONFIG_PATCHES_NEW_TRAIN_PATHFIND :{LTBLUE}Ny stifindingsalgoritme til to
STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Tillad altid sm<73> lufthavne: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LOST_TRAIN_DAYS :{LTBLUE}Et tog er v<EFBFBD>k hvis der ikke forekommer fremskridt inden for: {ORANGE}{STRING} dage
STR_CONFIG_PATCHES_LOST_TRAIN_DAYS :{LTBLUE}Et tog er faret vild hvis der ikke er sket fremskridt i: {ORANGE}{STRING} dage
STR_CONFIG_PATCHES_LOST_TRAIN_DAYS_DISABLED :{LTBLUE}Et tog er faret vild hvis der ikke er sket fremskridt i: {ORANGE}deaktiveret
STR_CONFIG_PATCHES_ORDER_REVIEW :{LTBLUE}Kontroller k<>ret<65>jers ordreliste: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ORDER_REVIEW_OFF :Nej
STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT :Ja, p<> n<>r ved stoppet k<>ret<65>jer
STR_CONFIG_PATCHES_ORDER_REVIEW_ON :Ja, p<> alle k<>ret<65>jer
STR_CONFIG_PATCHES_WARN_INCOME_LESS :{LTBLUE}Advar hvis et tog har underskud: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES :{LTBLUE}K<>ret<65>jernes levealder udl<64>ber aldrig: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AUTORENEW_VEHICLE :{LTBLUE}Automatisk fornyelse af k<>ret<65>jer n<>r de bliver gamle
STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Automatisk fornyelse n<>r k<>ret<65>j er {ORANGE}{STRING}{LTBLUE} m<>neder under/over max alder
STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Antal penge i banken f<>r automatisk fornyelse af k<>ret<65>jer: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Levetid for fejlmeddelser: {ORANGE}{STRING}
STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Vis byens indbyggertal i bynavnet: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Usynlige tr<74>er (med gennemsigtige bygninger): {ORANGE}{STRING}
STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}Snelinjeh<65>jden: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Max station udbreddelse: {ORANGE}{STRING} {RED}Advarsel: H<>j v<>rdi g<>r spillet langsomt
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Automatisk service p<> helikopterlandingspladser: {ORANGE}{STRING}
@@ -993,28 +1035,49 @@ STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH :{LTBLUE}Deaktiver lastbiler for compute
STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT :{LTBLUE}Deaktiver fly for computeren: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AI_BUILDS_SHIPS :{LTBLUE}Deaktiver skibe for computeren: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AINEW_ACTIVE :{LTBLUE}Sl<53> den nye kunstige intelligents til (alpha): {ORANGE}{STRING}
STR_CONFIG_PATCHES_SERVINT_TRAINS :{LTBLUE}Standard serviceinterval for tog: {ORANGE}{STRING} dage
STR_CONFIG_PATCHES_SERVINT_ROADVEH :{LTBLUE}Standard serviceinterval for lastbiler: {ORANGE}{STRING} dage
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Standard serviceinterval for fly: {ORANGE}{STRING} dage
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Standard serviceinterval for skibe: {ORANGE}{STRING} dage
STR_CONFIG_PATCHES_SERVINT_TRAINS :{LTBLUE}Standard service interval for tog: {ORANGE}{STRING} dage/%
STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED :{LTBLUE}Standard service interval for tog: {ORANGE}sl<EFBFBD>et fra
STR_CONFIG_PATCHES_SERVINT_ROADVEH :{LTBLUE}Standard service interval for vejk<EFBFBD>ret<EFBFBD>jer: {ORANGE}{STRING} dage/%
STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED :{LTBLUE}Standard service interval for vejk<EFBFBD>ret<EFBFBD>jer: {ORANGE}sl<73>et fra
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Standard service interval for fly: {ORANGE}{STRING} dage/%
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED :{LTBLUE}Standard service interval for fly: {ORANGE}sl<73>et fra
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Standard service interval for skibe: {ORANGE}{STRING} dage/%
STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Standard service interval for skibe: {ORANGE}sl<73>et fra
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Sl<53> service fra, n<>r nedbrud er sat til ingen: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_DATE :{LTBLUE}Farvede nyheder dukker op i: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STARTING_DATE :{LTBLUE}Start dato: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENDING_DATE :{LTBLUE}Afslut spillet i: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Aktiver rolig <20>konomi (flere sm<73> <20>ndringer)
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Tillad at k<>be aktier i andre selskaber
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}When dragging place signals every: {ORANGE}{STRING} tile(s)
STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Placering af v<>rkt<6B>jslinie: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Venstre
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :Center
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :H<>jre
STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Vinduernes sammenkoblings afstand: {ORANGE}{STRING} px
STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Vinduernes sammenkoblings afstand: {ORANGE}sl<73>et fra
STR_CONFIG_PATCHES_GUI :{BLACK}Brugerflade
STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Konstruktion
STR_CONFIG_PATCHES_VEHICLES :{BLACK}K<>ret<65>jer
STR_CONFIG_PATCHES_STATIONS :{BLACK}Stationer
STR_CONFIG_PATCHES_ECONOMY :{BLACK}<7D>konomi
STR_CONFIG_PATCHES_AI :{BLACK}Modstandere
STR_CONFIG_PATCHES_DISABLED :deaktiveret
STR_CONFIG_PATCHES_INT32 :{INT32}
STR_CONFIG_PATCHES_CURRENCY :{CURRENCY}
STR_CONFIG_PATCHES_QUERY_CAPT :{WHITE}Skift indstillingsv<73>rdi
STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Nogle eller alle standard service intervaller nedenunder er uforenelige med den valgte ops<70>tning! 5-90% og 30-800 dage er gyldige
STR_TEMPERATE_LANDSCAPE :Tempereret klima
STR_SUB_ARCTIC_LANDSCAPE :Arktisk klima
STR_SUB_TROPICAL_LANDSCAPE :Tropisk klima
STR_TOYLAND_LANDSCAPE :Leget<65>jsland
STR_CHEATS :{WHITE}Snydefunktioner
STR_CHEATS_TIP :{BLACK}Checkboxes viser om du bruger denne snydefunktion before
@@ -1024,30 +1087,47 @@ STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Spil som spiller: {ORANGE}{COMMA16}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magisk bulldozer (nedriv ting, som normalt ikke kan fjernes): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunneler kan krydse hinanden: {ORANGE}{STRING}
STR_CHEAT_BUILD_IN_PAUSE :{LTBLUE}Tillad at bygge mens pause er aktiveret: {ORANGE}{STRING}
STR_CHEAT_NO_JETCRASH :{LTBLUE}Jetfly vil ikke styrte (ofte) i sm<73> lufthavne: {ORANGE} {STRING}
STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Skift klima: {ORANGE} {STRING}
STR_CHEAT_CHANGE_DATE :{LTBLUE}<7D>ndre dato: {ORANGE} {DATE_SHORT}
STR_HEADING_FOR_CHECKPOINT :{LTBLUE}Retning mod {CHECKPOINT}
STR_HEADING_FOR_CHECKPOINT_VEL :{LTBLUE}Retning mod {CHECKPOINT}, {VELOCITY}
STR_HEADING_FOR_WAYPOINT :{LTBLUE}Retning mod {WAYPOINT}
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Retning mod {WAYPOINT}, {VELOCITY}
STR_GO_TO_CHECKPOINT :Via {CHECKPOINT}
STR_GO_TO_WAYPOINT :Via {WAYPOINT}
STR_GO_NON_STOP_TO_WAYPOINT :K<>r uden stop via {WAYPOINT}
STR_CHECKPOINTNAME_CITY :Checkpoint {TOWN}
STR_CHECKPOINTNAME_CITY_SERIAL :Checkpoint {TOWN} #{COMMA16}
STR_LANDINFO_CHECKPOINT :Checkpoint
STR_WAYPOINTNAME_CITY :Kontrolsted {TOWN}
STR_WAYPOINTNAME_CITY_SERIAL :Kontrolsted {TOWN} #{COMMA16}
STR_LANDINFO_WAYPOINT :Kontrolsted
STR_CHECKPOINT_VIEWPORT :{WHITE}{CHECKPOINT}
STR_CHECKPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{CHECKPOINT}
STR_CHECKPOINT_RAW :{CHECKPOINT}
STR_EDIT_CHECKPOINT_NAME :{WHITE}<7D>ndrer checkpointets navn
STR_WAYPOINT :{WHITE}Kontrolsted
STR_WAYPOINT_GRAPHICS_TIP :{BLACK}V<>lg udsendene p<> kontrolsteder
STR_CANT_CHANGE_CHECKPOINT_NAME :{WHITE}Kan ikke <20>ndre checkpointets navn...
STR_CONVERT_RAIL_TO_CHECKPOINT_TIP :{BLACK}Konverter togskinner til checkpoint
STR_CANT_BUILD_TRAIN_CHECKPOINT :{WHITE}Kan ikke bygge et togcheckpoint her...
STR_CANT_REMOVE_TRAIN_CHECKPOINT :{WHITE}Kan ikke fjerne et togcheckpoint her...
STR_WAYPOINT_VIEWPORT :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{WAYPOINT}
STR_WAYPOINT_RAW :{WAYPOINT}
STR_EDIT_WAYPOINT_NAME :{WHITE}Omd<6D>b kontrolsted
STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Kan ikke omd<6D>be kontrolsted...
STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}<7D>ndre jernbane til kontrolsted
STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Kan ikke bygge kontrolsted for tog her...
STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Kan ikke fjerne kontrolsted for tog her...
STR_BUILD_AUTORAIL_TIP :{BLACK}Byg togskinner ved hj<68>lp af autotogskinner mode
STR_NO_TOWN_IN_SCENARIO :{WHITE}...der er ingen byer i dette scenarie
STR_GENERATE_RANDOM_LANDSCAPE :{WHITE}Er du sikker p<>, at ud vil have lavet et tilf<6C>ldigt landskab?
STR_MANY_RANDOM_TOWNS :{BLACK}Mange tilf<6C>ldige byer
STR_RANDOM_TOWNS_TIP :{BLACK}D<>k kortet med tilf<6C>ldigt placeret byer
STR_MANY_RANDOM_INDUSTRIES :{BLACK}Mange tilf<6C>ldige industrier
STR_RANDOM_INDUSTRIES_TIP :{BLACK}D<>k kortet med tilf<6C>ldigt placeret industrier
STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kan ikke lave industrier...
STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}<7D>ben landskabsarkitektursv<73>rkt<6B>jslinien for at h<>ve/s<>nke land, plante tr<74>er, osv.
STR_LANDSCAPING_TOOLBAR :{WHITE}Landskabsv<73>rkt<6B>jer
STR_LEVEL_LAND_TOOLTIP :{BLACK}Udj<64>vn land
STR_TREES_RANDOM_TYPE :{BLACK}Tr<54>er af tilf<6C>ldig type
@@ -1061,6 +1141,8 @@ STR_CANT_BUILD_LOCKS :{WHITE}Kan ikke bygge en sluse her...
STR_BUILD_LOCKS_TIP :{BLACK}Byg sluser
STR_LANDINFO_LOCK :Sluse
STR_BUOY_IS_IN_USE :{WHITE}... b<>jen er i brug!
STR_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUMU16}x{NUMU16} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan ikke fjerne en del af en station...
@@ -1074,6 +1156,9 @@ STR_STATION_DRAG_DROP :{BLACK}Byg en station via tr
STR_FAST_FORWARD :{BLACK}K<>r spillet hurtigere
STR_MESSAGE_HISTORY :{WHITE}Tidligere beskeder
STR_MESSAGE_HISTORY_TIP :{BLACK}En liste of seneste nyheder
STR_MESSAGES_DISABLE_ALL :{BLACK}Sl<53> alle fra
STR_MESSAGES_ENABLE_ALL :{BLACK}Sl<53> alle til
STR_CONSTRUCT_COAL_MINE_TIP :{BLACK}Byg Kulmine
STR_CONSTRUCT_FOREST_TIP :{BLACK}Plant Skov
@@ -1097,6 +1182,7 @@ STR_CONSTRUCT_SUGAR_MINE_TIP :{BLACK}Byg Sukkermine
STR_INDUSTRYDIR_CAPTION :{WHITE}Industrier
STR_INDUSTRYDIR_ITEM :{ORANGE}{TOWN} {STRING}{BLACK} ({STRING}){YELLOW} ({COMMA16}% transporteret)
STR_INDUSTRYDIR_ITEM_TWO :{ORANGE}{TOWN} {STRING}{BLACK} ({STRING}/{STRING}){YELLOW} ({COMMA16}%/{COMMA16}% transported)
STR_INDUSTRYDIR_ITEM_NOPROD :{ORANGE}{TOWN} {STRING}
STR_INDUSTRY_TOO_CLOSE :{WHITE}...for t<>t p<> en anden industribygning
@@ -1108,23 +1194,204 @@ STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}V
STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Ombyg toget til at k<>re med den markerede slags last
STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Kan ikke ombygge toget...
STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Service intervaller er i procent: {ORANGE}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Skift produktion
TEMP_AI_IN_PROGRESS :{WHITE}Velkommen til den nye kunstige intelligents, der er under udarbejdelse. Du kan forvente problemer. N<>r det sker, s<> lav et screenshot og s<>t det p<> forummet
TEMP_AI_ACTIVATED :{WHITE}Advarsel: den nye kunstige intelligents er i et tidligt stadie! Lige nu virker den kun med busser og lastbiler!
############ network gui strings
STR_NETWORK_MULTIPLAYER :{WHITE}Netv<74>rksspil
STR_NETWORK_PLAYER_NAME :{BLACK}Spiller navn:
STR_NETWORK_ENTER_NAME_TIP :{BLACK}Dette er det navn, som andre spillere vil kende dig ved
STR_NETWORK_CONNECTION :{BLACK}Forbindelse:
STR_NETWORK_CONNECTION_TIP :{BLACK}V<>lg mellem et internet baseret eller et lokalnet baseret spil
STR_NETWORK_START_SERVER :{BLACK}Start server
STR_NETWORK_START_SERVER_TIP :{BLACK}Start en ny server
STR_NETWORK_GAME_NAME :{BLACK}Navn
STR_NETWORK_GAME_NAME_TIP :{BLACK}Spillets navn
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Sprog, server version, osv.
STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Klik p<> et spil fra listen for at v<>lge det
STR_NETWORK_FIND_SERVER :{BLACK}Find server
STR_NETWORK_FIND_SERVER_TIP :{BLACK}S<>g netv<74>rket for en server
STR_NETWORK_ADD_SERVER :{BLACK}Tilf<6C>j server
STR_NETWORK_ADD_SERVER_TIP :{BLACK}Tilf<6C>j en server til listen, som altid vil blive checket for om den k<>rer et spil
STR_NETWORK_ENTER_IP :{BLACK}Skriv adressen p<> en server
STR_NETWORK_CLIENTS_ONLINE :{BLACK}{COMMA16}/{COMMA16}
STR_NETWORK_CLIENTS_CAPTION :{BLACK}Klienter
STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Klienter online / max klienter
STR_NETWORK_GAME_INFO :{SILVER}SPIL INFO
STR_ORANGE :{ORANGE}{STRING}
STR_NETWORK_CLIENTS :{SILVER}Klienter: {WHITE}{COMMA8} / {COMMA8}
STR_NETWORK_LANGUAGE :{SILVER}Sprog: {WHITE}{STRING}
STR_NETWORK_TILESET :{SILVER}Klima: {WHITE}{STRING}
STR_NETWORK_MAP_SIZE :{SILVER}St<53>rrelse: {WHITE}{COMMA16}x{COMMA16}
STR_NETWORK_SERVER_VERSION :{SILVER}Server version: {WHITE}{STRING}
STR_NETWORK_SERVER_ADDRESS :{SILVER}Serveradresse: {WHITE}{STRING} : {NUMU16}
STR_NETWORK_START_DATE :{SILVER}Start dato: {WHITE}{DATE_SHORT}
STR_NETWORK_CURRENT_DATE :{SILVER}Nuv<75>rende dato: {WHITE}{DATE_SHORT}
STR_NETWORK_PASSWORD :{SILVER}Beskyttet af kodeord!
STR_NETWORK_SERVER_OFFLINE :{SILVER}SERVEREN ER OFFLINE
STR_NETWORK_SERVER_FULL :{SILVER}SERVEREN ER FULD
STR_NETWORK_VERSION_MISMATCH :{SILVER}Din og serverens version passer ikke sammen
STR_NETWORK_JOIN_GAME :{BLACK}Tilslut dig et spil
STR_NETWORK_START_GAME_WINDOW :{WHITE}Start et nyt netv<74>rksspil
STR_NETWORK_NEW_GAME_NAME :{BLACK}Spillets navn:
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}Navnet vil blive vist til andre spillere i menuen, hvor man v<>lger netv<74>rksspil
STR_NETWORK_SET_PASSWORD :{BLACK}Set kodeord
STR_NETWORK_PASSWORD_TIP :{BLACK}Beskyt dit spil med et kodeord hvis du ikke vil have fremmede med
STR_NETWORK_SELECT_MAP :{BLACK}V<>lg et kort:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Hvilket kort vil du spille?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tilladte klienter:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}V<>lg det maksimale antal klienter. Det er ikke n<>dvendigt at fylde dem alle
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (bekendtg<74>r spillet)
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_CLIENTS :2 klienter
STR_NETWORK_3_CLIENTS :3 klienter
STR_NETWORK_4_CLIENTS :4 klienter
STR_NETWORK_5_CLIENTS :5 klienter
STR_NETWORK_6_CLIENTS :6 klienter
STR_NETWORK_7_CLIENTS :7 klienter
STR_NETWORK_8_CLIENTS :8 klienter
STR_NETWORK_9_CLIENTS :9 klienter
STR_NETWORK_10_CLIENTS :10 klienter
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Talt sprog:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Andre spillere vil vide hvilket sprog, der bliver talt p<> serveren
STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Start spillet
STR_NETWORK_START_GAME_TIP :{BLACK}Start et nyt netv<74>rksspil med et tilf<6C>ldigt kort eller et scenarie
STR_NETWORK_LOAD_GAME :{BLACK}Hent et spil
STR_NETWORK_LOAD_GAME_TIP :{BLACK}Fortsyt et tidligere gemt spil med flere spillere (s<>r for at f<> den rigtige virksomhed)
STR_NETWORK_LOAD_SCENARIO :{BLACK}Hent et scenarie
STR_NETWORK_LOAD_SCENARIO_TIP :{BLACK}Start et netv<74>rksspil fra et scenarie
############ Leave those lines in this order!!
STR_NETWORK_LANG_ANY :Hvilketsomhelst
STR_NETWORK_LANG_ENGLISH :Engelsk
STR_NETWORK_LANG_GERMAN :Tysk
STR_NETWORK_LANG_FRENCH :Fransk
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Netv<74>rksspils lobby
STR_NETWORK_PREPARE_TO_JOIN :{BLACK}Forbereder tilslutning: {ORANGE}{STRING}
STR_NETWORK_COMPANY_LIST_TIP :{BLACK}En liste over alle selskaber i spillet lige nu. Du kan enten tilslutte dig et eller starte et nyt, hvis der er plads til flere selskaber
STR_NETWORK_NEW_COMPANY :{BLACK}Ny virksomhed
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Lav en ny virksomhed
STR_NETWORK_SPECTATE_GAME :{BLACK}Tilskuer spil
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Se et spil som tilskuer
STR_NETWORK_JOIN_COMPANY :{BLACK}Tilslut dig selskab
STR_NETWORK_JOIN_COMPANY_TIP :{BLACK}Help manage this company
STR_NETWORK_REFRESH :{BLACK}Genopfrisk serveren
STR_NETWORK_REFRESH_TIP :{BLACK}Genopfrisk server info
STR_NETWORK_COMPANY_INFO :{SILVER}VIRKSOMHEDSINFO
STR_NETWORK_COMPANY_NAME :{SILVER}Virksomhedens navn: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Grundlagt: {WHITE}{NUMU16}
STR_NETWORK_VALUE :{SILVER}Virksomhedens v<>rdi: {WHITE}{CURRENCY64}
STR_NETWORK_CURRENT_BALANCE :{SILVER}Nuv<75>rende beholdning: {WHITE}{CURRENCY64}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Sidste <20>rs indt<64>gt: {WHITE}{CURRENCY64}
STR_NETWORK_PERFORMANCE :{SILVER}Pr<50>station: {WHITE}{NUMU16}
STR_NETWORK_VEHICLES :{SILVER}K<>ret<65>jer: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_STATIONS :{SILVER}Stationer: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_PLAYERS :{SILVER}Spillere: {WHITE}{STRING}
STR_NETWORK_CONNECTING :{WHITE}Forbinder...
############ Leave those lines in this order!!
STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Forbinder..
STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Gdokender..
STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Venter..
STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Henter kort..
STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Behandler data..
STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registere..
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Fetching game info..
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Fetching company info..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{INT32} klient(er) foran dig
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{INT32} / {INT32} kbytes hentet indtil videre
STR_NETWORK_DISCONNECT :{BLACK}Afbryd forbindelse
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Skrive den tekst, som du vil sende
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriv det bel<65>b, som du <20>nsker at give
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveren er beskyttet. Skriv kodeordet
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Virksomheden er beskyttet. Skriv kodeordet
STR_NETWORK_CLIENT_LIST :{WHITE}Klient Liste
STR_NETWORK_ERR_NOTAVAILABLE :{WHITE} Ingen netv<74>rksheder fundet eller kompilet uden ENABLE_NETWORK
STR_NETWORK_ERR_NOSERVER :{WHITE} Kunne ikke finde nogen netv<74>rksspil
STR_NETWORK_ERR_NOCONNECTION :{WHITE} Serveren besvarede ikke denne forsp<73>rgsel
STR_NETWORK_ERR_DESYNC :{WHITE} Netv<74>rks synkroniseringsfejl
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} Netv<74>rksforbindelse mistet
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Kunne ikke hente gemt spil
STR_NETWORK_ERR_SERVER_START :{WHITE} Kunne ikke starte serveren
STR_NETWORK_ERR_CLIENT_START :{WHITE} Kunne ikke forbinde
STR_NETWORK_ERR_TIMEOUT :{WHITE} Forbindelsen #{NUMU16} svare ikke
STR_NETWORK_ERR_SERVER_ERROR :{WHITE} Der opstod en protokol-fejl og forbindelse blev lukket
STR_NETWORK_ERR_WRONG_REVISION :{WHITE} Revisionen af denne klient passer ikke sammen med serverens revision
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Forkert kodeord
STR_NETWORK_ERR_SERVER_FULL :{WHITE} Serveren er fuld
STR_NETWORK_ERR_SERVER_BANNED :{WHITE} Du har forbud mod at bruge denne server
STR_NETWORK_ERR_KICKED :{WHITE} Du blev smidt ud af spillet
STR_NETWORK_ERR_CHEATER :{WHITE} Snyderi er ikke tilladt p<> denne server
STR_NETWORK_ERR_LEFT :har forladt spillet
############ Leave those lines in this order!!
STR_NETWORK_ERR_CLIENT_GENERAL :generel fejl
STR_NETWORK_ERR_CLIENT_DESYNC :synkroniseringsfejl
STR_NETWORK_ERR_CLIENT_SAVEGAME :kunne ikke hente kortet
STR_NETWORK_ERR_CLIENT_CONNECTION_LOST :forbindelsen blev afbrudt
STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR :protokol fejl
STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :Not Authorised
STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :modtog en underlig pakke
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :forkert revision
STR_NETWORK_ERR_CLIENT_NAME_IN_USE :navnet er allerede i brug
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :wrong game-password
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :forkert player-id i DoCommand
STR_NETWORK_ERR_CLIENT_KICKED :smidt ud af serveren
STR_NETWORK_ERR_CLIENT_CHEATER :pr<70>vede at snyde
############ End of leave-in-this-order
STR_NETWORK_CLIENT_JOINED :har tilsluttet sig spillet
STR_NETWORK_GIVE_MONEY :gav din virksomhed nogle penge ({CURRENCY})
STR_NETWORK_GAVE_MONEY_AWAY :du gav {STRING} nogle penge ({CURRENCY})
STR_NETWORK_CHAT_COMPANY :[Team] {STRING}:
STR_NETWORK_CHAT_TO_COMPANY :[Team] Til {STRING}:
STR_NETWORK_CHAT_CLIENT :[Private] {STRING}:
STR_NETWORK_CHAT_TO_CLIENT :[Private] Til {STRING}:
STR_NETWORK_CHAT_ALL :[All] {STRING}:
STR_NETWORK_NAME_CHANGE :har skiftet navn til
STR_NETWORK_SERVER_SHUTDOWN :{WHITE} Serveren har lukket ned for dette spil
STR_NETWORK_SERVER_REBOOT :{WHITE} Serveren genstarter...{}Vent venligst...
STR_NETWORK_SERVER :Server
STR_NETWORK_CLIENT :Klient
STR_NETWORK_CLIENTLIST_NONE :(ingen)
STR_NETWORK_CLIENTLIST_KICK :Smid ud
STR_NETWORK_CLIENTLIST_GIVE_MONEY :Giv penge
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Tal til alle
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Tal til virksomhed
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privat besked
STR_NETWORK_SEND :{BLACK}Send
############ end network gui strings
@@ -1155,7 +1422,7 @@ STR_1002_EXCAVATION_WOULD_DAMAGE :{WHITE}Udgravning ville skade en tunnel
STR_1003_ALREADY_AT_SEA_LEVEL :{WHITE}Allerede ved havoverfladen
STR_1004_TOO_HIGH :{WHITE}For h<>jt
STR_1005_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Ingen brugbare togskinner
STR_1006_TRAIN_INSIDE_DEPOT :{WHITE}Der er et tog i remisen
STR_1006_TRAIN_INSIDE_DEPOT :{WHITE}Der er et tog i depotet
STR_1007_ALREADY_BUILT :{WHITE}...allerede bygget
STR_1008_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Det er n<>dvendigt at fjerne togskinnerne f<>rst
STR_1009_TOO_MANY_DEPOTS :{WHITE}For mange depoter
@@ -1163,28 +1430,28 @@ STR_100A_RAILROAD_CONSTRUCTION :{WHITE}Togskinne Konstruktion
STR_100B_MONORAIL_CONSTRUCTION :{WHITE}Monorail Konstruktion
STR_100C_MAGLEV_CONSTRUCTION :{WHITE}Magnetskinnetog Konstruktion
STR_100D_SELECT_RAIL_BRIDGE :{WHITE}V<>lg togbro
STR_100E_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan ikke bygge en remise her...
STR_100E_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan ikke bygge et depot her...
STR_100F_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Kan ikke bygge en togstation her...
STR_1010_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kan ikke bygge signaler her...
STR_1011_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan ikke bygge togskinner her...
STR_1012_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan ikke fjerne togksinner herfra...
STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Kan ikke fjerne signaler herfra...
STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Retning for remise
STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Retning for depot
STR_1015_RAILROAD_CONSTRUCTION :Togskinne konstruktion
STR_1016_MONORAIL_CONSTRUCTION :Monorail Konstruktion
STR_1017_MAGLEV_CONSTRUCTION :Magnetskinnetog konstruktion
STR_1018_BUILD_RAILROAD_TRACK :{BLACK}Byg togskinner
STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Byg en remise (til at bygge og servicere tog)
STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Byg et depot (til at bygge og servicere tog)
STR_101A_BUILD_RAILROAD_STATION :{BLACK}Byg togstation
STR_101B_BUILD_RAILROAD_SIGNALS :{BLACK}Byg signaler
STR_101C_BUILD_RAILROAD_BRIDGE :{BLACK}Byg bro
STR_101D_BUILD_RAILROAD_TUNNEL :{BLACK}Byg tunnel
STR_101E_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Skift mellem bygning/fjerning af togskinner og signaler
STR_101F_BRIDGE_SELECTION_CLICK :{BLACK}Valg af bro - klik p<> den valgte bro for at bygge den
STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO :{BLACK}V<>lg orientering af remise
STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO :{BLACK}V<>lg orientering af depot
STR_1021_RAILROAD_TRACK :Togskinner
STR_1022_RAILROAD_TRACK_WITH_SIGNALS :Togskinner med signaler
STR_1023_RAILROAD_TRAIN_DEPOT :Remise
STR_1023_RAILROAD_TRAIN_DEPOT :Depot
STR_1024_AREA_IS_OWNED_BY_ANOTHER :{WHITE}...omr<6D>det ejes af et andet firma
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Togskinner med almindelige signaler
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Togskinner med indk<64>rselssignaler
@@ -1200,7 +1467,7 @@ STR_1802_ROAD_CONSTRUCTION :{WHITE}Vej Konstruktion
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}V<>lg vejbro
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Kan ikke bygge vej her...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan ikke fjerne vej herfra...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Orientering af lastbilsdepot
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Retning for garage
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Kan ikke bygge lastbilsdepot her...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Kan ikke bygge rutebilsstation...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Kan ikke bygge lasteplads...
@@ -1222,6 +1489,7 @@ STR_1818_ROAD_RAIL_LEVEL_CROSSING :Jernbaneoversk
##id 0x2000
STR_2000_TOWNS :{WHITE}Byer
STR_TOWN_LABEL_POP :{WHITE}{STRING} ({COMMA32})
STR_2001 :{WHITE}{STRING}
STR_2002 :{TINYFONT}{BLACK}{STRING}
STR_2003 :{TINYFONT}{WHITE}{STRING}
@@ -1318,6 +1586,7 @@ STR_205B_TEAPOT_HOUSE :Tepottehus
STR_205C_PIGGY_BANK :Sparegris
##id 0x2800
STR_LANDSCAPING :Landskabsv<73>rkt<6B>jer
STR_2800_PLANT_TREES :Plant tr<74>er
STR_2801_PLACE_SIGN :Placer skilt
STR_2802_TREES :{WHITE}Tr<54>er
@@ -1621,6 +1890,7 @@ STR_SV_STNAME_FOREST :{STRING} Skov
##id 0x6800
STR_6800_DIFFICULTY_LEVEL :{WHITE}Sv<53>rhedsgrad
STR_OPTIONS_SAVE_CHANGES :{BLACK}Gem
############ range for difficulty levels starts
STR_6801_EASY :{BLACK}Nem
@@ -1647,8 +1917,10 @@ STR_6812_QUANTITY_OF_SEA_LAKES :{LTBLUE}Antal s
STR_6813_ECONOMY :{LTBLUE}<7D>konomi: {ORANGE}{STRING}
STR_6814_TRAIN_REVERSING :{LTBLUE}Tog vender: {ORANGE}{STRING}
STR_6815_DISASTERS :{LTBLUE}Katastrofer: {ORANGE}{STRING}
STR_16816_CITY_APPROVAL :{LTBLUE}Byr<79>ds holdning overfor <20>ndring i landskabet: {ORANGE}{STRING}
############ range for difficulty settings ends
STR_26816_NONE :Ingen
STR_6816_LOW :Lav
STR_6817_NORMAL :Normal
STR_6818_HIGH :H<>j
@@ -1685,10 +1957,14 @@ STR_6835_AT_END_OF_LINE_ONLY :Kun ved slutningen af jernbanespor
STR_6836_OFF :Fra
STR_6837_ON :Til
STR_6838_SHOW_HI_SCORE_CHART :{BLACK}Vis higscoreliste
STR_6839_PERMISSIVE :Passiv
STR_683A_TOLERANT :Tolerant
STR_683B_HOSTILE :Fjendtlig
##id 0x7000
STR_7000 :
STR_7001 :{WHITE}{STRING} {BLACK}{STRING}
STR_7002_PLAYER :(Spiller {COMMA16})
STR_7004_NEW_FACE :{BLACK}Nyt Ansigt
STR_7005_COLOR_SCHEME :{BLACK}Farvetema
STR_7006_COLOR_SCHEME :{GOLD}Farvetema:
@@ -1726,11 +2002,12 @@ STR_7024 :{COMMA32}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Profit Garf
STR_7026_BANK_BALANCE :{WHITE}Bank Balance
STR_7027_LOAN :{WHITE}L<>n
STR_MAX_LOAN :{WHITE}Max L<>n: {BLACK}{CURRENCY64}
STR_7028 :{BLACK}{CURRENCY64}
STR_7029_BORROW :{BLACK}L<>n {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702A_REPAY :{BLACK}Tilbagebetal {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maksimale st<73>rrelse af l<>n er {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan ikke l<>ne felere penge...
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan ikke l<>ne flere penge...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...ingen l<>n at tilbagebetale
STR_702E_REQUIRED :{WHITE}...{CURRENCY} kr<6B>vet
STR_702F_CAN_T_REPAY_LOAN :{WHITE}Kan ikke tilbagebetale l<>n...
@@ -1803,6 +2080,9 @@ STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Flyt firmaets hovedkvarter for 1% a
STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kan ikke bygge firmaets hovedkvarter...
STR_7072_VIEW_HQ :{BLACK}Vis HK
STR_RELOCATE_HQ :{BLACK}Flyt hovedkvarter
STR_COMPANY_PASSWORD :{BLACK}Kodeord
STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Beskydt din virksomhed med et kodeord for at undg<64> at fremmede slutter sig til dig
STR_SET_COMPANY_PASSWORD :Set virksomhedens kodeord
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Lavkonjuktur over hele verden!{}{}Vism<73>ndende frygter det v<>rste, <20>konomien skrumper!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}<7D>konomisk krise overvundet!{}{}Stigning i forbrug giver industrien selvtilliden tilbage, produktionen <20>ges!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Skift mellem stort/lille vindue
@@ -1816,6 +2096,7 @@ STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Kan ikke s
STR_707D_OWNED_BY :{WHITE}({COMMA16}% ejes af {STRING})
STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA16}% ejes af {STRING}{} {COMMA16}% ejes af {STRING})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{STRING} er blevet overtaget af {STRING}!
STR_7080_PROTECTED :{WHITE}Dette selskab s<>lger ikke aktier endnu...
##id 0x8000
STR_8000_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Damp)
@@ -2084,7 +2365,7 @@ STR_8106_MONORAIL_LOCOMOTIVE :monoraillokomotiv
STR_8107_MAGLEV_LOCOMOTIVE :magnetskinnelokomotiv
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} remise
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} depot
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Indbyggerene fester . . .{}F<>rste tog ankommer til {STATION}!
STR_8802_DETAILS :{WHITE}{STRING} (Detaljer)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Tog i vejen
@@ -2098,24 +2379,26 @@ STR_880A_GO_NON_STOP_TO :G
STR_880B_GO_NON_STOP_TO_UNLOAD :G<> uden stop til {STATION} (Afl<66>sse)
STR_880C_GO_NON_STOP_TO_LOAD :G<> uden stop til {STATION} (L<>sse)
STR_880D :
STR_880E_GO_TO_TRAIN_DEPOT :G<> til {TOWN} remise
STR_SERVICE_AT_TRAIN_DEPOT :Service i {TOWN} remise
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :G<> uden stop til {TOWN} remise
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Service non-stop i {TOWN} remise
STR_880E_GO_TO_TRAIN_DEPOT :G<> til {TOWN} depot
STR_SERVICE_AT_TRAIN_DEPOT :Service i {TOWN} depot
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :G<> uden stop til {TOWN} depot
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Service non-stop i {TOWN} depot
STR_HEADING_FOR_TRAIN_DEPOT :{LTBLUE}Retning mod {TOWN} remise
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{LTBLUE}Retning mod {TOWN} remise, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT :{LTBLUE}K<EFBFBD>rer imod {TOWN} depot
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{LTBLUE}K<EFBFBD>rer imod {TOWN} depot, {VELOCITY}
STR_INVALID_ORDER :{RED} (Ugyldig Order)
STR_UNKNOWN_DESTINATION :ukendt destination
STR_8812_EMPTY :{LTBLUE}Tom
STR_8813_FROM :{LTBLUE}{CARGO} fra {STATION}
STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}Tog {COMMA16} Venter i depot
STR_8815_NEW_VEHICLES :{BLACK}Nye k<>ret<65>jer
STR_8816 :{BLACK}-
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Pris: {GOLD}{CURRENCY}{BLACK} V<>gt: {GOLD}{COMMA16}t{}{BLACK}Hastighed: {GOLD}{VELOCITY}{BLACK} Styrke: {GOLD}{COMMA16}hp{}{BLACK}K<>rselsomkostninger: {GOLD}{CURRENCY}/<2F>r{}{BLACK}Kapacitet: {GOLD}{STRING}{}{BLACK}Designet: {GOLD}{NUMU16}{BLACK} Levetid: {GOLD}{COMMA16} <20>r{}{BLACK}Maks p<>lidelighed: {GOLD}{COMMA8}%
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Pris: {GOLD}{CURRENCY}{BLACK} V<>gt: {GOLD}{COMMA16}t{}{BLACK}Hastighed: {GOLD}{VELOCITY}{BLACK} Styrke: {GOLD}{COMMA32}hp{}{BLACK}K<>rselsomkostninger: {GOLD}{CURRENCY}/<2F>r{}{BLACK}Kapacitet: {GOLD}{STRING}{}{BLACK}Designet: {GOLD}{NUMU16}{BLACK} Levetid: {GOLD}{COMMA16} <20>r{}{BLACK}Maks p<>lidelighed: {GOLD}{COMMA8}%
STR_8818_INFORMATION :{BLACK}Information
STR_8819_TRAIN_TOO_LONG :{WHITE}Toget er for langt
STR_881A_TRAINS_CAN_ONLY_BE_ALTERED :{WHITE}Tog kan kun <20>ndres n<>r de er stoppet i en remise
STR_881A_TRAINS_CAN_ONLY_BE_ALTERED :{WHITE}Tog kan kun <20>ndres n<>r de er stoppet i et depot
STR_881B_TRAINS :{WHITE}{STRING} - {COMMA16} Tog
STR_881C_NEW_RAIL_VEHICLES :{WHITE}Nye Jernbanek<65>ret<65>jer
STR_881D_NEW_MONORAIL_VEHICLES :{WHITE}Nye Monorailk<6C>ret<65>jer
@@ -2138,25 +2421,26 @@ STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygget: {LTBLUE}{NUMU16}{BL
STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} V<>rdi: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{STRING}
STR_882F_LOADING_UNLOADING :{LTBLUE}L<>sser / Afl<66>sser
STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Kan ikke sende toget til remise...
STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Kan ikke sende toget til depot...
STR_8831_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Ikke mere plads til flere ordre
STR_8832_TOO_MANY_ORDERS :{WHITE}For mange ordre
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Kan ikke inds<64>tte ny ordre...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Kan ikke slette denne ordre...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Kan ikke <20>ndre denne ordre...
STR_8836_MUST_BUILD_TRAIN_DEPOT :{WHITE}Det er n<>dvendigt at bygge en remise f<>rst
STR_8836_MUST_BUILD_TRAIN_DEPOT :{WHITE}Det er n<>dvendigt at bygge et depot f<>rst
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Kan ikke flytte k<>ret<65>jet...
STR_8838_N_A :N/A{SKIP}
STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Kan ikke s<>lge jernbanek<65>ret<65>jet...
STR_883A_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Kan ikke finde en route til en lokal remise
STR_883A_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Kan ikke finde en route til et lokalt depot
STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Kan ikke stoppe/starte toget...
STR_883C_SERVICING_INTERVAL_DAYS :{BLACK}Serviceinterval: {LTBLUE}{COMMA16}dage{BLACK} Sidste Service: {LTBLUE}{DATE_LONG}
STR_SERVICING_INTERVAL_PERCENT :{BLACK}Serviceinterval: {LTBLUE}{COMMA16}%{BLACK} Sidste Service: {LTBLUE}{DATE_LONG}
STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Tog - klik p<> et tog for information
STR_883E_BUILD_NEW_TRAINS_REQUIRES :{BLACK}Byg nye tog (kr<6B>ver en remise)
STR_883E_BUILD_NEW_TRAINS_REQUIRES :{BLACK}Byg nye tog (kr<6B>ver et depot)
STR_883F_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Tog - klik p<> et tog for information., tr<74>k vogn/lokomotiv for at fjerne/tilf<6C>je det til toget
STR_8840_BUILD_NEW_TRAIN_VEHICLE :{BLACK}Byg nyt tog/togvogn
STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE :{BLACK}Tr<54>k tog/togvogn her hend for at s<>lge
STR_8842_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Centrer sk<73>rmen over placeringen af remisen
STR_8842_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Centrer sk<73>rmen over placeringen af depot
STR_8843_TRAIN_VEHICLE_SELECTION :{BLACK}Tog valgsliste - klik p<> et k<>ret<65>j for mere information
STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN :{BLACK}Byg det markerede lokomotiv/togvogn
STR_8845_RENAME_TRAIN_VEHICLE_TYPE :{BLACK}Omd<6D>b tog-/togvognstypen
@@ -2338,7 +2622,7 @@ STR_GO_TO_SHIP_DEPOT :Sejl til {TOWN} Skip Depot
SERVICE_AT_SHIP_DEPOT :Service i {TOWN} Skip Depot
##id 0xA000
STR_A000_AIRPORT_CONSTRUCT :{WHITE}Lufthavnskonstruktion.
STR_A000_AIRPORTS :{WHITE}Lufthavne
STR_A001_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Kan ikke bygge en lufthavn her...
STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} Flyhangar
STR_A003_NEW_AIRCRAFT :{BLACK}Nyt fly
@@ -2392,6 +2676,7 @@ STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Kan ikke navngive flyet...
STR_A032_NAME_AIRCRAFT :{BLACK}Navngiv fluet
STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Indbyggerene fester . . .{}F<>rste fly ankommer til{STATION}!
STR_A034_PLANE_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Flystyrt!{}{COMMA16} d<>r i flammerne ved {STATION}
STR_PLANE_CRASH_OUT_OF_FUEL :{BLACK}{BIGFONT}Flystyrt!{}Fly l<>b t<>r for br<62>ndstof, {COMMA16} d<>de i ildhelvede!
STR_A035_DESTINATIONS :{TINYFONT}{BLACK}Destinationer:
STR_A036 :{TINYFONT}{BLACK}{STATION}
STR_A037_RENAME :{BLACK}Omd<6D>b
@@ -2417,10 +2702,97 @@ STR_B002_OIL_REFINERY_EXPLOSION :{BLACK}{BIGFONT}Eksplosion af olieraffinade
STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS :{BLACK}{BIGFONT}Fabrik <20>delagt under mystiske omst<73>ndigheder ved {TOWN}!
STR_B004_UFO_LANDS_NEAR :{BLACK}{BIGFONT}En UFO lander t<>t p<> {TOWN}!
STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Sammenstyrtning af kulmine efterlader et spor af katastrofe ved {TOWN}!
STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Oversv<73>mmelse!{}Mindst {COMMA16} antaget savnet eller omkommet efter pludslig oversv<73>mmelse!
STR_BRIBE_FAILED :{WHITE}Dit fors<72>g p<> bestikkelse er blevet
STR_BRIBE_FAILED_2 :{WHITE}opdaget af en inspekt<6B>r.
STR_BUILD_DATE :{BLACK}Produceret: {LTBLUE}{DATE_LONG}
STR_MULTIPLAYER_PAUSED :{WHITE}Spillet er i pause.{}Kommandoen kan ikke k<>res
STR_PERFORMANCE_DETAIL :{WHITE}Pr<50>stations oversigt
STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detailer
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA32}/{COMMA32})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{INT32}%
SET_PERFORMANCE_DETAIL_INT :{BLACK}{INT32}
############ Those following lines need to be in this order!!
STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}K<>ret<65>jer:
STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Stationer:
STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Minimum profit:
STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Minimum indkomst:
STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Max. indt<64>gt:
STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Afleveret:
STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Last:
STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Penge:
STR_PERFORMANCE_DETAIL_LOAN :{BLACK}L<>n:
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Total:
############ End of order list
STR_PERFORMANCE_DETAIL_VEHICLES_TIP :{BLACK}Antal af k<>ret<65>jer; dette inkludere vejk<6A>ret<65>jer, tog, skibe og fly
STR_PERFORMANCE_DETAIL_STATIONS_TIP :{BLACK}Antallet af stationer. Alle dele af en station (f.eks. tog station, bus station, lufthavn) t<>ller med, ogs<67> selvom de er sat sammen til en station
STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP :{BLACK}Profit for det k<>ret<65>j med lavest indkomst (af alle k<>ret<65>jer <20>ndre end 2 <20>r)
STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP :{BLACK}Indkomst i den m<>ned med lavest profit i de sidste 12 kvartaler
STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP :{BLACK}Indkomst i den m<>ned med h<>jest profit i de sidste 12 kvartaler
STR_PERFORMANCE_DETAIL_DELIVERED_TIP :{BLACK}Antal enheder fragtet i de sidste 4 kvartaler
STR_PERFORMANCE_DETAIL_CARGO_TIP :{BLACK}Antallet af lasttyper fragtet i sidste kvartal
STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Kapital denne virksomhed har i banken
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Har du et stort l<>n?
STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Samlet point af max point
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Newgrf indstillinger
STR_NEWGRF_APPLY_CHANGES :{BLACK}Anvend <20>ndringer
STR_NEWGRF_SET_PARAMETERS :{BLACK}Indstil parametre
STR_NEWGRF_TIP :{BLACK}Liste med alle Newgrf s<>t du har installeret. Marker et s<>t for at <20>ndre indstilliger.
STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}Der er ingen newgrf filer installeret! Du kan l<>se i manualen hvordan man installerer newgrf s<>t.
STR_NEWGRF_FILENAME :{BLACK}Filnavn:
STR_NEWGRF_GRF_ID :{BLACK}GRF ID:
STR_CURRENCY_WINDOW :{WHITE}Brugerdefineret m<>ntfod
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Kurs: {ORANGE}{CURRENCY} = {POUNDSIGN} {COMMA16}
STR_CURRENCY_SEPARATOR :{LTBLUE}Tilskuer:
STR_CURRENCY_PREFIX :{LTBLUE}Pr<50>fiks:
STR_CURRENCY_SUFFIX :{LTBLUE}Endetill<6C>g:
STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Skift til Euro: {ORANGE}{INT32}
STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Skift til Euro: {ORANGE}aldrig
STR_CURRENCY_PREVIEW :{LTBLUE}Eksempel: {ORANGE}{CURRENCY}
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Skift brugerdefineret m<>ntfods parametre
STR_TRAIN :{BLACK}{TRAIN}
STR_LORRY :{BLACK}{LORRY}
STR_PLANE :{BLACK}{PLANE}
STR_SHIP :{BLACK}{SHIP}
STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA16} Tog
STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA16} K<>ret<65>jer
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA16} Fly
STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA16} Skibe
STR_SCHEDULED_TRAINS_TIP :{BLACK}Vis alle tog, som har denne station i deres k<>replan
STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Vis alle k<>ret<65>jer, som har denne station i deres k<>replan
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Vis alle fly, som har denne lufthavn i deres ruteplan
STR_SCHEDULED_SHIPS_TIP :{BLACK}Vis alle skibe, som har denne station i deres ruteplan
STR_REPLACE_VEHICLES :{BLACK}Udskift K<>ret<65>jer
STR_REPLACE_VEHICLES_WHITE :{WHITE}Udskift K<>ret<65>jer
STR_REPLACE_VEHICLES_START :{BLACK}Start udskiftning
STR_REPLACE_VEHICLES_STOP :{BLACK}Stop udskiftning
STR_NOT_REPLACING :{BLACK}Udskifter ikke
STR_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Intet k<>ret<65>j valgt
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}V<>lg en k<>ret<65>jstype, som du <20>nsker udskiftet
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}V<>lg en k<>ret<65>jstype, som du <20>nker at f<> i stedet for den type, du har valgt i venste side
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Tryk for at stoppe udskiftningen at den k<>ret<65>jstype, som du har valgt til venstre
STR_REPLACE_HELP_START_BUTTON :{BLACK}Tryk for at begynde at udskifte k<>ret<65>jet til venstre med k<>ret<65>jet til h<>jre
STR_REPLACE_HELP_RAILTYPE :{BLACK}V<>lg den skinnetype, hvor du vil udskifte lokomotiver
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Viser hvilket k<>ret<65>j at det valgte k<>ret<65>j til venstre bliver udskiftet med, hvis det bliver udskiftet
STR_REPLACE_HELP :{BLACK}Dette giver dig mulighed for at udskifte en k<>ret<65>jstype med en anden, n<>r et k<>ret<65>j af den oprindelige type k<>rer i depot
STR_SHORT_DATE :{WHITE}{DATE_TINY}
############ Lists rail types
STR_RAIL_VEHICLES :Jernbane
STR_MONORAIL_VEHICLES :Monorail
STR_MAGLEV_VEHICLES :Magnetskinnetog
############ End of list of rail types
STR_TINY_BLACK :{BLACK}{TINYFONT}{COMMA16}

File diff suppressed because it is too large Load Diff

View File

@@ -186,13 +186,8 @@ STR_00B4_CAN_T_DO_THIS :{WHITE}Can't do this....
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Can't clear this area....
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
STR_00B7_VERSION :{BLACK}OpenTTD version {REV}
STR_00B8_ORIGINAL_DESIGN_PROGRAM :{BLACK}Original design by Chris Sawyer
STR_00B9_ORIGINAL_GRAPHICS :{BLACK}Original graphics by Simon Foster
STR_SPECIAL_THANKS :{BLACK}Special thanks go out to:
STR_SPECIAL_THANKS_SIGNALS :{BLACK}<7D> Pre-Signals and Semaphores {COPYRIGHT} 2003 Michael Blunck
STR_SPECIAL_THANKS_CANALS :{BLACK}<7D> Foundations for Tracks on Slopes {COPYRIGHT} Marcin Grzegorczyk
STR_SPECIAL_THANKS_FOUNDATIONS :{BLACK}<7D> Canal/Lock graphics {COPYRIGHT} 2003-2004 George
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2004 The OpenTTD team
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2005 The OpenTTD team
STR_TRANSLATED_BY :{BLACK} Translator(s) -
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
@@ -303,13 +298,15 @@ STR_012E_CANCEL :{BLACK}Cancel
STR_012F_OK :{BLACK}OK
STR_0130_RENAME :{BLACK}Rename
STR_0131_TOO_MANY_NAMES_DEFINED :{WHITE}Too many names defined
STR_0132_CHOSEN_NAME_IN_USE_ALREADY :{WHITE}Chosen name in use already
STR_0132_CHOSEN_NAME_IN_USE_ALREADY :{WHITE}Chosen name already in use
STR_0133_WINDOWS :Windows
STR_0134_UNIX :Unix
STR_0135_OSX :OS X
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_0139_IMPERIAL_MILES :Imperial (miles)
STR_013A_METRIC_KILOMETERS :Metric (kilometers)
@@ -319,7 +316,7 @@ STR_013D_INFORMATION :{BLACK}Information
STR_013E_CAPACITIES :{BLACK}Capacities
STR_013E_TOTAL_CARGO :{BLACK}Total Cargo
STR_013F_CAPACITY :{BLACK}Capacity: {LTBLUE}{STRING}
STR_013F_TOTAL_CAPACITY_TEXT:{BLACK}Total cargo (capacity) of this train:
STR_013F_TOTAL_CAPACITY_TEXT :{BLACK}Total cargo capacity of this train:
STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_0140_NEW_GAME :{BLACK}New Game
STR_0141_LOAD_GAME :{BLACK}Load Game
@@ -342,7 +339,7 @@ STR_0157_PERFORMANCE_HISTORY_GRAPH :Performance history graph
STR_0158_COMPANY_VALUE_GRAPH :Company value graph
STR_0159_CARGO_PAYMENT_RATES :Cargo payment rates
STR_015A_COMPANY_LEAGUE_TABLE :Company league table
STR_PERFORMANCE_DETAIL_MENU :Detail performance rating
STR_PERFORMANCE_DETAIL_MENU :Detailed performance rating
############ range for menu ends
STR_015B_OPENTTD :{WHITE}About OpenTTD
@@ -352,7 +349,8 @@ STR_015E_QUIT_GAME :Abandon game
STR_015F_QUIT :Exit
STR_0160_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Are you sure you want to abandon this game?
STR_0161_QUIT_GAME :{WHITE}Abandon Game
STR_SORT_TIP :{BLACK}Select sorting order descending/ascending
STR_SORT_ORDER_TIP :{BLACK}Select sorting order (descending/ascending)
STR_SORT_CRITERIA_TIP :{BLACK}Select sorting criteria
SRT_SORT_BY :{BLACK}Sort by
STR_SORT_BY_POPULATION :{BLACK}Population
@@ -396,7 +394,7 @@ STR_0174_DISPLAY_MAP :{BLACK}Display map
STR_0175_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Display map, town directory
STR_0176_DISPLAY_TOWN_DIRECTORY :{BLACK}Display town directory
STR_0177_DISPLAY_COMPANY_FINANCES :{BLACK}Display company finances information
STR_0178_DISPLAY_COMPANY_GENERAL :{BLACK}Display company general information
STR_0178_DISPLAY_COMPANY_GENERAL :{BLACK}Display general company information
STR_0179_DISPLAY_GRAPHS :{BLACK}Display graphs
STR_017A_DISPLAY_COMPANY_LEAGUE :{BLACK}Display company league table
STR_017B_DISPLAY_LIST_OF_COMPANY :{BLACK}Display list of company's trains
@@ -417,6 +415,8 @@ STR_0189 :{BLACK}{SMALLDOWNARROW}
STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}Can't change servicing interval...
STR_018B_CLOSE_WINDOW :{BLACK}Close window
STR_018C_WINDOW_TITLE_DRAG_THIS :{BLACK}Window title - drag this to move window
STR_STICKY_BUTTON :{BLACK}Mark this window as uncloseable by the 'Close All Windows' key
STR_RESIZE_BUTTON :{BLACK}Click and drag to resize this window
STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolish buildings etc. on a square of land
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Lower a corner of land
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}Raise a corner of land
@@ -488,13 +488,15 @@ STR_01CA_31ST :31st
############ range for days ends
STR_01CB :{TINYFONT}{COMMA16}
STR_01CC_TOGGLE_LARGE_SMALL_MAP :{BLACK}Toggle large/small map size
STR_01CC_TOGGLE_LARGE_SMALL_MAP :{BLACK}Toggle large/medium/small map size
STR_01CD_SELECT_TUTORIAL_DEMONSTRATION :{WHITE}Select Tutorial/Demonstration
############ range for cargo acecpted starts
STR_01CE_CARGO_ACCEPTED :{BLACK}Cargo accepted: {LTBLUE}{STRING}
STR_01CF_CARGO_ACCEPTED :{BLACK}Cargo accepted: {LTBLUE}{STRING}, {STRING}
STR_01D0_CARGO_ACCEPTED :{BLACK}Cargo accepted: {LTBLUE}{STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_4 :{BLACK}Cargo accepted: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_5 :{BLACK}Cargo accepted: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}, {STRING}
############ range for cargo acecpted ends
STR_01D1_8 :({COMMA8}/8 {STRING})
@@ -537,7 +539,7 @@ STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Select 'new style music' programme
STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Select 'Custom 1' (user-defined) programme
STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Select 'Custom 2' (user-defined) programme
STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Clear current programme (Custom1 or Custom2 only)
STR_01F9_SAVE_MUSIC_SETTINGS_TO :{BLACK}Save music settings to disk
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Save music settings
STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Click on music track to add to current programme (Custom1 or Custom2 only)
STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Toggle programme shuffle on/off
STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Show music track selection window
@@ -558,11 +560,12 @@ STR_0209_COMPANY_INFORMATION :{YELLOW}Company information
STR_020A_ECONOMY_CHANGES :{YELLOW}Economy changes
STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Advice / information on player's vehicles
STR_020C_NEW_VEHICLES :{YELLOW}New vehicles
STR_020D_CHANGES_OF_CARGO_ACCEPTANCE :{YELLOW}Changes of cargo acceptance
STR_020D_CHANGES_OF_CARGO_ACCEPTANCE :{YELLOW}Changes to cargo acceptance
STR_020E_SUBSIDIES :{YELLOW}Subsidies
STR_020F_GENERAL_INFORMATION :{YELLOW}General information
STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO :{WHITE}...too far from previous destination
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Top companies who reached 2050{}({STRING} Level)
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Top companies who reached {NUMU16}{}({STRING} Level)
STR_TOP_COMPANIES_NETWORK_GAME :{BIGFONT}{BLACK}Company League Table in {NUMU16}
STR_0212 :{BIGFONT}{COMMA16}.
STR_0213_BUSINESSMAN :Businessman
STR_0214_ENTREPRENEUR :Entrepreneur
@@ -571,9 +574,10 @@ STR_0216_CAPITALIST :Capitalist
STR_0217_MAGNATE :Magnate
STR_0218_MOGUL :Mogul
STR_0219_TYCOON_OF_THE_CENTURY :Tycoon of the Century
STR_021A :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} achieves '{STRING}' status!
STR_021C_OF_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} of {STRING} achieves '{STRING}' status!
STR_HIGHSCORE_NAME :{BIGFONT}{STRING}, {STRING}
STR_HIGHSCORE_STATS :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BLACK}{BIGFONT}{STRING} achieves '{STRING}' status!
STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{STRING} of {STRING} achieves '{STRING}' status!
STR_021D :{BLACK}
STR_021E :{WHITE}
STR_021F :{BLUE}{COMMA16}
@@ -585,8 +589,8 @@ STR_0224 :{BLACK}{UPARROW}
STR_0225 :{BLACK}{DOWNARROW}
STR_0226_RANDOM_LAND :{BLACK}Random Land
STR_0227_RESET_LAND :{BLACK}Reset Land
STR_0228_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Increase size of land area to lower/raise
STR_0229_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Decrease size of land area to lower/raise
STR_0228_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Increase area of land to lower/raise
STR_0229_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Decrease area of land to lower/raise
STR_022A_GENERATE_RANDOM_LAND :{BLACK}Generate random land
STR_022B_RESET_LANDSCAPE :{BLACK}Reset landscape
STR_022C_RESET_LANDSCAPE :{WHITE}Reset Landscape
@@ -722,9 +726,9 @@ STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}Vehicle design names
STR_02BD :{BLACK}{STRING}
STR_02BE_DEFAULT :Default
STR_02BF_CUSTOM :Custom
STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK :{BLACK}Save custom names to disk
STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Save custom names
STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}Vehicle design names selection
STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Save customized vehicle design names to disk
STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Save customised vehicle design names
############ range for menu starts
STR_02C3_GAME_OPTIONS :Game options
@@ -733,6 +737,8 @@ STR_02C5_DIFFICULTY_SETTINGS :Difficulty settings
STR_02C6_DIFFICULTY_SETTINGS :Difficulty settings
STR_02C7_CONFIG_PATCHES :Configure patches
STR_02C8_CONFIG_PATCHES :Configure patches
STR_NEWGRF_SETTINGS :Newgrf settings
STR_NEWGRF_SETTINGS2 :Newgrf settings
STR_GAMEOPTMENU_0A :
STR_GAMEOPTMENU_0B :
STR_02C9_TOWN_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Town names displayed
@@ -741,8 +747,8 @@ STR_02CB_STATION_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Station names displayed
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Station names displayed
STR_02CD_SIGNS_DISPLAYED :{CHECKMARK}{SETX 12}Signs displayed
STR_02CE_SIGNS_DISPLAYED :{SETX 12}Signs displayed
STR_CHECKPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Checkpoints displayed
STR_CHECKPOINTS_DISPLAYED2 :{SETX 12}Checkpoints displayed
STR_WAYPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Waypoints displayed
STR_WAYPOINTS_DISPLAYED2 :{SETX 12}Waypoints displayed
STR_02CF_FULL_ANIMATION :{CHECKMARK}{SETX 12}Full animation
STR_02D0_FULL_ANIMATION :{SETX 12}Full animation
STR_02D1_FULL_DETAIL :{CHECKMARK}{SETX 12}Full detail
@@ -765,13 +771,14 @@ STR_02DC_DISPLAY_SUBSIDIES :{BLACK}Display subsidies
STR_02DD_SUBSIDIES :Subsidies
STR_02DE_MAP_OF_WORLD :Map of world
STR_EXTRA_VIEW_PORT :Extra viewport
STR_02DF_TOWN_DIRECTORY :Town directory
STR_TOWN_POPULATION :{BLACK}World population: {COMMA32}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA16}
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copy to viewport
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copy the location of the global view to this viewport
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Paste from viewport
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Paste the location of this viewport to the global view
STR_02DF_TOWN_DIRECTORY :Town directory
STR_02E0_CURRENCY_UNITS :{BLACK}Currency units
STR_02E1 :{BLACK}{SKIP}{STRING}
STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}Currency units selection
@@ -795,16 +802,16 @@ STR_02F8_EVERY_3_MONTHS :Every 3 months
STR_02F9_EVERY_6_MONTHS :Every 6 months
STR_02FA_EVERY_12_MONTHS :Every 12 months
STR_02FB_START_A_NEW_GAME :{BLACK}Start a new game
STR_02FC_LOAD_A_SAVED_GAME_FROM :{BLACK}Load a saved game from disk
STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Load a saved game
STR_02FD_VIEW_DEMONSTRATIONS_TUTORIALS :{BLACK}View demonstrations/tutorials
STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Create a customized game world/scenario
STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Create a customised game world/scenario
STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Select single-player game
STR_0300_SELECT_TWO_PLAYER_GAME :{BLACK}Select multiplayer game of 2-8 players
STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}Select multiplayer game of 2-8 players
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Display game options
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Display difficulty options
STR_0303_START_A_NEW_GAME_USING :{BLACK}Start a new game, using a customized scenario from disk
STR_0303_START_A_NEW_GAME_USING :{BLACK}Start a new game, using a customised scenario
STR_0304_QUIT :{BLACK}Quit
STR_0305_LEAVE_OPENTTD :{BLACK}Leave 'OpenTTD', and quit
STR_0305_QUIT_OPENTTD :{BLACK}Quit 'OpenTTD'
STR_0306_VIEW_DEMONSTRATION_TUTORIAL :{BLACK}View demonstration/tutorial
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...can only be built in towns
@@ -820,13 +827,13 @@ STR_0313_FUND_NEW_INDUSTRY :Fund new industry
############ range ends here
STR_0314_FUND_NEW_INDUSTRY :{WHITE}Fund new industry
STR_0315 :{STRING}
STR_JUST_STRING :{STRING}
STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...can only be built in towns
STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...can only be built in rainforest areas
STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...can only be built in desert areas
STR_0319_PAUSED :{YELLOW}* * PAUSED * *
STR_031B_SCREENSHOT_SUCCESSFULLY :{WHITE}Screenshot successfully saved to disk as '{STRING}'
STR_031B_SCREENSHOT_SUCCESSFULLY :{WHITE}Screenshot successfully saved as '{STRING}'
STR_031C_SCREENSHOT_FAILED :{WHITE}Screenshot failed!
STR_0329_PURCHASE_LAND_FOR_FUTURE :{BLACK}Purchase land for future use
@@ -842,51 +849,58 @@ STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ENGLISH :English
STR_TOWNNAME_ORIGINAL_ENGLISH :English (Original)
STR_TOWNNAME_FRENCH :French
STR_TOWNNAME_GERMAN :German
STR_TOWNNAME_AMERICAN :American
STR_TOWNNAME_ADDITIONAL_ENGLISH :English (Additional)
STR_TOWNNAME_LATIN_AMERICAN :Latin-American
STR_TOWNNAME_SILLY :Silly
STR_TOWNNAME_SWEDISH :Swedish
STR_TOWNNAME_DUTCH :Dutch
STR_TOWNNAME_FINNISH :Finnish
STR_TOWNNAME_POLISH :Polish
STR_TOWNNAME_CZECH :Czech
STR_TOWNNAME_SLOVAKISH :Slovakish
STR_TOWNNAME_NORWEGIAN :Norwegian
STR_TOWNNAME_HUNGARIAN :Hungarian
STR_TOWNNAME_AUSTRIAN :Austrian
STR_TOWNNAME_ROMANIAN :Romanian
STR_TOWNNAME_CZECH :Czech
STR_TOWNNAME_SWISS :Swiss
############ end of townname region
STR_CURR_POUNDS :Pounds ({POUNDSIGN})
STR_CURR_DOLLARS :Dollars ($)
STR_CURR_FF :Franc (FF)
STR_CURR_DM :Deutschmark (DM)
STR_CURR_GBP :Pounds ({POUNDSIGN})
STR_CURR_USD :Dollars ($)
STR_CURR_EUR :Euro (<28>)
STR_CURR_YEN :Yen ({YENSIGN})
STR_CURR_PT :Peseta (Pt)
STR_CURR_FT :Hungarian Forint (Ft)
STR_CURR_ZL :Polish Zloty (zl)
STR_CURR_ATS :Austrian Shilling (ATS)
STR_CURR_BEF :Belgian Franc (BEF)
STR_CURR_DKK :Danish Krone (DKK)
STR_CURR_FIM :Finnish Markka (FIM)
STR_CURR_GRD :Greek Drachma (GRD)
STR_CURR_CHF :Swiss Franc (CHF)
STR_CURR_NLG :Dutch Guilder (NLG)
STR_CURR_ITL :Italian Lira (ITL)
STR_CURR_SEK :Swedish Krona (SEK)
STR_CURR_RUR :Russian Rubel (rur)
STR_CURR_CZK :Czech Koruna (CZK)
STR_CURR_DEM :Deutschmark (DEM)
STR_CURR_DKK :Danish Krone (DKK)
STR_CURR_ESP :Peseta (ESP)
STR_CURR_FIM :Finnish Markka (FIM)
STR_CURR_FRF :Franc (FRF)
STR_CURR_GRD :Greek Drachma (GRD)
STR_CURR_HUF :Hungarian Forint (HUF)
STR_CURR_ISK :Icelandic Krona (ISK)
STR_CURR_ITL :Italian Lira (ITL)
STR_CURR_NLG :Dutch Guilder (NLG)
STR_CURR_NOK :Norwegian Krone (NOK)
STR_CURR_ROL :Romanian Leu (Lei)
STR_CURR_EUR :Euro (<28>)
STR_CURR_PLN :Polish Zloty (PLN)
STR_CURR_ROL :Romanian Leu (ROL)
STR_CURR_RUR :Russian Rubles (RUR)
STR_CURR_SEK :Swedish Krona (SEK)
STR_CURR_CUSTOM :Custom...
STR_OPTIONS_LANG :{BLACK}Language
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}Select the interface language to use
STR_OPTIONS_FULLSCREEN :{BLACK}Fullscreen
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Check this box to play OpenTTD fullscreen mode
STR_OPTIONS_RES :{BLACK}Screen resolution
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_RES_TIP :{BLACK}Select the screen resolution to use
@@ -938,19 +952,19 @@ STR_EURO_INTRODUCE :{BLACK}{BIGFONT}European Monetary Union!{}{}The Euro is
STR_TRAIN_HAS_TOO_FEW_ORDERS :{WHITE}Train {COMMA16} has too few orders in the schedule
STR_TRAIN_HAS_VOID_ORDER :{WHITE}Train {COMMA16} has a void order
STR_TRAIN_HAS_DUPLICATE_ENTRY :{WHITE}Train {COMMA16} has duplicate orders
STR_TRAIN_HAS_INVALID_ENTRY :{WHITE}Train {COMMA16} has an invalid station in the orders
STR_TRAIN_HAS_INVALID_ENTRY :{WHITE}Train {COMMA16} has an invalid station in its orders
STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}Road Vehicle {COMMA16} has too few orders in the schedule
STR_ROADVEHICLE_HAS_VOID_ORDER :{WHITE}Road Vehicle {COMMA16} has void order
STR_ROADVEHICLE_HAS_VOID_ORDER :{WHITE}Road Vehicle {COMMA16} has a void order
STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Road Vehicle {COMMA16} has duplicate orders
STR_ROADVEHICLE_HAS_INVALID_ENTRY :{WHITE}Road Vehicle {COMMA16} has an invalid station in the orders
STR_ROADVEHICLE_HAS_INVALID_ENTRY :{WHITE}Road Vehicle {COMMA16} has an invalid station in its orders
STR_SHIP_HAS_TOO_FEW_ORDERS :{WHITE}Ship {COMMA16} has too few orders in the schedule
STR_SHIP_HAS_VOID_ORDER :{WHITE}Ship {COMMA16} has void order
STR_SHIP_HAS_VOID_ORDER :{WHITE}Ship {COMMA16} has a void order
STR_SHIP_HAS_DUPLICATE_ENTRY :{WHITE}Ship {COMMA16} has duplicate orders
STR_SHIP_HAS_INVALID_ENTRY :{WHITE}Ship {COMMA16} has an invalid station in the orders
STR_SHIP_HAS_INVALID_ENTRY :{WHITE}Ship {COMMA16} has an invalid station in its orders
STR_AIRCRAFT_HAS_TOO_FEW_ORDERS :{WHITE}Aircraft {COMMA16} has too few orders in the schedule
STR_AIRCRAFT_HAS_VOID_ORDER :{WHITE}Aircraft {COMMA16} has void order
STR_AIRCRAFT_HAS_VOID_ORDER :{WHITE}Aircraft {COMMA16} has a void order
STR_AIRCRAFT_HAS_DUPLICATE_ENTRY :{WHITE}Aircraft {COMMA16} has duplicate orders
STR_AIRCRAFT_HAS_INVALID_ENTRY :{WHITE}Aircraft {COMMA16} has an invalid station in the orders
STR_AIRCRAFT_HAS_INVALID_ENTRY :{WHITE}Aircraft {COMMA16} has an invalid station in its orders
# end of order system
STR_TRAIN_AUTORENEW_FAILED :{WHITE}Autorenew failed on train {COMMA16} (money limit)
@@ -966,11 +980,13 @@ STR_CONFIG_PATCHES_OFF :Off
STR_CONFIG_PATCHES_ON :On
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Show vehicle speed in status bar: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Allow building on slopes and coasts: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Allow removal of more town-owned roads, bridges, tunnels, etc: {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Allow more realistically sized catchment areas: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Allow removal of more town-owned roads, bridges, etc: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Enable building very long trains: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Enable realistic acceleration for trains: {ORANGE}{STRING}
STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Join train stations built next to each other: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Leave station when any cargo is full, if 'full load': {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Use improved loading algorithm: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflation: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Deliver cargo to a station only when there is a demand: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Allow building very long bridges: {ORANGE}{STRING}
@@ -984,7 +1000,7 @@ STR_CONFIG_PATCHES_SHOWFINANCES :{LTBLUE}Show finances window at the end of th
STR_CONFIG_PATCHES_NEW_NONSTOP :{LTBLUE}TTDPatch compatible nonstop handling: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Road vehicle queueing (with quantum effects): {ORANGE}{STRING}
STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Pan window when mouse is at the edge: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Allow bribing the local authority: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Allow bribing of the local authority: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NEW_DEPOT_FINDING :{LTBLUE}New depot finding: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Nonuniform stations: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NEW_TRAIN_PATHFIND :{LTBLUE}New algorithm for train pathfinding: {ORANGE}{STRING}
@@ -1003,6 +1019,7 @@ STR_CONFIG_PATCHES_AUTORENEW_VEHICLE :{LTBLUE}Autorenew vehicle when it gets o
STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Autorenew when vehice is {ORANGE}{STRING}{LTBLUE} months before/after max age
STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Autorenew minimum needed money for renew: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Duration of error message: {ORANGE}{STRING}
STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Show town population in the town name label: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Invisible trees (with transparent buildings): {ORANGE}{STRING}
STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}Snow line height: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Max station spread: {ORANGE}{STRING} {RED}Warning: High setting slows game
@@ -1028,15 +1045,20 @@ STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Default service interval for a
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED :{LTBLUE}Default service interval for aircraft: {ORANGE}disabled
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Default service interval for ships: {ORANGE}{STRING} days/%
STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Default service interval for ships: {ORANGE}disabled
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Disable servicing when breakdowns set to none: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_DATE :{LTBLUE}Coloured news appears in: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STARTING_DATE :{LTBLUE}Starting date: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENDING_DATE :{LTBLUE}End game in: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Enable smooth economy (more, smaller changes)
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}When dragging place signals every: {ORANGE}{STRING} tile(s)
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Allow buying shares from other companies
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}When dragging, place signals every: {ORANGE}{STRING} tile(s)
STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Position of main toolbar: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Left
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :Centre
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :Right
STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Window snap radius: {ORANGE}{STRING} px
STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Window snap radius: {ORANGE}disabled
STR_CONFIG_PATCHES_GUI :{BLACK}Interface
STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Construction
@@ -1050,12 +1072,12 @@ STR_CONFIG_PATCHES_INT32 :{INT32}
STR_CONFIG_PATCHES_CURRENCY :{CURRENCY}
STR_CONFIG_PATCHES_QUERY_CAPT :{WHITE}Change setting value
STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Some or all of the default service interval(s) below are incompatible with chosen setting! 5-90% and 30-800 days are valid
STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Some or all of the default service interval(s) below are incompatible with the chosen setting! 5-90% and 30-800 days are valid
STR_TEMPERATE_LANDSCAPE :temperate landscape
STR_SUB_ARCTIC_LANDSCAPE :sub-arctic landscape
STR_SUB_TROPICAL_LANDSCAPE :sub-tropical landscape
STR_TOYLAND_LANDSCAPE :toyland landscape
STR_TEMPERATE_LANDSCAPE :Temperate landscape
STR_SUB_ARCTIC_LANDSCAPE :Sub-arctic landscape
STR_SUB_TROPICAL_LANDSCAPE :Sub-tropical landscape
STR_TOYLAND_LANDSCAPE :Toyland landscape
STR_CHEATS :{WHITE}Cheats
STR_CHEATS_TIP :{BLACK}Checkboxes indicate if you have used this cheat before
@@ -1069,24 +1091,28 @@ STR_CHEAT_NO_JETCRASH :{LTBLUE}Jetplanes will not crash (frequently) on smal
STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Switch climate: {ORANGE} {STRING}
STR_CHEAT_CHANGE_DATE :{LTBLUE}Change date: {ORANGE} {DATE_SHORT}
STR_HEADING_FOR_CHECKPOINT :{LTBLUE}Heading for {CHECKPOINT}
STR_HEADING_FOR_CHECKPOINT_VEL :{LTBLUE}Heading for {CHECKPOINT}, {VELOCITY}
STR_HEADING_FOR_WAYPOINT :{LTBLUE}Heading for {WAYPOINT}
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Heading for {WAYPOINT}, {VELOCITY}
STR_GO_TO_CHECKPOINT :Go via {CHECKPOINT}
STR_GO_TO_WAYPOINT :Go via {WAYPOINT}
STR_GO_NON_STOP_TO_WAYPOINT :Go non-stop via {WAYPOINT}
STR_CHECKPOINTNAME_CITY :Checkpoint {TOWN}
STR_CHECKPOINTNAME_CITY_SERIAL :Checkpoint {TOWN} #{COMMA16}
STR_LANDINFO_CHECKPOINT :Checkpoint
STR_WAYPOINTNAME_CITY :Waypoint {TOWN}
STR_WAYPOINTNAME_CITY_SERIAL :Waypoint {TOWN} #{COMMA16}
STR_LANDINFO_WAYPOINT :Waypoint
STR_CHECKPOINT_VIEWPORT :{WHITE}{CHECKPOINT}
STR_CHECKPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{CHECKPOINT}
STR_CHECKPOINT_RAW :{CHECKPOINT}
STR_EDIT_CHECKPOINT_NAME :{WHITE}Edit checkpoint name
STR_WAYPOINT :{WHITE}Waypoint
STR_WAYPOINT_GRAPHICS_TIP :{BLACK}Select waypoint type
STR_CANT_CHANGE_CHECKPOINT_NAME :{WHITE}Can't change checkpoint name...
STR_CONVERT_RAIL_TO_CHECKPOINT_TIP :{BLACK}Convert rail to checkpoint
STR_CANT_BUILD_TRAIN_CHECKPOINT :{WHITE}Can't build train checkpoint here...
STR_CANT_REMOVE_TRAIN_CHECKPOINT :{WHITE}Can't remove train checkpoint here...
STR_WAYPOINT_VIEWPORT :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{WAYPOINT}
STR_WAYPOINT_RAW :{WAYPOINT}
STR_EDIT_WAYPOINT_NAME :{WHITE}Edit waypoint name
STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Can't change waypoint name...
STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}Convert rail to waypoint
STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Can't build train waypoint here...
STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Can't remove train waypoint here...
STR_BUILD_AUTORAIL_TIP :{BLACK}Build railway track using the Autorail mode
@@ -1099,6 +1125,7 @@ STR_MANY_RANDOM_INDUSTRIES :{BLACK}Many random industries
STR_RANDOM_INDUSTRIES_TIP :{BLACK}Cover the map with randomly placed industries
STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Can't generate industries...
STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}Open the landscaping toolbar to raise/lower land, plant trees, etc.
STR_LANDSCAPING_TOOLBAR :{WHITE}Landscaping
STR_LEVEL_LAND_TOOLTIP :{BLACK}Level land
@@ -1114,16 +1141,18 @@ STR_CANT_BUILD_LOCKS :{WHITE}Can't build locks here...
STR_BUILD_LOCKS_TIP :{BLACK}Build locks
STR_LANDINFO_LOCK :Lock
STR_BUOY_IS_IN_USE :{WHITE}...buoy is in use!
STR_LANDINFO_COORDS :{BLACK}Coordinates: {LTBLUE}{NUMU16}x{NUMU16} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Can't remove part of station...
STR_CANT_CONVERT_RAIL :{WHITE}Can't convert railtype here...
STR_CONVERT_RAIL_TIP :{BLACK}Convert/Upgrade the type of the rail
STR_CONVERT_RAIL_TIP :{BLACK}Convert/Upgrade the type of rail
STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP :{BLACK}Drag train engine here to sell the whole train
STR_DRAG_DROP :{BLACK}Drag & Drop
STR_STATION_DRAG_DROP :{BLACK}Build a station with drag & drop
STR_STATION_DRAG_DROP :{BLACK}Build a station using drag & drop
STR_FAST_FORWARD :{BLACK}Fast forward the game
STR_MESSAGE_HISTORY :{WHITE}Message History
@@ -1165,43 +1194,51 @@ STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Select type of cargo for train to car
STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Refit train to carry highlighted cargo type
STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Can't refit train...
STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Service intervals are in percents: {ORANGE}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Change production
TEMP_AI_IN_PROGRESS :{WHITE}Welcome to this new AI, in progress. You can expect problems. When you do, make a screenshot and post it at the forum. Enjoy!
TEMP_AI_IN_PROGRESS :{WHITE}Welcome to this new AI, a work in progress. You should expect problems. When you happen take a screenshot and post it in the forum. Enjoy!
TEMP_AI_ACTIVATED :{WHITE}Warning: this new AI is still alpha! Currently, only trucks and busses work!
############ network gui strings
TEMP_STRING_NO_NETWORK :{WHITE}Network interface is not yet fully operational!{}Not working items have been disabled.
STR_NETWORK_MULTIPLAYER :{WHITE}Multiplayer
STR_NETWORK_FIND_SERVER :{BLACK}Find server
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Search network for a server
STR_NETWORK_DIRECT_CONNECT :{BLACK}Direct connect
STR_NETWORK_ENTER_IP :{BLACK}Enter the IP address of the server
STR_NETWORK_DIRECT_CONNECT_TIP :{BLACK}Connect to a known IP
STR_NETWORK_START_SERVER :{BLACK}Start server
STR_NETWORK_START_SERVER_TIP :{BLACK}Start an own server
STR_NETWORK_PLAYER_NAME :{BLACK}Player name:
STR_NETWORK_ENTER_NAME_TIP :{BLACK}This is the name other players will identify you by
STR_NETWORK_CONNECTION :{BLACK}Connection:
STR_NETWORK_CONNECTION_TIP :{BLACK}Choose between an internet game or a Local Area Network (LAN) game
STR_NETWORK_SELECT_CONNECTION :{BLACK}Select connection type:
STR_NETWORK_CONNECTION_TYPE_TIP :{BLACK}Choose between an internet game or a local area nework game
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_START_SERVER :{BLACK}Start server
STR_NETWORK_START_SERVER_TIP :{BLACK}Start your own server
STR_NETWORK_GAME_NAME :{BLACK}Name
STR_NETWORK_GAME_NAME_TIP :{BLACK}Name of the game
STR_NETWORK_PLAYERS :{BLACK}#/#
STR_NETWORK_PLAYERS_TIP :{BLACK}Players currently in this game / Maximum number of players
STR_NETWORK_MAP_SIZE :{BLACK}Size
STR_NETWORK_MAP_SIZE_TIP :{BLACK}Size of the map
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Language, server version, etc.
STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Click a game from the list to select it
STR_NETWORK_PLAYERS_VAL :{BLACK}{COMMA8}/{COMMA8}
STR_NETWORK_FIND_SERVER :{BLACK}Find server
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Search network for a server
STR_NETWORK_ADD_SERVER :{BLACK}Add server
STR_NETWORK_ADD_SERVER_TIP :{BLACK}Adds a server to the list which will always be checked for running games.
STR_NETWORK_ENTER_IP :{BLACK}Enter the address of the host
STR_NETWORK_CLIENTS_ONLINE :{BLACK}{COMMA16}/{COMMA16}
STR_NETWORK_CLIENTS_CAPTION :{BLACK}Clients
STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Clients online / clients max
STR_NETWORK_GAME_INFO :{SILVER}GAME INFO
STR_ORANGE :{ORANGE}{STRING}
STR_NETWORK_CLIENTS :{SILVER}Clients: {WHITE}{COMMA8} / {COMMA8}
STR_NETWORK_LANGUAGE :{SILVER}Language: {WHITE}{STRING}
STR_NETWORK_TILESET :{SILVER}Tileset: {WHITE}{STRING}
STR_NETWORK_MAP_SIZE :{SILVER}Map size: {WHITE}{COMMA16}x{COMMA16}
STR_NETWORK_SERVER_VERSION :{SILVER}Server version: {WHITE}{STRING}
STR_NETWORK_SERVER_ADDRESS :{SILVER}Server address: {WHITE}{STRING} : {NUMU16}
STR_NETWORK_START_DATE :{SILVER}Start date: {WHITE}{DATE_SHORT}
STR_NETWORK_CURRENT_DATE :{SILVER}Current date: {WHITE}{DATE_SHORT}
STR_NETWORK_PASSWORD :{SILVER}Password protected!
STR_NETWORK_SERVER_OFFLINE :{SILVER}SERVER OFFLINE
STR_NETWORK_SERVER_FULL :{SILVER}SERVER FULL
STR_NETWORK_VERSION_MISMATCH :{SILVER}VERSION MISMATCH
STR_NETWORK_JOIN_GAME :{BLACK}Join game
@@ -1210,20 +1247,30 @@ STR_NETWORK_START_GAME_WINDOW :{WHITE}Start new multiplayer game
STR_NETWORK_NEW_GAME_NAME :{BLACK}Game name:
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}The game name will be displayed to other players in the multiplayer game selection menu
STR_NETWORK_PASSWORD :{BLACK}Password:
STR_NETWORK_PASSWORD_TIP :{BLACK}Protect your game with a password if you don't want other people to join it
STR_NETWORK_SET_PASSWORD :{BLACK}Set password
STR_NETWORK_PASSWORD_TIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible
STR_NETWORK_SELECT_MAP :{BLACK}Select a map:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Which map do you want to play?
STR_NETWORK_NUMBER_OF_PLAYERS :{BLACK}Number of players:
STR_NETWORK_NUMBER_OF_PLAYERS_TIP :{BLACK}Choose a maximum number of players. Not all slots need to be filled.
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_PLAYERS :2 players
STR_NETWORK_3_PLAYERS :3 players
STR_NETWORK_4_PLAYERS :4 players
STR_NETWORK_5_PLAYERS :5 players
STR_NETWORK_6_PLAYERS :6 players
STR_NETWORK_7_PLAYERS :7 players
STR_NETWORK_8_PLAYERS :8 players
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximum allowed clients:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Choose the maximum number of clients. Not all slots need to be filled
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (advertise)
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_CLIENTS :2 clients
STR_NETWORK_3_CLIENTS :3 clients
STR_NETWORK_4_CLIENTS :4 clients
STR_NETWORK_5_CLIENTS :5 clients
STR_NETWORK_6_CLIENTS :6 clients
STR_NETWORK_7_CLIENTS :7 clients
STR_NETWORK_8_CLIENTS :8 clients
STR_NETWORK_9_CLIENTS :9 clients
STR_NETWORK_10_CLIENTS :10 clients
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Language spoken:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Other players will know which language is spoken on the server
STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Start Game
STR_NETWORK_START_GAME_TIP :{BLACK}Start a new network game from a random map, or scenario
STR_NETWORK_LOAD_GAME :{BLACK}Load Game
@@ -1231,25 +1278,120 @@ STR_NETWORK_LOAD_GAME_TIP :{BLACK}Resume an earlier saved multiplayer game (
STR_NETWORK_LOAD_SCENARIO :{BLACK}Load Scenario
STR_NETWORK_LOAD_SCENARIO_TIP :{BLACK}Start a new network game from a scenario
############ Leave those lines in this order!!
STR_NETWORK_LANG_ANY :Any
STR_NETWORK_LANG_ENGLISH :English
STR_NETWORK_LANG_GERMAN :German
STR_NETWORK_LANG_FRENCH :French
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Multiplayer game lobby
STR_NETWORK_SEND :{BLACK}Send
STR_NETWORK_SEND_TIP :{BLACK}Send a message to the other players
STR_NETWORK_COMPANY_NAME :{BLACK}Company name:
STR_NETWORK_COMPANY_NAME_TIP :{BLACK}Change the name of your company. Hit enter to apply changes
STR_NETWORK_PREPARE_TO_JOIN :{BLACK}Preparing to join: {ORANGE}{STRING}
STR_NETWORK_COMPANY_LIST_TIP :{BLACK}A list of all companies currently in this game. You can either join one or start a new one if there is a free company slot
STR_NETWORK_NEW_COMPANY :{BLACK}New company
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Create a new company
STR_NETWORK_SPECTATE_GAME :{BLACK}Spectate game
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Watch the game as a spectator
STR_NETWORK_NEW_COMPANY :{BLACK}New company
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Open a new company
STR_NETWORK_READY :{BLACK}Ready
STR_NETWORK_JOIN_COMPANY :{BLACK}Join company
STR_NETWORK_JOIN_COMPANY_TIP :{BLACK}Help manage this company
STR_NETWORK_REFRESH :{BLACK}Refresh server
STR_NETWORK_REFRESH_TIP :{BLACK}Refresh the server info
STR_NETWORK_COMPANY_INFO :{SILVER}COMPANY INFO
STR_NETWORK_COMPANY_NAME :{SILVER}Company name: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguration: {WHITE}{NUMU16}
STR_NETWORK_VALUE :{SILVER}Company value: {WHITE}{CURRENCY64}
STR_NETWORK_CURRENT_BALANCE :{SILVER}Current balance: {WHITE}{CURRENCY64}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Last year's income: {WHITE}{CURRENCY64}
STR_NETWORK_PERFORMANCE :{SILVER}Performance: {WHITE}{NUMU16}
STR_NETWORK_VEHICLES :{SILVER}Vehicles: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_STATIONS :{SILVER}Stations: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_PLAYERS :{SILVER}Players: {WHITE}{STRING}
STR_NETWORK_CONNECTING :{WHITE}Connecting...
############ Leave those lines in this order!!
STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Connecting..
STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Authorising..
STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Waiting..
STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Downloading map..
STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Processing data..
STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registering..
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Fetching game info..
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Fetching company info..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{INT32} client(s) in front of you
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{INT32} / {INT32} kbytes downloaded so far
STR_NETWORK_DISCONNECT :{BLACK}Disconnect
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Enter your text message to send
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password
STR_NETWORK_CLIENT_LIST :{WHITE}Client List
STR_NETWORK_ERR_NOTAVAILABLE :{WHITE} No network devices found or compiled without ENABLE_NETWORK
STR_NETWORK_ERR_NOSERVER :{WHITE} Could not find any network games
STR_NETWORK_ERR_NOCONNECTION :{WHITE} The server didn't answer the request
STR_NETWORK_ERR_DESYNC :{WHITE} Network-Game synchronization failed.
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} Network-Game connection lost.
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Could not load server-savegame.
STR_NETWORK_ERR_TIMEOUT :{WHITE} Connection #{NUMU16} timed out.
STR_NETWORK_ERR_DESYNC :{WHITE} Network-Game synchronisation failed
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} Network-Game connection lost
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Could not load savegame
STR_NETWORK_ERR_SERVER_START :{WHITE} Could not start the server
STR_NETWORK_ERR_CLIENT_START :{WHITE} Could not connect
STR_NETWORK_ERR_TIMEOUT :{WHITE} Connection #{NUMU16} timed out
STR_NETWORK_ERR_SERVER_ERROR :{WHITE} A protocol-error was made and the connection was closed
STR_NETWORK_ERR_WRONG_REVISION :{WHITE} The revision of this client does not match the server's revision
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Wrong password
STR_NETWORK_ERR_SERVER_FULL :{WHITE} The server is full
STR_NETWORK_ERR_SERVER_BANNED :{WHITE} You are banned from this server
STR_NETWORK_ERR_KICKED :{WHITE} You were kicked out of the game
STR_NETWORK_ERR_CHEATER :{WHITE} Cheating is not allowed on this server
STR_NETWORK_ERR_LEFT :has left the game
############ Leave those lines in this order!!
STR_NETWORK_ERR_CLIENT_GENERAL :general error
STR_NETWORK_ERR_CLIENT_DESYNC :desync error
STR_NETWORK_ERR_CLIENT_SAVEGAME :could not load map
STR_NETWORK_ERR_CLIENT_CONNECTION_LOST :connection lost
STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR :protocol error
STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :Not Authorised
STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :received strange packet
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :wrong revision
STR_NETWORK_ERR_CLIENT_NAME_IN_USE :name already in use
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :wrong game-password
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :wrong player-id in DoCommand
STR_NETWORK_ERR_CLIENT_KICKED :kicked by server
STR_NETWORK_ERR_CLIENT_CHEATER :was trying to use a cheat
############ End of leave-in-this-order
STR_NETWORK_CLIENT_JOINED :has joined the game
STR_NETWORK_GIVE_MONEY :gave your company some money ({CURRENCY})
STR_NETWORK_GAVE_MONEY_AWAY :you gave {STRING} some money ({CURRENCY})
STR_NETWORK_CHAT_COMPANY :[Team] {STRING}:
STR_NETWORK_CHAT_TO_COMPANY :[Team] To {STRING}:
STR_NETWORK_CHAT_CLIENT :[Private] {STRING}:
STR_NETWORK_CHAT_TO_CLIENT :[Private] To {STRING}:
STR_NETWORK_CHAT_ALL :[All] {STRING}:
STR_NETWORK_NAME_CHANGE :has changed his/her name to
STR_NETWORK_SERVER_SHUTDOWN :{WHITE} The server closed the session
STR_NETWORK_SERVER_REBOOT :{WHITE} The server is restarting...{}Please wait...
STR_NETWORK_SERVER :Server
STR_NETWORK_CLIENT :Client
STR_NETWORK_CLIENTLIST_NONE :(none)
STR_NETWORK_CLIENTLIST_KICK :Kick
STR_NETWORK_CLIENTLIST_GIVE_MONEY :Give money
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Speak to all
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Speak to company
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private message
STR_NETWORK_SEND :{BLACK}Send
############ end network gui strings
@@ -1305,7 +1447,7 @@ STR_101B_BUILD_RAILROAD_SIGNALS :{BLACK}Build railway signals
STR_101C_BUILD_RAILROAD_BRIDGE :{BLACK}Build railway bridge
STR_101D_BUILD_RAILROAD_TUNNEL :{BLACK}Build railway tunnel
STR_101E_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Toggle build/remove for railway track and signals
STR_101F_BRIDGE_SELECTION_CLICK :{BLACK}Bridge selection - click on selected bridge to build it
STR_101F_BRIDGE_SELECTION_CLICK :{BLACK}Bridge selection - click on your prefered bridge to build it
STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO :{BLACK}Select railway depot orientation
STR_1021_RAILROAD_TRACK :Railway track
STR_1022_RAILROAD_TRACK_WITH_SIGNALS :Railway track with signals
@@ -1347,6 +1489,7 @@ STR_1818_ROAD_RAIL_LEVEL_CROSSING :Road/rail level crossing
##id 0x2000
STR_2000_TOWNS :{WHITE}Towns
STR_TOWN_LABEL_POP :{WHITE}{STRING} ({COMMA32})
STR_2001 :{WHITE}{STRING}
STR_2002 :{TINYFONT}{BLACK}{STRING}
STR_2003 :{TINYFONT}{WHITE}{STRING}
@@ -1356,7 +1499,7 @@ STR_2006_POPULATION :{BLACK}Population: {ORANGE}{COMMA32}{BLACK} Houses: {
STR_2007_RENAME_TOWN :Rename Town
STR_2008_CAN_T_RENAME_TOWN :{WHITE}Can't rename town...
STR_2009_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN} local authority refuses to allow this
STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Town names - click on name to centre main view on town
STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Town names - click on name to centre view on town
STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Centre the main view on town location
STR_200C_CHANGE_TOWN_NAME :{BLACK}Change town name
STR_200D_PASSENGERS_LAST_MONTH_MAX :{BLACK}Passengers last month: {ORANGE}{COMMA16}{BLACK} max: {ORANGE}{COMMA16}
@@ -1539,7 +1682,7 @@ STR_3063_SHIP_DOCK :Ship dock
STR_3064_HIGHLIGHT_COVERAGE_AREA :{BLACK}Highlight coverage area of proposed site
STR_3065_DON_T_HIGHLIGHT_COVERAGE :{BLACK}Don't highlight coverage area of proposed site
STR_3066_COVERAGE_AREA_HIGHLIGHT :{BLACK}Coverage area highlight
STR_3067_MONORAIL_STATION_SELECT :{WHITE}Monorail Station Select.
STR_3067_MONORAIL_STATION_SELECT :{WHITE}Monorail Station Select
STR_3068_DOCK :{WHITE}Dock
STR_3069_BUOY :Buoy
STR_306A_BUOY_IN_THE_WAY :{WHITE}...buoy in the way
@@ -1652,7 +1795,7 @@ STR_5004 :
STR_5005_UNABLE_TO_EXCAVATE_LAND :{WHITE}Unable to excavate land for other end of tunnel
STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Must demolish tunnel first
STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Must demolish bridge first
STR_5008_CANNOT_START_AND_END_ON :{WHITE}Cannot start and end on same position
STR_5008_CANNOT_START_AND_END_ON :{WHITE}Cannot start and end in the same spot
STR_5009_LEVEL_LAND_OR_WATER_REQUIRED :{WHITE}Level land or water required under bridge
STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Start and end must be in line
STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Site unsuitable for tunnel entrance
@@ -1843,7 +1986,7 @@ STR_7015_AIRCRAFT_RUNNING_COSTS :{GOLD}Aircraft Running Costs
STR_7016_SHIP_RUNNING_COSTS :{GOLD}Ship Running Costs
STR_7017_PROPERTY_MAINTENANCE :{GOLD}Property Maintenance
STR_7018_TRAIN_INCOME :{GOLD}Train Income
STR_7019_ROAD_VEHICLES_INCOME :{GOLD}Road Vehicles Income
STR_7019_ROAD_VEHICLES_INCOME :{GOLD}Road Vehicle Income
STR_701A_AIRCRAFT_INCOME :{GOLD}Aircraft Income
STR_701B_SHIP_INCOME :{GOLD}Ship Income
STR_701C_LOAN_INTEREST :{GOLD}Loan Interest
@@ -1872,7 +2015,7 @@ STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT :{BLACK}Select new face for manager
STR_7031_CHANGE_THE_COMPANY_VEHICLE :{BLACK}Change the company vehicle livery
STR_7032_CHANGE_THE_PRESIDENT_S :{BLACK}Change the manager's name
STR_7033_CHANGE_THE_COMPANY_NAME :{BLACK}Change the company name
STR_7034_CLICK_ON_SELECTED_NEW_COLOR :{BLACK}Click on selected new colour scheme
STR_7034_CLICK_ON_SELECTED_NEW_COLOR :{BLACK}Click on desired colour scheme
STR_7035_INCREASE_SIZE_OF_LOAN :{BLACK}Increase size of loan
STR_7036_REPAY_PART_OF_LOAN :{BLACK}Repay part of loan
STR_7037_PRESIDENT :{WHITE}{STRING}{}{GOLD}(Manager)
@@ -1911,7 +2054,7 @@ STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{STRING} will be sold off
STR_7058_PRESIDENT :{BLACK}{STRING}{}(Manager)
STR_7059_TRANSPORT_COMPANY_MERGER :{BLACK}{BIGFONT}Transport company merger!
STR_705A_HAS_BEEN_SOLD_TO_FOR :{BLACK}{BIGFONT}{STRING} has been sold to {STRING} for {CURRENCY}!
STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT :{WHITE}We are looking for a transport company to take-over our company{}{}Do you want to purchase {STRING} for {CURRENCY}?
STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT :{WHITE}We are looking for a transport company to take-over our company.{}{}Do you want to purchase {STRING} for {CURRENCY}?
STR_705C_BANKRUPT :{BLACK}{BIGFONT}Bankrupt!
STR_705D_HAS_BEEN_CLOSED_DOWN_BY :{BLACK}{BIGFONT}{STRING} has been closed down by creditors and all assets sold off!
STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED :{BLACK}{BIGFONT}New transport company launched!
@@ -1937,6 +2080,9 @@ STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Rebuild company headquarters elsewhe
STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Can't build company headquarters...
STR_7072_VIEW_HQ :{BLACK}View HQ
STR_RELOCATE_HQ :{BLACK}Relocate HQ
STR_COMPANY_PASSWORD :{BLACK}Password
STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Password-protect your company to prevent unauthorised users from joining.
STR_SET_COMPANY_PASSWORD :Set company password
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}World Recession!{}{}Financial experts fear worst as economy slumps!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recession Over!{}{}Upturn in trade gives confidence to industries as economy strengthens!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Toggle large/small window size
@@ -1950,6 +2096,7 @@ STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Can't sell 25% share in this company..
STR_707D_OWNED_BY :{WHITE}({COMMA16}% owned by {STRING})
STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA16}% owned by {STRING}{} {COMMA16}% owned by {STRING})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{STRING} has been taken over by {STRING}!
STR_7080_PROTECTED :{WHITE}This company is not old enough to trade shares yet...
##id 0x8000
STR_8000_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Steam)
@@ -2210,7 +2357,7 @@ STR_80FE_GURU_X2_HELICOPTER :Guru X2 Helicopter
STR_80FF_POWERNAUT_HELICOPTER :Powernaut Helicopter
STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE :{WHITE}Message from vehicle manufacturer
STR_8101_WE_HAVE_JUST_DESIGNED_A :{GOLD}We have just designed a new {STRING} - would you be interested in a year's exclusive use of this vehicle, so we can see how it performs before making it universally available?
STR_8102_RAILROAD_LOCOMOTIVE :Railway locomotive
STR_8102_RAILROAD_LOCOMOTIVE :railway locomotive
STR_8103_ROAD_VEHICLE :road vehicle
STR_8104_AIRCRAFT :aircraft
STR_8105_SHIP :ship
@@ -2248,7 +2395,7 @@ STR_8813_FROM :{LTBLUE}{CARGO} from {STATION}
STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}Train {COMMA16} is waiting in depot
STR_8815_NEW_VEHICLES :{BLACK}New Vehicles
STR_8816 :{BLACK}-
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Cost: {GOLD}{CURRENCY}{BLACK} Weight: {GOLD}{COMMA16}t{}{BLACK}Speed: {GOLD}{VELOCITY}{BLACK} Power: {GOLD}{COMMA16}hp{}{BLACK}Running Cost: {GOLD}{CURRENCY}/yr{}{BLACK}Capacity: {GOLD}{STRING}{}{BLACK}Designed: {GOLD}{NUMU16}{BLACK} Life: {GOLD}{COMMA16} years{}{BLACK}Max. Reliability: {GOLD}{COMMA8}%
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Cost: {GOLD}{CURRENCY}{BLACK} Weight: {GOLD}{COMMA16}t{}{BLACK}Speed: {GOLD}{VELOCITY}{BLACK} Power: {GOLD}{COMMA32}hp{}{BLACK}Running Cost: {GOLD}{CURRENCY}/yr{}{BLACK}Capacity: {GOLD}{STRING}{}{BLACK}Designed: {GOLD}{NUMU16}{BLACK} Life: {GOLD}{COMMA16} years{}{BLACK}Max. Reliability: {GOLD}{COMMA8}%
STR_8818_INFORMATION :{BLACK}Information
STR_8819_TRAIN_TOO_LONG :{WHITE}Train too long
STR_881A_TRAINS_CAN_ONLY_BE_ALTERED :{WHITE}Trains can only be altered when stopped inside a depot
@@ -2301,7 +2448,7 @@ STR_8846_CURRENT_TRAIN_ACTION_CLICK :{BLACK}Current train action - click here t
STR_8847_SHOW_TRAIN_S_ORDERS :{BLACK}Show train's orders
STR_8848_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Centre main view on train's location
STR_8849_SEND_TRAIN_TO_DEPOT :{BLACK}Send train to depot
STR_884A_FORCE_TRAIN_TO_PROCEED :{BLACK}Force train to proceed without waiting for signal to clear
STR_884A_FORCE_TRAIN_TO_PROCEED :{BLACK}Force train to proceed without waiting for signal to clear it
STR_884B_REVERSE_DIRECTION_OF_TRAIN :{BLACK}Reverse direction of train
STR_884C_SHOW_TRAIN_DETAILS :{BLACK}Show train details
STR_884D_INCREASE_SERVICING_INTERVAL :{BLACK}Increase servicing interval
@@ -2310,7 +2457,7 @@ STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Show details of cargo carried
STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES :{BLACK}Show details of train vehicles
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Show capacities of each vehicle
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Show total capacity of train, split by cargo type
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Orders list - click on order to highlight it
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Orders list - click on an order to highlight it. CTRL + click scrolls to the station
STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Skip the current order, and start the next
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Delete the highlighted order
STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Make the highlighted order non-stop
@@ -2364,7 +2511,7 @@ STR_9012_CAPACITY :{BLACK}Capacity: {LTBLUE}{STRING}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...must be stopped inside a road vehicle depot
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Can't sell road vehicle...
STR_9015_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Can't stop/start road vehicle...
STR_9016_ROAD_VEHICLE_IS_WAITING :{WHITE}Road Vehicle {COMMA16} is waiting in depot
STR_9016_ROAD_VEHICLE_IS_WAITING :{WHITE}Road vehicle {COMMA16} is waiting in depot
STR_HEADING_FOR_ROAD_DEPOT :{LTBLUE}Heading for {TOWN} Road Depot
STR_HEADING_FOR_ROAD_DEPOT_VEL :{LTBLUE}Heading for {TOWN} Road Depot, {VELOCITY}
STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT :{WHITE}Can't send vehicle to depot...
@@ -2456,8 +2603,8 @@ STR_982F_NAME_SHIP :{BLACK}Name ship
STR_9831_NAME_SHIP :{WHITE}Name ship
STR_9832_CAN_T_NAME_SHIP :{WHITE}Can't name ship...
STR_9833_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Citizens celebrate . . .{}First ship arrives at {STATION}!
STR_9834_POSITION_BUOY_WHICH_CAN :{BLACK}Position buoy, which can be used for additional way points
STR_9835_CAN_T_POSITION_BUOY_HERE :{WHITE}Can't position buoy here...
STR_9834_POSITION_BUOY_WHICH_CAN :{BLACK}Place a buoy which can be used as a waypoint
STR_9835_CAN_T_POSITION_BUOY_HERE :{WHITE}Can't place buoy here...
STR_9836_RENAME :{BLACK}Rename
STR_9837_RENAME_SHIP_TYPE :{BLACK}Rename ship type
STR_9838_RENAME_SHIP_TYPE :{WHITE}Rename ship type
@@ -2475,7 +2622,7 @@ STR_GO_TO_SHIP_DEPOT :Go to {TOWN} Ship Depot
SERVICE_AT_SHIP_DEPOT :Service at {TOWN} Ship Depot
##id 0xA000
STR_A000_AIRPORT_CONSTRUCT :{WHITE}Airport Construct.
STR_A000_AIRPORTS :{WHITE}Airports
STR_A001_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Can't build airport here...
STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} Aircraft Hangar
STR_A003_NEW_AIRCRAFT :{BLACK}New Aircraft
@@ -2529,6 +2676,7 @@ STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Can't name aircraft...
STR_A032_NAME_AIRCRAFT :{BLACK}Name aircraft
STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Citizens celebrate . . .{}First aircraft arrives at {STATION}!
STR_A034_PLANE_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Plane Crash!{}{COMMA16} die in fireball at {STATION}
STR_PLANE_CRASH_OUT_OF_FUEL :{BLACK}{BIGFONT}Plane Crash!{}Aircraft ran out of fuel, {COMMA16} die in fireball!
STR_A035_DESTINATIONS :{TINYFONT}{BLACK}Destinations:
STR_A036 :{TINYFONT}{BLACK}{STATION}
STR_A037_RENAME :{BLACK}Rename
@@ -2554,17 +2702,17 @@ STR_B002_OIL_REFINERY_EXPLOSION :{BLACK}{BIGFONT}Oil refinery explosion near {
STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS :{BLACK}{BIGFONT}Factory destroyed in suspicious circumstances near {TOWN}!
STR_B004_UFO_LANDS_NEAR :{BLACK}{BIGFONT}'UFO' lands near {TOWN}!
STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Coal mine subsidence leaves trail of destruction near {TOWN}!
STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Floods!{}At least {COMMA16} presumed missing or dead after deadly floods!
STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Floods!{}At least {COMMA16} missing, presumed dead after significant flooding!
STR_BRIBE_FAILED :{WHITE}Your attempted bribery has been
STR_BRIBE_FAILED :{WHITE}Your attempted bribe has been
STR_BRIBE_FAILED_2 :{WHITE}discovered by a regional investigator
STR_BUILD_DATE :{BLACK}Built: {LTBLUE}{DATE_LONG}
STR_MULTIPLAYER_PAUSED :{WHITE}Game is paused.{}Command cannot be executed
STR_PERFORMANCE_DETAIL :{WHITE}Detail performance rating
STR_PERFORMANCE_DETAIL :{WHITE}Detailed performance rating
STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detail
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}{TINYFONT}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}{TINYFONT}({INT32}/{INT32})
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA32}/{COMMA32})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{INT32}%
SET_PERFORMANCE_DETAIL_INT :{BLACK}{INT32}
############ Those following lines need to be in this order!!
@@ -2579,14 +2727,72 @@ STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Money:
STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Loan:
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Total:
############ End of order list
STR_PERFORMANCE_DETAIL_VEHICLES_TIP :{BLACK}Amount of vehicles. This includes road vehicles, trains, ships and aircraft.
STR_PERFORMANCE_DETAIL_STATIONS_TIP :{BLACK}Amount of station parts. Every part of a station (e.g. train station, bus stop, airport) is counted, even if they are connected to one station.
STR_PERFORMANCE_DETAIL_VEHICLES_TIP :{BLACK}Number of vehicles; this includes road vehicles, trains, ships and aircraft
STR_PERFORMANCE_DETAIL_STATIONS_TIP :{BLACK}Number of station parts. Every part of a station (e.g. train station, bus stop, airport) is counted, even if they are connected as one station
STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP :{BLACK}The profit of the vehicle with the lowest income (of all vehicles older than 2 years)
STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP :{BLACK}Amount of cash made in the month with the lowest profit of the past 12 quarters
STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP :{BLACK}Amount of cash made in the month with the highest profit of the past 12 quarters
STR_PERFORMANCE_DETAIL_DELIVERED_TIP :{BLACK}Units of cargo delivered in the past four quarters.
STR_PERFORMANCE_DETAIL_CARGO_TIP :{BLACK}Types of cargo delivered in the last quarter.
STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Amount of cash on hand
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Do you have a high loan?
STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP :{BLACK}Amount of cash made in the month with the lowest profit of the last 12 quarters
STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP :{BLACK}Amount of cash made in the month with the highest profit of the last 12 quarters
STR_PERFORMANCE_DETAIL_DELIVERED_TIP :{BLACK}Units of cargo delivered in the last four quarters
STR_PERFORMANCE_DETAIL_CARGO_TIP :{BLACK}Number of types of cargo delivered in the last quarter
STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Amount of money this company has in the bank
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}The amount of money this company has taken on loan
STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Total points out of possible points
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Newgrf settings
STR_NEWGRF_APPLY_CHANGES :{BLACK}Apply changes
STR_NEWGRF_SET_PARAMETERS :{BLACK}Set parameters
STR_NEWGRF_TIP :{BLACK}A list of all the Newgrf sets that you have installed. Click a set to change the settings
STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}There are currently no newgrf files installed! Please refer to the manual for instructions on installing new graphics
STR_NEWGRF_FILENAME :{BLACK}Filename:
STR_NEWGRF_GRF_ID :{BLACK}GRF ID:
STR_CURRENCY_WINDOW :{WHITE}Custom currency
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Exchange rate: {ORANGE}{CURRENCY} = {POUNDSIGN} {COMMA16}
STR_CURRENCY_SEPARATOR :{LTBLUE}Separator:
STR_CURRENCY_PREFIX :{LTBLUE}Prefix:
STR_CURRENCY_SUFFIX :{LTBLUE}Suffix:
STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Switch to Euro: {ORANGE}{INT32}
STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Switch to Euro: {ORANGE}never
STR_CURRENCY_PREVIEW :{LTBLUE}Preview: {ORANGE}{CURRENCY}
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Change custom currency parameter
STR_TRAIN :{BLACK}{TRAIN}
STR_LORRY :{BLACK}{LORRY}
STR_PLANE :{BLACK}{PLANE}
STR_SHIP :{BLACK}{SHIP}
STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA16} Trains
STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA16} Road Vehicles
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA16} Aircraft
STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA16} Ships
STR_SCHEDULED_TRAINS_TIP :{BLACK}Show all trains which have this station on their schedule
STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Show all road vehicles which have this station on their schedule
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Show all aircraft which have this station on their schedule
STR_SCHEDULED_SHIPS_TIP :{BLACK}Show all ships which have this station on their schedule
STR_REPLACE_VEHICLES :{BLACK}Replace Vehicles
STR_REPLACE_VEHICLES_WHITE :{WHITE}Replace Vehicles
STR_REPLACE_VEHICLES_START :{BLACK}Start Replacing Vehicles
STR_REPLACE_VEHICLES_STOP :{BLACK}Stop Replacing Vehicles
STR_NOT_REPLACING :{BLACK}Not replacing
STR_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}No vehicle selected
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Select the engine type to replace
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Select the new engine type you would like to use in place of the left selected engine type
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Press to stop the replacement of the engine type selected on the left
STR_REPLACE_HELP_START_BUTTON :{BLACK}Press to begin replacement of the left selected engine type with the right selected engine type
STR_REPLACE_HELP_RAILTYPE :{BLACK}Choose the railtype you want to replace engines for
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Displays which engine the left selected engine is being replaced with, if any
STR_REPLACE_HELP :{BLACK}This allows you to replace one engine type with another type, when trains of the original type enter a depot
STR_SHORT_DATE :{WHITE}{DATE_TINY}
############ Lists rail types
STR_RAIL_VEHICLES :Rail Vehicles
STR_MONORAIL_VEHICLES :Monorail Vehicles
STR_MAGLEV_VEHICLES :Maglev Vehicles
############ End of list of rail types
STR_TINY_BLACK :{BLACK}{TINYFONT}{COMMA16}

File diff suppressed because it is too large Load Diff

View File

@@ -186,13 +186,8 @@ STR_00B4_CAN_T_DO_THIS :{WHITE}Impossible d'ex
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Impossible de balayer....
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Copyright originel {COPYRIGHT} 1995 Chris Sawyer, Tous droits r<>serv<72>s
STR_00B7_VERSION :{BLACK}OpenTTD version {REV}
STR_00B8_ORIGINAL_DESIGN_PROGRAM :{BLACK}Design original par Chris Sawyer
STR_00B9_ORIGINAL_GRAPHICS :{BLACK}Graphismes par Simon Foster
STR_SPECIAL_THANKS :{BLACK}Remerciements particuliers pour:
STR_SPECIAL_THANKS_SIGNALS :{BLACK}<7D> Pre-Signaux et S<>maphores {COPYRIGHT} 2003 Michael Blunck
STR_SPECIAL_THANKS_CANALS :{BLACK}<7D> Fondations pour les voies sur plan inclin<69> {COPYRIGHT} Marcin Grzegorczyk
STR_SPECIAL_THANKS_FOUNDATIONS :{BLACK}<7D> Graphiques des Canaux/Ecluses {COPYRIGHT} 2003-2004 George
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2004 The OpenTTD team
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2005 The OpenTTD team
STR_TRANSLATED_BY :{BLACK} Traducteur(s) -
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
@@ -310,6 +305,8 @@ STR_0134_UNIX :Unix
STR_0135_OSX :OSX
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_0139_IMPERIAL_MILES :Imp<6D>rial (miles)
STR_013A_METRIC_KILOMETERS :M<>trique (kilom<6F>tres)
@@ -342,7 +339,7 @@ STR_0157_PERFORMANCE_HISTORY_GRAPH :Historique de performance
STR_0158_COMPANY_VALUE_GRAPH :Valeur de la compagnie
STR_0159_CARGO_PAYMENT_RATES :Valeur des cargaisons
STR_015A_COMPANY_LEAGUE_TABLE :Classement des compagnies
STR_PERFORMANCE_DETAIL_MENU :D<>tail de l'<27>valuation de la performance
STR_PERFORMANCE_DETAIL_MENU :D<>tail des performances
############ range for menu ends
STR_015B_OPENTTD :{WHITE}OpenTTD
@@ -352,7 +349,8 @@ STR_015E_QUIT_GAME :Abandonner la partie
STR_015F_QUIT :Quitter le jeu
STR_0160_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}<7D>tes vous sur de vouloir abandonner cette partie?
STR_0161_QUIT_GAME :{WHITE}Abandonner
STR_SORT_TIP :{BLACK}S<EFBFBD>lectionne l'ordre de tri
STR_SORT_ORDER_TIP :{BLACK}Choisir l'ordre de tri croissant/d<>croissant
STR_SORT_CRITERIA_TIP :{BLACK}Choisir le crit<69>re de tri
SRT_SORT_BY :{BLACK}Trier par
STR_SORT_BY_POPULATION :{BLACK}Population
@@ -368,7 +366,7 @@ STR_SORT_BY_PROFIT_LAST_YEAR :Profit l'an dernier
STR_SORT_BY_PROFIT_THIS_YEAR :Profit cette ann<6E>e
STR_SORT_BY_AGE :Age
STR_SORT_BY_RELIABILITY :Fiabilit<69>
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Capacit<69> totale par type de cargo
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Capacit<69> totale par cargo
STR_SORT_BY_MAX_SPEED :Vitesse maximum
############ range for months starts
@@ -417,6 +415,8 @@ STR_0189 :{BLACK}{SMALLDOWNARROW}
STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}Impossible de modifier l'intervalle de service...
STR_018B_CLOSE_WINDOW :{BLACK}Fermer la fen<65>tre
STR_018C_WINDOW_TITLE_DRAG_THIS :{BLACK}Titre de fen<65>tre - Glissez ceci pour d<>placer la fen<65>tre
STR_STICKY_BUTTON :{BLACK}Marquer cette fen<65>tre comme ineffa<66>able pour la touche 'Fermer toutes les fen<65>tres'
STR_RESIZE_BUTTON :{BLACK}Cliquez et glissez pour redimensionner cette fen<65>tre
STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}D<>molir les constructions sur un carr<72> de terrain
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Abaisser le terrain
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}<7D>lever le terrain
@@ -495,6 +495,8 @@ STR_01CD_SELECT_TUTORIAL_DEMONSTRATION :{WHITE}Choisir Didacticiel/D
STR_01CE_CARGO_ACCEPTED :{BLACK}Cargaison accept<70>e: {LTBLUE}{STRING}
STR_01CF_CARGO_ACCEPTED :{BLACK}Cargaison accept<70>e: {LTBLUE}{STRING}, {STRING}
STR_01D0_CARGO_ACCEPTED :{BLACK}Cargaison accept<70>e: {LTBLUE}{STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_4 :{BLACK}Cargaison accept<70>e: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_5 :{BLACK}Cargaison accept<70>e: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}, {STRING}
############ range for cargo acecpted ends
STR_01D1_8 :({COMMA8}/8 {STRING})
@@ -537,7 +539,7 @@ STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Choisir le programme 'nouveau style
STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Choisir le programme personnalis<69> 'Personnalis<69> 1'
STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Choisir le programme personnalis<69> 'Personnalis<69> 2'
STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Balayer le programme courrant (Personnalis<69> 1 ou Personnalis<69> 2 seulement)
STR_01F9_SAVE_MUSIC_SETTINGS_TO :{BLACK}Sauvegarder les pr<EFBFBD>f<EFBFBD>rences musicales
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Sauver les param<EFBFBD>tres musicaux
STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Cliquez sur une piste pour l'ajouter au pragramme courrant (Custom1 ou Custom2 seulement)
STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Active/D<>sactive le mode al<61>atoire
STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Afficher la fen<65>tre de s<>lection de pistes
@@ -562,7 +564,8 @@ STR_020D_CHANGES_OF_CARGO_ACCEPTANCE :{YELLOW}Changements d'acceptance de car
STR_020E_SUBSIDIES :{YELLOW}Subventions
STR_020F_GENERAL_INFORMATION :{YELLOW}Information g<>nerale
STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO :{WHITE}...trop loin de la destination pr<70>c<EFBFBD>dente
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Meilleures compagnies qui ont atteint 2050{}({STRING} Niveau)
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Meilleures compagnies, qui ont atteint {NUMU16}{}({STRING} niveau)
STR_TOP_COMPANIES_NETWORK_GAME :{BIGFONT}{BLACK}Tableau du Championnat des compagnies en {NUMU16}
STR_0212 :{BIGFONT}{COMMA16}.
STR_0213_BUSINESSMAN :Homme d'affaires
STR_0214_ENTREPRENEUR :Entrepreneur
@@ -571,9 +574,10 @@ STR_0216_CAPITALIST :Capitaliste
STR_0217_MAGNATE :Magnat
STR_0218_MOGUL :Mogul
STR_0219_TYCOON_OF_THE_CENTURY :Tycoon du Si<53>cle
STR_021A :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} atteint le statut de '{STRING}'!
STR_021C_OF_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} de {STRING} atteint le statut de '{STRING}'!
STR_HIGHSCORE_NAME :{BIGFONT}{STRING}, {STRING}
STR_HIGHSCORE_STATS :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BLACK}{BIGFONT}{STRING} atteint le niveau de '{STRING}' !
STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{STRING} de {STRING} atteint le niveau de '{STRING}' !
STR_021D :{BLACK}
STR_021E :{WHITE}
STR_021F :{BLUE}{COMMA16}
@@ -722,7 +726,7 @@ STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}Noms de conception des Vehicule
STR_02BD :{BLACK}{STRING}
STR_02BE_DEFAULT :Par D<>faut
STR_02BF_CUSTOM :Personnalis<69>
STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK :{BLACK}Sauvegarder les noms personnalis<69>s
STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Sauver les noms personnalis<69>s
STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}S<>lection des noms de conception de v<>hicule
STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Sauvegarder noms personnalis<69>s de conception de v<>hicule
@@ -733,6 +737,8 @@ STR_02C5_DIFFICULTY_SETTINGS :Niveau de Difficult
STR_02C6_DIFFICULTY_SETTINGS :Niveau de Difficult<6C>
STR_02C7_CONFIG_PATCHES :Configuration Avanc<6E>e
STR_02C8_CONFIG_PATCHES :Configuration Avanc<6E>e
STR_NEWGRF_SETTINGS :Param<61>tres Newgrf
STR_NEWGRF_SETTINGS2 :Param<61>tres Newgrf
STR_GAMEOPTMENU_0A :
STR_GAMEOPTMENU_0B :
STR_02C9_TOWN_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Afficher le nom des villes
@@ -741,8 +747,8 @@ STR_02CB_STATION_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Afficher le nom des sta
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Afficher le nom des stations
STR_02CD_SIGNS_DISPLAYED :{CHECKMARK}{SETX 12}Afficher les panneaux
STR_02CE_SIGNS_DISPLAYED :{SETX 12}Afficher les panneaux
STR_CHECKPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Afficher les points de contr<74>le
STR_CHECKPOINTS_DISPLAYED2 :{SETX 12}Afficher les points de contr<74>le
STR_WAYPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Afficher les pts de contr<74>le
STR_WAYPOINTS_DISPLAYED2 :{SETX 12}Afficher les pts de contr<74>le
STR_02CF_FULL_ANIMATION :{CHECKMARK}{SETX 12}Animation compl<70>te
STR_02D0_FULL_ANIMATION :{SETX 12}Animation compl<70>te
STR_02D1_FULL_DETAIL :{CHECKMARK}{SETX 12}D<>tail Maximal
@@ -765,13 +771,14 @@ STR_02DC_DISPLAY_SUBSIDIES :{BLACK}Afficher les subventions
STR_02DD_SUBSIDIES :Subventions
STR_02DE_MAP_OF_WORLD :Carte du monde
STR_EXTRA_VIEW_PORT :Vue suppl<70>mentaire
STR_02DF_TOWN_DIRECTORY :Annuaire des villes
STR_TOWN_POPULATION :{BLACK}Population mondiale : {COMMA32}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vue {COMMA16}
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copier vers la vue
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copie l'emplacement de la vue globale vers cette vue
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Coller depuis la vue
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Colle l'emplacement de cette vue vers la vue globale
STR_02DF_TOWN_DIRECTORY :Annuaire des villes
STR_02E0_CURRENCY_UNITS :{BLACK}Unit<69> mon<6F>taire
STR_02E1 :{BLACK}{SKIP}{STRING}
STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}S<>lection d'unit<69> mon<6F>taire
@@ -795,16 +802,16 @@ STR_02F8_EVERY_3_MONTHS :Tous les 3 mois
STR_02F9_EVERY_6_MONTHS :Tous les 6 mois
STR_02FA_EVERY_12_MONTHS :Tous les 12 mois
STR_02FB_START_A_NEW_GAME :{BLACK}Commencer une nouvelle partie
STR_02FC_LOAD_A_SAVED_GAME_FROM :{BLACK}Charger une partie du disque
STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Charger une partie sauv<EFBFBD>e
STR_02FD_VIEW_DEMONSTRATIONS_TUTORIALS :{BLACK}Visionner d<>monstrations/didacticiels
STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Cr<43>er un monde/sc<73>nario de jeu personnalis<69>
STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Selectionner mode joueur simple
STR_0300_SELECT_TWO_PLAYER_GAME :{BLACK}Selectionner mode deux joueurs
STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}S<EFBFBD>lectionnner une partie multi-joueurs de 2 <20> 8 joueurs
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Afficher les options du jeu
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Afficher les options de niveau de difficult<6C>
STR_0303_START_A_NEW_GAME_USING :{BLACK}D<>buter une nouvelle partie <20> partir d'un sc<73>nario
STR_0304_QUIT :{BLACK}Quitter
STR_0305_LEAVE_OPENTTD :{BLACK}Quitter OpenTTD
STR_0305_QUIT_OPENTTD :{BLACK}Quitter 'OpenTTD'
STR_0306_VIEW_DEMONSTRATION_TUTORIAL :{BLACK}Visionner d<>monstration/didacticiel
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...peut seulement <20>tre construit en ville
@@ -820,7 +827,7 @@ STR_0313_FUND_NEW_INDUSTRY :Financer une nouvelle industrie
############ range ends here
STR_0314_FUND_NEW_INDUSTRY :{WHITE}Financer une nouvelle industrie
STR_0315 :{STRING}
STR_JUST_STRING :{STRING}
STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...peut seulement <20>tre construit en ville
STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...peut seulement <20>tre construit en for<6F>t tropicale
STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...peut seulement <20>tre construit dans les endroits d<>sertiques
@@ -842,51 +849,58 @@ STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ENGLISH :Anglais
STR_TOWNNAME_ORIGINAL_ENGLISH :Anglais (Originaux)
STR_TOWNNAME_FRENCH :Fran<61>ais
STR_TOWNNAME_GERMAN :Allemand
STR_TOWNNAME_AMERICAN :Am<41>rican
STR_TOWNNAME_ADDITIONAL_ENGLISH :Anglais (Additionels)
STR_TOWNNAME_LATIN_AMERICAN :Latino-Americain
STR_TOWNNAME_SILLY :Dr<44>les
STR_TOWNNAME_SWEDISH :Su<53>dois
STR_TOWNNAME_DUTCH :Hollandais
STR_TOWNNAME_FINNISH :Finnish
STR_TOWNNAME_POLISH :Polonais
STR_TOWNNAME_CZECH :Tch<63>ques
STR_TOWNNAME_SLOVAKISH :Slovaques
STR_TOWNNAME_NORWEGIAN :Norv<72>giens
STR_TOWNNAME_HUNGARIAN :Hongrois
STR_TOWNNAME_AUSTRIAN :Autrichiens
STR_TOWNNAME_ROMANIAN :Roumain
STR_TOWNNAME_CZECH :Tch<63>ques
STR_TOWNNAME_SWISS :Suisse
############ end of townname region
STR_CURR_POUNDS :Livres ({POUNDSIGN})
STR_CURR_DOLLARS :Dollars ($)
STR_CURR_FF :Francs (FF)
STR_CURR_DM :Marks Allemands (DM)
STR_CURR_GBP :Livres ({POUNDSIGN})
STR_CURR_USD :Dollars ($)
STR_CURR_EUR :Euros (<EFBFBD>)
STR_CURR_YEN :Yens ({YENSIGN})
STR_CURR_PT :Pesetas Espagnols (PT)
STR_CURR_FT :Florins Hongrois (FT)
STR_CURR_ZL :Zloty Polonais (ZL)
STR_CURR_ATS :Shilings Australiens (ATS)
STR_CURR_BEF :Francs Belges (BEF)
STR_CURR_DKK :Couronnes Danoise (DKK)
STR_CURR_FIM :Marks Finlandais (FIM)
STR_CURR_GRD :Drachmes Grec (GRD)
STR_CURR_CHF :Franc Suisse (CHF)
STR_CURR_NLG :Florins Hollandais (NLG)
STR_CURR_ITL :Lires Italiennes (ITL)
STR_CURR_SEK :Couronnes Su<53>doises (SEK)
STR_CURR_RUR :Roubles Russes (RUR)
STR_CURR_CZK :Couronnes Tch<63>ques (CZK)
STR_CURR_DEM :Deutschmark (DEM)
STR_CURR_DKK :Couronnes Danoise (DKK)
STR_CURR_ESP :Peseta (ESP)
STR_CURR_FIM :Marks Finlandais (FIM)
STR_CURR_FRF :Franc (FRF)
STR_CURR_GRD :Drachmes Grec (GRD)
STR_CURR_HUF :Hungarian Forint (HUF)
STR_CURR_ISK :Couronnes Islandaises (ISK)
STR_CURR_ITL :Lires Italiennes (ITL)
STR_CURR_NLG :Florins Hollandais (NLG)
STR_CURR_NOK :Cour. Norv<72>giennes (NOK)
STR_CURR_PLN :Polish Zloty (PLN)
STR_CURR_ROL :Leu Roumain (Lei)
STR_CURR_EUR :Euros (EUR)
STR_CURR_RUR :Roubles Russes (RUR)
STR_CURR_SEK :Couronnes Su<53>doises (SEK)
STR_CURR_CUSTOM :Personnalis<69>...
STR_OPTIONS_LANG :{BLACK}Langue
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}Selectionner la langue d'interface <20> utiliser
STR_OPTIONS_FULLSCREEN :{BLACK}Plein <20>cran
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Cochez cette case pour jouer <20> OpenTTD en plein <20>cran
STR_OPTIONS_RES :{BLACK}R<>solution
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_RES_TIP :{BLACK}Selectionner la r<>solution d'<27>cran <20> utiliser
@@ -966,11 +980,13 @@ STR_CONFIG_PATCHES_OFF :D
STR_CONFIG_PATCHES_ON :Activ<69>
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Afficher vitesse du v<>hicule dans la barre d'<27>tat: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Construction c<>ti<74>re et sur plans inclin<69>s: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Permettre la suppression de plus de routes, ponts, tunnels, etc poss<73>d<EFBFBD>s par une ville: {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Autorise des zones de d<>sserte plus r<>alistes : {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Permettre la suppression de plus d'<27>l<EFBFBD>ments poss<73>d<EFBFBD>s par une ville: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Permettre les trains plus longs: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Permettre les acc<63>l<EFBFBD>rations r<>alistes pour les trains: {ORANGE}{STRING}
STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Joindre les gares juxtapos<6F>es: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Pleine cargaison par un seul type, si 'chargement complet': {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Utiliser l'algorithme am<61>lior<6F> de chargement : {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflation: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Livrer cargaison seulement lorsqu'il y a une demande: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Permettre la construction de ponts longs: {ORANGE}{STRING}
@@ -999,13 +1015,14 @@ STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT :oui, mais exclut les v
STR_CONFIG_PATCHES_ORDER_REVIEW_ON :de tous les v<>hicules
STR_CONFIG_PATCHES_WARN_INCOME_LESS :{LTBLUE}Alerte en cas de profit n<>gatif pour un train: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES :{LTBLUE}Les v<>hicules n'expirent jamais: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AUTORENEW_VEHICLE :{LTBLUE}Renouveller automatiquement les v<>hicules quand ils deviennent vieux
STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Renouveller automatiquement le v<>hicule {ORANGE}{STRING}{LTBLUE} mois avant/apr<70>s l'<27>ge maximum
STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Argent n<>cessaire pour le renouvellement automatique : {ORANGE}{STRING}
STR_CONFIG_PATCHES_AUTORENEW_VEHICLE :{LTBLUE}Renouveller automatiquement les v<>hicules quand ils sont vieux
STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Auto-renouveller les v<>hicules {ORANGE}{STRING}{LTBLUE} mois avant/apr<70>s l'<27>ge maximum
STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Argent n<>cessaire pour l'auto-renouvellement : {ORANGE}{STRING}
STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Temps d'affichage des messages d'erreur: {ORANGE}{STRING}
STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Montrer la population d'une ville dans son label : {ORANGE}{STRING}
STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Arbres invisibles (quand les b<>timents sont transparents) : {ORANGE}{STRING}
STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}Altitude d'enneigement: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Etendue maximum des stations: {ORANGE}{STRING} {RED}Attention: Une valeur trop <EFBFBD>lev<EFBFBD>e ralentit le jeu
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Etendue max. des stations: {ORANGE}{STRING} {RED}Attention: Valeur <20>lev<65>e = jeu lent
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Entretenir automatiquement les h<>licopt<70>res <20> l'heliport: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Nombre de trains max. par joueur: {ORANGE}{STRING}
@@ -1028,15 +1045,20 @@ STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Maintenance des a
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED :{LTBLUE}Maintenance des a<>ronefs tous les: {ORANGE}d<>sactiv<69>
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Maintenance des navires tous les: {ORANGE}{STRING} jours
STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Maintenance des navires tous les: {ORANGE}d<>sactiv<69>
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}D<>sactiver les r<>parations quand les pannes sont d<>sactiv<69>es: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_DATE :{LTBLUE}Les journeaux en couleurs apparaissent en: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STARTING_DATE :{LTBLUE}Date de d<>part: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENDING_DATE :{LTBLUE}Finir le jeu en : {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Permettre une <20>conomie stable (plus de petits changements)
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Permettre d'acheter des actions d'autres compagnies
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Espacements des signaux en mode drag & drop : {ORANGE}{STRING} case(s)
STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Position de la barre d'outils principale: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Gauche
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :Centr<74>e
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :Droite
STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Rayon d'attraction des fen<65>tres : {ORANGE}{STRING} px
STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Rayon d'attraction des fen<65>tres : {ORANGE}disabled
STR_CONFIG_PATCHES_GUI :{BLACK}Interface
STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Construction
@@ -1069,24 +1091,28 @@ STR_CHEAT_NO_JETCRASH :{LTBLUE}Les jets ne se crashent plus (fr
STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Changer de climat : {ORANGE} {STRING}
STR_CHEAT_CHANGE_DATE :{LTBLUE}Changer la date: {ORANGE} {DATE_SHORT}
STR_HEADING_FOR_CHECKPOINT :{LTBLUE}En route pour {CHECKPOINT}
STR_HEADING_FOR_CHECKPOINT_VEL :{LTBLUE}En route pour {CHECKPOINT}, {VELOCITY}
STR_HEADING_FOR_WAYPOINT :{LTBLUE}En route pour {WAYPOINT}
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}En route pour {WAYPOINT}, {VELOCITY}
STR_GO_TO_CHECKPOINT :Passant par {CHECKPOINT}
STR_GO_TO_WAYPOINT :Passant par {WAYPOINT}
STR_GO_NON_STOP_TO_WAYPOINT :Aller sans-arr<72>t via {WAYPOINT}
STR_CHECKPOINTNAME_CITY :Point de contr<74>le {TOWN}
STR_CHECKPOINTNAME_CITY_SERIAL :Point de contr<74>le {TOWN} #{COMMA16}
STR_LANDINFO_CHECKPOINT :Point de contr<74>le
STR_WAYPOINTNAME_CITY :Point de contr<74>le {TOWN}
STR_WAYPOINTNAME_CITY_SERIAL :Point de contr<74>le {TOWN} #{COMMA16}
STR_LANDINFO_WAYPOINT :Point de contr<74>le
STR_CHECKPOINT_VIEWPORT :{WHITE}{CHECKPOINT}
STR_CHECKPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{CHECKPOINT}
STR_CHECKPOINT_RAW :{CHECKPOINT}
STR_EDIT_CHECKPOINT_NAME :{WHITE}Modifier nom du point de contr<74>le
STR_WAYPOINT :{WHITE}Point de passage
STR_WAYPOINT_GRAPHICS_TIP :{BLACK}Choisir le type de point de passage
STR_CANT_CHANGE_CHECKPOINT_NAME :{WHITE}Impossible de modifier le nom du point de contr<74>le...
STR_CONVERT_RAIL_TO_CHECKPOINT_TIP :{BLACK}Convertir rail en point de contr<74>le
STR_CANT_BUILD_TRAIN_CHECKPOINT :{WHITE}Impossible de construire point de contr<74>le ici...
STR_CANT_REMOVE_TRAIN_CHECKPOINT :{WHITE}Impossible de retirer point de contr<74>le ici...
STR_WAYPOINT_VIEWPORT :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{WAYPOINT}
STR_WAYPOINT_RAW :{WAYPOINT}
STR_EDIT_WAYPOINT_NAME :{WHITE}Modifier nom du point de contr<74>le
STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Impossible de modifier le nom du point de contr<74>le...
STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}Convertir rail en point de contr<74>le
STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Impossible de construire point de contr<74>le ici...
STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Impossible de retirer point de contr<74>le ici...
STR_BUILD_AUTORAIL_TIP :{BLACK}Construire les rails avec le mode AutoRail
@@ -1099,6 +1125,7 @@ STR_MANY_RANDOM_INDUSTRIES :{BLACK}Beaucoup d'industries au hasard
STR_RANDOM_INDUSTRIES_TIP :{BLACK}Couvrir la carte avec des industries plac<61>es au hasard
STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Ne peut pas g<>n<EFBFBD>rer les industries...
STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}Ouvre la barre d'outils du paysagiste pour monter/descendre du terrain, planter des arbres, etc.
STR_LANDSCAPING_TOOLBAR :{WHITE}Manipulation du paysage
STR_LEVEL_LAND_TOOLTIP :{BLACK}Niveler le terrain
@@ -1114,6 +1141,8 @@ STR_CANT_BUILD_LOCKS :{WHITE}Impossible de construire un
STR_BUILD_LOCKS_TIP :{BLACK}Construire des <20>cluses
STR_LANDINFO_LOCK :Ecluse
STR_BUOY_IS_IN_USE :{WHITE}... bou<6F>e utilis<69>e !
STR_LANDINFO_COORDS :{BLACK}Coordonn<6E>es: {LTBLUE}{NUMU16}x{NUMU16} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Impossible de supprimer une partie de la gare...
@@ -1165,43 +1194,51 @@ STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Choix du type de marchandises
STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}R<>am<61>nager le train pour les marchandises s<>lectionn<6E>es
STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Impossible de r<>am<61>nager le train...
STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Les intervalles de service sont en pourcentage: {ORANGE}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Changer la production
TEMP_AI_IN_PROGRESS :{WHITE}Bienvenue dans cette nouvelle IA, en cours d'<27>laboration. Vous pouvez vous attendre <20> rencontrer des probl<62>mes. Dans ce cas, faites une capture d'<27>cran et postez-la sur le forum. Amusez-vous bien !
TEMP_AI_ACTIVATED :{WHITE}Attention: cette nouvelle IA est en version alpha ! Pour le moment seuls les camions et les bus fonctionnent !
############ network gui strings
TEMP_STRING_NO_NETWORK :{WHITE}L'interface r<>seau ne fonctionne pas pour le moment!
STR_NETWORK_MULTIPLAYER :{WHITE}Multijoueur
STR_NETWORK_FIND_SERVER :{BLACK}Trouver un serveur
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Cherche sur le r<>seau un serveur
STR_NETWORK_DIRECT_CONNECT :{BLACK}Connection directe
STR_NETWORK_ENTER_IP :{BLACK}Entrez l'adresse IP du serveur
STR_NETWORK_DIRECT_CONNECT_TIP :{BLACK}Permet la connection directe <20> une IP connue
STR_NETWORK_START_SERVER :{BLACK}D<>marrer le serveur
STR_NETWORK_START_SERVER_TIP :{BLACK}D<>marre son propre serveur
STR_NETWORK_PLAYER_NAME :{BLACK}Nom du joueur:
STR_NETWORK_ENTER_NAME_TIP :{BLACK}Ceci est le nom avec lequel les autres joueurs pourront vous identifier
STR_NETWORK_CONNECTION :{BLACK}Connection :
STR_NETWORK_CONNECTION_TIP :{BLACK}Choisissez entre un jeu Internet et un jeu sur r<>seau local
STR_NETWORK_SELECT_CONNECTION :{BLACK}Choisissez le type de connection:
STR_NETWORK_CONNECTION_TYPE_TIP :{BLACK}Permet de choisir entre une partie sur sur internet ou sur un lan
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_START_SERVER :{BLACK}D<>marrer le serveur
STR_NETWORK_START_SERVER_TIP :{BLACK}D<EFBFBD>marre son propre serveur
STR_NETWORK_GAME_NAME :{BLACK}Nom
STR_NETWORK_GAME_NAME_TIP :{BLACK}Nom de la partie
STR_NETWORK_PLAYERS :{BLACK}#/#
STR_NETWORK_PLAYERS_TIP :{BLACK}Joueurs pr<70>sents dans la partie / Nombre maximum de joueurs
STR_NETWORK_MAP_SIZE :{BLACK}Taille
STR_NETWORK_MAP_SIZE_TIP :{BLACK}Taille de la carte
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Langage, version du serveur, etc.
STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Cliquez une partie de la liste pour la s<>lectionner
STR_NETWORK_PLAYERS_VAL :{BLACK}{COMMA8}/{COMMA8}
STR_NETWORK_FIND_SERVER :{BLACK}Trouver un serveur
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Cherche sur le r<>seau un serveur
STR_NETWORK_ADD_SERVER :{BLACK}Ajouter un serveur
STR_NETWORK_ADD_SERVER_TIP :{BLACK}Ajouter <20> la liste un serveur o<> le jeu cherchera toujours des parties en cours.
STR_NETWORK_ENTER_IP :{BLACK}Entrez l'adresse IP du serveur
STR_NETWORK_CLIENTS_ONLINE :{BLACK}{COMMA16}/{COMMA16}
STR_NETWORK_CLIENTS_CAPTION :{BLACK}Clients
STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Clients en ligne / clients max
STR_NETWORK_GAME_INFO :{SILVER}INFO DE LA PARTIE
STR_ORANGE :{ORANGE}{STRING}
STR_NETWORK_CLIENTS :{SILVER}Clients: {WHITE}{COMMA8} / {COMMA8}
STR_NETWORK_LANGUAGE :{SILVER}Langue: {WHITE}{STRING}
STR_NETWORK_TILESET :{SILVER}Terrain: {WHITE}{STRING}
STR_NETWORK_MAP_SIZE :{SILVER}Taille de la carte : {WHITE}{COMMA16}x{COMMA16}
STR_NETWORK_SERVER_VERSION :{SILVER}Version du serveur : {WHITE}{STRING}
STR_NETWORK_SERVER_ADDRESS :{SILVER}Adresse du serveur : {WHITE}{STRING} : {NUMU16}
STR_NETWORK_START_DATE :{SILVER}Date de d<>but : {WHITE}{DATE_SHORT}
STR_NETWORK_CURRENT_DATE :{SILVER}Date courante : {WHITE}{DATE_SHORT}
STR_NETWORK_PASSWORD :{SILVER}Prot<6F>g<EFBFBD>e par mot de passe !
STR_NETWORK_SERVER_OFFLINE :{SILVER}SERVEUR HORS-LIGNE
STR_NETWORK_SERVER_FULL :{SILVER}SERVEUR PLEIN
STR_NETWORK_VERSION_MISMATCH :{SILVER}VERSION NON CORRESPONDANTE
STR_NETWORK_JOIN_GAME :{BLACK}Rejoindre la partie
@@ -1210,20 +1247,30 @@ STR_NETWORK_START_GAME_WINDOW :{WHITE}Commencer une nouvelle partie
STR_NETWORK_NEW_GAME_NAME :{BLACK}Nom de la partie:
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}Le nom de la partie sera affich<63> aux autres joueurs dans le menu de s<>lection de partie multijoueur
STR_NETWORK_PASSWORD :{BLACK}Mot de passe:
STR_NETWORK_SET_PASSWORD :{BLACK}Choisir le mot de passe
STR_NETWORK_PASSWORD_TIP :{BLACK}Prot<6F>ger votre partie avec un mot de passe si vous ne souhaitez pas que d'autres joueurs la rejoignent
STR_NETWORK_SELECT_MAP :{BLACK}Choisissez une carte:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Sur quelle carte voulez-vous jouer?
STR_NETWORK_NUMBER_OF_PLAYERS :{BLACK}Nombre de joueurs:
STR_NETWORK_NUMBER_OF_PLAYERS_TIP :{BLACK}Choisissez le nombre maximum de joueurs. Vous n'<27>tes pas oblig<69> de remplir tous les emplacements.
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_PLAYERS :2 joueurs
STR_NETWORK_3_PLAYERS :3 joueurs
STR_NETWORK_4_PLAYERS :4 joueurs
STR_NETWORK_5_PLAYERS :5 joueurs
STR_NETWORK_6_PLAYERS :6 joueurs
STR_NETWORK_7_PLAYERS :7 joueurs
STR_NETWORK_8_PLAYERS :8 joueurs
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Nombre de clients max. :
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Choisir un nombre maximum de clients. Tous les emplacements n'auront pas besoin d'<27>tre remplis.
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (publier)
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_CLIENTS :2 clients
STR_NETWORK_3_CLIENTS :3 clients
STR_NETWORK_4_CLIENTS :4 clients
STR_NETWORK_5_CLIENTS :5 clients
STR_NETWORK_6_CLIENTS :6 clients
STR_NETWORK_7_CLIENTS :7 clients
STR_NETWORK_8_CLIENTS :8 clients
STR_NETWORK_9_CLIENTS :9 clients
STR_NETWORK_10_CLIENTS :10 clients
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Langue parl<72>e :
STR_NETWORK_LANGUAGE_TIP :{BLACK}Les autres joueurs sauront quelle langue est parl<72>e sur ce serveur.
STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}D<>marrer la partie
STR_NETWORK_START_GAME_TIP :{BLACK}D<>marrer une nouvelle partie r<>seau <20> partir d'une carte al<61>atoire ou d'un sc<73>nario
STR_NETWORK_LOAD_GAME :{BLACK}Charger une partie
@@ -1231,17 +1278,62 @@ STR_NETWORK_LOAD_GAME_TIP :{BLACK}Continuer une partie multijoueur sauv
STR_NETWORK_LOAD_SCENARIO :{BLACK}Charger un sc<73>nario
STR_NETWORK_LOAD_SCENARIO_TIP :{BLACK}D<>marrer une nouvelle partie r<>seau <20> partir d'un sc<73>nario
############ Leave those lines in this order!!
STR_NETWORK_LANG_ANY :Peu importe
STR_NETWORK_LANG_ENGLISH :Anglais
STR_NETWORK_LANG_GERMAN :Allemand
STR_NETWORK_LANG_FRENCH :Fran<61>ais
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Chat d'avant jeu
STR_NETWORK_SEND :{BLACK}Envoyer
STR_NETWORK_SEND_TIP :{BLACK}Envoie un message aux autres joueurs
STR_NETWORK_COMPANY_NAME :{BLACK}Nom de la compagnie:
STR_NETWORK_COMPANY_NAME_TIP :{BLACK}Change le nom de votre compagnie. Appuyer sur Entr<74>e pour valider les changements
STR_NETWORK_SPECTATE_GAME :{BLACK}Observer une partie
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Permet d'observer une partie en tant que spectateur
STR_NETWORK_PREPARE_TO_JOIN :{BLACK}Se pr<70>pare <20> rejoindre : {ORANGE}{STRING}
STR_NETWORK_COMPANY_LIST_TIP :{BLACK}Une liste des compagnies pr<70>sentes dans le jeu. Vous pouvez soit en rejoindre une, soit en cr<63>er une.
STR_NETWORK_NEW_COMPANY :{BLACK}Nouvelle compagnie
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Cr<43>e une nouvelle compagnie
STR_NETWORK_READY :{BLACK}Pr<50>t
STR_NETWORK_SPECTATE_GAME :{BLACK}Observer une partie
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Permet d'observer une partie en tant que spectateur
STR_NETWORK_JOIN_COMPANY :{BLACK}Rejoindre la compagnie
STR_NETWORK_JOIN_COMPANY_TIP :{BLACK}Aider <20> g<>rer cette compagnie
STR_NETWORK_REFRESH :{BLACK}Rafra<72>chir
STR_NETWORK_REFRESH_TIP :{BLACK}Rafra<72>chir les infos <20> propos du serveur
STR_NETWORK_COMPANY_INFO :{SILVER}INFO DE LA COMPAGNIE
STR_NETWORK_COMPANY_NAME :{SILVER}Nom de la compagnie : {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguration : {WHITE}{NUMU16}
STR_NETWORK_VALUE :{SILVER}Valeur de la compagnie : {WHITE}{CURRENCY64}
STR_NETWORK_CURRENT_BALANCE :{SILVER}Argent courant : {WHITE}{CURRENCY64}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Revenus de l'ann<6E>e derni<6E>re : {WHITE}{CURRENCY64}
STR_NETWORK_PERFORMANCE :{SILVER}Performance : {WHITE}{NUMU16}
STR_NETWORK_VEHICLES :{SILVER}V<>hicules : {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_STATIONS :{SILVER}Stations : {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_PLAYERS :{SILVER}Joueurs : {WHITE}{STRING}
STR_NETWORK_CONNECTING :{WHITE}Connection en cours...
############ Leave those lines in this order!!
STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Connection en cours..
STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Autorisation en cours..
STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Attente..
STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) T<>l<EFBFBD>chargement de la carte..
STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Traitement des donn<6E>es..
STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Enregistrement..
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Rapatriement des infos sur le jeu..
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Rapatriement des infos sur la compagnie..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{INT32} client(s) avant nous
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{INT32} / {INT32} ko d<>j<EFBFBD> t<>l<EFBFBD>charg<72>s
STR_NETWORK_DISCONNECT :{BLACK}D<>connecter
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Entrez votre message <20> envoyer
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Le serveur est prot<6F>g<EFBFBD>. Entrez le mot de passe
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}La compagnie est prot<6F>g<EFBFBD>e. Entrez le mot de passe
STR_NETWORK_CLIENT_LIST :{WHITE}Liste des clients
STR_NETWORK_ERR_NOTAVAILABLE :{WHITE} Aucun p<>riph<70>rique r<>seau trouv<75> ou programme compil<69> sans ENABLE_NETWORK
STR_NETWORK_ERR_NOSERVER :{WHITE} Aucune partie r<>seau n'a <20>t<EFBFBD> trouv<75>e
@@ -1249,7 +1341,57 @@ STR_NETWORK_ERR_NOCONNECTION :{WHITE} Le serveur n'a pas r
STR_NETWORK_ERR_DESYNC :{WHITE} La synchronisation de la partie r<>seau a <20>chou<6F>e.
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} La connection de la partie r<>seau a <20>t<EFBFBD> perdue.
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} La sauvegarde serveur n'a pas pu <20>tre charg<72>e.
STR_NETWORK_ERR_SERVER_START :{WHITE} Le serveur n'a pas pu <20>tre d<>marr<72>.
STR_NETWORK_ERR_CLIENT_START :{WHITE} Connection <20>chou<6F>e.
STR_NETWORK_ERR_TIMEOUT :{WHITE} La connection #{NUMU16} a d<>pass<73> le temps d'attente.
STR_NETWORK_ERR_SERVER_ERROR :{WHITE} Il y a eu une erreur de protocole et la connection est donc ferm<72>e.
STR_NETWORK_ERR_WRONG_REVISION :{WHITE} La r<>vision de ce client ne correspond pas <20> celle du serveur.
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Mot de passe incorrect.
STR_NETWORK_ERR_SERVER_FULL :{WHITE} Le serveur est plein
STR_NETWORK_ERR_SERVER_BANNED :{WHITE} Vous <20>tes bannis de ce serveur
STR_NETWORK_ERR_KICKED :{WHITE} Vous avez <20>t<EFBFBD> jet<65> du serveur
STR_NETWORK_ERR_CHEATER :{WHITE} Tricher n'est pas autoris<69> sur ce serveur
STR_NETWORK_ERR_LEFT :a quitt<74> la partie
############ Leave those lines in this order!!
STR_NETWORK_ERR_CLIENT_GENERAL :erreur g<>n<EFBFBD>rale
STR_NETWORK_ERR_CLIENT_DESYNC :erreur de d<>synchronisation
STR_NETWORK_ERR_CLIENT_SAVEGAME :chargement de la carte impossible
STR_NETWORK_ERR_CLIENT_CONNECTION_LOST :connection perdue
STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR :erreur de protocole
STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :non autoris<69>
STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :paquet <20>trange re<72>u
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :r<>vision incorrecte
STR_NETWORK_ERR_CLIENT_NAME_IN_USE :nom d<>j<EFBFBD> utilis<69>
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :mot de passe de partie incorrect
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :mauvais player-id dans DoCommand
STR_NETWORK_ERR_CLIENT_KICKED :jet<65> par le serveur
STR_NETWORK_ERR_CLIENT_CHEATER :a tent<6E> de tricher
############ End of leave-in-this-order
STR_NETWORK_CLIENT_JOINED :a rejoint la partie
STR_NETWORK_GIVE_MONEY :vous a donn<6E> un peu d'argent ({CURRENCY})
STR_NETWORK_GAVE_MONEY_AWAY :vous avez donn<6E> <20> {STRING} de l'argent ({CURRENCY})
STR_NETWORK_CHAT_COMPANY :[Equipe] {STRING}:
STR_NETWORK_CHAT_TO_COMPANY :[Equipe] A {STRING}:
STR_NETWORK_CHAT_CLIENT :[Priv<69>] {STRING}:
STR_NETWORK_CHAT_TO_CLIENT :[Priv<69>] A {STRING}:
STR_NETWORK_CHAT_ALL :[Tous] {STRING}:
STR_NETWORK_NAME_CHANGE :a chang<6E> son nom pour
STR_NETWORK_SERVER_SHUTDOWN :{WHITE} Le serveur a ferm<72> la session
STR_NETWORK_SERVER_REBOOT :{WHITE} Le serveur red<65>marre...{}Veuillez patienter...
STR_NETWORK_SERVER :Serveur
STR_NETWORK_CLIENT :Client
STR_NETWORK_CLIENTLIST_NONE :(aucun)
STR_NETWORK_CLIENTLIST_KICK :Jeter
STR_NETWORK_CLIENTLIST_GIVE_MONEY :Donner de l'argent
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parler <20> tous
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parler <20> la compagnie
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Message priv<69>
STR_NETWORK_SEND :{BLACK}Envoyer
############ end network gui strings
@@ -1325,7 +1467,7 @@ STR_1802_ROAD_CONSTRUCTION :{WHITE}Construction routi
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Choisir Pont Routier
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Impossible de construire la route ici...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Impossible de retirer la route ici...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Orientation du d<>p<EFBFBD>t routier
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Orientation du d<>p<EFBFBD>t
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Impossible de construire un d<>p<EFBFBD>t routier ici...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Impossible de construire un arr<72>t d'autobus...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Impossible de construire une station de camions...
@@ -1347,6 +1489,7 @@ STR_1818_ROAD_RAIL_LEVEL_CROSSING :Route/rail Croisement
##id 0x2000
STR_2000_TOWNS :{WHITE}Villes
STR_TOWN_LABEL_POP :{WHITE}{STRING} ({COMMA32})
STR_2001 :{WHITE}{STRING}
STR_2002 :{TINYFONT}{BLACK}{STRING}
STR_2003 :{TINYFONT}{WHITE}{STRING}
@@ -1538,7 +1681,7 @@ STR_3062_BUS_STATION :Arr
STR_3063_SHIP_DOCK :Port
STR_3064_HIGHLIGHT_COVERAGE_AREA :{BLACK}Afficher la zone couverte
STR_3065_DON_T_HIGHLIGHT_COVERAGE :{BLACK}Ne pas afficher la zone couverte
STR_3066_COVERAGE_AREA_HIGHLIGHT :{BLACK}Affichage de la zone couverte
STR_3066_COVERAGE_AREA_HIGHLIGHT :{BLACK}Afficher la zone couverte
STR_3067_MONORAIL_STATION_SELECT :{WHITE}Choix de la gare monorail
STR_3068_DOCK :{WHITE}Port
STR_3069_BUOY :Bou<6F>e
@@ -1937,6 +2080,9 @@ STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstruit le quartier g
STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Impossible de construire le si<73>ge...
STR_7072_VIEW_HQ :{BLACK}Voir le si<73>ge
STR_RELOCATE_HQ :{BLACK}D<>m<EFBFBD>nager le QG
STR_COMPANY_PASSWORD :{BLACK}Mot de passe
STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Permet de prot<6F>ger par mot de passe votre compagnie pour emp<6D>cher des utilisateurs non-autoris<69>s de rejoindre. Utilisez '*' pour vider le mot de passe.
STR_SET_COMPANY_PASSWORD :Choisir le mot de passe de la compagnie
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}R<>cession mondiale!{}{}Les experts financiers craignent le pire!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Fin de la r<>cession!{}{}La reprise redonne confiance aux industries!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Bascule entre une grande/petite fen<65>tre
@@ -1950,6 +2096,7 @@ STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Impossible de vendre des parts...
STR_707D_OWNED_BY :{WHITE}({COMMA16}% d<>tenus par {STRING})
STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA16}% d<>tenus par {STRING}{} {COMMA16}% d<>tenus par {STRING})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{STRING} a <20>t<EFBFBD> rachet<65>e par {STRING}!
STR_7080_PROTECTED :{WHITE}Cette compagnie ne vend pas d'actions pour le moment...
##id 0x8000
STR_8000_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Vapeur)
@@ -2248,7 +2395,7 @@ STR_8813_FROM :{LTBLUE}{CARGO} de {STATION}
STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}Le train {COMMA16} est en attente au d<>p<EFBFBD>t
STR_8815_NEW_VEHICLES :{BLACK}Nouveaux v<>hicules
STR_8816 :{BLACK}-
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Prix: {GOLD}{CURRENCY}{BLACK} Poids: {GOLD}{COMMA16}t{}{BLACK}Vitesse: {GOLD}{VELOCITY}{BLACK} Puissance: {GOLD}{COMMA16}ch{}{BLACK}Co<43>t d'entretien: {GOLD}{CURRENCY}/an{}{BLACK}Capacit<69>: {GOLD}{STRING}{}{BLACK}Con<6F>u en: {GOLD}{NUMU16}{BLACK} Dur<75>e de vie: {GOLD}{COMMA16} ans{}{BLACK}Fiabilit<69> max.: {GOLD}{COMMA8}%
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Prix: {GOLD}{CURRENCY}{BLACK} Poids: {GOLD}{COMMA16}t{}{BLACK}Vitesse: {GOLD}{VELOCITY}{BLACK} Puissance: {GOLD}{COMMA32}ch{}{BLACK}Co<43>t d'entretien: {GOLD}{CURRENCY}/an{}{BLACK}Capacit<69>: {GOLD}{STRING}{}{BLACK}Con<6F>u en: {GOLD}{NUMU16}{BLACK} Dur<75>e de vie: {GOLD}{COMMA16} ans{}{BLACK}Fiabilit<69> max.: {GOLD}{COMMA8}%
STR_8818_INFORMATION :{BLACK}Information
STR_8819_TRAIN_TOO_LONG :{WHITE}Train trop long
STR_881A_TRAINS_CAN_ONLY_BE_ALTERED :{WHITE}Les trains peuvent <20>tre manipul<75>s qu'une fois stopp<70>s au d<>p<EFBFBD>t
@@ -2286,8 +2433,8 @@ STR_8838_N_A :N/D{SKIP}
STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Impossible de vendre le v<>hicule ferroviaire...
STR_883A_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Impossible de trouver la route jusqu'au d<>p<EFBFBD>t
STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Impossible de d<>marrer/stopper le train...
STR_883C_SERVICING_INTERVAL_DAYS :{BLACK}Intervalle de maintenance: {LTBLUE}{COMMA16}jours{BLACK} Derni<EFBFBD>re maintenance: {LTBLUE}{DATE_LONG}
STR_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalle de maintenance: {LTBLUE}{COMMA16}%{BLACK} Derni<EFBFBD>re maintenance: {LTBLUE}{DATE_LONG}
STR_883C_SERVICING_INTERVAL_DAYS :{BLACK}Intervalle de maintenance: {LTBLUE}{COMMA16}jours{BLACK} , derni<EFBFBD>re le : {LTBLUE}{DATE_LONG}
STR_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalle de maintenance: {LTBLUE}{COMMA16}%{BLACK} , derni<EFBFBD>re le : {LTBLUE}{DATE_LONG}
STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Trains - Cliquez sur un train pour obtenir des informations
STR_883E_BUILD_NEW_TRAINS_REQUIRES :{BLACK}Contruire de nouveaux trains (n<>cessite un d<>p<EFBFBD>t ferroviaire)
STR_883F_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Trains - Cliquez sur un train pour obtenir des informations, glissez le wagon pour l'ajouter/le supprimer du train
@@ -2475,7 +2622,7 @@ STR_GO_TO_SHIP_DEPOT :Aller au d
SERVICE_AT_SHIP_DEPOT :Maintenance au d<>p<EFBFBD>t de {TOWN}
##id 0xA000
STR_A000_AIRPORT_CONSTRUCT :{WHITE}Construction d'A<EFBFBD>roport
STR_A000_AIRPORTS :{WHITE}A<>roports
STR_A001_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Impossible de construire un a<>roport ici...
STR_A002_AIRCRAFT_HANGAR :{WHITE}Hangar <20> {STATION}
STR_A003_NEW_AIRCRAFT :{BLACK}Nouvel a<>ronef
@@ -2529,6 +2676,7 @@ STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Impossible de nommer l'a
STR_A032_NAME_AIRCRAFT :{BLACK}Nommer l'a<>ronef
STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Les habitants c<>l<EFBFBD>brent . . .{}Arriv<69>e du premier a<>ronef <20> {STATION}!
STR_A034_PLANE_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}<7D>crasement d'un a<>ronef!{}{COMMA16} meurent brul<75>s vifs <20> {STATION}
STR_PLANE_CRASH_OUT_OF_FUEL :{BLACK}{BIGFONT}Crash d'avion !{}L'a<>ronef n'avait plus de carburant, {COMMA16} meurent de mani<6E>re horrible !
STR_A035_DESTINATIONS :{TINYFONT}{BLACK}Destinations:
STR_A036 :{TINYFONT}{BLACK}{STATION}
STR_A037_RENAME :{BLACK}Renommer
@@ -2563,8 +2711,8 @@ STR_MULTIPLAYER_PAUSED :{WHITE}Le jeu est en pause.{}La commande ne peut pa
STR_PERFORMANCE_DETAIL :{WHITE}D<>tail de l'<27>valuation de la performance
STR_PERFORMANCE_DETAIL_KEY :{BLACK}D<>tail
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}{TINYFONT}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}{TINYFONT}({INT32}/{INT32})
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA32}/{COMMA32})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{INT32}%
SET_PERFORMANCE_DETAIL_INT :{BLACK}{INT32}
############ Those following lines need to be in this order!!
@@ -2590,3 +2738,61 @@ STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Quantit
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Avez-vous un emprunt <20>lev<65> ?
STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Total des points par rapport aux points possibles.
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Param<61>tres Newgrf
STR_NEWGRF_APPLY_CHANGES :{BLACK}Appliquer les changements
STR_NEWGRF_SET_PARAMETERS :{BLACK}Changer les param<61>tres
STR_NEWGRF_TIP :{BLACK}Une liste de tous les sets Newgrf que vous avez install<6C>. Cliquez un set pour changer les param<61>tres.
STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}Il n'y a actuellement aucun fichier Newgrf install<6C> ! Veuillez vous r<>f<EFBFBD>rer au manuel pour des instructions sur l'installation de nouveaux graphiques.
STR_NEWGRF_FILENAME :{BLACK}Nom de fichier:
STR_NEWGRF_GRF_ID :{BLACK}GRF ID:
STR_CURRENCY_WINDOW :{WHITE}Devise personnalis<69>e
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Taux de change : {ORANGE}{CURRENCY} = {POUNDSIGN} {COMMA16}
STR_CURRENCY_SEPARATOR :{LTBLUE}Separateur :
STR_CURRENCY_PREFIX :{LTBLUE}Pr<50>fixe :
STR_CURRENCY_SUFFIX :{LTBLUE}Suffixe :
STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Passer <20> l'Euro : {ORANGE}{INT32}
STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Passer <20> l'Euro : {ORANGE}jamais
STR_CURRENCY_PREVIEW :{LTBLUE}Pr<50>visualisation : {ORANGE}{CURRENCY}
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Changer les param<61>tres de devises personnalis<69>es
STR_TRAIN :{BLACK}{TRAIN}
STR_LORRY :{BLACK}{LORRY}
STR_PLANE :{BLACK}{PLANE}
STR_SHIP :{BLACK}{SHIP}
STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA16} Trains
STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA16} V<>hicules routiers
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA16} A<>ronefs
STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA16} Navires
STR_SCHEDULED_TRAINS_TIP :{BLACK}Montre tous les trains qui ont cette station dans leur itin<69>raire
STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Montre tous les v<>hicules routiers qui ont cette station dans leur itin<69>raire
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Montre tous les a<>ronefs qui ont cette station dans leur itin<69>raire
STR_SCHEDULED_SHIPS_TIP :{BLACK}Montre tous les navires qui ont cette station dans leur itin<69>raire
STR_REPLACE_VEHICLES :{BLACK}Remplacement v<>hicules
STR_REPLACE_VEHICLES_WHITE :{WHITE}Remplacer des V<>hicules
STR_REPLACE_VEHICLES_START :{BLACK}Commencer le remplacement
STR_REPLACE_VEHICLES_STOP :{BLACK}Stopper le remplacement
STR_NOT_REPLACING :{BLACK}Pas en cours de remplacement
STR_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Aucun v<>hicule selectionn<6E>
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Choisissez le type de locomotive <20> remplacer
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Choisissez le nouveau type de locomotive que vous voudriez utiliser <20> la place du type de locomotive s<>lectionn<6E> <20> gauche
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Appuyez sur ce bouton si vous ne voulez pas remplacer la locomotive que vous avez choisi <20> gauche
STR_REPLACE_HELP_START_BUTTON :{BLACK}Appuyez sur ce bouton si vous voulez remplacer la locomotive de gauche par celle s<>lectionn<6E>e <20> droite
STR_REPLACE_HELP_RAILTYPE :{BLACK}Choisissez un type de rail pour le remplacement de locomotives
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Ceci affiche par quelle locomotive celle qui est s<>lectionn<6E>e <20> gauche sera remplac<61>e
STR_REPLACE_HELP :{BLACK}Cette caract<63>ristique permet de choisir un type de locomotive et de le remplacer par un autre. Ceci sera fait automatiquement quand le v<>hicule rentre dans un d<>p<EFBFBD>t
STR_SHORT_DATE :{WHITE}{DATE_TINY}
############ Lists rail types
STR_RAIL_VEHICLES :V<>hicules sur rail
STR_MONORAIL_VEHICLES :V<>hicules sur monorail
STR_MAGLEV_VEHICLES :V<>hicules sur Maglev
############ End of list of rail types
STR_TINY_BLACK :{BLACK}{TINYFONT}{COMMA16}

File diff suppressed because it is too large Load Diff

View File

@@ -186,13 +186,8 @@ STR_00B4_CAN_T_DO_THIS :{WHITE}Kann dies nicht tun....
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Kann das Gebiet nicht r<>umen....
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, Alle Rechte vorbehalten
STR_00B7_VERSION :{BLACK}OpenTTD Version {REV}
STR_00B8_ORIGINAL_DESIGN_PROGRAM :{BLACK}Original Design: Chris Sawyer
STR_00B9_ORIGINAL_GRAPHICS :{BLACK}Grafiken: Simon Foster
STR_SPECIAL_THANKS :{BLACK}Spezieller Dank geb<65>hrt:
STR_SPECIAL_THANKS_SIGNALS :{BLACK}<7D> Vorsignale und Semaphoren {COPYRIGHT} 2003 Michael Blunck
STR_SPECIAL_THANKS_CANALS :{BLACK}<7D> Grundlagen f<>r Schienen auf Abh<62>ngen {COPYRIGHT} Marcin Grzegorczyk
STR_SPECIAL_THANKS_FOUNDATIONS :{BLACK}<7D> Kanal/Schleusen Grafiken {COPYRIGHT} 2003-2004 George
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2004 OpenTTD-Team
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2005 OpenTTD-Team
STR_TRANSLATED_BY :{BLACK} <20>bersetzer -
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
@@ -310,6 +305,8 @@ STR_0134_UNIX :Unix
STR_0135_OSX :OSX
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_0139_IMPERIAL_MILES :Imperial (Meilen)
STR_013A_METRIC_KILOMETERS :Metrisch (Kilometer)
@@ -352,7 +349,8 @@ STR_015E_QUIT_GAME :Spiel beenden
STR_015F_QUIT :Beenden
STR_0160_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Bist du sicher, dass du das Spiel beenden willst?
STR_0161_QUIT_GAME :{WHITE}Spiel beenden
STR_SORT_TIP :{BLACK}Sortierreihenfolge ausw<73>hlen
STR_SORT_ORDER_TIP :{BLACK}Sortierreihenfolge ausw<73>hlen absteigend/aufsteigend
STR_SORT_CRITERIA_TIP :{BLACK}Sortierkriterium ausw<73>hlen
SRT_SORT_BY :{BLACK}Sortieren nach
STR_SORT_BY_POPULATION :{BLACK}Bev<65>lkerung
@@ -417,6 +415,8 @@ STR_0189 :{BLACK}{SMALLDOWNARROW}
STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}Das Wartungsintervall kann nicht ge<67>ndert werden...
STR_018B_CLOSE_WINDOW :{BLACK}Fenster schlie<69>en
STR_018C_WINDOW_TITLE_DRAG_THIS :{BLACK}Titelleiste verschieben um das Fenster zu bewegen
STR_STICKY_BUTTON :{BLACK}Diese Fenster markieren, damit es nicht durch die
STR_RESIZE_BUTTON :{BLACK}Klicken und Ziehen zum Gr<47><72>e <20>ndern
STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Geb<65>ude usw. auf einem Planquadrat abrei<65>en
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Land absenken
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}Land anheben
@@ -495,6 +495,8 @@ STR_01CD_SELECT_TUTORIAL_DEMONSTRATION :{WHITE}Einf
STR_01CE_CARGO_ACCEPTED :{BLACK}Akzeptierte Fracht: {LTBLUE}{STRING}
STR_01CF_CARGO_ACCEPTED :{BLACK}Akzeptierte Fracht: {LTBLUE}{STRING}, {STRING}
STR_01D0_CARGO_ACCEPTED :{BLACK}Akzeptierte Fracht: {LTBLUE}{STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_4 :{BLACK}Akzeptierte Fracht: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_5 :{BLACK}Akzeptierte Fracht: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}, {STRING}
############ range for cargo acecpted ends
STR_01D1_8 :({COMMA8}/8 {STRING})
@@ -537,7 +539,7 @@ STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Programm 'Modern' w
STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Programm 'Individuell 1' (benutzerdefiniert) w<>hlen
STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Programm 'Individuell 2' (benutzerdefiniert) w<>hlen
STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}L<>sche laufendes Programm (nur f<>r Individuell 2 und Individuell 2)
STR_01F9_SAVE_MUSIC_SETTINGS_TO :{BLACK}Sichere Musikeinstellungen
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Musikeinstellungen speichern
STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Klicke auf den Musiktitel, um ihn in das laufende Programm zu <20>bernehmen (nur f<>r Individuell 1 und Individuell 2)
STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Schalte Programmauswahl an/aus
STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Zeige Musiktitelauswahl
@@ -562,7 +564,8 @@ STR_020D_CHANGES_OF_CARGO_ACCEPTANCE :{YELLOW}
STR_020E_SUBSIDIES :{YELLOW}Subventionen
STR_020F_GENERAL_INFORMATION :{YELLOW}Allgemeine Nachrichten
STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO :{WHITE}...zu weit vom vorherigen Bestimmungsort entfernt
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Die besten Firmen, die das Jahr 2050 erreichten{}({STRING} Level)
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Beste Unternehmen, die {NUMU16} erreichten{}(Schwierigkeitsgrad {STRING})
STR_TOP_COMPANIES_NETWORK_GAME :{BIGFONT}{BLACK}Firmentabelle in {NUMU16}
STR_0212 :{BIGFONT}{COMMA16}.
STR_0213_BUSINESSMAN :Gesch<63>ftsmann
STR_0214_ENTREPRENEUR :Unternehmer
@@ -571,9 +574,10 @@ STR_0216_CAPITALIST :Kapitalist
STR_0217_MAGNATE :Magnat
STR_0218_MOGUL :Mogul
STR_0219_TYCOON_OF_THE_CENTURY :Tycoon des Jahrhunderts
STR_021A :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} erreicht '{STRING}'-Status!
STR_021C_OF_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} zu {STRING} erreichender '{STRING}' Status!
STR_HIGHSCORE_NAME :{BIGFONT}{STRING}, {STRING}
STR_HIGHSCORE_STATS :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BLACK}{BIGFONT}{STRING} erreicht '{STRING}' Status!
STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{STRING} von {STRING} erreicht '{STRING}' Status!
STR_021D :{BLACK}
STR_021E :{WHITE}
STR_021F :{BLUE}{COMMA16}
@@ -722,7 +726,7 @@ STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}Fahrzeugnamen
STR_02BD :{BLACK}{STRING}
STR_02BE_DEFAULT :Standard
STR_02BF_CUSTOM :Eigene
STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK :{BLACK}Eigene Namen abspeichern
STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Angepasste Namen speichern
STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}Auswahl der Fahrzeugnamen
STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Eigene Namen abspeichern
@@ -733,6 +737,8 @@ STR_02C5_DIFFICULTY_SETTINGS :Schwierigkeitsgrad
STR_02C6_DIFFICULTY_SETTINGS :Schwierigkeitsgrad
STR_02C7_CONFIG_PATCHES :Einstellungen der Patches
STR_02C8_CONFIG_PATCHES :Einstellungen der Patches
STR_NEWGRF_SETTINGS :Newgrf-Einstellungen
STR_NEWGRF_SETTINGS2 :Newgrf-Einstellungen
STR_GAMEOPTMENU_0A :
STR_GAMEOPTMENU_0B :
STR_02C9_TOWN_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}St<53>dtenamen anzeigen
@@ -741,8 +747,8 @@ STR_02CB_STATION_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Stationsnamen anzeigen
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Stationsnamen anzeigen
STR_02CD_SIGNS_DISPLAYED :{CHECKMARK}{SETX 12}Schilder anzeigen
STR_02CE_SIGNS_DISPLAYED :{SETX 12}Schilder anzeigen
STR_CHECKPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Wegpunkte anzeigen
STR_CHECKPOINTS_DISPLAYED2 :{SETX 12}Wegpunkte anzeigen
STR_WAYPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Wegpunkte anzeigen
STR_WAYPOINTS_DISPLAYED2 :{SETX 12}Wegpunkte anzeigen
STR_02CF_FULL_ANIMATION :{CHECKMARK}{SETX 12}Vollst<73>ndige Animation
STR_02D0_FULL_ANIMATION :{SETX 12}Vollst<73>ndige Animation
STR_02D1_FULL_DETAIL :{CHECKMARK}{SETX 12}Vollst<73>ndige Detailansicht
@@ -765,13 +771,14 @@ STR_02DC_DISPLAY_SUBSIDIES :{BLACK}Subventionen anzeigen
STR_02DD_SUBSIDIES :Subventionen
STR_02DE_MAP_OF_WORLD :Weltkarte
STR_EXTRA_VIEW_PORT :Zusatzansicht
STR_02DF_TOWN_DIRECTORY :St<53>dteverzeichnis
STR_TOWN_POPULATION :{BLACK}Weltbev<65>lkerung: {COMMA32}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Ansicht {COMMA16}
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}In Zusatzansicht
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopieren der Position im Hauptfenster in diese Zusatzansicht
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Aus Zusatzansicht
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopieren der Position dieser Zusatzansicht ins Hauptfenster
STR_02DF_TOWN_DIRECTORY :St<53>dteverzeichnis
STR_02E0_CURRENCY_UNITS :{BLACK}W<>hrung
STR_02E1 :{BLACK}{SKIP}{STRING}
STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}W<>hrung ausw<73>hlen
@@ -795,16 +802,16 @@ STR_02F8_EVERY_3_MONTHS :Alle 3 Monate
STR_02F9_EVERY_6_MONTHS :Alle 6 Monate
STR_02FA_EVERY_12_MONTHS :Alle 12 Monate
STR_02FB_START_A_NEW_GAME :{BLACK}Ein neues Spiel beginnen
STR_02FC_LOAD_A_SAVED_GAME_FROM :{BLACK}Einen Spielstand laden
STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Ein gespeichertes Spiel laden
STR_02FD_VIEW_DEMONSTRATIONS_TUTORIALS :{BLACK}<7D>bung / Einf<6E>hrung
STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Eine eigene Spielwelt / Szenario kreieren
STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Einspielermodus w<>hlen
STR_0300_SELECT_TWO_PLAYER_GAME :{BLACK}Mehrspielermodus w<>hlen
STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}Mehrspielerspiel mit 2-8 Spielern w<>hlen
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Spieleinstellungen anzeigen
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Schwierigkeitsgrad anzeigen
STR_0303_START_A_NEW_GAME_USING :{BLACK}Starte ein neues Spiel in einem eigenen Szenario
STR_0304_QUIT :{BLACK}Beenden
STR_0305_LEAVE_OPENTTD :{BLACK}'OpenTTD' verlassen und beenden
STR_0305_QUIT_OPENTTD :{BLACK}'OpenTTD' beenden
STR_0306_VIEW_DEMONSTRATION_TUTORIAL :{BLACK}<7D>bung / Einf<6E>hrung anzeigen
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kann nur in St<53>dten gebaut werden
@@ -820,7 +827,7 @@ STR_0313_FUND_NEW_INDUSTRY :Neue Industrie finanzieren
############ range ends here
STR_0314_FUND_NEW_INDUSTRY :{WHITE}Neue Industrie finanzieren
STR_0315 :{STRING}
STR_JUST_STRING :{STRING}
STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...kann nur in St<53>dten errichtet werden
STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...kann nur im Regenwaldgebiet errichtet werden
STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...kann nur im W<>stengebiet errichtet werden
@@ -842,51 +849,58 @@ STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ENGLISH :Englisch
STR_TOWNNAME_ORIGINAL_ENGLISH :Englisch
STR_TOWNNAME_FRENCH :Franz<6E>sisch
STR_TOWNNAME_GERMAN :Deutsch
STR_TOWNNAME_AMERICAN :Amerikanisch
STR_TOWNNAME_ADDITIONAL_ENGLISH :English (Zus<75>tzlich)
STR_TOWNNAME_LATIN_AMERICAN :Lateinamerikanisch
STR_TOWNNAME_SILLY :Verr<72>ckt
STR_TOWNNAME_SWEDISH :Schwedisch
STR_TOWNNAME_DUTCH :Niederl<72>ndisch
STR_TOWNNAME_FINNISH :Finnisch
STR_TOWNNAME_POLISH :Polnisch
STR_TOWNNAME_CZECH :Tschechisch
STR_TOWNNAME_SLOVAKISH :Slovakisch
STR_TOWNNAME_NORWEGIAN :Norwegisch
STR_TOWNNAME_HUNGARIAN :Ungarisch
STR_TOWNNAME_AUSTRIAN :<3A>sterreichisch
STR_TOWNNAME_ROMANIAN :Rum<75>nisch
STR_TOWNNAME_CZECH :Tschechisch
STR_TOWNNAME_SWISS :Schweizerisch
############ end of townname region
STR_CURR_POUNDS :Pfund ({POUNDSIGN})
STR_CURR_DOLLARS :Dollar ($)
STR_CURR_FF :Frz. Franc (FF)
STR_CURR_DM :Deutsche Mark (DM)
STR_CURR_GBP :Pfund ({POUNDSIGN})
STR_CURR_USD :Dollar ($)
STR_CURR_EUR :Euro (<28>)
STR_CURR_YEN :Yen ({YENSIGN})
STR_CURR_PT :Peseten (Pt)
STR_CURR_FT :Ungarische Forint (Ft)
STR_CURR_ZL :Polnische Zloty (zl)
STR_CURR_ATS :<3A>sterreich. Schilling (ATS)
STR_CURR_BEF :Belgische Franc (BEF)
STR_CURR_DKK :D<>nische Kronen (DKK)
STR_CURR_FIM :Finnmark (FIM)
STR_CURR_GRD :Griech. Drachmen (GRD)
STR_CURR_CHF :Schweizer Franken (CHF)
STR_CURR_NLG :Niederl<72>nd. Gulden (NLG)
STR_CURR_ITL :Italienische Lira (ITL)
STR_CURR_SEK :Swedische Kronen (SEK)
STR_CURR_RUR :Russische Rubel (rur)
STR_CURR_CZK :Tschechische Koruna (CZK)
STR_CURR_DEM :Deutsche Mark (DEM)
STR_CURR_DKK :D<>nische Kronen (DKK)
STR_CURR_ESP :Peseta (ESP)
STR_CURR_FIM :Finnmark (FIM)
STR_CURR_FRF :Franc (FRF)
STR_CURR_GRD :Griech. Drachmen (GRD)
STR_CURR_HUF :Ungarische Forint (HUF)
STR_CURR_ISK :Isl<73>ndische Krona (ISK)
STR_CURR_ITL :Italienische Lira (ITL)
STR_CURR_NLG :Niederl<72>nd. Gulden (NLG)
STR_CURR_NOK :Norwegische Kronen (NOK)
STR_CURR_PLN :Polnische Zloty (PLN)
STR_CURR_ROL :Rum<75>nische Lei (Lei)
STR_CURR_EUR :Euro (<28>)
STR_CURR_RUR :Russische Rubel (rur)
STR_CURR_SEK :Swedische Kronen (SEK)
STR_CURR_CUSTOM :Eigene...
STR_OPTIONS_LANG :{BLACK}Sprache
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}Sprache f<>r die Oberfl<66>che aussuchen
STR_OPTIONS_FULLSCREEN :{BLACK}Vollbild
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Diese Checkbox aktivieren, um OpenTTD im Vollbildmodus zu spielen
STR_OPTIONS_RES :{BLACK}Bildschirmgr<67><72>e
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_RES_TIP :{BLACK}Bildschirmgr<67><72>e ausw<73>hlen
@@ -966,11 +980,13 @@ STR_CONFIG_PATCHES_OFF :Aus
STR_CONFIG_PATCHES_ON :An
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Zeige Fahrzeuggeschwindigkeit in der Statusleiste: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Erlaube das Bauen an H<>ngen und K<>sten: {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Aktiviere realistische Einzugsgebiete: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Erlaube die Entfernung von Industrien, weiteren Stra<72>en usw.: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Erlaube das Bauen von sehr langen Z<>gen: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Realistische Zugbeschleunigung aktivieren: {ORANGE}{STRING}
STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Bahnh<6E>fe vereinigen, die nebeneinander gebaut werden: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Verlasse die Station, wenn eine Fracht vollgeladen ist: {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Verbessertes Beladeverfahren nutzen: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflation: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Liefere Fracht nur, wenn die Station diese annimmt: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Erlaube das Bauen von sehr langen Br<42>cken: {ORANGE}{STRING}
@@ -1003,6 +1019,7 @@ STR_CONFIG_PATCHES_AUTORENEW_VEHICLE :{LTBLUE}Fahrzeug erneuern, wenn es vera
STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Erneuere Fahrzeug {ORANGE}{STRING}{LTBLUE} Monate vor/nach Maximalalter
STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Minimaler Kontostand f<>r automatisches Erneuern: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Dauer der Fehlermeldungen: {ORANGE}{STRING}
STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Zeige die Einwohnerzahl der Stadt im Label: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Unsichtbare B<>ume (bei transparenten Geb<65>uden): {ORANGE}{STRING}
STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}H<>he der Schneegrenze: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Maximale Stationsgr<67><72>e: {ORANGE}{STRING} {RED}Achtung: Gro<72>e Werte verlangsamen das Spiel
@@ -1028,15 +1045,20 @@ STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Vorgegebener Wartungsintervall f
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED :{LTBLUE}Vorgegebener Wartungsintervall f<>r Flugzeuge: {ORANGE}abgeschaltet
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Vorgegebener Wartungsintervall f<>r Schiffe: {ORANGE}{STRING} Tage
STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Vorgegebener Wartungsintervall f<>r Schiffe: {ORANGE}abgeschaltet
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Wartung deaktivieren, wenn Pannen abgeschaltet: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_DATE :{LTBLUE}Farbige Nachrichten erscheinen ab: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STARTING_DATE :{LTBLUE}Startdatum: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENDING_DATE :{LTBLUE}Spiel beenden: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Feinere Wirtschaft aktivieren (mehrere, kleinere Ver<65>nderungen)
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Erlaube anteile an anderen Firmen zu kaufen
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Errichte Signale alle {ORANGE}{STRING} Felder beim Ziehen mit der Maus
STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Position der Haupttoolbar: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Links
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :Mitte
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :Rechts
STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Fenster schnappen aneinander, wenn n<>her als: {ORANGE}{STRING} px
STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Fenster schnappen aneinander, wenn n<>her als: {ORANGE}ausgeschaltet
STR_CONFIG_PATCHES_GUI :{BLACK}Oberfl<66>che
STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Konstruktion
@@ -1069,24 +1091,28 @@ STR_CHEAT_NO_JETCRASH :{LTBLUE}Flugzeuge st
STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Wechsle Klima: {ORANGE} {STRING}
STR_CHEAT_CHANGE_DATE :{LTBLUE}<7D>ndere Datum: {ORANGE} {DATE_SHORT}
STR_HEADING_FOR_CHECKPOINT :{LTBLUE}Fahre zu {CHECKPOINT}
STR_HEADING_FOR_CHECKPOINT_VEL :{LTBLUE}Fahre zu {CHECKPOINT}, {VELOCITY}
STR_HEADING_FOR_WAYPOINT :{LTBLUE}Fahre zu {WAYPOINT}
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Fahre zu {WAYPOINT}, {VELOCITY}
STR_GO_TO_CHECKPOINT :Fahre <20>ber {CHECKPOINT}
STR_GO_TO_WAYPOINT :Fahre <20>ber {WAYPOINT}
STR_GO_NON_STOP_TO_WAYPOINT :Fahre ohne Halt <20>ber {WAYPOINT}
STR_CHECKPOINTNAME_CITY :Wegpunkt {TOWN}
STR_CHECKPOINTNAME_CITY_SERIAL :Wegpunkt {TOWN} #{COMMA16}
STR_LANDINFO_CHECKPOINT :Wegpunkt
STR_WAYPOINTNAME_CITY :Wegpunkt {TOWN}
STR_WAYPOINTNAME_CITY_SERIAL :Wegpunkt {TOWN} #{COMMA16}
STR_LANDINFO_WAYPOINT :Wegpunkt
STR_CHECKPOINT_VIEWPORT :{WHITE}{CHECKPOINT}
STR_CHECKPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{CHECKPOINT}
STR_CHECKPOINT_RAW :{CHECKPOINT}
STR_EDIT_CHECKPOINT_NAME :{WHITE}Wegpunktename <20>ndern
STR_WAYPOINT :{WHITE}Wegpunkt
STR_WAYPOINT_GRAPHICS_TIP :{BLACK}Wegpunkttyp ausw<73>hlen
STR_CANT_CHANGE_CHECKPOINT_NAME :{WHITE}Kann Wegpunktname nicht <20>ndern...
STR_CONVERT_RAIL_TO_CHECKPOINT_TIP :{BLACK}<7D>ndere Schiene in einen Wegpunkt
STR_CANT_BUILD_TRAIN_CHECKPOINT :{WHITE}Kann Wegpunkt hier nicht bauen...
STR_CANT_REMOVE_TRAIN_CHECKPOINT :{WHITE}Kann Wegpunkt hier nicht entfernen...
STR_WAYPOINT_VIEWPORT :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{WAYPOINT}
STR_WAYPOINT_RAW :{WAYPOINT}
STR_EDIT_WAYPOINT_NAME :{WHITE}Wegpunktename <20>ndern
STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Kann Wegpunktname nicht <20>ndern...
STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}<7D>ndere Schiene in einen Wegpunkt
STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Kann Wegpunkt hier nicht bauen...
STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Kann Wegpunkt hier nicht entfernen...
STR_BUILD_AUTORAIL_TIP :{BLACK}Bauen von Schienen unter Verwendung des Autoschienenmodus
@@ -1099,7 +1125,8 @@ STR_MANY_RANDOM_INDUSTRIES :{BLACK}Viele zuf
STR_RANDOM_INDUSTRIES_TIP :{BLACK}Bedecke die Karte mit zuf<75>llig platzierten Industrien
STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kann keine Industrie erzeugen...
STR_LANDSCAPING_TOOLBAR :{WHITE}Landschaft bearbeiten
STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}<7D>ffne die Landschaftsbau-Toolbar, um Land zu senken/heben, B<>ume zu pflanzen, etc.
STR_LANDSCAPING_TOOLBAR :{WHITE}Landschaftsbau
STR_LEVEL_LAND_TOOLTIP :{BLACK}Land ausgleichen
@@ -1114,6 +1141,8 @@ STR_CANT_BUILD_LOCKS :{WHITE}Kann hier keine Schleuse bauen...
STR_BUILD_LOCKS_TIP :{BLACK}Schleusen bauen
STR_LANDINFO_LOCK :Schleuse
STR_BUOY_IS_IN_USE :{WHITE}... Boje wird gebraucht!
STR_LANDINFO_COORDS :{BLACK}Koordinaten: {LTBLUE}{NUMU16}x{NUMU16} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kann den Teil des Bahnhofs nicht entfernen...
@@ -1165,65 +1194,83 @@ STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}W
STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Umr<6D>stung des Zuges auf die ausgew<65>hlte Frachtart
STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Kann den Zug nicht umr<6D>sten...
STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Wartungsintervalle in Prozent: {ORANGE}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Produktion <20>ndern
TEMP_AI_IN_PROGRESS :{WHITE}Willkommen bei der neuen KI. Erwarte Fehler. Falls du einen findest, mache einen Screenshot und berichte im Forum. Viel Spa<70>!
TEMP_AI_ACTIVATED :{WHITE}Achtung: Die neue KI ist noch im Alpha-Stadium. Derzeit funktionieren nur Stra<72>enfahrzeuge.
############ network gui strings
TEMP_STRING_NO_NETWORK :{WHITE}Der Netzwerkdialog funktioniert noch{}nicht vollst<73>ndig!
STR_NETWORK_MULTIPLAYER :{WHITE}Mehrspieler
STR_NETWORK_FIND_SERVER :{BLACK}Server suchen
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Netzwerk nach einem Server durchsuchen
STR_NETWORK_DIRECT_CONNECT :{BLACK}Direkt verbinden
STR_NETWORK_ENTER_IP :{BLACK}IP Adresse des Servers eingeben
STR_NETWORK_DIRECT_CONNECT_TIP :{BLACK}Zu einer bekannten IP verbinden
STR_NETWORK_START_SERVER :{BLACK}Server Starten
STR_NETWORK_START_SERVER_TIP :{BLACK}Einen eigenen Server starten
STR_NETWORK_PLAYER_NAME :{BLACK}Spielername:
STR_NETWORK_ENTER_NAME_TIP :{BLACK}Mit diesem Namen identifizieren dich andere Spieler
STR_NETWORK_CONNECTION :{BLACK}Verbindung:
STR_NETWORK_CONNECTION_TIP :{BLACK}W<>hle zwischen Internet oder LAN-Verbindung aus
STR_NETWORK_SELECT_CONNECTION :{BLACK}Verbindungstyp w<>hlen:
STR_NETWORK_CONNECTION_TYPE_TIP :{BLACK}Zwischen Internetspiel und Spiel im lokalen Netz w<>hlen
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_START_SERVER :{BLACK}Server Starten
STR_NETWORK_START_SERVER_TIP :{BLACK}Einen eigenen Server starten
STR_NETWORK_GAME_NAME :{BLACK}Name
STR_NETWORK_GAME_NAME_TIP :{BLACK}Name des Spiels
STR_NETWORK_PLAYERS :{BLACK}#/#
STR_NETWORK_PLAYERS_TIP :{BLACK}Spieler im Spiel/Maximale Anzahl Spieler
STR_NETWORK_MAP_SIZE :{BLACK}Gr<47><72>e
STR_NETWORK_MAP_SIZE_TIP :{BLACK}Gr<47><72>e der Karte
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Sprache, Server version, etc.
STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Ein Spiel der Liste durch Anklicken w<>hlen
STR_NETWORK_PLAYERS_VAL :{BLACK}{COMMA8}/{COMMA8}
STR_NETWORK_FIND_SERVER :{BLACK}Server suchen
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Netzwerk nach einem Server durchsuchen
STR_NETWORK_ADD_SERVER :{BLACK}Server hinzuf<75>gen
STR_NETWORK_ADD_SERVER_TIP :{BLACK}F<>gt einen Server zu der Liste von Servern hinzu, die immer nach laufenden Spielen kontrolliert werden.
STR_NETWORK_ENTER_IP :{BLACK}IP Adresse des Servers eingeben
STR_NETWORK_JOIN_GAME :{BLACK}Dem Spiel beitreten
STR_NETWORK_CLIENTS_ONLINE :{BLACK}{COMMA16}/{COMMA16}
STR_NETWORK_CLIENTS_CAPTION :{BLACK}Clients
STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Clients online / Clients max.
STR_NETWORK_GAME_INFO :{SILVER}GAME INFO
STR_ORANGE :{ORANGE}{STRING}
STR_NETWORK_CLIENTS :{SILVER}Clients: {WHITE}{COMMA8} / {COMMA8}
STR_NETWORK_LANGUAGE :{SILVER}Sprache: {WHITE}{STRING}
STR_NETWORK_TILESET :{SILVER}Tileset: {WHITE}{STRING}
STR_NETWORK_MAP_SIZE :{SILVER}Mapgr<67><72>e: {WHITE}{COMMA16}x{COMMA16}
STR_NETWORK_SERVER_VERSION :{SILVER}Serverversion: {WHITE}{STRING}
STR_NETWORK_SERVER_ADDRESS :{SILVER}Server Adresse: {WHITE}{STRING} : {NUMU16}
STR_NETWORK_START_DATE :{SILVER}Startdatum: {WHITE}{DATE_SHORT}
STR_NETWORK_CURRENT_DATE :{SILVER}Aktuelles Datum: {WHITE}{DATE_SHORT}
STR_NETWORK_PASSWORD :{SILVER}Passwort gesch<63>tzt!
STR_NETWORK_SERVER_OFFLINE :{SILVER}SERVER OFFLINE
STR_NETWORK_SERVER_FULL :{SILVER}SERVER VOLL
STR_NETWORK_VERSION_MISMATCH :{SILVER}Versionskonflikt festgestellt
STR_NETWORK_JOIN_GAME :{BLACK}Spiel betreten
STR_NETWORK_START_GAME_WINDOW :{WHITE}Neues Spiel beginnen
STR_NETWORK_NEW_GAME_NAME :{BLACK}Spielname:
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}Der Name des Spieles wird anderen Spielern im Mehrspielerdialog angezeigt
STR_NETWORK_PASSWORD :{BLACK}Passwort:
STR_NETWORK_SET_PASSWORD :{BLACK}Passwort setzen
STR_NETWORK_PASSWORD_TIP :{BLACK}Vergebe ein Passwort, um zu verhindern, dass unbefugte Leute beitreten k<>nnen
STR_NETWORK_SELECT_MAP :{BLACK}Karte ausw<73>hlen:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Welche Karte m<>chtest du spielen?
STR_NETWORK_NUMBER_OF_PLAYERS :{BLACK}Anzahl der Spieler:
STR_NETWORK_NUMBER_OF_PLAYERS_TIP :{BLACK}W<>hle eine maximale Spielerzahl. Es k<>nnen auch weniger mitspielen.
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_PLAYERS :2 Spieler
STR_NETWORK_3_PLAYERS :3 Spieler
STR_NETWORK_4_PLAYERS :4 Spieler
STR_NETWORK_5_PLAYERS :5 Spieler
STR_NETWORK_6_PLAYERS :6 Spieler
STR_NETWORK_7_PLAYERS :7 Spieler
STR_NETWORK_8_PLAYERS :8 Spieler
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max. Anzahl an Clients:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}W<>hlt die max. Anzahl an Clienten aus. Nicht alle Slots m<>ssen belegt werden.
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (ank<6E>ndigen)
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_CLIENTS :2 Clienten
STR_NETWORK_3_CLIENTS :3 Clienten
STR_NETWORK_4_CLIENTS :4 Clienten
STR_NETWORK_5_CLIENTS :5 Clienten
STR_NETWORK_6_CLIENTS :6 Clienten
STR_NETWORK_7_CLIENTS :7 Clienten
STR_NETWORK_8_CLIENTS :8 Clienten
STR_NETWORK_9_CLIENTS :9 Clienten
STR_NETWORK_10_CLIENTS :10 Clienten
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Gesprochene Sprachen:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Damit andere Spieler wissen, welche Sprache auf diesem Server gesprochen wird.
STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Spiel beginnen
STR_NETWORK_START_GAME_TIP :{BLACK}Startet ein neues Mehrspielerspiel auf einer Zufallskarte oder einem Szenario
STR_NETWORK_LOAD_GAME :{BLACK}Spiel Laden
@@ -1231,17 +1278,62 @@ STR_NETWORK_LOAD_GAME_TIP :{BLACK}L
STR_NETWORK_LOAD_SCENARIO :{BLACK}Szenario Laden
STR_NETWORK_LOAD_SCENARIO_TIP :{BLACK}Startet ein Mehrspielerspiel in einem Szenario
############ Leave those lines in this order!!
STR_NETWORK_LANG_ANY :Egal
STR_NETWORK_LANG_ENGLISH :Englisch
STR_NETWORK_LANG_GERMAN :Deutsch
STR_NETWORK_LANG_FRENCH :Franz<6E>sisch
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Mehrspielerlobby
STR_NETWORK_SEND :{BLACK}Absenden
STR_NETWORK_SEND_TIP :{BLACK}Schicke eine Nachricht an die anderen Spieler
STR_NETWORK_COMPANY_NAME :{BLACK}Firmenname:
STR_NETWORK_COMPANY_NAME_TIP :{BLACK}<7D>ndere den Namen des Unternehmens. Mit Eingabetaste best<73>tigen.
STR_NETWORK_SPECTATE_GAME :{BLACK}Beim Spiel zusehen
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Als Zuschauer dem Spiel zusehen
STR_NETWORK_PREPARE_TO_JOIN :{BLACK}Spieleintritt vorbereiten: {ORANGE}{STRING}
STR_NETWORK_COMPANY_LIST_TIP :{BLACK}Eine Liste aller Firmen, die sich im Spiel befinden.
STR_NETWORK_NEW_COMPANY :{BLACK}Neues Unternehmen
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Ein neues Unternehmen gr<67>nden
STR_NETWORK_READY :{BLACK}Fertig
STR_NETWORK_SPECTATE_GAME :{BLACK}Beim Spiel zusehen
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Als Zuschauer dem Spiel zusehen
STR_NETWORK_JOIN_COMPANY :{BLACK}Firma beitreten
STR_NETWORK_JOIN_COMPANY_TIP :{BLACK}Beim Verwalten der Firma helfen
STR_NETWORK_REFRESH :{BLACK}Aktualisieren
STR_NETWORK_REFRESH_TIP :{BLACK}Aktuallisiert die Serverinformationen
STR_NETWORK_COMPANY_INFO :{SILVER}Firmenprofil
STR_NETWORK_COMPANY_NAME :{SILVER}Firmenname: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Gr<47>ndung: {WHITE}{NUMU16}
STR_NETWORK_VALUE :{SILVER}Firmenwert: {WHITE}{CURRENCY64}
STR_NETWORK_CURRENT_BALANCE :{SILVER}Kontostand: {WHITE}{CURRENCY64}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Einkommen (letzes Jahr): {WHITE}{CURRENCY64}
STR_NETWORK_PERFORMANCE :{SILVER}Leistung: {WHITE}{NUMU16}
STR_NETWORK_VEHICLES :{SILVER}Fahrzeuge: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_STATIONS :{SILVER}Stationen: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_PLAYERS :{SILVER}Spieler: {WHITE}{STRING}
STR_NETWORK_CONNECTING :{WHITE}Verbinde...
############ Leave those lines in this order!!
STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Verbinde..
STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Authorisierung..
STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Warten..
STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Herunterladen der Karte..
STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Verarbeite Spieldaten..
STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registrieren...
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Hole Spielinformationen..
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Hole Firmeninformationen..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{INT32} Client(en) vor uns
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{INT32} / {INT32} KB bisher heruntergeladen
STR_NETWORK_DISCONNECT :{BLACK}Trennen
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Gib deine Nachricht ein
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Gib an wieviel Geld du geben m<>chtest
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server ist gesch<63>tzt. Gib das Passwort ein
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ist gesch<63>tzt! Passwort eingeben
STR_NETWORK_CLIENT_LIST :{WHITE}Clientenliste
STR_NETWORK_ERR_NOTAVAILABLE :{WHITE}Keine Netzwerkschnittstellen gefunden oder ohne ENABLE_NETWORK kompiliert
STR_NETWORK_ERR_NOSERVER :{WHITE}Keine Netzwerkspiele gefunden
@@ -1249,7 +1341,57 @@ STR_NETWORK_ERR_NOCONNECTION :{WHITE}Der Server antwortete nicht auf die Anf
STR_NETWORK_ERR_DESYNC :{WHITE}Synchronisation des Netzwerkspiels fehlgeschlagen.
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE}Verbindung zum Netzwerkspiel verloren.
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE}Spielstand konnte nicht vom Server geladen werden.
STR_NETWORK_ERR_SERVER_START :{WHITE} Server konnte nicht gestartet werden.
STR_NETWORK_ERR_CLIENT_START :{WHITE} Verbindung konnte nicht hergestellt werden.
STR_NETWORK_ERR_TIMEOUT :{WHITE}Verbindung #{NUMU16} abgelaufen.
STR_NETWORK_ERR_SERVER_ERROR :{WHITE} Protokollfehler: Die Verbindung musste getrennt werden.
STR_NETWORK_ERR_WRONG_REVISION :{WHITE} Ihre Version entspricht nicht der Serverversion.
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Falsches Passwort.
STR_NETWORK_ERR_SERVER_FULL :{WHITE} Der Server ist voll.
STR_NETWORK_ERR_SERVER_BANNED :{WHITE}Du bist von diesem Server verbannt
STR_NETWORK_ERR_KICKED :{WHITE} Sie wurden vom Server gekickt.
STR_NETWORK_ERR_CHEATER :{WHITE} Cheating ist auf diesem Server nicht erlaubt
STR_NETWORK_ERR_LEFT :hat das Spiel verlassen.
############ Leave those lines in this order!!
STR_NETWORK_ERR_CLIENT_GENERAL :Allgemeiner Fehler
STR_NETWORK_ERR_CLIENT_DESYNC :Synchronisationsfehler
STR_NETWORK_ERR_CLIENT_SAVEGAME :Map konnte nicht geladen werden.
STR_NETWORK_ERR_CLIENT_CONNECTION_LOST :Verbindung verloren
STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR :Protokollfehler
STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :nicht authorisiert
STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :Unerwartetes Paket empfangen
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :Falsche Version
STR_NETWORK_ERR_CLIENT_NAME_IN_USE :Name wird bereits verwendet
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :Falsches Spiel-Passwort
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :Falsche-SpielerID in DoCommand (Verarbeitungsfehler)
STR_NETWORK_ERR_CLIENT_KICKED :gekickt
STR_NETWORK_ERR_CLIENT_CHEATER :versuchte einen Cheat zu nutzen
############ End of leave-in-this-order
STR_NETWORK_CLIENT_JOINED :hat das Spiel betreten
STR_NETWORK_GIVE_MONEY :gab dir etwas Geld ({CURRENCY})
STR_NETWORK_GAVE_MONEY_AWAY :Du hast {STRING} etwas Geld gegeben ({CURRENCY})
STR_NETWORK_CHAT_COMPANY :[Team] {STRING}:
STR_NETWORK_CHAT_TO_COMPANY :[Team] An {STRING}:
STR_NETWORK_CHAT_CLIENT :[Privat] {STRING}:
STR_NETWORK_CHAT_TO_CLIENT :[Privat] An {STRING}:
STR_NETWORK_CHAT_ALL :[Alle] {STRING}:
STR_NETWORK_NAME_CHANGE :hat seinen Namen ge<67>ndert zu
STR_NETWORK_SERVER_SHUTDOWN :{WHITE} Der Server hat das Spiel beendet.
STR_NETWORK_SERVER_REBOOT :{WHITE} Der Server startet neu...{}Bitte warten...
STR_NETWORK_SERVER :Server
STR_NETWORK_CLIENT :Client
STR_NETWORK_CLIENTLIST_NONE :(keiner)
STR_NETWORK_CLIENTLIST_KICK :Kicken
STR_NETWORK_CLIENTLIST_GIVE_MONEY :Geld geben
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Mit allen sprechen
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Mit eigener Firma sprechen
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private Nachricht
STR_NETWORK_SEND :{BLACK}Senden
############ end network gui strings
@@ -1325,7 +1467,7 @@ STR_1802_ROAD_CONSTRUCTION :{WHITE}Stra
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Br<42>cke w<>hlen
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Kann hier keine Stra<72>e bauen...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kann diese Stra<72>e nicht entfernen...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Fahrzeugdepotausrichtung
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Fahrzeugdepot-Ausr.
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Kann Fahrzeugdepot hier nicht bauen...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Kann Busbahnhof nicht bauen...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Kann Lkw-Ladeplatz nicht bauen...
@@ -1347,6 +1489,7 @@ STR_1818_ROAD_RAIL_LEVEL_CROSSING :Bahn
##id 0x2000
STR_2000_TOWNS :{WHITE}St<53>dte
STR_TOWN_LABEL_POP :{WHITE}{STRING} ({COMMA32})
STR_2001 :{WHITE}{STRING}
STR_2002 :{TINYFONT}{BLACK}{STRING}
STR_2003 :{TINYFONT}{WHITE}{STRING}
@@ -1449,7 +1592,7 @@ STR_2801_PLACE_SIGN :Schild aufstellen
STR_2802_TREES :{WHITE}B<>ume
STR_2803_TREE_ALREADY_HERE :{WHITE}...hier sind bereits B<>ume
STR_2804_SITE_UNSUITABLE :{WHITE}...ungeeignetes Gel<65>nde
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Schild kann hier nicht aufgestellt werden...
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Baum kann hier nicht gepflanzt werden...
STR_2806 :{WHITE}{STRING}
STR_2807 :{TINYFONT}{WHITE}{STRING}
STR_2808_TOO_MANY_SIGNS :{WHITE}...zu viele Schilder
@@ -1500,8 +1643,8 @@ STR_303E_NO_LONGER_ACCEPTS :{WHITE}{STATION} akzeptiert keine {STRING} mehr
STR_303F_NO_LONGER_ACCEPTS_OR :{WHITE}{STATION} akzeptiert keine {STRING} oder {STRING} mehr
STR_3040_NOW_ACCEPTS :{WHITE}{STATION} akzeptiert jetzt {STRING}
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} akzeptiert jetzt {STRING} und {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Ausrichtung des Busbahnhofes
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Ausrichtung des Lkw-Ladeplatzes
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Busbahnhof-Ausr.
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Lkw-Ladeplatzes-Ausr.
STR_3044_TOO_CLOSE_TO_ANOTHER_BUS :{WHITE}Zu dicht an einem anderen Busbahnhof
STR_3045_TOO_CLOSE_TO_ANOTHER_TRUCK :{WHITE}Zu dicht an einer anderen Lkw-Ladestation
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Der Busbahnhof muss erst abgerissen werden
@@ -1937,6 +2080,9 @@ STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Errichte Firmensitz f
STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Kann keinen Firmensitz bauen ...
STR_7072_VIEW_HQ :{BLACK}Zeige Firmensitz
STR_RELOCATE_HQ :{BLACK}HQ verlegen
STR_COMPANY_PASSWORD :{BLACK}Passwort
STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Sch<63>tze deine Firma mit einem Passwort, um unautorisierten Spielern den Beitritt zu verwehren.
STR_SET_COMPANY_PASSWORD :Firmen-Passwort setzen
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Weltwirtschaftskrise!{}{}Finanzexperten bef<65>rchten schlimmsten Zusammenbruch der Wirtschaft!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Wirtschaftskrise beendet!{}{}Aufschwung des Handels gibt Vertrauen in die Industrie und st<73>rkt die Wirtschaft!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Schalter f<>r gro<72>es/kleines Fenster
@@ -1950,6 +2096,7 @@ STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Kann 25% Anteil an dieser Firma nich
STR_707D_OWNED_BY :{WHITE}({COMMA16}% Eigentum von {STRING})
STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA16}% Eigentum von {STRING}{} {COMMA16}% Eigentum von {STRING})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{STRING} wurde von {STRING} <20>bernommen!
STR_7080_PROTECTED :{WHITE}Dieses Unternehmen handelt noch nicht mit Anteilen...
##id 0x8000
STR_8000_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Dampf)
@@ -2248,7 +2395,7 @@ STR_8813_FROM :{LTBLUE}{CARGO} von {STATION}
STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}Zug {COMMA16} wartet im Depot
STR_8815_NEW_VEHICLES :{BLACK}Neue Fahrzeuge
STR_8816 :{BLACK}-
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Kosten: {GOLD}{CURRENCY}{BLACK} Gewicht: {GOLD}{COMMA16}t{}{BLACK}Geschwindigk.: {GOLD}{VELOCITY}{BLACK} Leistung: {GOLD}{COMMA16} PS {}{BLACK}Betriebskosten: {GOLD}{CURRENCY}/Jahr{}{BLACK}Kapazit<69>t: {GOLD}{STRING}{}{BLACK}Entwurf: {GOLD}{NUMU16}{BLACK} Lebensdauer: {GOLD}{COMMA16} Jahre{}{BLACK}Max. Zuverl<72>ssigkeit: {GOLD}{COMMA8}%
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Kosten: {GOLD}{CURRENCY}{BLACK} Gewicht: {GOLD}{COMMA16}t{}{BLACK}Geschwindigk.: {GOLD}{VELOCITY}{BLACK} Leistung: {GOLD}{COMMA32} PS{}{BLACK}Betriebskosten: {GOLD}{CURRENCY}/Jahr{}{BLACK}Kapazit<69>t: {GOLD}{STRING}{}{BLACK}Entwurf: {GOLD}{NUMU16}{BLACK} Lebensdauer: {GOLD}{COMMA16} Jahre{}{BLACK}Max. Zuverl<72>ssigkeit: {GOLD}{COMMA8}%
STR_8818_INFORMATION :{BLACK}Information
STR_8819_TRAIN_TOO_LONG :{WHITE}Zug zu lang
STR_881A_TRAINS_CAN_ONLY_BE_ALTERED :{WHITE}Z<>ge k<>nnen nur ver<65>ndert werden, wenn sie im Depot halten
@@ -2475,7 +2622,7 @@ STR_GO_TO_SHIP_DEPOT :Fahre zu {TOWN} Schiffswerft
SERVICE_AT_SHIP_DEPOT :Wartung bei {TOWN} Schiffswerft
##id 0xA000
STR_A000_AIRPORT_CONSTRUCT :{WHITE}Flughafenbau
STR_A000_AIRPORTS :{WHITE}Flugh<EFBFBD>fen
STR_A001_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Flughafen kann hier nicht gebaut werden...
STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} Flugzeughangar
STR_A003_NEW_AIRCRAFT :{BLACK}Neues Flugzeug
@@ -2529,6 +2676,7 @@ STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Kann Flugzeugname nicht vergeben...
STR_A032_NAME_AIRCRAFT :{BLACK}Flugzeugname
STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Die Stadt feiert . . .{}Erstes Flugzeug landet auf {STATION}!
STR_A034_PLANE_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Flugzeugabsturz!{}{COMMA16} sterben in einem Feuerball auf {STATION}
STR_PLANE_CRASH_OUT_OF_FUEL :{BLACK}{BIGFONT}Flugzeugabsturz!{}Dem Flugzeug ging der Treibstoff aus, {COMMA16} sterben in einem Feuerball!
STR_A035_DESTINATIONS :{TINYFONT}{BLACK}Bestimmungsort:
STR_A036 :{TINYFONT}{BLACK}{STATION}
STR_A037_RENAME :{BLACK}Umbenennen
@@ -2554,7 +2702,7 @@ STR_B002_OIL_REFINERY_EXPLOSION :{BLACK}{BIGFONT}Explosion einer
STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS :{BLACK}{BIGFONT}Fabrik nahe {TOWN} durch mysteri<72>se Umst<73>nde zerst<73>rt!
STR_B004_UFO_LANDS_NEAR :{BLACK}{BIGFONT}'UFO' landet bei {TOWN}!
STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Stolleneinbruch hinterl<72><6C>t einen Pfad der Zerst<73>rung bei {TOWN}!
STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Hochwasser!{}Mindesten {COMMA16} Menschen vermisst oder tot nach schwerer Flut!
STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Hochwasser!{}Mindestens {COMMA16} Menschen vermisst oder tot nach schwerer Flut!
STR_BRIBE_FAILED :{WHITE}Ihr Bestechungsversuch wurde
STR_BRIBE_FAILED_2 :{WHITE}von einem regionalen Untersuchungsbeamten aufgedeckt.
@@ -2563,8 +2711,8 @@ STR_MULTIPLAYER_PAUSED :{WHITE}Spiel ist pausiert.{}Befehle k
STR_PERFORMANCE_DETAIL :{WHITE}Leistungsaufschl<68>sselung
STR_PERFORMANCE_DETAIL_KEY :{BLACK}Details
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}{TINYFONT}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}{TINYFONT}({INT32}/{INT32})
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA32}/{COMMA32})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{INT32}%
SET_PERFORMANCE_DETAIL_INT :{BLACK}{INT32}
############ Those following lines need to be in this order!!
@@ -2590,3 +2738,61 @@ STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Bargeld
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Schuldenfalle?
STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Erreichte Punkte von der maximal erreichbaren Anzahl
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Newgrf Einstellungen
STR_NEWGRF_APPLY_CHANGES :{BLACK}<7D>nderungen anwenden
STR_NEWGRF_SET_PARAMETERS :{BLACK}Parameter setzen
STR_NEWGRF_TIP :{BLACK}Eine Liste aller Newgrf-Sets, die installiert sind. Per Klick ausw<73>hlen.
STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}Keine Newgrf-Dateien installiert. Bitte Installationsanleitung im Handbuch nachschlagen.
STR_NEWGRF_FILENAME :{BLACK}Dateiname:
STR_NEWGRF_GRF_ID :{BLACK}GRF ID:
STR_CURRENCY_WINDOW :{WHITE}Eigene W<>hrung
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Wechselkurs: {ORANGE}{CURRENCY} = {POUNDSIGN} {COMMA16}
STR_CURRENCY_SEPARATOR :{LTBLUE}Trennsymbol:
STR_CURRENCY_PREFIX :{LTBLUE}Pr<50>fix:
STR_CURRENCY_SUFFIX :{LTBLUE}Suffix:
STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Umstellung auf Euro: {ORANGE}{INT32}
STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Umstellung auf Euro: {ORANGE}nie
STR_CURRENCY_PREVIEW :{LTBLUE}Vorschau: {ORANGE}{CURRENCY}
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Parameter f<>r eigene W<>hrung <20>ndern
STR_TRAIN :{BLACK}{TRAIN}
STR_LORRY :{BLACK}{LORRY}
STR_PLANE :{BLACK}{PLANE}
STR_SHIP :{BLACK}{SHIP}
STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA16} Z<>ge
STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA16} Stra<72>enfahrzeuge
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA16} Flugzeuge
STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA16} Schiffe
STR_SCHEDULED_TRAINS_TIP :{BLACK}Zeige alle Z<>ge, die diesen Bahnhof anfahren
STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Zeige alle Fahrzeuge, die diese Station anfahren
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Zeige alle Flugzeuge, die diesen Flughafen anfliegen
STR_SCHEDULED_SHIPS_TIP :{BLACK}Zeige alle Schiffe, die diesen Hafen ansteuern
STR_REPLACE_VEHICLES :{BLACK}Ersetze Fahrzeuge
STR_REPLACE_VEHICLES_WHITE :{WHITE}Ersetze Fahrzeuge
STR_REPLACE_VEHICLES_START :{BLACK}Fahrzeugersetzung aktivieren
STR_REPLACE_VEHICLES_STOP :{BLACK}Fahrzeugersetzung deaktivieren
STR_NOT_REPLACING :{BLACK}Keine Ersetzung
STR_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Kein Fahrzeug gew<65>hlt
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}W<>hle das zu ersetzende Fahrzeug
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}W<>hle den Fahrzeugtyp, der an Stelle des links gew<65>hlten Fahrzeugs verwendet werden soll
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Dr<44>cke diesen Button, wenn das Fahrzeug auf der linken Seite nicht ersetzt werden soll
STR_REPLACE_HELP_START_BUTTON :{BLACK}Dr<44>cke diesen Button, wenn das Fahrzeug auf der linken Seite durch das auf der rechten Seite gew<65>hlte ersetzt werden soll
STR_REPLACE_HELP_RAILTYPE :{BLACK}W<>hle einen Schienentyp f<>r den Loks ersetzt werden sollen
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Hier wird angezeigt, gegen welches Fahrzeug das auf der linken Seite gew<65>hlte ersetzt wird
STR_REPLACE_HELP :{BLACK}Dieses Feature erm<72>glicht es, einen Fahrzeugtyp auszuw<75>hlen und ihn durch einen anderen ersetzen zu lassen. Dies geschieht automatisch, wenn das Fahrzeug regul<75>r das Depot besucht.
STR_SHORT_DATE :{WHITE}{DATE_TINY}
############ Lists rail types
STR_RAIL_VEHICLES :Eisenbahn
STR_MONORAIL_VEHICLES :Monorail
STR_MAGLEV_VEHICLES :Magnetschwebebahn
############ End of list of rail types
STR_TINY_BLACK :{BLACK}{TINYFONT}{COMMA16}

View File

@@ -186,13 +186,8 @@ STR_00B4_CAN_T_DO_THIS :{WHITE}Nem teheted ezt...
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Nem tiszt<7A>thatod meg a ter<65>letet...
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Copyright {COPYRIGHT} 1995 Chris Sawyer, Minden jog fenntartva
STR_00B7_VERSION :{BLACK}OpenTTD version {REV}
STR_00B8_ORIGINAL_DESIGN_PROGRAM :{BLACK}Eredeti tervek: Chris Sawyer
STR_00B9_ORIGINAL_GRAPHICS :{BLACK}Grafika: Simon Foster
STR_SPECIAL_THANKS :{BLACK}K<>l<EFBFBD>n k<>sz<73>net nekik:
STR_SPECIAL_THANKS_SIGNALS :{BLACK}<7D> El<45>szign<67>lok <20>s szemaforok {COPYRIGHT} 2003 Michael Blunck
STR_SPECIAL_THANKS_CANALS :{BLACK}<7D> Lejt<6A>s sinek alapzata {COPYRIGHT} Marcin Grzegorczyk
STR_SPECIAL_THANKS_FOUNDATIONS :{BLACK}<7D> Csatorna/Zsilip grafika {COPYRIGHT} 2003-2004 George
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2004 The OpenTTD team
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2005 Az OpenTTD csapat
STR_TRANSLATED_BY :{BLACK} Ford<72>t<EFBFBD>k -
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
@@ -310,6 +305,8 @@ STR_0134_UNIX :Unix
STR_0135_OSX :OSX
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_0139_IMPERIAL_MILES :M<>rf<72>ld
STR_013A_METRIC_KILOMETERS :Kilom<6F>ter
@@ -352,7 +349,8 @@ STR_015E_QUIT_GAME :Kil
STR_015F_QUIT :Kil<69>p<EFBFBD>s
STR_0160_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Biztosan kil<69>psz ebb<62>l a j<>t<EFBFBD>kb<6B>l ?
STR_0161_QUIT_GAME :{WHITE}Kil<69>p<EFBFBD>s a j<>t<EFBFBD>kb<6B>l
STR_SORT_TIP :{BLACK}V<EFBFBD>lassz rendez<65>si sorrendet
STR_SORT_ORDER_TIP :{BLACK}Cs<EFBFBD>kken<EFBFBD>/n<>vekv<6B> sorbarendez<EFBFBD>s
STR_SORT_CRITERIA_TIP :{BLACK}Sorbarendez<65>si krit<69>rium
SRT_SORT_BY :{BLACK}Rendez<65>s
STR_SORT_BY_POPULATION :{BLACK}Lakoss<73>g
@@ -417,6 +415,8 @@ STR_0189 :{BLACK}{SMALLDOWNARROW}
STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}Nem v<>ltoztathatod meg a jav<61>t<EFBFBD>si id<69>k<EFBFBD>zt...
STR_018B_CLOSE_WINDOW :{BLACK}Az ablak bez<65>r<EFBFBD>sa
STR_018C_WINDOW_TITLE_DRAG_THIS :{BLACK}Az ablak c<>msora - h<>zd ezt a mozgat<61>shoz
STR_STICKY_BUTTON :{BLACK}Ez az ablak akkor se legyen becsukhat<61> ha az <20>sszes ablakot bez<65>rjuk (Delete gomb)
STR_RESIZE_BUTTON :{BLACK}Fogd <20>s h<>zd hogy <20>tm<74>retezd az ablakot
STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}T<>rgyak lerombol<6F>sa egy mez<65>r<EFBFBD>l
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Egy pont les<65>llyeszt<7A>se
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}Egy pont megemel<65>se
@@ -495,6 +495,8 @@ STR_01CD_SELECT_TUTORIAL_DEMONSTRATION :{WHITE}V
STR_01CE_CARGO_ACCEPTED :{BLACK}Elfogad: {LTBLUE}{STRING}
STR_01CF_CARGO_ACCEPTED :{BLACK}Elfogad: {LTBLUE}{STRING}, {STRING}
STR_01D0_CARGO_ACCEPTED :{BLACK}Elfogad: {LTBLUE}{STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_4 :{BLACK}Elfogad: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_5 :{BLACK}Elfogad: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}, {STRING}
############ range for cargo acecpted ends
STR_01D1_8 :({COMMA8}/8 {STRING})
@@ -537,7 +539,7 @@ STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Az '
STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}A 'Saj<61>t 1' (felhaszn<7A>l<EFBFBD>i) zenei m<>sor kiv<69>laszt<7A>sa
STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}A 'Saj<61>t 2' (felhaszn<7A>l<EFBFBD>i) zenei m<>sor kiv<69>laszt<7A>sa
STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Az aktu<74>lis m<>sor ki<6B>r<EFBFBD>t<EFBFBD>se (csak Saj<61>t 1 <20>s Saj<61>t 2)
STR_01F9_SAVE_MUSIC_SETTINGS_TO :{BLACK}Zenei be<62>ll<6C>t<EFBFBD>sok ment<6E>se a lemezre
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Zenei be<62>ll<6C>t<EFBFBD>sok elment<EFBFBD>se
STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Egy sz<73>mra kattintva hozz<7A>adod azt a kiv<69>lasztott zenei m<>sorhoz (csak Saj<61>t 1 <20>s Saj<61>t 2)
STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}A m<>sor megkever<65>se be/ki
STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}A zenekiv<69>laszt<7A> ablak megjelen<65>t<EFBFBD>se
@@ -562,7 +564,8 @@ STR_020D_CHANGES_OF_CARGO_ACCEPTANCE :{YELLOW}
STR_020E_SUBSIDIES :{YELLOW}T<>mogat<61>sok
STR_020F_GENERAL_INFORMATION :{YELLOW}<7D>ltal<61>nos inform<72>ci<63>k
STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO :{WHITE}...t<>l t<>vol van az el<65>z<EFBFBD> c<>lt<6C>l
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}A legjobb c<>gek, akik el<65>rt<72>k 2050-et{}({STRING} szinten)
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Legjobb c<>gek melyek el<65>rt<72>k a {NUMU16}{}({STRING} Szintet)
STR_TOP_COMPANIES_NETWORK_GAME :{BIGFONT}{BLACK}C<>gdics<63>s<EFBFBD>g t<>bla {NUMU16}
STR_0212 :{BIGFONT}{COMMA16}.
STR_0213_BUSINESSMAN :<3A>zletember
STR_0214_ENTREPRENEUR :V<>llalkoz<6F>
@@ -571,9 +574,10 @@ STR_0216_CAPITALIST :T
STR_0217_MAGNATE :M<>gn<67>s
STR_0218_MOGUL :Fejes
STR_0219_TYCOON_OF_THE_CENTURY :Az <20>vsz<73>zad iparm<72>gn<67>sa
STR_021A :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} '{STRING}' rangot <20>rt el!
STR_021C_OF_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING}, a k<>zismert {STRING} c<>g eln<6C>ke '{STRING}' rangot <20>rt el!
STR_HIGHSCORE_NAME :{BIGFONT}{STRING}, {STRING}
STR_HIGHSCORE_STATS :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BLACK}{BIGFONT}{STRING} el<65>rte a '{STRING}' rangot!
STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{STRING} - {STRING} el<65>rte a '{STRING}' rangot!
STR_021D :{BLACK}
STR_021E :{WHITE}
STR_021F :{BLUE}{COMMA16}
@@ -722,7 +726,7 @@ STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}J
STR_02BD :{BLACK}{STRING}
STR_02BE_DEFAULT :Alap
STR_02BF_CUSTOM :Saj<61>t
STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK :{BLACK}Saj<61>t nevek ment<6E>se
STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Saj<61>t nevek ment<6E>se
STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}A j<>rm<72>vek m<>rkanev<65>nek kiv<69>laszt<7A>sa
STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}A saj<61>t j<>rm<72>-m<>rkanevek elment<6E>se lemezre
@@ -733,6 +737,8 @@ STR_02C5_DIFFICULTY_SETTINGS :Neh
STR_02C6_DIFFICULTY_SETTINGS :Neh<65>zs<7A>gi be<62>ll<6C>t<EFBFBD>sok
STR_02C7_CONFIG_PATCHES :Foltok be<62>ll<6C>t<EFBFBD>sa
STR_02C8_CONFIG_PATCHES :Foltok be<62>ll<6C>t<EFBFBD>sa
STR_NEWGRF_SETTINGS :Newgrf be<62>ll<6C>t<EFBFBD>sok
STR_NEWGRF_SETTINGS2 :Newgrf be<62>ll<6C>t<EFBFBD>sok
STR_GAMEOPTMENU_0A :
STR_GAMEOPTMENU_0B :
STR_02C9_TOWN_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}V<>rosnevek mutat<61>sa
@@ -741,8 +747,8 @@ STR_02CB_STATION_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}<7D>llom<6F>snevek mutat<61>sa
STR_02CD_SIGNS_DISPLAYED :{CHECKMARK}{SETX 12}Feliratok mutat<61>sa
STR_02CE_SIGNS_DISPLAYED :{SETX 12}Feliratok mutat<61>sa
STR_CHECKPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Ellen<65>rz<72> pontok mutat<61>sa
STR_CHECKPOINTS_DISPLAYED2 :{SETX 12}Ellen<65>rz<72> pontok mutat<61>sa
STR_WAYPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Ellen<65>rz<72> pontok mutat<61>sa
STR_WAYPOINTS_DISPLAYED2 :{SETX 12}Ellen<65>rz<72> pontok mutat<61>sa
STR_02CF_FULL_ANIMATION :{CHECKMARK}{SETX 12}Teljes anim<69>ci<63>
STR_02D0_FULL_ANIMATION :{SETX 12}Teljes anim<69>ci<63>
STR_02D1_FULL_DETAIL :{CHECKMARK}{SETX 12}Minden r<>szlet
@@ -765,13 +771,14 @@ STR_02DC_DISPLAY_SUBSIDIES :{BLACK}
STR_02DD_SUBSIDIES :T<>mogat<61>sok
STR_02DE_MAP_OF_WORLD :Vil<69>gt<67>rk<72>p
STR_EXTRA_VIEW_PORT :Extra l<>tk<74>p
STR_02DF_TOWN_DIRECTORY :V<>roslista
STR_TOWN_POPULATION :{BLACK}Vil<69>gn<67>pess<73>g: {COMMA32}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}{COMMA16}. l<>tk<74>p
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}L<>tk<74>p aktualiz<69>l<EFBFBD>sa
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Be<42>ll<6C>tja a glob<6F>lis l<>tk<74>p pozici<63>j<EFBFBD>t erre a l<>tk<74>pre
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}L<>tk<74>p visszat<61>lt<6C>se
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}A l<>tk<74>p pozici<63>j<EFBFBD>t be<62>ll<6C>tja a glob<6F>lis l<>tk<74>pre
STR_02DF_TOWN_DIRECTORY :V<>roslista
STR_02E0_CURRENCY_UNITS :{BLACK}P<>nznem
STR_02E1 :{BLACK}{SKIP}{STRING}
STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}A haszn<7A>lt p<>nznem kiv<69>laszt<7A>sa
@@ -795,16 +802,16 @@ STR_02F8_EVERY_3_MONTHS :3 havonta
STR_02F9_EVERY_6_MONTHS :6 havonta
STR_02FA_EVERY_12_MONTHS :12 havonta
STR_02FB_START_A_NEW_GAME :{BLACK}<7D>j j<>t<EFBFBD>k kezd<7A>se
STR_02FC_LOAD_A_SAVED_GAME_FROM :{BLACK}Egy mentett j<>t<EFBFBD>k bet<65>lt<6C>se lemezr<7A>l
STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Mentett j<>t<EFBFBD>k bet<65>lt<6C>se
STR_02FD_VIEW_DEMONSTRATIONS_TUTORIALS :{BLACK}Demonstr<74>ci<63>k/tan<61>t<EFBFBD>sok megn<67>z<EFBFBD>se
STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Testreszabott p<>lya k<>sz<73>t<EFBFBD>se
STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Egy j<>t<EFBFBD>kos j<>t<EFBFBD>k kiv<69>laszt<7A>sa
STR_0300_SELECT_TWO_PLAYER_GAME :{BLACK}K<EFBFBD>t j<EFBFBD>t<EFBFBD>kos j<EFBFBD>t<EFBFBD>k kiv<69>laszt<7A>sa
STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}T<EFBFBD>bbj<EFBFBD>t<EFBFBD>kos m<EFBFBD>d kiv<69>laszt<7A>sa 2-8 j<>t<EFBFBD>kosig
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}A j<>t<EFBFBD>k be<62>ll<6C>t<EFBFBD>sainak megmutat<61>sa
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}A neh<65>zs<7A>gi be<62>ll<6C>t<EFBFBD>sok megmutat<61>sa
STR_0303_START_A_NEW_GAME_USING :{BLACK}<7D>j j<>t<EFBFBD>k kezd<7A>se saj<61>t p<>ly<6C>n
STR_0304_QUIT :{BLACK}Kil<69>p<EFBFBD>s
STR_0305_LEAVE_OPENTTD :{BLACK}Kil<69>p<EFBFBD>s az OpenTTD-b<>l
STR_0305_QUIT_OPENTTD :{BLACK}Kil<69>p<EFBFBD>s az OpenTTD-b<>l
STR_0306_VIEW_DEMONSTRATION_TUTORIAL :{BLACK}Demonstr<74>ci<63>/tan<61>t<EFBFBD>s megn<67>z<EFBFBD>se
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...csak v<>rosban <20>p<EFBFBD>thet<65>
@@ -820,7 +827,7 @@ STR_0313_FUND_NEW_INDUSTRY :
############ range ends here
STR_0314_FUND_NEW_INDUSTRY :{WHITE}<7D>j gazdas<61>gi <20>p<EFBFBD>let
STR_0315 :{STRING}
STR_JUST_STRING :{STRING}
STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...csak v<>rosban <20>p<EFBFBD>thet<65>
STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...csak es<65>erd<72>ben <20>p<EFBFBD>thet<65>
STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...csak sivatagban <20>p<EFBFBD>thet<65>
@@ -842,51 +849,58 @@ STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ENGLISH :Angol
STR_TOWNNAME_ORIGINAL_ENGLISH :Angol (Eredeti)
STR_TOWNNAME_FRENCH :Francia
STR_TOWNNAME_GERMAN :N<>met
STR_TOWNNAME_AMERICAN :Amerikai
STR_TOWNNAME_ADDITIONAL_ENGLISH :Angol (Tov<6F>bbi)
STR_TOWNNAME_LATIN_AMERICAN :Latin-Amerikai
STR_TOWNNAME_SILLY :Komolytalan
STR_TOWNNAME_SWEDISH :Sv<53>d
STR_TOWNNAME_DUTCH :Holland
STR_TOWNNAME_FINNISH :Finn
STR_TOWNNAME_POLISH :Lengyel
STR_TOWNNAME_CZECH :Cseh
STR_TOWNNAME_SLOVAKISH :Szlov<6F>k
STR_TOWNNAME_NORWEGIAN :Norv<72>g
STR_TOWNNAME_HUNGARIAN :Magyar
STR_TOWNNAME_AUSTRIAN :Osztr<74>k
STR_TOWNNAME_ROMANIAN :Rom<6F>niai
STR_TOWNNAME_CZECH :Cseh
STR_TOWNNAME_SWISS :Sv<53>jci
############ end of townname region
STR_CURR_POUNDS :Font ({POUNDSIGN})
STR_CURR_DOLLARS :Doll<6C>r ($)
STR_CURR_FF :Frank (FF)
STR_CURR_DM :N<>met M<>rka (DM)
STR_CURR_GBP :Font ({POUNDSIGN})
STR_CURR_USD :Doll<6C>r ($)
STR_CURR_EUR :Eur<EFBFBD> (<28>)
STR_CURR_YEN :Ken ({YENSIGN})
STR_CURR_PT :Pezeta (Pt)
STR_CURR_FT :Magyar Forint (Ft)
STR_CURR_ZL :Lengyel Zloty (zl)
STR_CURR_ATS :Osztr<74>k Shilling (ATS)
STR_CURR_BEF :Belga Frank (BEF)
STR_CURR_DKK :D<>n Korona (DKK)
STR_CURR_FIM :Finn M<>rka (FIM)
STR_CURR_GRD :G<>r<EFBFBD>g Drachma (GRD)
STR_CURR_CHF :Sv<53>jci Frank (CHF)
STR_CURR_NLG :Holland Guilder (NLG)
STR_CURR_ITL :Olasz L<>ra (ITL)
STR_CURR_SEK :Sv<53>d Korona (SEK)
STR_CURR_RUR :Orosz Rubel (rur)
STR_CURR_CZK :Cseh Korona (CZK)
STR_CURR_DEM :N<>met m<>rka (DEM)
STR_CURR_DKK :D<>n Korona (DKK)
STR_CURR_ESP :Pezeta (ESP)
STR_CURR_FIM :Finn M<>rka (FIM)
STR_CURR_FRF :Franc (FRF)
STR_CURR_GRD :G<>r<EFBFBD>g Drachma (GRD)
STR_CURR_HUF :Magyar Forint (HUF)
STR_CURR_ISK :Izlandi Korona (ISK)
STR_CURR_ITL :Olasz L<>ra (ITL)
STR_CURR_NLG :Holland Guilder (NLG)
STR_CURR_NOK :Norv<72>g Korona (NOK)
STR_CURR_PLN :Legyel Zlotyi (PLN)
STR_CURR_ROL :Rom<6F>n Lej (Lej)
STR_CURR_EUR :Eur<EFBFBD> (<28>)
STR_CURR_RUR :Orosz Rubel (rur)
STR_CURR_SEK :Sv<53>d Korona (SEK)
STR_CURR_CUSTOM :Saj<61>t...
STR_OPTIONS_LANG :{BLACK}Nyelv
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}V<>lassz nyelvet
STR_OPTIONS_FULLSCREEN :{BLACK}Teljes k<>perny<6E>
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Jel<65>ld be ezt, ha teljes k<>perny<6E>s m<>dban szeretn<74>l OpenTTD-zni
STR_OPTIONS_RES :{BLACK}A k<>perny<6E> felbont<6E>sa
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_RES_TIP :{BLACK}V<>laszd ki, milyen felbont<6E>st szeretn<74>l a j<>t<EFBFBD>khoz
@@ -966,11 +980,13 @@ STR_CONFIG_PATCHES_OFF :Ki
STR_CONFIG_PATCHES_ON :Be
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}J<>rm<72>vek sebess<73>g<EFBFBD>nek kijelz<6C>se: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Lejt<6A>re es partokra <20>p<EFBFBD>t<EFBFBD>s: {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}<7D>leth<74>bben m<>retezett befogad<61>k<EFBFBD>rzetek bekapcsol<6F>sa: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Enged<65>lyezi az ipari l<>tes<65>tm<74>nyek <20>s utak rombol<6F>s<EFBFBD>t, stb: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}<7D>ri<72>svonatok enged<65>lyez<65>se: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Vonatok val<61>s<EFBFBD>gh<67> gyorsul<75>sa: {ORANGE}{STRING}
STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Egym<79>s mell<6C> <20>p<EFBFBD>thet<65> vonat<61>llom<6F>sok: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}B<>rmelyik rakom<6F>ny telipakol<6F>sa eset<65>n induljon a j<>rm<72>: {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}A tov<6F>bbfejlesztett bet<65>lt<6C>s haszn<7A>lata: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Infl<66>ci<63>: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Csak akkor sz<73>ll<6C>tson <20>rut az <20>llom<6F>sra, ha ott van r<> kereslet: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Nagyon hossz<73> hidak enged<65>lyez<65>se: {ORANGE}{STRING}
@@ -1003,6 +1019,7 @@ STR_CONFIG_PATCHES_AUTORENEW_VEHICLE :{LTBLUE}Automat
STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Automat<61>n fel<65>j<EFBFBD>tja a j<>rm<72>vet {ORANGE}{STRING}{LTBLUE} h<>nappal a max <20>letkora el<65>tt/ut<75>n
STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Automata meg<65>j<EFBFBD>t<EFBFBD>shoz sz<73>ks<6B>ges minim<69>lis p<>nz: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Hiba<62>zenetek megjelen<65>t<EFBFBD>si ideje: {ORANGE}{STRING}
STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Mutassa a lakoss<73>got a feliratban: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}L<>thatatlan f<>k (<28>tl<74>tsz<73> <20>p<EFBFBD>letekkel): {ORANGE}{STRING}
STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}H<>hat<61>r magass<73>ga: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}<7D>llom<6F>sok legnagyobb kiterjed<65>se: {ORANGE}{STRING} {RED}Figyelem: magas <20>rt<72>k lelass<73>tja a j<>t<EFBFBD>kot
@@ -1028,15 +1045,20 @@ STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Alap
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED :{LTBLUE}Alap szerv<72>zel<65>si id<69> a rep<65>l<EFBFBD>kre: {ORANGE}kikapcsolva
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Alap<61>rtelmezett szerv<72>zel<65>s haj<61>knak: {ORANGE}{STRING} naponta
STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Alap szerv<72>zel<65>si id<69> a haj<61>kra: {ORANGE}kikapcsolva
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Ne legyen szerv<72>zel<65>s ha lerobban<61>sok sincsenek: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_DATE :{LTBLUE}Sz<53>nes <20>js<6A>gcikkek megjelen<65>se: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STARTING_DATE :{LTBLUE}J<>t<EFBFBD>k indul<75> d<>tuma: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENDING_DATE :{LTBLUE}J<>t<EFBFBD>k befejez<65>s<EFBFBD>nek az <20>ve: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Egyenletes gazdas<61>g (t<>bb, kisebb v<>ltoz<6F>s)
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}M<>sik c<>gekb<6B>l r<>szv<7A>nyt lehet v<>s<EFBFBD>rolni
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Amikor megragadom helyezzen l<>mp<6D>kat minden {ORANGE}{STRING}. mez<65>re
STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}A f<> eszk<7A>zsor helye: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Balra
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :K<>z<EFBFBD>pen
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :Jobbra
STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Ablakigaz<61>t<EFBFBD>s kiterjed<65>se: {ORANGE}{STRING} k<>ppont
STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Ablakigaz<61>t<EFBFBD>s kiterjed<65>se: {ORANGE}letiltva
STR_CONFIG_PATCHES_GUI :{BLACK}Megjelen<65>t<EFBFBD>s
STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}<7D>p<EFBFBD>tkez<65>s
@@ -1069,24 +1091,28 @@ STR_CHEAT_NO_JETCRASH :{LTBLUE}Jet-rep
STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Kl<4B>ma v<>ltoztat<61>s: {ORANGE} {STRING}
STR_CHEAT_CHANGE_DATE :{LTBLUE}D<>tum m<>dos<6F>t<EFBFBD>s: {ORANGE} {DATE_SHORT}
STR_HEADING_FOR_CHECKPOINT :{LTBLUE}<7D>ton {CHECKPOINT} fel<65>
STR_HEADING_FOR_CHECKPOINT_VEL :{LTBLUE}<7D>ton {CHECKPOINT} fel<65>, {VELOCITY}
STR_HEADING_FOR_WAYPOINT :{LTBLUE}<7D>ton {WAYPOINT} fel<65>
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}<7D>ton {WAYPOINT} fel<65>, {VELOCITY}
STR_GO_TO_CHECKPOINT :{CHECKPOINT}on <20>t
STR_GO_TO_WAYPOINT :{WAYPOINT}on <20>t
STR_GO_NON_STOP_TO_WAYPOINT :<3A>ton {WAYPOINT} ellen<65>rz<72> ponton <20>t
STR_CHECKPOINTNAME_CITY :{TOWN}i ellen<65>rz<72> pont
STR_CHECKPOINTNAME_CITY_SERIAL :{TOWN}i {COMMA16}. ellen<65>rz<72> pont
STR_LANDINFO_CHECKPOINT :Ellen<65>rz<72> pont
STR_WAYPOINTNAME_CITY :{TOWN}i ellen<65>rz<72> pont
STR_WAYPOINTNAME_CITY_SERIAL :{TOWN}i {COMMA16}. ellen<65>rz<72> pont
STR_LANDINFO_WAYPOINT :Ellen<65>rz<72> pont
STR_CHECKPOINT_VIEWPORT :{WHITE}{CHECKPOINT}
STR_CHECKPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{CHECKPOINT}
STR_CHECKPOINT_RAW :{CHECKPOINT}
STR_EDIT_CHECKPOINT_NAME :{WHITE}M<>dos<6F>td az ellen<65>rz<72> pont nev<65>t
STR_WAYPOINT :{WHITE}Ellen<65>rz<72> pont
STR_WAYPOINT_GRAPHICS_TIP :{BLACK}V<>lassz ellen<65>rz<72>-pont tipust
STR_CANT_CHANGE_CHECKPOINT_NAME :{WHITE}Nem lehet megv<67>ltoztatni az ellen<65>rz<72> pont nev<65>t...
STR_CONVERT_RAIL_TO_CHECKPOINT_TIP :{BLACK}S<>n <20>talak<61>t<EFBFBD>sa ellen<65>rz<72> pontt<74>
STR_CANT_BUILD_TRAIN_CHECKPOINT :{WHITE}Nem lehet vonat ellen<65>rz<72> pontot <20>p<EFBFBD>teni ide...
STR_CANT_REMOVE_TRAIN_CHECKPOINT :{WHITE}Nem lehet elt<6C>vol<6F>tani az ellen<65>rz<72> pontot...
STR_WAYPOINT_VIEWPORT :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{WAYPOINT}
STR_WAYPOINT_RAW :{WAYPOINT}
STR_EDIT_WAYPOINT_NAME :{WHITE}M<>dos<6F>td az ellen<65>rz<72> pont nev<65>t
STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Nem lehet megv<67>ltoztatni az ellen<65>rz<72> pont nev<65>t...
STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}S<>n <20>talak<61>t<EFBFBD>sa ellen<65>rz<72> pontt<74>
STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Nem lehet vonat ellen<65>rz<72> pontot <20>p<EFBFBD>teni ide...
STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Nem lehet elt<6C>vol<6F>tani az ellen<65>rz<72> pontot...
STR_BUILD_AUTORAIL_TIP :{BLACK}S<>n <20>p<EFBFBD>t<EFBFBD>se egyszer<65>s<EFBFBD>tett m<>d<EFBFBD>n
@@ -1099,6 +1125,7 @@ STR_MANY_RANDOM_INDUSTRIES :{BLACK}Sok v
STR_RANDOM_INDUSTRIES_TIP :{BLACK}Elhelyez a t<>rk<72>pen v<>letlenszer<65>en sok gazdas<61>gi <20>p<EFBFBD>letet
STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Nem tudok gazdas<61>gi <20>p<EFBFBD>letet gener<65>lni...
STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}Nyisd meg a t<>jrendez<65> ablakot a talaj n<>vel<65>shez/cs<63>kkent<6E>shez, fa<66>ltet<65>shez, stb.
STR_LANDSCAPING_TOOLBAR :{WHITE}T<>jrendez<65>s
STR_LEVEL_LAND_TOOLTIP :{BLACK}Talajszint
@@ -1114,6 +1141,8 @@ STR_CANT_BUILD_LOCKS :{WHITE}Nem lehet zsilipet
STR_BUILD_LOCKS_TIP :{BLACK}Zsilip <20>p<EFBFBD>t<EFBFBD>se
STR_LANDINFO_LOCK :Zsilip
STR_BUOY_IS_IN_USE :{WHITE}... a b<>j<EFBFBD>t haszn<7A>lj<6C>k!
STR_LANDINFO_COORDS :{BLACK}Koordin<69>t<EFBFBD>k: {LTBLUE}{NUMU16}x{NUMU16} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Can't remove part of station...
@@ -1165,43 +1194,51 @@ STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}V
STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}A vonat <20>talak<61>t<EFBFBD>sa a kijel<65>lt <20>ru sz<73>ll<6C>t<EFBFBD>s<EFBFBD>ra
STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Nem alak<61>thatod <20>t a vonatot...
STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Szerv<72>zintervallumok sz<73>zal<61>kban: {ORANGE}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Termel<65>s megv<67>ltoztat<61>sa
TEMP_AI_IN_PROGRESS :{WHITE}<7D>dv, ez itt az <20>j, fejleszt<7A>s alatt <20>ll<6C> MI. El<45>fordulhatnak gondok, probl<62>m<EFBFBD>k. Ha belefutsz egybe, k<>rlek k<>sz<73>ts k<>perny<6E>ment<6E>st k<>ld be a f<>rumra. J<> j<>t<EFBFBD>kot!
TEMP_AI_ACTIVATED :{WHITE}Figyelem: az <20>j MI fejleszt<7A>s alatt <20>ll! Jelenleg csak a teheraut<75>k <20>s a buszok m<>k<EFBFBD>dnek!
############ network gui strings
TEMP_STRING_NO_NETWORK :{WHITE}H<>l<EFBFBD>zati fel<65>let nem m<>k<EFBFBD>dik teljesen!{}Egyes opci<63>k m<>k<EFBFBD>dnek, de masok, mint a lobby, etc. nem. Csak inform<72>ci<63>k<EFBFBD>nt.
STR_NETWORK_MULTIPLAYER :{WHITE}T<>bbj<62>t<EFBFBD>kos
STR_NETWORK_FIND_SERVER :{BLACK}Szerver keres<65>se
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Szerver keres<65>se a h<>l<EFBFBD>zaton
STR_NETWORK_DIRECT_CONNECT :{BLACK}K<>zvetlen kapcsolat
STR_NETWORK_ENTER_IP :{BLACK}<7D>rd be a szerver IP c<>m<EFBFBD>t
STR_NETWORK_DIRECT_CONNECT_TIP :{BLACK}Ismert IP c<>mhez kapcsol<6F>d<EFBFBD>s
STR_NETWORK_START_SERVER :{BLACK}Szerver ind<6E>t<EFBFBD>sa
STR_NETWORK_START_SERVER_TIP :{BLACK}Saj<61>t szervert ind<6E>t
STR_NETWORK_PLAYER_NAME :{BLACK}J<>t<EFBFBD>kos neve:
STR_NETWORK_ENTER_NAME_TIP :{BLACK}A t<>bbi j<>t<EFBFBD>kos ilyen n<>vel fog ismerni T<>ged.
STR_NETWORK_CONNECTION :{BLACK}Kapcsolat:
STR_NETWORK_CONNECTION_TIP :{BLACK}V<>lassz az internetes vagy helyi h<>l<EFBFBD>zati j<>t<EFBFBD>k k<>z<EFBFBD>l
STR_NETWORK_SELECT_CONNECTION :{BLACK}V<>lassz kapcsolat t<>pust:
STR_NETWORK_CONNECTION_TYPE_TIP :{BLACK}V<EFBFBD>lassz az internetes j<>t<EFBFBD>k <20>s a helyi h<>l<EFBFBD>zatban t<>rt<72>n<EFBFBD> j<>t<EFBFBD>k k<>z<EFBFBD>tt
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :Helyi h<>l<EFBFBD>zat
STR_NETWORK_INTERNET :Internet
STR_NETWORK_START_SERVER :{BLACK}Szerver ind<6E>t<EFBFBD>sa
STR_NETWORK_START_SERVER_TIP :{BLACK}Saj<EFBFBD>t szervert ind<6E>t
STR_NETWORK_GAME_NAME :{BLACK}N<>v
STR_NETWORK_GAME_NAME_TIP :{BLACK}J<>t<EFBFBD>k neve
STR_NETWORK_PLAYERS :{BLACK}#/#
STR_NETWORK_PLAYERS_TIP :{BLACK}Jelenlegi j<>t<EFBFBD>kossz<73>m / Maximum j<>t<EFBFBD>kossz<73>m
STR_NETWORK_MAP_SIZE :{BLACK}M<>ret
STR_NETWORK_MAP_SIZE_TIP :{BLACK}A t<>rk<72>p m<>rete
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Nyelv, szerver verzi<7A>, stb.
STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Kattints a list<73>ban a jat<61>kra hogy kiv<69>laszd
STR_NETWORK_PLAYERS_VAL :{BLACK}{COMMA8}/{COMMA8}
STR_NETWORK_FIND_SERVER :{BLACK}Szerver keres<65>se
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Szerver keres<65>se a h<>l<EFBFBD>zaton
STR_NETWORK_ADD_SERVER :{BLACK}Szerver hozz<7A>ad<61>sa
STR_NETWORK_ADD_SERVER_TIP :{BLACK}Hozz<7A>adja a szervert a list<73>hoz, <20>gy k<>s<EFBFBD>bb gyorsabban tudsz hozz<7A> csatlakozni
STR_NETWORK_ENTER_IP :{BLACK}<7D>rd be a szerver IP c<>m<EFBFBD>t
STR_NETWORK_CLIENTS_ONLINE :{BLACK}{COMMA16}/{COMMA16}
STR_NETWORK_CLIENTS_CAPTION :{BLACK}Kliens
STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Kliens online / kliens max
STR_NETWORK_GAME_INFO :{SILVER}J<>T<EFBFBD>K INF<4E>
STR_ORANGE :{ORANGE}{STRING}
STR_NETWORK_CLIENTS :{SILVER}Kliens: {WHITE}{COMMA8} / {COMMA8}
STR_NETWORK_LANGUAGE :{SILVER}Nyelv: {WHITE}{STRING}
STR_NETWORK_TILESET :{SILVER}T<>jt<6A>pus: {WHITE}{STRING}
STR_NETWORK_MAP_SIZE :{SILVER}A p<>lya nagys<79>ga: {WHITE}{COMMA16}x{COMMA16}
STR_NETWORK_SERVER_VERSION :{SILVER}Szerver verzi<7A>: {WHITE}{STRING}
STR_NETWORK_SERVER_ADDRESS :{SILVER}A szerver c<>me: {WHITE}{STRING} : {NUMU16}
STR_NETWORK_START_DATE :{SILVER}Kezd<7A>si d<>tum: {WHITE}{DATE_SHORT}
STR_NETWORK_CURRENT_DATE :{SILVER}Jelenlegi d<>tum: {WHITE}{DATE_SHORT}
STR_NETWORK_PASSWORD :{SILVER}Jelsz<73>val v<>dve!
STR_NETWORK_SERVER_OFFLINE :{SILVER}SZERVER OFFLINE
STR_NETWORK_SERVER_FULL :{SILVER}SZERVER TELE
STR_NETWORK_VERSION_MISMATCH :{SILVER}VERZI<5A> ELT<4C>R<EFBFBD>S
STR_NETWORK_JOIN_GAME :{BLACK}Csatlakoz<6F>s a j<>t<EFBFBD>khoz
@@ -1210,20 +1247,30 @@ STR_NETWORK_START_GAME_WINDOW :{WHITE}
STR_NETWORK_NEW_GAME_NAME :{BLACK}J<>t<EFBFBD>k neve:
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}A j<>t<EFBFBD>k neve fog megjelenni a t<>bbi j<>t<EFBFBD>kosnak a t<>bbj<62>t<EFBFBD>kos men<65>ben
STR_NETWORK_PASSWORD :{BLACK}Jelsz<73>:
STR_NETWORK_SET_PASSWORD :{BLACK}Jelsz<73> be<62>ll<6C>t<EFBFBD>sa
STR_NETWORK_PASSWORD_TIP :{BLACK}V<>dd le a j<>t<EFBFBD>kodat jelsz<73>val ha nem akarod hogy m<>sok csatlakozzanak
STR_NETWORK_SELECT_MAP :{BLACK}V<>lassz egy t<>rk<72>pet:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Melyik terk<72>pen akarsz j<>tszani?
STR_NETWORK_NUMBER_OF_PLAYERS :{BLACK}J<EFBFBD>t<EFBFBD>kosok sz<73>ma:
STR_NETWORK_NUMBER_OF_PLAYERS_TIP :{BLACK}V<>laszd ki a maxim<69>lis j<>t<EFBFBD>kos-sz<73>mot. Nem k<>telez<65> mindet kihaszn<7A>lni.
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_PLAYERS :2 j<>t<EFBFBD>kos
STR_NETWORK_3_PLAYERS :3 j<>t<EFBFBD>kos
STR_NETWORK_4_PLAYERS :4 j<>t<EFBFBD>kos
STR_NETWORK_5_PLAYERS :5 j<>t<EFBFBD>kos
STR_NETWORK_6_PLAYERS :6 j<>t<EFBFBD>kos
STR_NETWORK_7_PLAYERS :7 j<>t<EFBFBD>kos
STR_NETWORK_8_PLAYERS :8 j<>t<EFBFBD>kos
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximum h<>ny j<>t<EFBFBD>kos lehet:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}V<>laszd ki h<EFBFBD>ny j<>t<EFBFBD>kos kapcsol<6F>dhat maximum. Nem sz<73>ks<6B>ges pont ennyi embernek <20>ppen kapcsol<6F>dva lennie.
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :Helyi h<>l<EFBFBD>zat
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :H<>l<EFBFBD>zat / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (rekl<6B>moz)
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_CLIENTS :2 kliens
STR_NETWORK_3_CLIENTS :3 kliens
STR_NETWORK_4_CLIENTS :4 kliens
STR_NETWORK_5_CLIENTS :5 kliens
STR_NETWORK_6_CLIENTS :6 kliens
STR_NETWORK_7_CLIENTS :7 kliens
STR_NETWORK_8_CLIENTS :8 kliens
STR_NETWORK_9_CLIENTS :9 kliens
STR_NETWORK_10_CLIENTS :10 kliens
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Besz<73>lt nyelv:
STR_NETWORK_LANGUAGE_TIP :{BLACK}A t<>bbi j<>t<EFBFBD>kos megtudhatja milyen nyelven besz<73>lnek a szerveren.
STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}J<>t<EFBFBD>k elind<6E>t<EFBFBD>sa
STR_NETWORK_START_GAME_TIP :{BLACK}<7D>j h<>l<EFBFBD>zati j<>t<EFBFBD>k kezd<7A>se v<>letlen t<>rk<72>ppel vagy misszi<7A>val
STR_NETWORK_LOAD_GAME :{BLACK}J<>t<EFBFBD>k bet<65>lt<6C>se
@@ -1231,17 +1278,62 @@ STR_NETWORK_LOAD_GAME_TIP :{BLACK}Kor
STR_NETWORK_LOAD_SCENARIO :{BLACK}P<>lya bet<65>lt<6C>se
STR_NETWORK_LOAD_SCENARIO_TIP :{BLACK}<7D>j h<>l<EFBFBD>zati j<>t<EFBFBD>k kezd<7A>se misszi<7A>s alapon
############ Leave those lines in this order!!
STR_NETWORK_LANG_ANY :B<>rmilyen
STR_NETWORK_LANG_ENGLISH :Angol
STR_NETWORK_LANG_GERMAN :N<>met
STR_NETWORK_LANG_FRENCH :Francia
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}T<>bbj<62>t<EFBFBD>kos j<>t<EFBFBD>k-lobby
STR_NETWORK_SEND :{BLACK}K<>ld
STR_NETWORK_SEND_TIP :{BLACK}A t<>bbi j<>t<EFBFBD>kosnak <20>zenetet k<>ld
STR_NETWORK_COMPANY_NAME :{BLACK}V<>llalat neve:
STR_NETWORK_COMPANY_NAME_TIP :{BLACK}Megv<67>ltoztatja a v<>llalatod nev<65>t. <20>ss entert a m<>dos<6F>t<EFBFBD>sok <20>letbel<65>ptet<65>s<EFBFBD>hez
STR_NETWORK_SPECTATE_GAME :{BLACK}J<>t<EFBFBD>k megvizsg<73>l<EFBFBD>sa
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Megtekinted a j<>t<EFBFBD>kot mint vizsg<73>l<EFBFBD>biztos
STR_NETWORK_PREPARE_TO_JOIN :{BLACK}K<>sz<EFBFBD>l<EFBFBD>d<EFBFBD>s a kapcsol<6F>d<EFBFBD>shoz: {ORANGE}{STRING}
STR_NETWORK_COMPANY_LIST_TIP :{BLACK}Egy lista az <20>sszes c<>gr<67>l aki j<>t<EFBFBD>kban van. Bel<65>phetsz egybe, vagy kezdhetsz egy
STR_NETWORK_NEW_COMPANY :{BLACK}<7D>j v<>llalat
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}<7D>j v<>llalatot nyit
STR_NETWORK_READY :{BLACK}K<>sz
STR_NETWORK_SPECTATE_GAME :{BLACK}J<>t<EFBFBD>k megvizsg<73>l<EFBFBD>sa
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Megtekinted a j<>t<EFBFBD>kot mint vizsg<73>l<EFBFBD>biztos
STR_NETWORK_JOIN_COMPANY :{BLACK}Bel<65>p<EFBFBD>s a c<>gbe
STR_NETWORK_JOIN_COMPANY_TIP :{BLACK}Seg<65>tesz valakinek egy c<>g<EFBFBD>n<EFBFBD>l (t<>bben 1 c<>get)
STR_NETWORK_REFRESH :{BLACK}Szerver friss<73>t<EFBFBD>se
STR_NETWORK_REFRESH_TIP :{BLACK}Szerver inf<6E> friss<73>t<EFBFBD>se
STR_NETWORK_COMPANY_INFO :{SILVER}C<>G INF<4E>
STR_NETWORK_COMPANY_NAME :{SILVER}A c<>g neve: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Beiktat<61>s: {WHITE}{NUMU16}
STR_NETWORK_VALUE :{SILVER}A c<>g <20>rt<72>ke: {WHITE}{CURRENCY64}
STR_NETWORK_CURRENT_BALANCE :{SILVER}Jelelegi <20>sszeg: {WHITE}{CURRENCY64}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}El<45>z<EFBFBD> <20>vi bev<65>tel: {WHITE}{CURRENCY64}
STR_NETWORK_PERFORMANCE :{SILVER}Teljes<65>tm<74>ny: {WHITE}{NUMU16}
STR_NETWORK_VEHICLES :{SILVER}J<>rm<72>vek: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_STATIONS :{SILVER}<7D>llom<6F>sok: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_PLAYERS :{SILVER}J<>t<EFBFBD>kosok: {WHITE}{STRING}
STR_NETWORK_CONNECTING :{WHITE}Kapcsol<6F>d<EFBFBD>s...
############ Leave those lines in this order!!
STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Kapcsol<6F>d<EFBFBD>s..
STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Enged<65>lyez<65>s..
STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) V<>rakoz<6F>s..
STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) T<>rk<72>p let<65>lt<6C>se..
STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Adatfeldolgoz<6F>s..
STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Regisztr<74>l<EFBFBD>s..
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}J<>t<EFBFBD>kinf<6E> lek<65>r<EFBFBD>se..
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}C<>ginf<6E> lek<65>r<EFBFBD>se..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{INT32} kliensre v<>runk, hogy befejezze
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{INT32} / {INT32} kilob<6F>jt lett eddig let<65>ltve
STR_NETWORK_DISCONNECT :{BLACK}Lebont<6E>s
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}<7D>rd be az elk<6C>ldend<6E> <20>zenetet
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}<7D>rd be mennyi p<>nzt akarsz adom<6F>nyozni
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}A szerver jelsz<73>val van v<>dve. <20>rd be
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}A c<>g jelsz<73>val van v<>dve. <20>rd be
STR_NETWORK_CLIENT_LIST :{WHITE}Kliens lista
STR_NETWORK_ERR_NOTAVAILABLE :{WHITE} Nem tal<61>lhat<61> a h<>l<EFBFBD>zati csatol<6F>, vagy nincs h<>l<EFBFBD>zati t<>mogat<61>s (ENABLE_NETWORK)
STR_NETWORK_ERR_NOSERVER :{WHITE} Nem tal<61>lhat<61> semmilyen h<>l<EFBFBD>zati j<>t<EFBFBD>k
@@ -1249,7 +1341,57 @@ STR_NETWORK_ERR_NOCONNECTION :{WHITE} A szerver nem reag
STR_NETWORK_ERR_DESYNC :{WHITE} H<>l<EFBFBD>zat - J<>t<EFBFBD>k szinkroniz<69>ci<63> sikertelen.
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} H<>l<EFBFBD>zat - J<>t<EFBFBD>k kapcsolat elveszett.
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Nem siker<65>lt a szerver j<>t<EFBFBD>kment<6E>s bet<65>lt<6C>se.
STR_NETWORK_ERR_SERVER_START :{WHITE} Nem tudtam elind<6E>tani a szervert.
STR_NETWORK_ERR_CLIENT_START :{WHITE} Nem tudtam kapcsol<6F>dni.
STR_NETWORK_ERR_TIMEOUT :{WHITE} A(z) {NUMU16}. j<>t<EFBFBD>kos kapcsolata elveszett.
STR_NETWORK_ERR_SERVER_ERROR :{WHITE} Protokoll-hib<69>t csin<69>ltunk, <20>s megszakadt a kapcsolat.
STR_NETWORK_ERR_WRONG_REVISION :{WHITE} A te g<>peden l<>v<EFBFBD> <20>s a szerveren l<>v<EFBFBD> programnak nem egyezik meg a verzi<7A>ja.
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Rossz jelsz<73>.
STR_NETWORK_ERR_SERVER_FULL :{WHITE} A szerver tele van
STR_NETWORK_ERR_SERVER_BANNED :{WHITE} Ki vagy tiltva err<72>l a szerverr<72>l
STR_NETWORK_ERR_KICKED :{WHITE} Ki lett<74>l r<>gva a szerverr<72>l
STR_NETWORK_ERR_CHEATER :{WHITE} Ez a szerver nem engedi a csal<61>st
STR_NETWORK_ERR_LEFT :elhagyta a j<>t<EFBFBD>kot
############ Leave those lines in this order!!
STR_NETWORK_ERR_CLIENT_GENERAL :<3A>ltal<61>nos hiba
STR_NETWORK_ERR_CLIENT_DESYNC :szinkroniz<69>l<EFBFBD>si hiba
STR_NETWORK_ERR_CLIENT_SAVEGAME :t<>rk<72>p bet<65>lt<6C>si hiba
STR_NETWORK_ERR_CLIENT_CONNECTION_LOST :elveszett a kapcsolat
STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR :protokoll hiba
STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :nem enged<65>lyezett
STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :ismeretlen csomag <20>rkezett
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :rossz verzi<7A>
STR_NETWORK_ERR_CLIENT_NAME_IN_USE :a n<>v m<>r haszn<7A>lva van
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :rossz j<>t<EFBFBD>k-jelsz<73>
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :rossz j<>t<EFBFBD>kos-id a DoCommand-ban
STR_NETWORK_ERR_CLIENT_KICKED :a szerver kir<69>gott
STR_NETWORK_ERR_CLIENT_CHEATER :csalni pr<70>b<EFBFBD>lt
############ End of leave-in-this-order
STR_NETWORK_CLIENT_JOINED :bel<65>pett a j<>t<EFBFBD>kba
STR_NETWORK_GIVE_MONEY :adott egy kis p<>nzt ({CURRENCY})
STR_NETWORK_GAVE_MONEY_AWAY :{STRING} j<>t<EFBFBD>kosnak adom<6F>nyozt<7A>l ({CURRENCY}) <20>sszeget
STR_NETWORK_CHAT_COMPANY :[Csapat] {STRING}:
STR_NETWORK_CHAT_TO_COMPANY :[Csapat] {STRING} sz<73>m<EFBFBD>ra:
STR_NETWORK_CHAT_CLIENT :[Priv<69>t] {STRING}:
STR_NETWORK_CHAT_TO_CLIENT :[Priv<69>t] {STRING} sz<73>m<EFBFBD>ra:
STR_NETWORK_CHAT_ALL :[Mindenkinek] {STRING}:
STR_NETWORK_NAME_CHANGE :megv<67>ltoztatta a nev<65>t erre:
STR_NETWORK_SERVER_SHUTDOWN :{WHITE} A szerver le<6C>ll<6C>totta a j<>t<EFBFBD>kot
STR_NETWORK_SERVER_REBOOT :{WHITE} A szerver <20>jraindul...{}T<>relem...
STR_NETWORK_SERVER :Szerver
STR_NETWORK_CLIENT :Kliens
STR_NETWORK_CLIENTLIST_NONE :(nincs)
STR_NETWORK_CLIENTLIST_KICK :Kir<69>g<EFBFBD>s
STR_NETWORK_CLIENTLIST_GIVE_MONEY :P<>nz adom<6F>nyoz<6F>sa
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :<3A>zenet mindenkinek
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :<3A>zenet a c<>gnek
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Priv<69>t <20>zenet
STR_NETWORK_SEND :{BLACK}Elk<6C>ld
############ end network gui strings
@@ -1347,6 +1489,7 @@ STR_1818_ROAD_RAIL_LEVEL_CROSSING :
##id 0x2000
STR_2000_TOWNS :{WHITE}V<>rosok
STR_TOWN_LABEL_POP :{WHITE}{STRING} ({COMMA32})
STR_2001 :{WHITE}{STRING}
STR_2002 :{TINYFONT}{BLACK}{STRING}
STR_2003 :{TINYFONT}{WHITE}{STRING}
@@ -1762,7 +1905,7 @@ STR_6806_COMPETITOR_START_TIME :{LTBLUE}Ellenfelek kezd
STR_6807_NO_OF_TOWNS :{LTBLUE}V<>rosok sz<73>ma: {ORANGE}{STRING}
STR_6808_NO_OF_INDUSTRIES :{LTBLUE}Gazdas<61>gi <20>p<EFBFBD>letek sz<73>ma: {ORANGE}{STRING}
STR_6809_MAXIMUM_INITIAL_LOAN_000 :{LTBLUE}Kezdeti k<>lcs<63>n: {ORANGE}{CURRENCY}
STR_680A_INITIAL_INTEREST_RATE :{LTBLUE}Kezd<EFBFBD> kamatl<74>b: {ORANGE}{COMMA16}%
STR_680A_INITIAL_INTEREST_RATE :{LTBLUE}<7D>ves kamatl<74>b: {ORANGE}{COMMA16}%
STR_680B_VEHICLE_RUNNING_COSTS :{LTBLUE}J<>rm<72> fenntart<72>si k<>lts<74>g: {ORANGE}{STRING}
STR_680C_CONSTRUCTION_SPEED_OF_COMPETITOR :{LTBLUE}Ellenfelek <20>p<EFBFBD>tkez<65>si sebess<73>ge: {ORANGE}{STRING}
STR_680D_INTELLIGENCE_OF_COMPETITORS :{LTBLUE}Ellenfelek intelligenci<63>ja: {ORANGE}{STRING}
@@ -1937,6 +2080,9 @@ STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}A c
STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nem <20>p<EFBFBD>theted ide a sz<73>kh<6B>zadat...
STR_7072_VIEW_HQ :{BLACK}Sz<53>kh<6B>z
STR_RELOCATE_HQ :{BLACK}FH <20>thelyez<65>se
STR_COMPANY_PASSWORD :{BLACK}Jelsz<73>
STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}V<>dd le a v<>llalatodat jelsz<73>val ha nem akarod hogy m<>sok csatlakozzanak hozz<7A>.
STR_SET_COMPANY_PASSWORD :V<>llalati jelsz<73> be<62>ll<6C>t<EFBFBD>sa
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Gazdas<61>gi visszaes<65>s!{}{}A k<>zgazd<7A>szok gazdas<61>gi v<>ls<6C>gt<67>l tartanak!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}V<>ge a visszaes<65>snek!{}{}A kereskedelem fellend<6E>l, ami <20>nbizalmat ad az iparnak, <20>s er<65>s<EFBFBD>dik a gazdas<61>g!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Kicsi/nagy ablakm<6B>ret k<>z<EFBFBD>tti v<>lt<6C>s
@@ -1950,6 +2096,7 @@ STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Nem adhatsz el 25%-ot ebb
STR_707D_OWNED_BY :{WHITE}({COMMA16}% {STRING} tulajdona)
STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA16}% {STRING} tulajdona{} {COMMA16}% {STRING} tulajdona)
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{STRING} c<>get felv<6C>s<EFBFBD>rolta {STRING}!
STR_7080_PROTECTED :{WHITE}Ez a c<>g egyel<65>re m<>g nem rendelkezik r<>szv<7A>nyekkel...
##id 0x8000
STR_8000_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (G<>z)
@@ -2248,7 +2395,7 @@ STR_8813_FROM :{LTBLUE}{CARGO} {STATION}
STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}{COMMA16}. vonat a j<>rm<72>telepen v<>rakozik
STR_8815_NEW_VEHICLES :{BLACK}<7D>j j<>rm<72>vek
STR_8816 :{BLACK}-
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}<7D>r: {GOLD}{CURRENCY}{BLACK} S<>ly: {GOLD}{COMMA16}t{}{BLACK}Sebess<73>g:{GOLD}{VELOCITY}{BLACK} Teljes<65>tm<74>ny:{GOLD}{COMMA16}le{}{BLACK}M<EFBFBD>k<EFBFBD>dtet<EFBFBD>si k<EFBFBD>lts<EFBFBD>g: {GOLD}{CURRENCY}/<2F>v{}{BLACK}Kapacit<69>s: {GOLD}{STRING}{}{BLACK}Tervez<65>s <20>ve: {GOLD}{NUMU16}{BLACK} <20>lettartam: {GOLD}{COMMA16} <20>v{}{BLACK}Legnagyobb megb<67>zhat<61>s<EFBFBD>g: {GOLD}{COMMA8}%
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}<7D>r: {GOLD}{CURRENCY}{BLACK} S<>ly: {GOLD}{COMMA16}t{}{BLACK}Sebess<73>g: {GOLD}{VELOCITY}{BLACK} Teljes<65>tm<74>ny: {GOLD}{COMMA32}l<>er<65>{}{BLACK}<EFBFBD>zemeltet<EFBFBD>si K<EFBFBD>lts<EFBFBD>g: {GOLD}{CURRENCY}/<2F>v{}{BLACK}Kapacit<69>s: {GOLD}{STRING}{}{BLACK}Tervez<65>s <20>ve: {GOLD}{NUMU16}{BLACK} <20>lettartam: {GOLD}{COMMA16} <20>v{}{BLACK}Legnagyobb megb<67>zhat<61>s<EFBFBD>g: {GOLD}{COMMA8}%
STR_8818_INFORMATION :{BLACK}Inform<72>ci<63>k
STR_8819_TRAIN_TOO_LONG :{WHITE}T<>l hossz<73> a vonat
STR_881A_TRAINS_CAN_ONLY_BE_ALTERED :{WHITE}Csak a j<>rm<72>telepen <20>ll<6C> vonatokat lehet megv<67>ltoztatni
@@ -2475,7 +2622,7 @@ STR_GO_TO_SHIP_DEPOT :Menj a {TOWN}i kik
SERVICE_AT_SHIP_DEPOT :Service at {TOWN} Ship Depot
##id 0xA000
STR_A000_AIRPORT_CONSTRUCT :{WHITE}Rept<EFBFBD>r <20>p<EFBFBD>t<EFBFBD>se
STR_A000_AIRPORTS :{WHITE}Repterek
STR_A001_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Nem <20>p<EFBFBD>thetsz ide rep<65>l<EFBFBD>teret...
STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} hang<6E>rja
STR_A003_NEW_AIRCRAFT :{BLACK}<7D>j rep<65>l<EFBFBD>g<EFBFBD>pek
@@ -2529,6 +2676,7 @@ STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Nem nevezheted
STR_A032_NAME_AIRCRAFT :{BLACK}Rep<65>l<EFBFBD>g<EFBFBD>p <20>tnevez<65>se
STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Az emberek <20>nnepelnek . . .{}Meg<65>rkezett az els<6C> rep<65>l<EFBFBD>g<EFBFBD>p {STATION} <20>llom<6F>sra!
STR_A034_PLANE_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Lezuhant egy rep<65>l<EFBFBD>g<EFBFBD>p!{}{COMMA16} ember halt meg a zuhan<61>s ut<75>n {STATION} <20>llom<6F>son
STR_PLANE_CRASH_OUT_OF_FUEL :{BLACK}{BIGFONT}Rep<65>l<EFBFBD> baleset!{}A rep<65>l<EFBFBD>nek elfogyott az <20>zemanyaga, {COMMA16} ember halt meg a zuhan<61>sban!
STR_A035_DESTINATIONS :{TINYFONT}{BLACK}C<>lpontok:
STR_A036 :{TINYFONT}{BLACK}{STATION}
STR_A037_RENAME :{BLACK}<7D>tnevez
@@ -2563,8 +2711,8 @@ STR_MULTIPLAYER_PAUSED :{WHITE}J
STR_PERFORMANCE_DETAIL :{WHITE}Teljes<65>tm<74>ny<6E>rt<72>kel<65>sek r<>szletez<65>se
STR_PERFORMANCE_DETAIL_KEY :{BLACK}R<>szletek
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}{TINYFONT}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}{TINYFONT}({INT32}/{INT32})
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA32}/{COMMA32})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{INT32}%
SET_PERFORMANCE_DETAIL_INT :{BLACK}{INT32}
############ Those following lines need to be in this order!!
@@ -2590,3 +2738,61 @@ STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}El
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Magas k<>lcs<63>n<EFBFBD>d van?
STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Megszerzett pontok az el<65>rhet<65> pontokb<6B>l
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Newgrf be<62>ll<6C>t<EFBFBD>sok
STR_NEWGRF_APPLY_CHANGES :{BLACK}Alkalmaz<61>s
STR_NEWGRF_SET_PARAMETERS :{BLACK}Param<61>terek be<62>ll<6C>t<EFBFBD>sa
STR_NEWGRF_TIP :{BLACK}Az <20>ltalad felinstall<6C>lt newgrf csomagok list<73>ja. Kattints a csomagra a be<62>ll<6C>t<EFBFBD>sok m<>dos<6F>t<EFBFBD>s<EFBFBD>hoz.
STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}Jelenleg nincsennek newgrf csomagok felinstall<6C>lva. Olvasd el a manu<6E>lban, hogyan kell install<6C>lni az <20>j grafik<69>kat.
STR_NEWGRF_FILENAME :{BLACK}F<>jln<6C>v:
STR_NEWGRF_GRF_ID :{BLACK}GRF ID:
STR_CURRENCY_WINDOW :{WHITE}Saj<61>t p<>nznem
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}<7D>rt<72>kar<61>ny: {ORANGE}{CURRENCY} = {POUNDSIGN} {COMMA16}
STR_CURRENCY_SEPARATOR :{LTBLUE}Elv<6C>laszt<7A>:
STR_CURRENCY_PREFIX :{LTBLUE}El<45>tag:
STR_CURRENCY_SUFFIX :{LTBLUE}El<45>tag:
STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Eur<75>ra v<>lt<6C>s: {ORANGE}{INT32}
STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Eur<75>ra v<>lt<6C>s: {ORANGE}soha
STR_CURRENCY_PREVIEW :{LTBLUE}El<45>n<EFBFBD>zet: {ORANGE}{CURRENCY}
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}A saj<61>t p<>nznem param<61>tereinek megv<67>ltoztat<61>sa
STR_TRAIN :{BLACK}{TRAIN}
STR_LORRY :{BLACK}{LORRY}
STR_PLANE :{BLACK}{PLANE}
STR_SHIP :{BLACK}{SHIP}
STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA16} Vonatok
STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA16} K<>z<EFBFBD>ti j<>rm<72>vek
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA16} Rep<65>l<EFBFBD>g<EFBFBD>pek
STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA16} Haj<61>k
STR_SCHEDULED_TRAINS_TIP :{BLACK}Kilist<73>zza az <20>sszes vonatot, aminek a menetrendj<64>ben szerepel ez az <20>llom<6F>s
STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Kilist<73>zza az <20>sszes k<>z<EFBFBD>ti j<>rm<72>vet, aminek a menetrendj<64>ben szerepel ez az <20>llom<6F>s
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Kilist<73>zza az <20>sszes rep<65>l<EFBFBD>t, aminek a menetrendj<64>ben szerepel ez az <20>llom<6F>s
STR_SCHEDULED_SHIPS_TIP :{BLACK}Kilist<73>zza az <20>sszes haj<61>t, aminek a menetrendj<64>ben szerepel ez az <20>llom<6F>s
STR_REPLACE_VEHICLES :{BLACK}J<>rm<72>vek lecser<65>l<EFBFBD>se
STR_REPLACE_VEHICLES_WHITE :{WHITE}J<>rm<72>csere
STR_REPLACE_VEHICLES_START :{BLACK}J<>rm<72>csere elkezd<7A>se
STR_REPLACE_VEHICLES_STOP :{BLACK}J<>rm<72>csere befejez<65>se
STR_NOT_REPLACING :{BLACK}Nem cser<65>lend<6E>
STR_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Nincs kiv<69>lasztva j<>rm<72>
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}V<>laszd ki mely mozdonyokat cser<65>lj<6C>k
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}A bal oldalon kiv<69>lasztott mozdonyok ilyen t<>pusuakra lesznek lecser<65>lve
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Nyomd meg ezt a gombot, ha nem akarod kicser<65>lni a mozdonyt a bal oldalon kiv<69>lasztottakra
STR_REPLACE_HELP_START_BUTTON :{BLACK}Nyomd meg ezt a gombot hogy a bal oldalon kiv<69>lasztott mozdonyokat lecser<65>ld a jobb oldalon kiv<69>lasztottra
STR_REPLACE_HELP_RAILTYPE :{BLACK}V<>laszd ki a cser<65>lend<6E> vas<61>tt<74>pust
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Megmutatja, hogy melyik bal oldali mozdonyt akarod kicser<65>lni
STR_REPLACE_HELP :{BLACK}Ez az opci<63> lehet<65>ve teszi, hogy kiv<69>lassz mozdonyt<79>pust <20>s lecser<65>ld m<>sfajt<6A>ra. Ez azt<7A>n automatikusan fog megt<67>rt<72>nni, amikor a j<>rm<72> karbantart<72>sra a dep<65>ba megy
STR_SHORT_DATE :{WHITE}{DATE_TINY}
############ Lists rail types
STR_RAIL_VEHICLES :Norm<72>l Vasutak
STR_MONORAIL_VEHICLES :Egys<79>n<EFBFBD> Vasutak
STR_MAGLEV_VEHICLES :Maglev Vasutak
############ End of list of rail types
STR_TINY_BLACK :{BLACK}{TINYFONT}{COMMA16}

1876
lang/icelandic.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -186,13 +186,7 @@ STR_00B4_CAN_T_DO_THIS :{WHITE}Non puoi fare questo....
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Non puoi ripulire l'area....
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Copyright Originale{COPYRIGHT} 1995 Chris Sawyer, Tutti i diritti riservati
STR_00B7_VERSION :{BLACK}OpenTTD versione {REV}
STR_00B8_ORIGINAL_DESIGN_PROGRAM :{BLACK}Concepito originariamente da Chris Sawyer
STR_00B9_ORIGINAL_GRAPHICS :{BLACK}Grafica di Simon Foster
STR_SPECIAL_THANKS :{BLACK}Ringraziamenti speciali vanno a:
STR_SPECIAL_THANKS_SIGNALS :{BLACK}<7D> Presegnali e Semafori {COPYRIGHT} 2003 Michael Blunck
STR_SPECIAL_THANKS_CANALS :{BLACK}<7D> Fondamenta per i binari sui pendii {COPYRIGHT} Marcin Grzegorczyk
STR_SPECIAL_THANKS_FOUNDATIONS :{BLACK}<7D> Grafica di canali e chiuse {COPYRIGHT} 2003-2004 George
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2004 The OpenTTD team
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2005 The OpenTTD team
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
@@ -310,6 +304,7 @@ STR_0134_UNIX :Unix
STR_0135_OSX :OSX
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
STR_0139_IMPERIAL_MILES :Imperiale (miglia)
STR_013A_METRIC_KILOMETERS :Metrico (kilometri)
@@ -342,7 +337,7 @@ STR_0157_PERFORMANCE_HISTORY_GRAPH :Grafico prestazioni
STR_0158_COMPANY_VALUE_GRAPH :Grafico valore societ<65>
STR_0159_CARGO_PAYMENT_RATES :Grafico % pagamento merce
STR_015A_COMPANY_LEAGUE_TABLE :Classifica societ<65>
STR_PERFORMANCE_DETAIL_MENU :Dettagli valutazione delle prestazioni
STR_PERFORMANCE_DETAIL_MENU :Dettagli prestazionali
############ range for menu ends
STR_015B_OPENTTD :{WHITE}OpenTTD
@@ -352,7 +347,8 @@ STR_015E_QUIT_GAME :Abbandona partita
STR_015F_QUIT :Esci
STR_0160_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Sei sicuro di voler abbandonare la partita in corso?
STR_0161_QUIT_GAME :{WHITE}Abbandona partita
STR_SORT_TIP :{BLACK}Seleziona criterio di ordinamento
STR_SORT_ORDER_TIP :{BLACK}Seleziona ordinamento (discendente/ascendente)
STR_SORT_CRITERIA_TIP :{BLACK}Seleziona il criterio d'ordinamento
SRT_SORT_BY :{BLACK}Ordina per
STR_SORT_BY_POPULATION :{BLACK}Popolazione
@@ -368,7 +364,7 @@ STR_SORT_BY_PROFIT_LAST_YEAR :Profitto dell'anno scorso
STR_SORT_BY_PROFIT_THIS_YEAR :Profitto di quest'anno
STR_SORT_BY_AGE :Et<45>
STR_SORT_BY_RELIABILITY :Affidabilit<69>
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Capacit<EFBFBD> totale per tipo di carico
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Tot. capacit<EFBFBD> per tipo di carico
STR_SORT_BY_MAX_SPEED :Velocit<69> massima
############ range for months starts
@@ -417,6 +413,7 @@ STR_0189 :{BLACK}{SMALLDOWNARROW}
STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}Non puoi cambiare l'intervallo di manutenzione...
STR_018B_CLOSE_WINDOW :{BLACK}Chiudi finestra
STR_018C_WINDOW_TITLE_DRAG_THIS :{BLACK}Nome finestra - trascinala per muovere la finestra
STR_STICKY_BUTTON :{BLACK} Marca questa finestra come inchiudibile con il tasto 'Chiudi TUTTE le finestre'
STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Demolisci edifici ecc... su una casella del terreno
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Abbassa un angolo del terreno
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}Alza un angolo del terreno
@@ -495,6 +492,8 @@ STR_01CD_SELECT_TUTORIAL_DEMONSTRATION :{WHITE}Seleziona Tutorial/Demonstrazi
STR_01CE_CARGO_ACCEPTED :{BLACK}Merci accettate: {LTBLUE}{STRING}
STR_01CF_CARGO_ACCEPTED :{BLACK}Merci accettate: {LTBLUE}{STRING}, {STRING}
STR_01D0_CARGO_ACCEPTED :{BLACK}Merci accettate: {LTBLUE}{STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_4 :{BLACK}Merci accettate: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_5 :{BLACK}Merci accettate: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}, {STRING}
############ range for cargo acecpted ends
STR_01D1_8 :({COMMA8}/8 {STRING})
@@ -537,7 +536,7 @@ STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Seleziona programma 'nuovo style'
STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Seleziona programma 'Personaliz. 1' (definito dall'utente)
STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Seleziona programma 'Personaliz. 2' (definito dall'utente)
STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Elimina programmazioni attuali (solo personalizzato 1 o personalizzato 2)
STR_01F9_SAVE_MUSIC_SETTINGS_TO :{BLACK}Salva le impostazioni
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Salva le impostazioni musicali
STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Clicca sul brano per aggiungerlo al programma corrente (solamente personallizzato 1 o personalizzato 2)
STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Seleziona programmazione casuale on/off
STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Mostra finestra 'selezione brani'
@@ -571,7 +570,6 @@ STR_0216_CAPITALIST :Capitalista
STR_0217_MAGNATE :Magnate
STR_0218_MOGUL :Mogul
STR_0219_TYCOON_OF_THE_CENTURY :Magnate del secolo
STR_021A :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} archivi '{STRING}' stato!
STR_021C_OF_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} di {STRING} archivi '{STRING}' stato!
STR_021D :{BLACK}
@@ -722,7 +720,7 @@ STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}Nomi veicoli
STR_02BD :{BLACK}{STRING}
STR_02BE_DEFAULT :Predefiniti
STR_02BF_CUSTOM :Personalizzati
STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK :{BLACK}Salva nomi personalizzati
STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Salva i nomi personalizzati
STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}Selezione nomi personalizzati
STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Salva nomi personalizzati dei veicoli
@@ -733,6 +731,8 @@ STR_02C5_DIFFICULTY_SETTINGS :Scelta difficolt
STR_02C6_DIFFICULTY_SETTINGS :Scelta difficolt<6C>
STR_02C7_CONFIG_PATCHES :Configura patch
STR_02C8_CONFIG_PATCHES :Configura patch
STR_NEWGRF_SETTINGS :Impostazioni Newgrf
STR_NEWGRF_SETTINGS2 :Impostazioni Newgrf
STR_GAMEOPTMENU_0A :
STR_GAMEOPTMENU_0B :
STR_02C9_TOWN_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Mostra nomi citt<74>
@@ -741,8 +741,8 @@ STR_02CB_STATION_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Mostra nomi stazioni
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Mostra nomi stazioni
STR_02CD_SIGNS_DISPLAYED :{CHECKMARK}{SETX 12}Mostra cartelli
STR_02CE_SIGNS_DISPLAYED :{SETX 12}Mostra cartelli
STR_CHECKPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Mostra Checkpoint
STR_CHECKPOINTS_DISPLAYED2 :{SETX 12}Mostra Checkpoints
STR_WAYPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Waypoints mostrati
STR_WAYPOINTS_DISPLAYED2 :{SETX 12}Waypoints mostrati
STR_02CF_FULL_ANIMATION :{CHECKMARK}{SETX 12}Animazione completa
STR_02D0_FULL_ANIMATION :{SETX 12}Animazione completa
STR_02D1_FULL_DETAIL :{CHECKMARK}{SETX 12}Massimo dettaglio
@@ -765,13 +765,13 @@ STR_02DC_DISPLAY_SUBSIDIES :{BLACK}Mostra sussidi
STR_02DD_SUBSIDIES :Sussidi
STR_02DE_MAP_OF_WORLD :Mappa del mondo
STR_EXTRA_VIEW_PORT :Mini visuale extra
STR_02DF_TOWN_DIRECTORY :Elenco Citt<74>
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Mini visuale {COMMA16}
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copia nella mini visuale
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copia la posizione dalla finestra principale alla mini visuale
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Copia dalla mini visuale
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copia la posizione dalla mini visuale alla finestra principale
STR_02DF_TOWN_DIRECTORY :Elenco Citt<74>
STR_02E0_CURRENCY_UNITS :{BLACK}Valuta
STR_02E1 :{BLACK}{SKIP}{STRING}
STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}Selezione valuta
@@ -795,16 +795,16 @@ STR_02F8_EVERY_3_MONTHS :Ogni 3 mesi
STR_02F9_EVERY_6_MONTHS :Ogni 6 mesi
STR_02FA_EVERY_12_MONTHS :Ogni 12 mesi
STR_02FB_START_A_NEW_GAME :{BLACK}Inizia nuovo gioco
STR_02FC_LOAD_A_SAVED_GAME_FROM :{BLACK}Carica partita salvata
STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Carica un gioco salvato
STR_02FD_VIEW_DEMONSTRATIONS_TUTORIALS :{BLACK}Guarda dimostrazione/tutorial
STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Crea uno scenario personalizzato
STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Seleziona giocatore singolo
STR_0300_SELECT_TWO_PLAYER_GAME :{BLACK}Seleziona due giocatori
STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}Seleziona un gioco multiplayer da 2-8 giocatori
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Mostra opzioni di gioco
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Mostra opzioni difficolt<6C>
STR_0303_START_A_NEW_GAME_USING :{BLACK}Inizia una partita con uno scenario personalizzato
STR_0304_QUIT :{BLACK}Esci
STR_0305_LEAVE_OPENTTD :{BLACK}Esci da 'OpenTTD'
STR_0305_QUIT_OPENTTD :{BLACK}Esci 'OpenTTD'
STR_0306_VIEW_DEMONSTRATION_TUTORIAL :{BLACK}Guarda dimostrazione/tutorial
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...pu<70> essere costruito solo in citt<74>
@@ -820,7 +820,7 @@ STR_0313_FUND_NEW_INDUSTRY :Finanzia nuove industrie
############ range ends here
STR_0314_FUND_NEW_INDUSTRY :{WHITE}Finanzia nuove industrie
STR_0315 :{STRING}
STR_JUST_STRING :{STRING}
STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...pu<70> essere costruito solo in citt<74>
STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...pu<70> essere costruito solo nella foresta pluviale
STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...pu<70> essere costruito solo in aree desertiche
@@ -842,51 +842,55 @@ STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ENGLISH :Inglese
STR_TOWNNAME_ORIGINAL_ENGLISH :Inglese
STR_TOWNNAME_FRENCH :Francese
STR_TOWNNAME_GERMAN :Tedesco
STR_TOWNNAME_AMERICAN :Americano
STR_TOWNNAME_LATIN_AMERICAN :Latino-Americano
STR_TOWNNAME_SILLY :Stupidi
STR_TOWNNAME_SWEDISH :Svedese
STR_TOWNNAME_DUTCH :Olandese
STR_TOWNNAME_FINNISH :Finlandese
STR_TOWNNAME_POLISH :Polacco
STR_TOWNNAME_CZECH :Cechi
STR_TOWNNAME_SLOVAKISH :Slovacco
STR_TOWNNAME_HUNGARIAN :Ungherese
STR_TOWNNAME_AUSTRIAN :Austriaci
STR_TOWNNAME_ROMANIAN :Rumeni
STR_TOWNNAME_CZECH :Cechi
############ end of townname region
STR_CURR_POUNDS :Sterline ({POUNDSIGN})
STR_CURR_DOLLARS :Dollari ($)
STR_CURR_FF :Franchi (FF)
STR_CURR_DM :Marco Tedesco (DM)
STR_CURR_GBP :Sterlina ({POUNDSIGN})
STR_CURR_USD :Dollaro ($)
STR_CURR_EUR :Euro (<28>)
STR_CURR_YEN :Yen ({YENSIGN})
STR_CURR_PT :Peseta (Pt)
STR_CURR_FT :Fiorino Ungherese (Ft)
STR_CURR_ZL :Zloty Polacca (zl)
STR_CURR_ATS :Scellino Austriano (ATS)
STR_CURR_BEF :Franco Belga (BEF)
STR_CURR_DKK :Corona Danese (DKK)
STR_CURR_FIM :Marco Finlandese(FIM)
STR_CURR_GRD :Drachma Greca (GRD)
STR_CURR_CHF :Franco Svizzero (CHF)
STR_CURR_NLG :Fiorino olandese (NLG)
STR_CURR_ITL :Lira Italiana (ITL)
STR_CURR_SEK :Corona Svedese (SEK)
STR_CURR_RUR :Rupie Russe (RUR)
STR_CURR_CZK :Corona Ceca (CZK)
STR_CURR_DEM :Marco Tedesco (DEM)
STR_CURR_DKK :Corona Danese (DKK)
STR_CURR_ESP :Peseta (ESP)
STR_CURR_FIM :Marco Finlandese(FIM)
STR_CURR_FRF :Franco (FRF)
STR_CURR_GRD :Drachma Greca (GRD)
STR_CURR_HUF :Forint Ungherese (HUF)
STR_CURR_ISK :Corona Islandese (ISK)
STR_CURR_ITL :Lira Italiana (ITL)
STR_CURR_NLG :Fiorino olandese (NLG)
STR_CURR_NOK :Corona Norvegese (NOK)
STR_CURR_PLN :Zloty Polacco (PLN)
STR_CURR_ROL :Leu rumeno (Lei)
STR_CURR_EUR :Euro (<28>)
STR_CURR_RUR :Rupie Russe (RUR)
STR_CURR_SEK :Corona Svedese (SEK)
STR_CURR_CUSTOM :Personalizza...
STR_OPTIONS_LANG :{BLACK}Lingua
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}Seleziona la lingua da utilizzare
STR_OPTIONS_FULLSCREEN :{BLACK}Schermo intero
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Barra questa casella per giocare a OpenTTD a schermo intero
STR_OPTIONS_RES :{BLACK}Risoluzione video
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_RES_TIP :{BLACK}Seleziona la risoluzione video da utilizzare
@@ -971,6 +975,7 @@ STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Consenti la costruzione di treni mo
STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Abilita accelerazione realistica per i treni: {ORANGE}{STRING}
STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Unisci stazioni ferroviarie quando sono vicine: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Lascia stazione quanto uno dei tipi di merce <20> a pieno carico: {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Usa l'algoritmo di caricamento migliorato: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflazione: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Scarica le merci in una stazione solo se richieste: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Consenti la costruzione di ponti molto lunghi: {ORANGE}{STRING}
@@ -1005,7 +1010,7 @@ STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Rinnova solo se disponibile il fo
STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Durata visualizzazione messaggio di errore: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Alberi invisibili (se edifici trasparenti): {ORANGE}{STRING}
STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}Dimensione limite delle nevi: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Copertura massima di una stazione: {ORANGE}{STRING} {RED}Attenzione: Valori elevati rallentano il gioco
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Copertura max. stazione: {ORANGE}{STRING} {RED}Attenzione: Valori alti rallentano il gioco
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Manutenzione elicotteri direttamente all<6C>eliporto: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Max treni per giocatore: {ORANGE}{STRING}
@@ -1037,6 +1042,8 @@ STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Posizione barra degli strumenti prin
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Sinistra
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :Centro
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :Destra
STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Raggio di snap delle finestre: {ORANGE}{STRING} px
STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Raggio di snap delle finestre: {ORANGE}disabilitato
STR_CONFIG_PATCHES_GUI :{BLACK}Interfaccia
STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Costruzione
@@ -1065,28 +1072,32 @@ STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Gioca come giocatore: {ORANGE}{COMMA16}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer magico (rimuove industrie e altri): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}I tunnel possono incrociarsi tra loro: {ORANGE}{STRING}
STR_CHEAT_BUILD_IN_PAUSE :{LTBLUE}Consenti costruzione quando in pausa: {ORANGE}{STRING}
STR_CHEAT_NO_JETCRASH :{LTBLUE}I jet non si schiantano troppo frequentemente nei piccolo aeroporti: {ORANGE} {STRING}
STR_CHEAT_NO_JETCRASH :{LTBLUE}I jet non si schiantano troppo di frequente nei piccoli aeroporti: {ORANGE} {STRING}
STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Cambia paesaggio: {ORANGE} {STRING}
STR_CHEAT_CHANGE_DATE :{LTBLUE}Cambia data: {ORANGE} {DATE_SHORT}
STR_HEADING_FOR_CHECKPOINT :{LTBLUE}Direzione {CHECKPOINT}
STR_HEADING_FOR_CHECKPOINT_VEL :{LTBLUE}Direzione {CHECKPOINT}, {VELOCITY}
STR_HEADING_FOR_WAYPOINT :{LTBLUE}Direzione {WAYPOINT}
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Direzione {WAYPOINT}, {VELOCITY}
STR_GO_TO_CHECKPOINT :Vai al {CHECKPOINT}
STR_GO_TO_WAYPOINT :Vai al {WAYPOINT}
STR_GO_NON_STOP_TO_WAYPOINT :Procedi non-stop per {WAYPOINT}
STR_CHECKPOINTNAME_CITY :Checkpoint {TOWN}
STR_CHECKPOINTNAME_CITY_SERIAL :Checkpoint {TOWN} #{COMMA16}
STR_LANDINFO_CHECKPOINT :Checkpoint
STR_WAYPOINTNAME_CITY :Waypoint {TOWN}
STR_WAYPOINTNAME_CITY_SERIAL :Waypoint {TOWN} #{COMMA16}
STR_LANDINFO_WAYPOINT :Waypoint
STR_CHECKPOINT_VIEWPORT :{WHITE}{CHECKPOINT}
STR_CHECKPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{CHECKPOINT}
STR_CHECKPOINT_RAW :{CHECKPOINT}
STR_EDIT_CHECKPOINT_NAME :{WHITE}Modifica nome checkpoint
STR_WAYPOINT :{WHITE}Waypoint
STR_WAYPOINT_GRAPHICS_TIP :{BLACK}Seleziona il tipo di waypoint
STR_CANT_CHANGE_CHECKPOINT_NAME :{WHITE}Non puoi cambiare il nome del checkpoint...
STR_CONVERT_RAIL_TO_CHECKPOINT_TIP :{BLACK}Converti binario in checkpoint
STR_CANT_BUILD_TRAIN_CHECKPOINT :{WHITE}Non puoi costruire checkpoint qui...
STR_CANT_REMOVE_TRAIN_CHECKPOINT :{WHITE}Non puoi rimuovere checkpoint...
STR_WAYPOINT_VIEWPORT :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{WAYPOINT}
STR_WAYPOINT_RAW :{WAYPOINT}
STR_EDIT_WAYPOINT_NAME :{WHITE}Cambia il nome al waypoint
STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Impossibile cambiare il nome al waypoint...
STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}Trasforma la ferrovia in un waypoint
STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Impossibile costruire un waypoint ferroviario qui...
STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Impossibile rimuovere un waypoint ferroviario qui...
STR_BUILD_AUTORAIL_TIP :{BLACK}Costruisci binario usando la modalit<69> automatica
@@ -1099,6 +1110,7 @@ STR_MANY_RANDOM_INDUSTRIES :{BLACK}Alcune industrie casuali
STR_RANDOM_INDUSTRIES_TIP :{BLACK}Copri la mappa con industrie costruite casualmente
STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Impossibile generare le industrie...
STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}Apri la barra 'Modellazione terreno' per alzare/abbassare il terreno, piantare alberi, ecc.
STR_LANDSCAPING_TOOLBAR :{WHITE}Modella terreno
STR_LEVEL_LAND_TOOLTIP :{BLACK}Livella terreno
@@ -1114,6 +1126,7 @@ STR_CANT_BUILD_LOCKS :{WHITE}Impossibile costruire una chiusa qui...
STR_BUILD_LOCKS_TIP :{BLACK}Costruisci chiusa
STR_LANDINFO_LOCK :Chiusa
STR_LANDINFO_COORDS :{BLACK}Coordinate: {LTBLUE}{NUMU16}x{NUMU16} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Impossibile rimuovere una porzione di stazione...
@@ -1171,37 +1184,38 @@ TEMP_AI_ACTIVATED :{WHITE}Attenzione: la nuova IA
############ network gui strings
TEMP_STRING_NO_NETWORK :{WHITE}Interfaccia di rete attualmente non completamente funzionante!{}Gli elementi non funzionanti sono stati disabilitati.
STR_NETWORK_MULTIPLAYER :{WHITE}Multiplayer
STR_NETWORK_FIND_SERVER :{BLACK}Trova server
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Cerca nella rete un server
STR_NETWORK_DIRECT_CONNECT :{BLACK}Connessione diretta
STR_NETWORK_ENTER_IP :{BLACK}Digita indirizzo IP del server
STR_NETWORK_DIRECT_CONNECT_TIP :{BLACK}Connetti ad un IP conosciuto
STR_NETWORK_START_SERVER :{BLACK}Avvia server
STR_NETWORK_START_SERVER_TIP :{BLACK}Avvia il tuo server
STR_NETWORK_PLAYER_NAME :{BLACK}Nome giocatore:
STR_NETWORK_ENTER_NAME_TIP :{BLACK}Questo <20> il nome con cui gli altri giocatori ti identificheranno
STR_NETWORK_CONNECTION :{BLACK}Connessione:
STR_NETWORK_CONNECTION_TIP :{BLACK}Scegli tra un gioco internet e un gioco in LAN (Local Area Network)
STR_NETWORK_SELECT_CONNECTION :{BLACK}Seleziona tipo di connessione:
STR_NETWORK_CONNECTION_TYPE_TIP :{BLACK}Seleziona tra una partita via Internet o un gioco nella rete locale
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_START_SERVER :{BLACK}Avvia server
STR_NETWORK_START_SERVER_TIP :{BLACK}Avvia il tuo server
STR_NETWORK_GAME_NAME :{BLACK}Nome
STR_NETWORK_GAME_NAME_TIP :{BLACK}Nome del gioco
STR_NETWORK_PLAYERS :{BLACK}#/#
STR_NETWORK_PLAYERS_TIP :{BLACK}Giocatori attualmente in questo gioco / Numero massimo di giocatori
STR_NETWORK_MAP_SIZE :{BLACK}Dimens.
STR_NETWORK_MAP_SIZE_TIP :{BLACK}Dimensione della mappa
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Lingua, versione server, ecc.
STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Clicca su un nome della lista per selezionarlo
STR_NETWORK_PLAYERS_VAL :{BLACK}{COMMA8}/{COMMA8}
STR_NETWORK_FIND_SERVER :{BLACK}Trova server
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Cerca nella rete un server
STR_NETWORK_ADD_SERVER :{BLACK}Aggiungi server
STR_NETWORK_ADD_SERVER_TIP :{BLACK}Aggiungi un server alla lista che verr<72> sempre controllata per giochi attivi.
STR_NETWORK_ENTER_IP :{BLACK}Digita indirizzo IP del server
STR_NETWORK_CLIENTS_ONLINE :{BLACK}{COMMA16}/{COMMA16}
STR_NETWORK_CLIENTS_CAPTION :{BLACK}Clients
STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Clients online / clients max
STR_NETWORK_GAME_INFO :{SILVER}GAME INFO
STR_ORANGE :{ORANGE}{STRING}
STR_NETWORK_CLIENTS :{SILVER}Clients: {WHITE}{COMMA8} / {COMMA8}
STR_NETWORK_LANGUAGE :{SILVER}Lingua: {WHITE}{STRING}
STR_NETWORK_TILESET :{SILVER}Tileset: {WHITE}{STRING}
STR_NETWORK_MAP_SIZE :{SILVER}Dimens: {WHITE}{COMMA16}x{COMMA16}
STR_NETWORK_SERVER_VERSION :{SILVER}Versione server: {WHITE}{STRING}
STR_NETWORK_PASSWORD :{BLACK}Password:
STR_NETWORK_JOIN_GAME :{BLACK}Entra nel gioco
@@ -1210,20 +1224,11 @@ STR_NETWORK_START_GAME_WINDOW :{WHITE}Avvia nuovo gioco
STR_NETWORK_NEW_GAME_NAME :{BLACK}Nome gioco:
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}Il nome della partita verr<72> visualizzato dagli altri giocatori nel menu di selezione del gioco
STR_NETWORK_PASSWORD :{BLACK}Password:
STR_NETWORK_PASSWORD_TIP :{BLACK}Proteggi il tuo gioco con una password se non vuoi che altre persone vi entrino
STR_NETWORK_SELECT_MAP :{BLACK}Seleziona una mappa:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Con quale mappa vuoi giocare?
STR_NETWORK_NUMBER_OF_PLAYERS :{BLACK}Numero di giocatori:
STR_NETWORK_NUMBER_OF_PLAYERS_TIP :{BLACK}Seleziona il numero Massimo di giocatori. Non <20> necessario che tutti gli spazi vengano occupati.
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{STRING}
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_PLAYERS :2 giocatori
STR_NETWORK_3_PLAYERS :3 giocatori
STR_NETWORK_4_PLAYERS :4 giocatori
STR_NETWORK_5_PLAYERS :5 giocatori
STR_NETWORK_6_PLAYERS :6 giocatori
STR_NETWORK_7_PLAYERS :7 giocatori
STR_NETWORK_8_PLAYERS :8 giocatori
STR_NETWORK_START_GAME :{BLACK}Avvia gioco
STR_NETWORK_START_GAME_TIP :{BLACK}Inizia una nuova partita in rete partendo da una mappa random o da uno scenario
STR_NETWORK_LOAD_GAME :{BLACK}Carica Gioco
@@ -1231,17 +1236,27 @@ STR_NETWORK_LOAD_GAME_TIP :{BLACK}Riprendi una partita salvata in precedenza
STR_NETWORK_LOAD_SCENARIO :{BLACK}Carica Scenario
STR_NETWORK_LOAD_SCENARIO_TIP :{BLACK}Inizia una nuova partita in rete partendo da uno scenario
############ Leave those lines in this order!!
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Stanza di gioco multiplayer
STR_NETWORK_SEND :{BLACK}Invia
STR_NETWORK_SEND_TIP :{BLACK}Invia un messaggio agli altri giocatori
STR_NETWORK_COMPANY_NAME :{BLACK}Nome compagnia:
STR_NETWORK_COMPANY_NAME_TIP :{BLACK}Cambia il nome della tua compagnia. Premi Invio per confermare le modifiche
STR_NETWORK_SPECTATE_GAME :{BLACK}Assisti alla partita
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Assisti al gioco come spettatore
STR_NETWORK_NEW_COMPANY :{BLACK}Nuova compagnia
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Apri una nuova compagnia
STR_NETWORK_READY :{BLACK}Pronto
STR_NETWORK_SPECTATE_GAME :{BLACK}Assisti alla partita
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Assisti al gioco come spettatore
STR_NETWORK_COMPANY_NAME :{SILVER}Nome compagnia: {WHITE}{STRING}
STR_NETWORK_PLAYERS :{BLACK}#/#
############ Leave those lines in this order!!
############ End of leave-in-this-order
STR_NETWORK_ERR_NOTAVAILABLE :{WHITE} Nessun dispositivo di rete trovato o compilato senza ENABLE_NETWORK
STR_NETWORK_ERR_NOSERVER :{WHITE} Impossibile trovare partite in rete
@@ -1251,6 +1266,13 @@ STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} Connessione alla partita in rete per
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Impossibile caricare il savegame dal server.
STR_NETWORK_ERR_TIMEOUT :{WHITE} Connessione #{NUMU16} time-out.
############ Leave those lines in this order!!
############ End of leave-in-this-order
############ end network gui strings
@@ -1774,6 +1796,7 @@ STR_6812_QUANTITY_OF_SEA_LAKES :{LTBLUE}Quantit
STR_6813_ECONOMY :{LTBLUE}Economia: {ORANGE}{STRING}
STR_6814_TRAIN_REVERSING :{LTBLUE}Inversione treni: {ORANGE}{STRING}
STR_6815_DISASTERS :{LTBLUE}Disastri: {ORANGE}{STRING}
STR_16816_CITY_APPROVAL :{LTBLUE}Atteggiamento delle citt<74> verso i cambiamenti nel territorio: {ORANGE}{STRING}
############ range for difficulty settings ends
STR_26816_NONE :Nessuno
@@ -1858,6 +1881,7 @@ STR_7024 :{COMMA32}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Grafico Profitti Operazionali
STR_7026_BANK_BALANCE :{WHITE}Bilancio Bancario
STR_7027_LOAN :{WHITE}Prestito
STR_MAX_LOAN :{WHITE}Prestito Massimo: {BLACK}{CURRENCY64}
STR_7028 :{BLACK}{CURRENCY64}
STR_7029_BORROW :<CHECK>{BLACK}Richiedi {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702A_REPAY :<CHECK>{BLACK}Ripaga {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
@@ -1931,8 +1955,10 @@ STR_706D_PRESIDENT :Presidente
STR_706E_TYCOON :magnate
STR_706F_BUILD_HQ :{BLACK}Costr. Sede
STR_7070_BUILD_COMPANY_HEADQUARTERS :{BLACK}Costruisci/guarda la sede della societ<65>
STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Sposta la sede della compagnia pagando 1% del valore societario
STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Non puoi costruire la sede della compagnia...
STR_7072_VIEW_HQ :{BLACK}Guarda Sede
STR_RELOCATE_HQ :{BLACK}Sposta Sede
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Recessione Mondiale!{}{}Gli esperti finanziari temono la peggior crisi economica!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recessione Finita!{}{}Rialzo negli scambi d<> fiducia alle industrie per un rafforzamento economico!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Seleziona dimensione grande/piccola della finestra
@@ -2236,6 +2262,7 @@ STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Manutenzione non-stop a {TOWN} Deposito
STR_HEADING_FOR_TRAIN_DEPOT :{LTBLUE}Direzione {TOWN} Deposito
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{LTBLUE}Direzione {TOWN} Deposito, {VELOCITY}
STR_INVALID_ORDER :{RED} (Ordine non Valido)
STR_UNKNOWN_DESTINATION :destinazione sconosciuta
STR_8812_EMPTY :{LTBLUE}Vuoto
@@ -2243,7 +2270,7 @@ STR_8813_FROM :{LTBLUE}{CARGO} da {STATION}
STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}Treno {COMMA16} st<73> aspettando nel deposito
STR_8815_NEW_VEHICLES :{BLACK}Nuovi Veicoli
STR_8816 :{BLACK}-
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Costo: {GOLD}{CURRENCY}{BLACK} Peso: {GOLD}{COMMA16}t{}{BLACK}Velocit<69>: {GOLD}{VELOCITY}{BLACK} Potenza: {GOLD}{COMMA16}cv{}{BLACK}Consumi: {GOLD}{CURRENCY}/anno{}{BLACK}Capienza: {GOLD}{STRING}{}{BLACK}Progettato nel: {GOLD}{NUMU16}{BLACK} Vita: {GOLD}{COMMA16} anni{}{BLACK}Max. Affidabilit<69>: {GOLD}{COMMA8}%
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Costo: {GOLD}{CURRENCY}{BLACK} Peso: {GOLD}{COMMA16}t{}{BLACK}Velocit<69>: {GOLD}{VELOCITY}{BLACK} Potenza: {GOLD}{COMMA32}cv{}{BLACK}Consumi: {GOLD}{CURRENCY}/anno{}{BLACK}Capienza: {GOLD}{STRING}{}{BLACK}Progettato nel: {GOLD}{NUMU16}{BLACK} Vita: {GOLD}{COMMA16} anni{}{BLACK}Max. Affidabilit<69>: {GOLD}{COMMA8}%
STR_8818_INFORMATION :{BLACK}Informazioni
STR_8819_TRAIN_TOO_LONG :{WHITE}Treno troppo lungo
STR_881A_TRAINS_CAN_ONLY_BE_ALTERED :{WHITE}Un treno pu<70> essere modificato solo quando <20> fermo nel deposito
@@ -2282,6 +2309,7 @@ STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Non puoi vendere veicolo ferrovi
STR_883A_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Non riesce a trovare il deposito locale
STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Non puoi far fermare/ripartire il treno...
STR_883C_SERVICING_INTERVAL_DAYS :{BLACK}Intervallo Manutenz.: {LTBLUE}{COMMA16}giorni{BLACK} Ultima Manut.: {LTBLUE}{DATE_LONG}
STR_SERVICING_INTERVAL_PERCENT :{BLACK}Intervallo Manutenz.: {LTBLUE}{COMMA16}%{BLACK} Ultima Manut.: {LTBLUE}{DATE_LONG}
STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Treni - fai clic sul treno per le informazioni
STR_883E_BUILD_NEW_TRAINS_REQUIRES :{BLACK}Costruisci nuovi treni (Necessario deposito)
STR_883F_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Treni - fai clic sul treno per le informazioni, trascina i veicoli per aggiungerli/rimuoverli dal treno
@@ -2469,7 +2497,6 @@ STR_GO_TO_SHIP_DEPOT :Vai a {TOWN} Deposito Navale
SERVICE_AT_SHIP_DEPOT :Manutenzione a {TOWN} Deposito Navale
##id 0xA000
STR_A000_AIRPORT_CONSTRUCT :{WHITE}Costruz. areoportuali
STR_A001_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Non puoi costruire aeroporto qui...
STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} Hangar
STR_A003_NEW_AIRCRAFT :{BLACK}Nuovo Aereo
@@ -2548,11 +2575,66 @@ STR_B002_OIL_REFINERY_EXPLOSION :{BLACK}{BIGFONT}Raffineria esplosa vicino a
STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS :{BLACK}{BIGFONT}Fabbrica distrutta in circostanze sospette vicino a {TOWN}!
STR_B004_UFO_LANDS_NEAR :{BLACK}{BIGFONT}'UFO' atterra vicino a {TOWN}!
STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Cedimento in una miniera di carbone lascia tracce di distruzione vicino a {TOWN}!
STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Alluvione!{}{COMMA16} distrutto o disperso a seguito di una mortale alluvione!
STR_BRIBE_FAILED :{WHITE}Il tentativo di corruzione <20> stato
STR_BRIBE_FAILED_2 :{WHITE}scoperto dagli ispettori regionali.
STR_BUILD_DATE :{BLACK}Realizzato il: {LTBLUE}{DATE_LONG}
STR_MULTIPLAYER_PAUSED :{WHITE}Gioco in pausa.{}Il comando non pu<70> essere eseguito
STR_PERFORMANCE_DETAIL :{WHITE}Dettagli valutazione delle prestazioni
STR_PERFORMANCE_DETAIL_KEY :{BLACK}Dettagli
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA32}/{COMMA32})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{INT32}%
SET_PERFORMANCE_DETAIL_INT :{BLACK}{INT32}
############ Those following lines need to be in this order!!
STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Veicoli:
STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Stazioni:
STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Profitto Min.:
STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Incasso Min.:
STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Incasso Max.:
STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Trasportati:
STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Cargo:
STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Denaro:
STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Prestito:
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Totale:
############ End of order list
STR_PERFORMANCE_DETAIL_VEHICLES_TIP :{BLACK}Numero di veicoli. Include Veicoli Stradali, Treni, Navi e Aerei.
STR_PERFORMANCE_DETAIL_STATIONS_TIP :{BLACK}Numero di blocchi stazione. Ogni parte di una stazione (e.g. stazione ferroviaria, fermata dell'autobus, aereoporti) viene contata, anche se insieme formano un'unica stazione.
STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP :{BLACK}Profitto del veicolo con l'incasso minore (tra tutti i veicoli pi<70> vecchi di 2 anni)
STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP :{BLACK}Ammontare di denaro guadagnato nel mese con il minimo profitto degli ultimi 12 quarti
STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP :{BLACK}Ammontare di denaro guadagnato nel mese con il massimo profitto degli ultimi 12 quarti
STR_PERFORMANCE_DETAIL_DELIVERED_TIP :{BLACK}Unit<69> di merce trasportata nell'ultimo quarto.
STR_PERFORMANCE_DETAIL_CARGO_TIP :{BLACK}Tipi di merci trasportate nell'ultimo quarto.
STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Ammontare di denaro in tasca
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Hai preso un prestito troppo elevato?
STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Totale dei punti rispetto ad un massimo di punti possibili
STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}Non ci sono attualmente file newgrf installati! Fare riferimento al manuale per installarne di nuovi
STR_NEWGRF_FILENAME :{BLACK}Nome file:
STR_NEWGRF_GRF_ID :{BLACK}GRF ID:
STR_TRAIN :{BLACK}{TRAIN}
STR_LORRY :{BLACK}{LORRY}
STR_PLANE :{BLACK}{PLANE}
STR_SHIP :{BLACK}{SHIP}
STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA16} Treni
STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA16} Veicoli
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA16} Aerei
STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA16} Navi
STR_SCHEDULED_TRAINS_TIP :{BLACK}Mostra tutti i treni che hanno questa stazione tra gli ordini
STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Mostra tutti i veicoli che hanno questa stazione tra gli ordini
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Mostra tutti gli aerei che hanno questa stazione tra gli ordini
STR_SCHEDULED_SHIPS_TIP :{BLACK}Mostra tutte le navi che hanno questo porto tra gli ordini
############ Lists rail types
############ End of list of rail types

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2762
lang/portuguese.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -186,13 +186,8 @@ STR_00B4_CAN_T_DO_THIS :{WHITE}Nu pot face asta....
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Nu pot cur<75>ta terenul....
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, toate drepturile rezervate
STR_00B7_VERSION :{BLACK}OpenTTD versiunea {REV}
STR_00B8_ORIGINAL_DESIGN_PROGRAM :{BLACK}Design original de Chris Sawyer
STR_00B9_ORIGINAL_GRAPHICS :{BLACK}Grafic<69> original<61> de Simon Foster
STR_SPECIAL_THANKS :{BLACK}Multumiri speciale:
STR_SPECIAL_THANKS_SIGNALS :{BLACK}<7D> Pre-semnalizare si semafoare {COPYRIGHT} 2003 Michael Blunck
STR_SPECIAL_THANKS_CANALS :{BLACK}<7D> Fundatiile pentru constructii <20>n pant<6E> {COPYRIGHT} Marcin Grzegorczyk
STR_SPECIAL_THANKS_FOUNDATIONS :{BLACK}<7D> Grafic<69> pentru canale/ecluze {COPYRIGHT} 2003-2004 George
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2004 Echipa OpenTTD
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2005 Echipa OpenTTD
STR_TRANSLATED_BY :{BLACK} Translator(i) -
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
@@ -310,6 +305,8 @@ STR_0134_UNIX :Unix
STR_0135_OSX :OS X
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_0139_IMPERIAL_MILES :Anglo-americane (Mile)
STR_013A_METRIC_KILOMETERS :Metrice (Kilometri)
@@ -352,7 +349,8 @@ STR_015E_QUIT_GAME :Iesire
STR_015F_QUIT :Iesire din joc
STR_0160_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Esti sigur c<> vrei s<> renunti la acest joc?
STR_0161_QUIT_GAME :{WHITE}Iesire din joc
STR_SORT_TIP :{BLACK}Alege criteriul de sortare
STR_SORT_ORDER_TIP :{BLACK}Alegeti ordinea de sortare ascendenta/descendenta
STR_SORT_CRITERIA_TIP :{BLACK}Alegeti criteriul de sortare
SRT_SORT_BY :{BLACK}Ordoneaza dupa
STR_SORT_BY_POPULATION :{BLACK}Populatia
@@ -417,6 +415,8 @@ STR_0189 :{BLACK}{SMALLDOWNARROW}
STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}Nu pot schimba intervalul de service...
STR_018B_CLOSE_WINDOW :{BLACK}<7D>nchide fereastra
STR_018C_WINDOW_TITLE_DRAG_THIS :{BLACK}Titlul ferestrei - trage de aici pentru a muta fereastra
STR_STICKY_BUTTON :{BLACK}Mark this window as undeletable for the 'Close All Windows' key
STR_RESIZE_BUTTON :{BLACK}Click&drag pentru a schimba marimea ferestrei
STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Demoleaz<61> cl<63>diri, str<74>zi, etc. pe un p<>trat de teren
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Scade altitudinea unui v<>rf de teren
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}M<>reste altitudinea unui v<>rf de teren
@@ -495,6 +495,8 @@ STR_01CD_SELECT_TUTORIAL_DEMONSTRATION :{WHITE}Alege vizionarea unui tutorial
STR_01CE_CARGO_ACCEPTED :{BLACK}<7D>nc<6E>rc<72>turi acceptate: {LTBLUE}{STRING}
STR_01CF_CARGO_ACCEPTED :{BLACK}<7D>nc<6E>rc<72>turi acceptate: {LTBLUE}{STRING}, {STRING}
STR_01D0_CARGO_ACCEPTED :{BLACK}<7D>nc<6E>rc<72>turi acceptate: {LTBLUE}{STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_4 :{BLACK}<7D>nc<6E>rc<72>turi acceptate: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_5 :{BLACK}<7D>nc<6E>rc<72>turi acceptate: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}, {STRING}
############ range for cargo acecpted ends
STR_01D1_8 :({COMMA8}/8 {STRING})
@@ -537,7 +539,7 @@ STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Selecteaz
STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Selecteaz<61> programul personal 1
STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Selecteaz<61> programul personal 2
STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Sterge programul curent (doar pentru cele personale)
STR_01F9_SAVE_MUSIC_SETTINGS_TO :{BLACK}Salveaz<EFBFBD> setarile musicale pe disc
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Salveaza setarile pentru muzica
STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Click pe o melodie pentru a ad<61>uga-o in programul personal curent
STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Comutator pentru amestecarea melodiilor (da/nu)
STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Afiseaza fereastra pentru selectia melodiilor
@@ -562,7 +564,8 @@ STR_020D_CHANGES_OF_CARGO_ACCEPTANCE :{YELLOW}Schimb
STR_020E_SUBSIDIES :{YELLOW}Subventii
STR_020F_GENERAL_INFORMATION :{YELLOW}Informatii generale
STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO :{WHITE}...prea departe de destinatia precedent<6E>
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Clasamentul companiilor in anul {}(Titlu: {STRING})
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Primele companii care au atins {NUMU16}{}(Nivelul {STRING})
STR_TOP_COMPANIES_NETWORK_GAME :{BIGFONT}{BLACK}Clasamentul companiilor in {NUMU16}
STR_0212 :{BIGFONT}{COMMA16}.
STR_0213_BUSINESSMAN :Om de afaceri
STR_0214_ENTREPRENEUR :<3A>ntreprinz<6E>tor
@@ -571,9 +574,10 @@ STR_0216_CAPITALIST :Capitalist
STR_0217_MAGNATE :Magnat
STR_0218_MOGUL :Mogul
STR_0219_TYCOON_OF_THE_CENTURY :Magnatul Secolului
STR_021A :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} a obtinut titlul de '{STRING}'!
STR_021C_OF_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} de la {STRING} a obtinut titlul de '{STRING}'!
STR_HIGHSCORE_NAME :{BIGFONT}{STRING}, {STRING}
STR_HIGHSCORE_STATS :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BLACK}{BIGFONT}{STRING} a dobandit titlul de '{STRING}'!
STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{STRING} al {STRING} dobandeste titlul de '{STRING}'!
STR_021D :{BLACK}
STR_021E :{WHITE}
STR_021F :{BLUE}{COMMA16}
@@ -722,7 +726,7 @@ STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}Numele vehiculelor si modelelor
STR_02BD :{BLACK}{STRING}
STR_02BE_DEFAULT :Prestabilit
STR_02BF_CUSTOM :Propriu
STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK :{BLACK}Salveaz<EFBFBD> numele proprii pe disc
STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Salveaza numele proprii
STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}Selecteaz<61> numele modelelor
STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Salveaz<61> pe disc numele personalizate de m<>rci si modele
@@ -733,6 +737,8 @@ STR_02C5_DIFFICULTY_SETTINGS :Set
STR_02C6_DIFFICULTY_SETTINGS :Set<65>ri dificultate
STR_02C7_CONFIG_PATCHES :Configurare patch
STR_02C8_CONFIG_PATCHES :Configurare patch
STR_NEWGRF_SETTINGS :Setari Newgrf
STR_NEWGRF_SETTINGS2 :Setari Newgrf
STR_GAMEOPTMENU_0A :
STR_GAMEOPTMENU_0B :
STR_02C9_TOWN_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Afiseaz<61> numele oraselor
@@ -741,8 +747,8 @@ STR_02CB_STATION_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Afiseaz
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Afiseaz<61> numele statiilor
STR_02CD_SIGNS_DISPLAYED :{CHECKMARK}{SETX 12}Afiseaz<61> semnele de pe hart<72>
STR_02CE_SIGNS_DISPLAYED :{SETX 12}Afiseaz<61> semnele de pe hart<72>
STR_CHECKPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Afiseaz<EFBFBD> checkpoint-urile
STR_CHECKPOINTS_DISPLAYED2 :{SETX 12}Afiseaz<EFBFBD> checkpoint-urile
STR_WAYPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Afisare puncte de tranzit
STR_WAYPOINTS_DISPLAYED2 :{SETX 12}Afisare puncte de tranzit
STR_02CF_FULL_ANIMATION :{CHECKMARK}{SETX 12}Animatie complet<65>
STR_02D0_FULL_ANIMATION :{SETX 12}Animatie complet<65>
STR_02D1_FULL_DETAIL :{CHECKMARK}{SETX 12}Detalii grafice complete
@@ -765,13 +771,13 @@ STR_02DC_DISPLAY_SUBSIDIES :{BLACK}Afiseaz
STR_02DD_SUBSIDIES :Subventii (F6)
STR_02DE_MAP_OF_WORLD :Harta lumii (F4)
STR_EXTRA_VIEW_PORT :Extra ecran
STR_02DF_TOWN_DIRECTORY :Lista oraselor
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Ecran{COMMA16}
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copiaza pe ecranul principal
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiaza locatia ecranului principal in acest ecran
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Importa din ecran
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Importa locatia acestui ecran in ecranul principal
STR_02DF_TOWN_DIRECTORY :Lista oraselor
STR_02E0_CURRENCY_UNITS :{BLACK}Unit<69>ti monetare
STR_02E1 :{BLACK}{SKIP}{STRING}
STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}Alege unitatea monetar<61>
@@ -795,16 +801,16 @@ STR_02F8_EVERY_3_MONTHS :La fiecare 3 luni
STR_02F9_EVERY_6_MONTHS :La fiecare 6 luni
STR_02FA_EVERY_12_MONTHS :La fiecare 12 luni
STR_02FB_START_A_NEW_GAME :{BLACK}<7D>ncepere joc nou
STR_02FC_LOAD_A_SAVED_GAME_FROM :{BLACK}<EFBFBD>ncarc<EFBFBD> un joc
STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Incarca un joc salvat
STR_02FD_VIEW_DEMONSTRATIONS_TUTORIALS :{BLACK}Vizionare demo-uri/tutoriale
STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Creeaz<61> un joc/scenariu propriu
STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Alege un joc cu un singur juc<75>tor
STR_0300_SELECT_TWO_PLAYER_GAME :{BLACK}Alege un joc multiplayer
STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}Alege un joc multiplayer cu 2-8 jucatori
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Afiseaz<61> optiunile jocului
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Afiseaza optiunile pentru alegerea dificult<6C>tii
STR_0303_START_A_NEW_GAME_USING :{BLACK}<7D>nceperea unui joc nou folosind un scenariu deja existent
STR_0304_QUIT :{BLACK}Iesire
STR_0305_LEAVE_OPENTTD :{BLACK}Iesire din OpenTTD
STR_0305_QUIT_OPENTTD :{BLACK}Iesi din 'OpenTTD'
STR_0306_VIEW_DEMONSTRATION_TUTORIAL :{BLACK}Vizionare demonstratie/tutorial
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...se poate construi doar <20>n orase
@@ -820,7 +826,7 @@ STR_0313_FUND_NEW_INDUSTRY :Obiectiv industrial nou
############ range ends here
STR_0314_FUND_NEW_INDUSTRY :{WHITE}Construieste un nou obiectiv ind.
STR_0315 :{STRING}
STR_JUST_STRING :{STRING}
STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...se poate construi doar in orase
STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...se poate construi doar in padurile ecuatoriale
STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...se poate construi doar in zonele de desert
@@ -842,51 +848,58 @@ STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ENGLISH :Englezesti
STR_TOWNNAME_ORIGINAL_ENGLISH :Engleza (Original)
STR_TOWNNAME_FRENCH :Frantuzesti
STR_TOWNNAME_GERMAN :Germane
STR_TOWNNAME_AMERICAN :Americane
STR_TOWNNAME_ADDITIONAL_ENGLISH :Engleza (Aditional)
STR_TOWNNAME_LATIN_AMERICAN :Latino-Americane
STR_TOWNNAME_SILLY :Amuzante (englez<65>)
STR_TOWNNAME_SWEDISH :Suedeze
STR_TOWNNAME_DUTCH :Olandeze
STR_TOWNNAME_FINNISH :Finlandeze
STR_TOWNNAME_POLISH :Poloneze
STR_TOWNNAME_CZECH :Cehe
STR_TOWNNAME_SLOVAKISH :Slovace
STR_TOWNNAME_NORWEGIAN :Norvegian
STR_TOWNNAME_HUNGARIAN :Unguresti
STR_TOWNNAME_AUSTRIAN :Austriece
STR_TOWNNAME_ROMANIAN :Romanesti
STR_TOWNNAME_CZECH :Cehe
STR_TOWNNAME_SWISS :Elvetian
############ end of townname region
STR_CURR_POUNDS :Lir<EFBFBD> sterlin<EFBFBD> ({POUNDSIGN})
STR_CURR_DOLLARS :Dolar ($)
STR_CURR_FF :Franc francez (FF)
STR_CURR_DM :Marc<72> german<61> (DM)
STR_CURR_GBP :Lira sterlina ({POUNDSIGN})
STR_CURR_USD :Dolar ($)
STR_CURR_EUR :Euro (<28>)
STR_CURR_YEN :Yen japonez ({YENSIGN})
STR_CURR_PT :Peseta spaniol<6F> (Pt)
STR_CURR_FT :Forint unguresc (Ft)
STR_CURR_ZL :Zlot polonez (zl)
STR_CURR_ATS :Siling austriac (ATS)
STR_CURR_BEF :Franc belgian (BEF)
STR_CURR_DKK :Coroan<61> danez<65> (DKK)
STR_CURR_FIM :Marc<72> finlandez<65> (FIM)
STR_CURR_GRD :Drahm<68> greceasc<73> (GRD)
STR_CURR_CHF :Franc elvetian (CHF)
STR_CURR_NLG :Gulden olandez (NLG)
STR_CURR_ITL :Lir<69> italian<61> (ITL)
STR_CURR_SEK :Coroan<61> suedez<65> (SEK)
STR_CURR_RUR :Rubl<62> ruseasc<73> (RUR)
STR_CURR_CZK :Coroan<61> ceh<65> (CZK)
STR_CURR_DEM :Marca germana (DEM)
STR_CURR_DKK :Coroan<61> danez<65> (DKK)
STR_CURR_ESP :Peseta (ESP)
STR_CURR_FIM :Marc<72> finlandez<65> (FIM)
STR_CURR_FRF :Franc (FRF)
STR_CURR_GRD :Drahm<68> greceasc<73> (GRD)
STR_CURR_HUF :Forint (HUF)
STR_CURR_ISK :Coroan<61> islandez<65> (ISK)
STR_CURR_ITL :Lir<69> italian<61> (ITL)
STR_CURR_NLG :Gulden olandez (NLG)
STR_CURR_NOK :Coroan<61> norvegian<61> (NOK)
STR_CURR_PLN :Zlot (PLN)
STR_CURR_ROL :Leul Greu Romanesc (Lei)
STR_CURR_EUR :Euro (<28>)
STR_CURR_RUR :Rubl<EFBFBD> ruseasc<73> (RUR)
STR_CURR_SEK :Coroan<61> suedez<65> (SEK)
STR_CURR_CUSTOM :Propriu...
STR_OPTIONS_LANG :{BLACK}Limba
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}Alege limba <20>n care doresti afisat<61> interfata
STR_OPTIONS_FULLSCREEN :{BLACK}Mod
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Bifeaza aceasta casuta pentru a juca in modul
STR_OPTIONS_RES :{BLACK}Rezolutia ecranului
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_RES_TIP :{BLACK}Alege rezolutia dorit<69> pentru joc
@@ -966,11 +979,13 @@ STR_CONFIG_PATCHES_OFF :inactiv
STR_CONFIG_PATCHES_ON :activ
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Afiseaz<61> viteza vehiculelor in bara de jos: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Permite construirea pe coast<73> si in pant<6E>: {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Permite arii de cuprindere mai realistice: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Permite demolarea unui nr. mai mare constructii: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Permite constructia de trenuri foarte lungi: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Permite acceleratie realistic<69> pentru trenuri: {ORANGE}{STRING}
STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Uneste g<>rile al<61>turate: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}P<>r<EFBFBD>seste statia c<>nd orice tip de marf<72> este 'full load': {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Foloseste algoritmul de LOAD imbunatatit: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflatia: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Livreaz<61> marfa doar in statiile unde aceasta este ceruta: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Permite constructia de poduri foarte lungi: {ORANGE}{STRING}
@@ -1003,6 +1018,7 @@ STR_CONFIG_PATCHES_AUTORENEW_VEHICLE :{LTBLUE}
STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}<7D>nnoire automat<61> cu {ORANGE}{STRING}{LTBLUE} luni p<>n<EFBFBD> la/dup<75> atingerea vechimii max.
STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Fonduri minime pentru <20>nnoire automat<61>: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Durata mesajelor de eroare: {ORANGE}{STRING}
STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Afiseaza populatia unui oras langa nume: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Ascunde arborii la alegerea optiunii 'cl<63>diri transparente': {ORANGE}{STRING}
STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}Altitudinea de <20>nz<6E>pezire: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}M<>rimea maxim<69> a statiilor: {ORANGE}{STRING} {RED}(valorile mari <20>ncetinesc jocul!)
@@ -1028,15 +1044,20 @@ STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Intervalul de service presetat p
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED :{LTBLUE}Intervalul de service presetat pentru aeronave: {ORANGE}dezactivat
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Intervalul de service presetat pentru nave: {ORANGE}{STRING} zile
STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Intervalul de service presetat pentru nave: {ORANGE}dezactivat
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Deactivare service cand defectiunile sunt anulate: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_DATE :{LTBLUE}Stirile <20>n culori apar <20>n anul: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STARTING_DATE :{LTBLUE}Anul de <20>nceput a jocului: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENDING_DATE :{LTBLUE}Termina jocul in: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Economie cu schimb<6D>ri de productie mai reduse, dar mai frecvente
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Permite cumpararea de actiuni de la alte companii
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Plasare automat<61> a semnalelor la fiecare: {ORANGE}{STRING} p<>tr<74>tele
STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Pozitia listei cu instrumente: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :st<73>nga
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :centru
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :dreapta
STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Distanta de 'snap' pentru ferestre: {ORANGE}{STRING} px
STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Distanta de 'snap' pentru ferestre: {ORANGE}dezactivata
STR_CONFIG_PATCHES_GUI :{BLACK}Interfat<61>
STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Constructie
@@ -1069,24 +1090,28 @@ STR_CHEAT_NO_JETCRASH :{LTBLUE}Avioanele cu reactie nu se vor pr
STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Schimb<6D> peisajul: {ORANGE} {STRING}
STR_CHEAT_CHANGE_DATE :{LTBLUE}Schimb<6D> data: {ORANGE} {DATE_SHORT}
STR_HEADING_FOR_CHECKPOINT :{LTBLUE}Merge spre {CHECKPOINT}
STR_HEADING_FOR_CHECKPOINT_VEL :{LTBLUE}Merge spre {CHECKPOINT}, {VELOCITY}
STR_HEADING_FOR_WAYPOINT :{LTBLUE}Merge spre {WAYPOINT}
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Merge spre {WAYPOINT}, {VELOCITY}
STR_GO_TO_CHECKPOINT :Mergi via {CHECKPOINT}
STR_GO_TO_WAYPOINT :Mergi via {WAYPOINT}
STR_GO_NON_STOP_TO_WAYPOINT :Mergi non-stop via {WAYPOINT}
STR_CHECKPOINTNAME_CITY :Halta {TOWN}
STR_CHECKPOINTNAME_CITY_SERIAL :Halta {TOWN} #{COMMA16}
STR_LANDINFO_CHECKPOINT :Halt<6C> de miscare
STR_WAYPOINTNAME_CITY :Halta {TOWN}
STR_WAYPOINTNAME_CITY_SERIAL :Halta {TOWN} #{COMMA16}
STR_LANDINFO_WAYPOINT :Halt<6C> de miscare
STR_CHECKPOINT_VIEWPORT :{WHITE}{CHECKPOINT}
STR_CHECKPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{CHECKPOINT}
STR_CHECKPOINT_RAW :{CHECKPOINT}
STR_EDIT_CHECKPOINT_NAME :{WHITE}Editeaz<61> numele haltei
STR_WAYPOINT :{WHITE}Punct de tranzit
STR_WAYPOINT_GRAPHICS_TIP :{BLACK}Alege tipul de punct de tranzit
STR_CANT_CHANGE_CHECKPOINT_NAME :{WHITE}Nu pot schimba numele haltei...
STR_CONVERT_RAIL_TO_CHECKPOINT_TIP :{BLACK}Converteste linia <20>n halt<6C> de miscare (checkpoint)
STR_CANT_BUILD_TRAIN_CHECKPOINT :{WHITE}Nu pot plasa o halt<6C> aici...
STR_CANT_REMOVE_TRAIN_CHECKPOINT :{WHITE}Nu pot sterge halta de aici...
STR_WAYPOINT_VIEWPORT :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{WAYPOINT}
STR_WAYPOINT_RAW :{WAYPOINT}
STR_EDIT_WAYPOINT_NAME :{WHITE}Editeaz<EFBFBD> numele haltei
STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Nu pot schimba numele haltei...
STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}Converteste linia <20>n halt<6C> de miscare (waypoint)
STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Nu pot plasa o halt<6C> aici...
STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Nu pot sterge halta de aici...
STR_BUILD_AUTORAIL_TIP :{BLACK}Construieste cale ferat<61> <20>n modul automat
@@ -1099,6 +1124,7 @@ STR_MANY_RANDOM_INDUSTRIES :{BLACK}Multe industrii aleatoare
STR_RANDOM_INDUSTRIES_TIP :{BLACK}Umple harta cu industrii generate aleator
STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Nu pot genera industrii...
STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}Afiseaza instrumentele pentru modelarea terenului, plantarea copacilor, etc.
STR_LANDSCAPING_TOOLBAR :{WHITE}Modificare peisaj
STR_LEVEL_LAND_TOOLTIP :{BLACK}Niveleaz<61> terenul
@@ -1114,6 +1140,8 @@ STR_CANT_BUILD_LOCKS :{WHITE}Nu pot construi o ecluz
STR_BUILD_LOCKS_TIP :{BLACK}Construieste ecluz<75>
STR_LANDINFO_LOCK :Ecluz<75>
STR_BUOY_IS_IN_USE :{WHITE}... baliza in uz!
STR_LANDINFO_COORDS :{BLACK}Coordonate: {LTBLUE}{NUMU16}x{NUMU16} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Nu pot demola o parte din statie...
@@ -1165,43 +1193,51 @@ STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Alege tipul de marf
STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Modific<69> trenul pentru a transporta marfa aleas<61>
STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Nu pot modifica trenul...
STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Intervaluri de service in procente: {ORANGE}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Schimba productia
TEMP_AI_IN_PROGRESS :{WHITE}Salut! Sunt noul algoritm AI, <20>nc<6E> <20>n teste. Dac<61> apar probleme, salveaz<61> un screenshot si pune-l pe forum. Baft<66>!
TEMP_AI_ACTIVATED :{WHITE}Atentie: algoritmul AI este <20>n stadiul alfa! Momentan este valabil doar pentru autovehicule!
############ network gui strings
TEMP_STRING_NO_NETWORK :{WHITE}Interfata de retea nu este <20>nc<6E> functional<61>!
STR_NETWORK_MULTIPLAYER :{WHITE}Multiplayer
STR_NETWORK_FIND_SERVER :{BLACK}Caut<75> server
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Caut<75> un server <20>n retea
STR_NETWORK_DIRECT_CONNECT :{BLACK}Conectare direct<63>
STR_NETWORK_ENTER_IP :{BLACK}Introdu IP-ul serverului
STR_NETWORK_DIRECT_CONNECT_TIP :{BLACK}Conectare la un IP cunoscut
STR_NETWORK_START_SERVER :{BLACK}Porneste serverul
STR_NETWORK_START_SERVER_TIP :{BLACK}Porneste un server propriu
STR_NETWORK_PLAYER_NAME :{BLACK}Numele juc<75>torului:
STR_NETWORK_ENTER_NAME_TIP :{BLACK}Acesta este numele prin care te vor identifica ceilalti
STR_NETWORK_CONNECTION :{BLACK}Conexiune:
STR_NETWORK_CONNECTION_TIP :{BLACK}Alege intre un joc pe internet si unul pe LAN
STR_NETWORK_SELECT_CONNECTION :{BLACK}Alege tipul de conectare:
STR_NETWORK_CONNECTION_TYPE_TIP :{BLACK}Alege <20>ntre un joc pe Internet si unul <20>n reteaua local<61>
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_START_SERVER :{BLACK}Porneste serverul
STR_NETWORK_START_SERVER_TIP :{BLACK}Porneste un server propriu
STR_NETWORK_GAME_NAME :{BLACK}Nume
STR_NETWORK_GAME_NAME_TIP :{BLACK}Numele jocului
STR_NETWORK_PLAYERS :{BLACK}#/#
STR_NETWORK_PLAYERS_TIP :{BLACK}Juc<75>tori prezenti <20>n joc / Num<75>rul maxim de juc<75>tori
STR_NETWORK_MAP_SIZE :{BLACK}M<>rime
STR_NETWORK_MAP_SIZE_TIP :{BLACK}M<>rimea h<>rtii
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Limba, versiunea serverului, etc.
STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Click pe un joc din list<73> pentru a-l selecta
STR_NETWORK_PLAYERS_VAL :{BLACK}{COMMA8}/{COMMA8}
STR_NETWORK_FIND_SERVER :{BLACK}Caut<EFBFBD> server
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Caut<75> un server <20>n retea
STR_NETWORK_ADD_SERVER :{BLACK}Adauga un server
STR_NETWORK_ADD_SERVER_TIP :{BLACK}Adauga un server pe lista care va fi verificata pentru jocuri active
STR_NETWORK_ENTER_IP :{BLACK}Introdu IP-ul serverului
STR_NETWORK_CLIENTS_ONLINE :{BLACK}{COMMA16}/{COMMA16}
STR_NETWORK_CLIENTS_CAPTION :{BLACK}Clienti
STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Clienti online / Nr. max. clienti
STR_NETWORK_GAME_INFO :{SILVER}INFO JOC
STR_ORANGE :{ORANGE}{STRING}
STR_NETWORK_CLIENTS :{SILVER}Clienti: {WHITE}{COMMA8} / {COMMA8}
STR_NETWORK_LANGUAGE :{SILVER}Limba: {WHITE}{STRING}
STR_NETWORK_TILESET :{SILVER}Tileset: {WHITE}{STRING}
STR_NETWORK_MAP_SIZE :{SILVER}Marimea hartii: {WHITE}{COMMA16}x{COMMA16}
STR_NETWORK_SERVER_VERSION :{SILVER}Versiune server: {WHITE}{STRING}
STR_NETWORK_SERVER_ADDRESS :{SILVER}Adresa server: {WHITE}{STRING} : {NUMU16}
STR_NETWORK_START_DATE :{SILVER}Data de inceput: {WHITE}{DATE_SHORT}
STR_NETWORK_CURRENT_DATE :{SILVER}Data curenta: {WHITE}{DATE_SHORT}
STR_NETWORK_PASSWORD :{SILVER}Protejat cu parola!
STR_NETWORK_SERVER_OFFLINE :{SILVER}SERVER OFFLINE
STR_NETWORK_SERVER_FULL :{SILVER}SERVER PLIN
STR_NETWORK_VERSION_MISMATCH :{SILVER}VERSIUNE DIFERITA
STR_NETWORK_JOIN_GAME :{BLACK}Intr<74> <20>n joc
@@ -1210,20 +1246,30 @@ STR_NETWORK_START_GAME_WINDOW :{WHITE}
STR_NETWORK_NEW_GAME_NAME :{BLACK}Nume joc:
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}Numele jocului va fi afisat celorlalti <20>n meniul de selectare al jocurilor multiplayer
STR_NETWORK_PASSWORD :{BLACK}Parola:
STR_NETWORK_SET_PASSWORD :{BLACK}Pune parola
STR_NETWORK_PASSWORD_TIP :{BLACK}Protejeaz<61>-ti jocul cu o parol<6F> dac<61> nu vrei s<> intre juc<75>tori neautorizati
STR_NETWORK_SELECT_MAP :{BLACK}Alege o hart<72>:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Ce hart<72> doresti sa joci?
STR_NETWORK_NUMBER_OF_PLAYERS :{BLACK}Num<EFBFBD>r de juc<75>tori:
STR_NETWORK_NUMBER_OF_PLAYERS_TIP :{BLACK}Alege num<EFBFBD>rul maxim de juc<EFBFBD>tori. Nu toate locurile trebuie ocupate.
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_PLAYERS :2 jucatori
STR_NETWORK_3_PLAYERS :3 jucatori
STR_NETWORK_4_PLAYERS :4 jucatori
STR_NETWORK_5_PLAYERS :5 jucatori
STR_NETWORK_6_PLAYERS :6 jucatori
STR_NETWORK_7_PLAYERS :7 jucatori
STR_NETWORK_8_PLAYERS :8 jucatori
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Numar maxim de clienti
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Alege un numar maxim de clienti. Nu trebuie ocupate toate locurile.
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (fa reclama)
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_CLIENTS :2 clienti
STR_NETWORK_3_CLIENTS :3 clienti
STR_NETWORK_4_CLIENTS :4 clienti
STR_NETWORK_5_CLIENTS :5 clienti
STR_NETWORK_6_CLIENTS :6 clienti
STR_NETWORK_7_CLIENTS :7 clienti
STR_NETWORK_8_CLIENTS :8 clienti
STR_NETWORK_9_CLIENTS :9 clienti
STR_NETWORK_10_CLIENTS :10 clienti
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Limba vorbita:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Ceilalti jucatori vor sti in ce limba se discuta per server.
STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}<7D>ncepe jocul
STR_NETWORK_START_GAME_TIP :{BLACK}Incepe un joc nou in retea cu o harta aleatoare sau intr-un scenariu
STR_NETWORK_LOAD_GAME :{BLACK}Incarca joc
@@ -1231,17 +1277,62 @@ STR_NETWORK_LOAD_GAME_TIP :{BLACK}Reia un joc multiplayer salvat anterior (a
STR_NETWORK_LOAD_SCENARIO :{BLACK}Incarca scenariu
STR_NETWORK_LOAD_SCENARIO_TIP :{BLACK}Incepe un joc nou intr-un scenariu
############ Leave those lines in this order!!
STR_NETWORK_LANG_ANY :Oricare
STR_NETWORK_LANG_ENGLISH :Engleza
STR_NETWORK_LANG_GERMAN :Germana
STR_NETWORK_LANG_FRENCH :Franceza
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Chatul jocului multiplayer
STR_NETWORK_SEND :{BLACK}Trimite
STR_NETWORK_SEND_TIP :{BLACK}Trimite un mesaj celorlalti juc<75>tori
STR_NETWORK_COMPANY_NAME :{BLACK}Numele companiei:
STR_NETWORK_COMPANY_NAME_TIP :{BLACK}Schimb<6D> numele companiei. Apas<61> Enter pentru a aplica schimbarea.
STR_NETWORK_SPECTATE_GAME :{BLACK}Modul spectator
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Vizioneaz<61> un joc din pozitia unui spectator
STR_NETWORK_PREPARE_TO_JOIN :{BLACK}In pregatire pentru joc: {ORANGE}{STRING}
STR_NETWORK_COMPANY_LIST_TIP :{BLACK}Lista companiilor din jocul curent. Poti colabora cu o companie sau sa infiintezi una
STR_NETWORK_NEW_COMPANY :{BLACK}Companie nou<6F>
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Fondeaz<61> o nou<6F> companie
STR_NETWORK_READY :{BLACK}Preg<65>tit
STR_NETWORK_SPECTATE_GAME :{BLACK}Modul spectator
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Vizioneaz<61> un joc din pozitia unui spectator
STR_NETWORK_JOIN_COMPANY :{BLACK}Alatura-te companiei
STR_NETWORK_JOIN_COMPANY_TIP :{BLACK}Ajuta la conducerea acestei companii
STR_NETWORK_REFRESH :{BLACK}Actualizeaza serverul
STR_NETWORK_REFRESH_TIP :{BLACK}Actualizeaza informatiile despre server
STR_NETWORK_COMPANY_INFO :{SILVER}INFO COMPANIE
STR_NETWORK_COMPANY_NAME :{SILVER}Numele companiei: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inaugurarea: {WHITE}{NUMU16}
STR_NETWORK_VALUE :{SILVER}Valoarea companiei: {WHITE}{CURRENCY64}
STR_NETWORK_CURRENT_BALANCE :{SILVER}Balanta curenta: {WHITE}{CURRENCY64}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Venituri anul trecut: {WHITE}{CURRENCY64}
STR_NETWORK_PERFORMANCE :{SILVER}Performanta: {WHITE}{NUMU16}
STR_NETWORK_VEHICLES :{SILVER}Vehicule: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_STATIONS :{SILVER}Statii: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_PLAYERS :{SILVER}Jucatori: {WHITE}{STRING}
STR_NETWORK_CONNECTING :{WHITE}Conectare...
############ Leave those lines in this order!!
STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Conectare..
STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Authorizare..
STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Asteptati..
STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Descarcare harta..
STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Prelucrare date..
STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Inregistrare...
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Preluare info joc..
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Preluare info companie..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{INT32} client(i) inaintea noastra
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{INT32} / {INT32} kbytes descarcati pana acum
STR_NETWORK_DISCONNECT :{BLACK}Deconectare
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Introdu textul de trimis
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introdu suma de bani pe care vrei sa o cedezi
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server protejat. Introdu parola
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companie protejata. Introdu parola
STR_NETWORK_CLIENT_LIST :{WHITE}Lista de clienti
STR_NETWORK_ERR_NOTAVAILABLE :{WHITE}Nu a fost detectat<61> o plac<61> de retea valabil<69>
STR_NETWORK_ERR_NOSERVER :{WHITE}Nu a fost g<>sit nici un joc <20>n retea
@@ -1249,7 +1340,57 @@ STR_NETWORK_ERR_NOCONNECTION :{WHITE}Serverul nu a r
STR_NETWORK_ERR_DESYNC :{WHITE} Sincronizarea jocului in retea a esuat.
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} Conexiunea jocului in reatea a fost intrerupta.
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Nu am reusit sa incarc jocul-server salvat.
STR_NETWORK_ERR_SERVER_START :{WHITE}Nu pot porni serverul.
STR_NETWORK_ERR_CLIENT_START :{WHITE}Nu pot efectua conectarea.
STR_NETWORK_ERR_TIMEOUT :{WHITE} Conexiunea #{NUMU16} a expirat.
STR_NETWORK_ERR_SERVER_ERROR :{WHITE}Eroare de protocol. Conexiunea a fost inchisa.
STR_NETWORK_ERR_WRONG_REVISION :{WHITE}Versiunea acestui client este diferita de cea a serverului.
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE}Parola gresita.
STR_NETWORK_ERR_SERVER_FULL :{WHITE}Serverul este plin
STR_NETWORK_ERR_SERVER_BANNED :{WHITE} Acessul tau este interzis pe acest server
STR_NETWORK_ERR_KICKED :{WHITE}Ai fost dat afara de pe server
STR_NETWORK_ERR_CHEATER :{WHITE} Cheat-urile nu sunt permise pe acest server
STR_NETWORK_ERR_LEFT :a parasit jocul
############ Leave those lines in this order!!
STR_NETWORK_ERR_CLIENT_GENERAL :eroare generala
STR_NETWORK_ERR_CLIENT_DESYNC :eroare de desincronizare
STR_NETWORK_ERR_CLIENT_SAVEGAME :nu pot incarca harta
STR_NETWORK_ERR_CLIENT_CONNECTION_LOST :conexiune pierduta
STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR :eroare de protocol
STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :neautorizat
STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :primit pachet ciudat
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :versiune incorecta
STR_NETWORK_ERR_CLIENT_NAME_IN_USE :nume folosit deja
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :parola gresita
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :player-id in DoCommand gresit
STR_NETWORK_ERR_CLIENT_KICKED :dat afara de pe server
STR_NETWORK_ERR_CLIENT_CHEATER :a incercat sa foloseasca un cheat
############ End of leave-in-this-order
STR_NETWORK_CLIENT_JOINED :a intrat in joc
STR_NETWORK_GIVE_MONEY :ti-a dat o suma de bani ({CURRENCY})
STR_NETWORK_GAVE_MONEY_AWAY :ai donat o suma de bani companiei {STRING} ({CURRENCY})
STR_NETWORK_CHAT_COMPANY :[Team] {STRING}:
STR_NETWORK_CHAT_TO_COMPANY :[Team] To {STRING}:
STR_NETWORK_CHAT_CLIENT :[Private] {STRING}:
STR_NETWORK_CHAT_TO_CLIENT :[Private] pentru {STRING}:
STR_NETWORK_CHAT_ALL :[All] {STRING}:
STR_NETWORK_NAME_CHANGE :si-a schimbat numele in
STR_NETWORK_SERVER_SHUTDOWN :{WHITE}Serverul a inchis conexiunea
STR_NETWORK_SERVER_REBOOT :{WHITE}Serverul este repornit...{}Va rugam asteptati...
STR_NETWORK_SERVER :Server
STR_NETWORK_CLIENT :Client
STR_NETWORK_CLIENTLIST_NONE :(none)
STR_NETWORK_CLIENTLIST_KICK :Kick
STR_NETWORK_CLIENTLIST_GIVE_MONEY :Doneaza bani
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Vorbeste catre toti
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Vorbeste catre companie
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mesaj privat
STR_NETWORK_SEND :{BLACK}Trimite
############ end network gui strings
@@ -1347,6 +1488,7 @@ STR_1818_ROAD_RAIL_LEVEL_CROSSING :Traversare la nivel cu calea ferat
##id 0x2000
STR_2000_TOWNS :{WHITE}Orase
STR_TOWN_LABEL_POP :{WHITE}{STRING} ({COMMA32})
STR_2001 :{WHITE}{STRING}
STR_2002 :{TINYFONT}{BLACK}{STRING}
STR_2003 :{TINYFONT}{WHITE}{STRING}
@@ -1937,6 +2079,9 @@ STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Muta sediul companiei (costa 1% din
STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nu pot construi sediul...
STR_7072_VIEW_HQ :{BLACK}Vezi sediul
STR_RELOCATE_HQ :{BLACK}Muta sediu
STR_COMPANY_PASSWORD :{BLACK}Parola
STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Protejeaza-ti compania cu o parola pentru a preveni accesul neautorizat.
STR_SET_COMPANY_PASSWORD :Alege parola companiei
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Recesiune mondial<61>!{}{}Expertii financiari se tem de ceea ce e mai r<>u odat<61> cu pr<70>busirea economic<69>!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recesiunea s-a <20>ncheiat!{}{}Cresterea comertului d<> <20>ncredere industriei, iar economia se redreseaz<61>!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Comutator pentru m<>rimea ferestrei
@@ -1950,6 +2095,7 @@ STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Nu pot vinde 25% din aceast
STR_707D_OWNED_BY :{WHITE}({COMMA16}% detinute de {STRING})
STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA16}% detinute de {STRING}{} {COMMA16}% detinute de {STRING})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{STRING} a fost preluat<61> de {STRING}!
STR_7080_PROTECTED :{WHITE}Aceasta companie inca nu vinde actiuni...
##id 0x8000
STR_8000_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Aburi)
@@ -2248,7 +2394,7 @@ STR_8813_FROM :{LTBLUE}{CARGO} de la {STATION}
STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}Trenul {COMMA16} asteapt<70> <20>n depou
STR_8815_NEW_VEHICLES :{BLACK}Vehicule noi
STR_8816 :{BLACK}-
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Cost: {GOLD}{CURRENCY}{BLACK} Greutate: {GOLD}{COMMA16}t{}{BLACK}Vitez<EFBFBD>: {GOLD}{VELOCITY}{BLACK} Putere: {GOLD}{COMMA16}cp{}{BLACK}Cost rulare: {GOLD}{CURRENCY}/an{}{BLACK}Capacitate: {GOLD}{STRING}{}{BLACK}An aparitie: {GOLD}{NUMU16}{BLACK} V<EFBFBD>rst<EFBFBD>: {GOLD}{COMMA16} ani{}{BLACK}Eficient<EFBFBD> max.: {GOLD}{COMMA8}%
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Cost: {GOLD}{CURRENCY}{BLACK} Greutate: {GOLD}{COMMA16}t{}{BLACK}Viteza: {GOLD}{VELOCITY}{BLACK} Putere: {GOLD}{COMMA32}cp{}{BLACK}Cost operational: {GOLD}{CURRENCY}/an{}{BLACK}Capacitate: {GOLD}{STRING}{}{BLACK}Design in: {GOLD}{NUMU16}{BLACK} Varsta: {GOLD}{COMMA16} ani{}{BLACK}Eficienta max.: {GOLD}{COMMA8}%
STR_8818_INFORMATION :{BLACK}Informatii
STR_8819_TRAIN_TOO_LONG :{WHITE}Tren prea lung
STR_881A_TRAINS_CAN_ONLY_BE_ALTERED :{WHITE}Trenurile pot fi modificate doar c<>nd se afl<66> <20>ntr-un depou
@@ -2475,7 +2621,7 @@ STR_GO_TO_SHIP_DEPOT :Mergi la Santierul Naval {TOWN}
SERVICE_AT_SHIP_DEPOT :Service la Santierul Naval {TOWN}
##id 0xA000
STR_A000_AIRPORT_CONSTRUCT :{WHITE}Construieste aeroport
STR_A000_AIRPORTS :{WHITE}Airoporturi
STR_A001_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Nu pot construi un aeroport aici...
STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} Hangar
STR_A003_NEW_AIRCRAFT :{BLACK}Aeronav<61> nou<6F>
@@ -2529,6 +2675,7 @@ STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Nu pot redenumi aeronava...
STR_A032_NAME_AIRCRAFT :{BLACK}Redenumeste aeronava
STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Cet<65>tenii s<>rb<72>toresc {}sosirea primei aeronave la {STATION}!
STR_A034_PLANE_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Accident aviatic!{}{COMMA16} victime <20>n urma pr<70>busirii de la {STATION}
STR_PLANE_CRASH_OUT_OF_FUEL :{BLACK}{BIGFONT}Accident aerian!{}Aeronava in pana de combustibil, {COMMA16} victime in urma dezastrulu!
STR_A035_DESTINATIONS :{TINYFONT}{BLACK}Destinatii:
STR_A036 :{TINYFONT}{BLACK}{STATION}
STR_A037_RENAME :{BLACK}Redenumire
@@ -2563,8 +2710,8 @@ STR_MULTIPLAYER_PAUSED :{WHITE}Jocul este in pauza.{}Comanda nu s-a putut e
STR_PERFORMANCE_DETAIL :{WHITE}Ratingul de performant<6E> detaliat
STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detalii
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}{TINYFONT}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}{TINYFONT}({INT32}/{INT32})
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA32}/{COMMA32})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{INT32}%
SET_PERFORMANCE_DETAIL_INT :{BLACK}{INT32}
############ Those following lines need to be in this order!!
@@ -2590,3 +2737,60 @@ STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Balanta curent
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Ponderea creditelor
STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Punctajul total din num<75>rul maxim posibil
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Setari Newgrf
STR_NEWGRF_APPLY_CHANGES :{BLACK}Aplica schimbarile
STR_NEWGRF_SET_PARAMETERS :{BLACK}Seteaza parametri
STR_NEWGRF_TIP :{BLACK}Lista tuturor setarilor Newgrf pe care le-ai instalat. Click pentru a schimba setarile.
STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}Nu exista fisiere newgrf instalate! Citeste manualul pentru instructiunile de instalare a fisierelor grafice noi.
STR_NEWGRF_FILENAME :{BLACK}Nume fisier:
STR_NEWGRF_GRF_ID :{BLACK}ID GRF:
STR_CURRENCY_WINDOW :{WHITE}Moneda proprie
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Curs de schimb: {ORANGE}{CURRENCY} = {POUNDSIGN} {COMMA16}
STR_CURRENCY_SEPARATOR :{LTBLUE}Separator:
STR_CURRENCY_PREFIX :{LTBLUE}Prefix:
STR_CURRENCY_SUFFIX :{LTBLUE}Sufix:
STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Adera la Euro: {ORANGE}{INT32}
STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Adera la Euro: {ORANGE}niciodata
STR_CURRENCY_PREVIEW :{LTBLUE}Previzualizare: {ORANGE}{CURRENCY}
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Schimba un parametru al monedei proprii
STR_TRAIN :{BLACK}{TRAIN}
STR_LORRY :{BLACK}{LORRY}
STR_PLANE :{BLACK}{PLANE}
STR_SHIP :{BLACK}{SHIP}
STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA16} Trenuri
STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA16} Autovehicule
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA16} Aeronave
STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA16} Nave
STR_SCHEDULED_TRAINS_TIP :{BLACK}Afiseaza toate trenurile care opresc in aceasta statie
STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Afiseaza toate autovehiculele care opresc in aceasta statie
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Afiseaza toate aeronavele care opresc in aceasta statie
STR_SCHEDULED_SHIPS_TIP :{BLACK}Afiseaza toate navele care opresc in aceasta statie
STR_REPLACE_VEHICLES :{BLACK}Inlocuieste vehicule
STR_REPLACE_VEHICLES_WHITE :{WHITE}Inlocuire vehicule
STR_REPLACE_VEHICLES_START :{BLACK}Incepere inlocuire vehicule
STR_REPLACE_VEHICLES_STOP :{BLACK}Oprire inlocuire vehicuke
STR_NOT_REPLACING :{BLACK}Neinlocuire
STR_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Nici un vehicul selectat
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Alege tipul de vehicul pentru inlocuire
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Alege noul tip de vehicul cu care doresti sa inlocuiesti tipul de vehicul din stanga
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Apasa acest buton daca nu doresti sa inlocuiesti vehiculele selectate in stanga
STR_REPLACE_HELP_START_BUTTON :{BLACK}Apasa acest buton daca doresti sa inlocuiesti vehiculele selectate in stanga cu cele selectate in dreapta
STR_REPLACE_HELP_RAILTYPE :{BLACK}Alege un tip de cale ferata pentru care sa selectezi vehiculele
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Afiseaza cu ce model vor fi inlocuite vehiculele din stanga
STR_REPLACE_HELP :{BLACK}Aceasta functie iti permite sa selectezi un model de vehicul si sa-l inlocuiesti cu altul. Schimbarea se va efectua automat la intrarea vehiculului intr-un depou.
############ Lists rail types
STR_RAIL_VEHICLES :Vehicule feroviare
STR_MONORAIL_VEHICLES :Vehicule Monorail
STR_MAGLEV_VEHICLES :Vehicule Maglev
############ End of list of rail types
STR_TINY_BLACK :{BLACK}{TINYFONT}{COMMA16}

View File

@@ -14,8 +14,8 @@ STR_0008_WAITING :{BLACK}Caka: {WHITE}{STRING}
STR_0009 :{WHITE}{STRING}
STR_000A_EN_ROUTE_FROM :{WHITE}{STRING}{YELLOW} (na ceste z
STR_000B :{YELLOW}{STATION})
STR_000C_ACCEPTS :{BLACK}Prijma: {WHITE}
STR_000D_ACCEPTS :{BLACK}Prijma: {GOLD}
STR_000C_ACCEPTS :{BLACK}Prijima: {WHITE}
STR_000D_ACCEPTS :{BLACK}Prijima: {GOLD}
STR_000E :
STR_000F_PASSENGERS :Cestujucich
STR_0010_COAL :Uhlie
@@ -186,9 +186,8 @@ STR_00B4_CAN_T_DO_THIS :{WHITE}Takto sa to neda...
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Oblast sa neda vycistit...
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved
STR_00B7_VERSION :{BLACK}OpenTTD version {REV}
STR_00B8_ORIGINAL_DESIGN_PROGRAM :{BLACK}Original design by Chris Sawyer
STR_00B9_ORIGINAL_GRAPHICS :{BLACK}Graphics by Simon Foster
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2004 The OpenTTD team
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2005 The OpenTTD team
STR_TRANSLATED_BY :{BLACK} Preklad - gpsoft
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
@@ -306,6 +305,8 @@ STR_0134_UNIX :Unix
STR_0135_OSX :OSX
STR_OSNAME_BEOS :BeOS
STR_OSNAME_MORPHOS :MorphOS
STR_OSNAME_AMIGAOS :AmigaOS
STR_OSNAME_OS2 :OS/2
STR_0139_IMPERIAL_MILES :Imperial (mile)
STR_013A_METRIC_KILOMETERS :Metric (kilometre)
@@ -320,6 +321,8 @@ STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_0140_NEW_GAME :{BLACK}Nova Hra
STR_0141_LOAD_GAME :{BLACK}Nahrat Hru
STR_0142_TUTORIAL_DEMONSTRATION :{BLACK}Nacvik / Ukazka
STR_SINGLE_PLAYER :{BLACK}Jeden hrac
STR_MULTIPLAYER :{BLACK}Viacero hracov
STR_0148_GAME_OPTIONS :{BLACK}Nastavenia Hry
@@ -336,6 +339,7 @@ STR_0157_PERFORMANCE_HISTORY_GRAPH :Graf hodnotenia vykonu
STR_0158_COMPANY_VALUE_GRAPH :Graf hodnoty spolocnosti
STR_0159_CARGO_PAYMENT_RATES :Ceny Prepravy
STR_015A_COMPANY_LEAGUE_TABLE :Hodnotenie spolocnosti
STR_PERFORMANCE_DETAIL_MENU :Detailny rating prevedenia
############ range for menu ends
STR_015B_OPENTTD :{WHITE}OpenTTD
@@ -345,6 +349,25 @@ STR_015E_QUIT_GAME :Koniec hry
STR_015F_QUIT :Ukoncit program
STR_0160_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Si si isty ze chces ukoncit tuto hru ?
STR_0161_QUIT_GAME :{WHITE}Koniec hry
STR_SORT_ORDER_TIP :{BLACK}Vyber sposob triedenia (zostupny/vzostupny)
STR_SORT_CRITERIA_TIP :{BLACK}Vyber, podla coho sa ma triedit
SRT_SORT_BY :{BLACK}Usporiadat podla
STR_SORT_BY_POPULATION :{BLACK}Populacia
STR_SORT_BY_PRODUCTION :{BLACK}Produkcia
STR_SORT_BY_TYPE :{BLACK}Typ
STR_SORT_BY_TRANSPORTED :{BLACK}Prevezene
STR_SORT_BY_NAME :{BLACK}Meno
STR_SORT_BY_DROPDOWN_NAME :Meno
STR_SORT_BY_DATE :{BLACK}Datum
STR_SORT_BY_UNSORTED :Neusporiadane
STR_SORT_BY_NUMBER :Cislo
STR_SORT_BY_PROFIT_LAST_YEAR :Zisk v poslednom roku
STR_SORT_BY_PROFIT_THIS_YEAR :Zisk toho roku
STR_SORT_BY_AGE :Vek
STR_SORT_BY_RELIABILITY :Spolahlivost
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Uplna kapacita podla typu nakladu
STR_SORT_BY_MAX_SPEED :Maximalna rychlost
############ range for months starts
STR_0162_JAN :Jan
@@ -392,6 +415,8 @@ STR_0189 :{BLACK}{SMALLDOWNARROW}
STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}Nieje mozne zmenit servisny interval...
STR_018B_CLOSE_WINDOW :{BLACK}Zavriet okno
STR_018C_WINDOW_TITLE_DRAG_THIS :{BLACK}Nadpis okna - potiahni pre posun okna
STR_STICKY_BUTTON :{BLACK}Oznacit toto okno, aby sa nedalo zatvorit klavesou 'Zavri vsetky okna'
STR_RESIZE_BUTTON :{BLACK}Uchop a tahaj pre zmenu velkosti okna
STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Zburanie budov, cistenie terenu
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Znizit roh terenu
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}Zvysit roh terenu
@@ -470,6 +495,8 @@ STR_01CD_SELECT_TUTORIAL_DEMONSTRATION :{WHITE}Vybrat Nacvik / Ukazku
STR_01CE_CARGO_ACCEPTED :{BLACK}Prijma naklad: {LTBLUE}{STRING}
STR_01CF_CARGO_ACCEPTED :{BLACK}Prijma naklad: {LTBLUE}{STRING}, {STRING}
STR_01D0_CARGO_ACCEPTED :{BLACK}Prijma naklad: {LTBLUE}{STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_4 :{BLACK}Prijma naklad: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}
STR_CARGO_ACCEPTED_5 :{BLACK}Prijma naklad: {LTBLUE}{STRING}, {STRING}, {STRING}, {STRING}, {STRING}
############ range for cargo acecpted ends
STR_01D1_8 :({COMMA8}/8 {STRING})
@@ -512,7 +539,7 @@ STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Vybrat 'Novy styl'
STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Vybrat 'Vlastny 1' (uzivatelom definovany) program
STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Vybrat 'Vlastny 2' (uzivatelom definovany) program
STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Vymazat aktualny program (len Vlastny 1 a Vlastny 2 program)
STR_01F9_SAVE_MUSIC_SETTINGS_TO :{BLACK}Ulozit nastavenia hudby na disk
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Ulozit nastavenie hudby
STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Kliknut na stopu pre ulozenie (len Vlastny 1 a Vlastny 2 program)
STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Zapnut / Vypnut nahodny vyber
STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Zobrazit okno pre vyber hudobnych stop
@@ -537,7 +564,8 @@ STR_020D_CHANGES_OF_CARGO_ACCEPTANCE :{YELLOW}Zmeny prijmu nakladu
STR_020E_SUBSIDIES :{YELLOW}Dotacie
STR_020F_GENERAL_INFORMATION :{YELLOW}Hlavne informacie
STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO :{WHITE}...prilis daleko z predchadzajuceho ciela
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Najlepsie spolocnosti ktore dosiahli rok 2050{}({STRING} Uroven)
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Najlepsie spolocnosti, ktore dosiahli {NUMU16}{}({STRING} uroven)
STR_TOP_COMPANIES_NETWORK_GAME :{BIGFONT}{BLACK}Tabulka spolocnosti v roku {NUMU16}
STR_0212 :{BIGFONT}{COMMA16}.
STR_0213_BUSINESSMAN :Obchodnik
STR_0214_ENTREPRENEUR :Podnikatel
@@ -546,9 +574,10 @@ STR_0216_CAPITALIST :Kapitalista
STR_0217_MAGNATE :Magnat
STR_0218_MOGUL :Mogul
STR_0219_TYCOON_OF_THE_CENTURY :Tycoon
STR_021A :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} dosiahol '{STRING}' stav!
STR_021C_OF_ACHIEVES_STATUS :{BIGFONT}{STRING}{STRING} dosiahnuti {STRING} '{STRING}' stavu!
STR_HIGHSCORE_NAME :{BIGFONT}{STRING}, {STRING}
STR_HIGHSCORE_STATS :{BIGFONT}'{STRING}' ({COMMA16})
STR_021B_ACHIEVES_STATUS :{BLACK}{BIGFONT}{STRING} ziskal oznacenie '{STRING}' !
STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{STRING} z {STRING} ziskal oznacenie '{STRING}' !
STR_021D :{BLACK}
STR_021E :{WHITE}
STR_021F :{BLUE}{COMMA16}
@@ -697,7 +726,7 @@ STR_02BC_VEHICLE_DESIGN_NAMES :{BLACK}Nazvy vozidiel
STR_02BD :{BLACK}{STRING}
STR_02BE_DEFAULT :Vychodzie
STR_02BF_CUSTOM :Vlastne
STR_02C0_SAVE_CUSTOM_NAMES_TO_DISK :{BLACK}Ulozit vlastne nazvy vozidiel na disk
STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Ulozit vlastne nazvy
STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}Vyber nazvu vozidiel
STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Ulozit vlastne nazvy vozidiel na disk
@@ -708,6 +737,8 @@ STR_02C5_DIFFICULTY_SETTINGS :Nastavenia obtiaznosti
STR_02C6_DIFFICULTY_SETTINGS :Nastavenia obtiaznosti
STR_02C7_CONFIG_PATCHES :Konfigurovat zaplaty
STR_02C8_CONFIG_PATCHES :Konfigurovat zaplaty
STR_NEWGRF_SETTINGS :Nastavenie newgrf
STR_NEWGRF_SETTINGS2 :Nastavenie newgrf
STR_GAMEOPTMENU_0A :
STR_GAMEOPTMENU_0B :
STR_02C9_TOWN_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Zobrazit nazvy miest
@@ -716,8 +747,8 @@ STR_02CB_STATION_NAMES_DISPLAYED :{CHECKMARK}{SETX 12}Zobrazit nazvy stanic
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Zobrazit nazvy stanic
STR_02CD_SIGNS_DISPLAYED :{CHECKMARK}{SETX 12}Zobrazit popisy
STR_02CE_SIGNS_DISPLAYED :{SETX 12}Zobrazit popisy
STR_CHECKPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Zobrazit navigacne body
STR_CHECKPOINTS_DISPLAYED2 :{SETX 12}Zobrazit navigacne body
STR_WAYPOINTS_DISPLAYED :{CHECKMARK}{SETX 12}Zobrazit navigacne body
STR_WAYPOINTS_DISPLAYED2 :{SETX 12}Zobrazit navigacne body
STR_02CF_FULL_ANIMATION :{CHECKMARK}{SETX 12}Plna animacia
STR_02D0_FULL_ANIMATION :{SETX 12}Plna animacia
STR_02D1_FULL_DETAIL :{CHECKMARK}{SETX 12}Plne detaily
@@ -739,7 +770,15 @@ STR_02DB_OFF :{BLACK}Vyp.
STR_02DC_DISPLAY_SUBSIDIES :{BLACK}Zobrazit Dotacie
STR_02DD_SUBSIDIES :Dotacie
STR_02DE_MAP_OF_WORLD :Mapa sveta
STR_EXTRA_VIEW_PORT :Extra pohlad
STR_02DF_TOWN_DIRECTORY :Zoznam miest
STR_TOWN_POPULATION :{BLACK}Svetova populacia: {COMMA32}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Pohlad {COMMA16}
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Nastavit pohlad podla mapy
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Nastavit pohlad podla hlavneho pohladu
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Nastavit mapu podla pohladu
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Nastavit hlavny pohlad na mapu podla tohto pohladu
STR_02E0_CURRENCY_UNITS :{BLACK}Mena
STR_02E1 :{BLACK}{SKIP}{STRING}
STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}Vyber meny
@@ -763,19 +802,18 @@ STR_02F8_EVERY_3_MONTHS :Kazde 3 mesiace
STR_02F9_EVERY_6_MONTHS :Kazdych 6 mesiacov
STR_02FA_EVERY_12_MONTHS :Kazdych 6 mesiacov
STR_02FB_START_A_NEW_GAME :{BLACK}Spustit novu hru
STR_02FC_LOAD_A_SAVED_GAME_FROM :{BLACK}Nahrat / ulozit hru z disku
STR_02FC_LOAD_A_SAVED_GAME :{BLACK}Nacitat ulozenu hru
STR_02FD_VIEW_DEMONSTRATIONS_TUTORIALS :{BLACK}Pozriet Vyucbu/ukazky
STR_02FE_CREATE_A_CUSTOMIZED_GAME :{BLACK}Vytvorit vlastny svet / scenar
STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Vyber jednouzivatelskej hry
STR_0300_SELECT_TWO_PLAYER_GAME :{BLACK}Vyber viacuzivatelskej hry
STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}Vyberte hru pre 2-8 hracov
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Zobraz nastavenia hry
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Zobraz nastavenia obtiaznosti
STR_0303_START_A_NEW_GAME_USING :{BLACK}Spustit novu hru z pouzitim vlastneho scenara
STR_0304_QUIT :{BLACK}Ukoncit program
STR_0305_LEAVE_OPENTTD :{BLACK}Ukoncit 'OpenTTD'
STR_0305_QUIT_OPENTTD :{BLACK}Ukoncit 'OpenTTD'
STR_0306_VIEW_DEMONSTRATION_TUTORIAL :{BLACK}Pozriet Vyucbu/ukazky
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...moze byt postavene len v meste
STR_030E_SELECT_TEMPERATE_LANDSCAPE :{BLACK}Vyber styl uzemia
STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE :{BLACK}Vyber 'arkticky' styl uzemia
@@ -789,7 +827,7 @@ STR_0313_FUND_NEW_INDUSTRY :Financovat novy priemysel
############ range ends here
STR_0314_FUND_NEW_INDUSTRY :{WHITE}Financovat novy priemysel
STR_0315 :{STRING}
STR_JUST_STRING :{STRING}
STR_0316_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...moze byt postavene len v meste
STR_0317_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}...moze byt postavene len v dazdovom pralese
STR_0318_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}...moze byt postavene len v pusti
@@ -811,10 +849,10 @@ STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
############ start of townname region
STR_TOWNNAME_ENGLISH :Anglicke
STR_TOWNNAME_ORIGINAL_ENGLISH :Anglicke
STR_TOWNNAME_FRENCH :Francuzke
STR_TOWNNAME_GERMAN :Nemecke
STR_TOWNNAME_AMERICAN :Americke
STR_TOWNNAME_ADDITIONAL_ENGLISH :Anglicke (Dalsie)
STR_TOWNNAME_LATIN_AMERICAN :Latinsko-Americke
STR_TOWNNAME_SILLY :Hlupe (anglicky)
STR_TOWNNAME_SWEDISH :Svedske
@@ -822,37 +860,47 @@ STR_TOWNNAME_DUTCH :Holandske
STR_TOWNNAME_FINNISH :Finske
STR_TOWNNAME_POLISH :Polske
STR_TOWNNAME_SLOVAKISH :Slovenske
STR_TOWNNAME_NORWEGIAN :Norske
STR_TOWNNAME_HUNGARIAN :Madarske
STR_TOWNNAME_AUSTRIAN :Rakuske
STR_TOWNNAME_ROMANIAN :Rumunske
STR_TOWNNAME_CZECH :Ceske
STR_TOWNNAME_SWISS :Svajciarske
############ end of townname region
STR_CURR_POUNDS :Libry ({POUNDSIGN})
STR_CURR_DOLLARS :Dolare ($)
STR_CURR_FF :Franky (FF)
STR_CURR_DM :Nemecke Marky (DM)
STR_CURR_GBP :Libry ({POUNDSIGN})
STR_CURR_USD :Dolare ($)
STR_CURR_EUR :Euro (<28>)
STR_CURR_YEN :Jeny ({YENSIGN})
STR_CURR_PT :Pesos (Pt)
STR_CURR_FT :Madarske Forinty (Ft)
STR_CURR_ZL :Polske Zlote (zl)
STR_CURR_ATS :Rakuske Silingy (ATS)
STR_CURR_BEF :Belgicke Franky (BEF)
STR_CURR_DKK :Danske Koruny (DKK)
STR_CURR_FIM :Finske Marky (FIM)
STR_CURR_GRD :Grecke Drachny (GRD)
STR_CURR_CHF :Svajciarske Franky (CHF)
STR_CURR_NLG :Danske Guldeny (NLG)
STR_CURR_ITL :Talianske Liry (ITL)
STR_CURR_SEK :Svedske Koruny (SEK)
STR_CURR_RUR :Rusle Ruble (rur)
STR_CURR_CZK :Ceske Koruny (CZK)
STR_CURR_DEM :Nemecke marky(DEM)
STR_CURR_DKK :Danske Koruny (DKK)
STR_CURR_ESP :Pesety (ESP)
STR_CURR_FIM :Finske Marky (FIM)
STR_CURR_FRF :Franky (FRF)
STR_CURR_GRD :Grecke Drachny (GRD)
STR_CURR_HUF :Madarske Forinty (HUF)
STR_CURR_ISK :Islandske Koruny (ISK)
STR_CURR_ITL :Talianske Liry (ITL)
STR_CURR_NLG :Danske Guldeny (NLG)
STR_CURR_NOK :Norske Koruny (NOK)
STR_CURR_EUR :Euro (<28>)
STR_CURR_PLN :Polske Zloty (PLN)
STR_CURR_ROL :Rumunske Lei
STR_CURR_RUR :Rusle Ruble (rur)
STR_CURR_SEK :Svedske Koruny (SEK)
STR_CURR_CUSTOM :Vlasne...
STR_OPTIONS_LANG :{BLACK}Jazyk
STR_OPTIONS_LANG_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_LANG_TIP :{BLACK}Vyber jazyka rozhrania
STR_OPTIONS_FULLSCREEN :{BLACK}Cela obrazovka
STR_OPTIONS_FULLSCREEN_TIP :{BLACK}Zaskrtnite, ak chcete hrat OpenTTD na celej obrazovke
STR_OPTIONS_RES :{BLACK}Rozlisenie obrazovky
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_OPTIONS_RES_TIP :{BLACK}Vyber rozlisenia obrazovky
@@ -897,6 +945,32 @@ STR_END_OF_SHARED_ORDERS :{SETX 10}- - Koniec zdielanych smerov - -
STR_TRAIN_IS_LOST :{WHITE}Vlak {COMMA16} sa stratil.
STR_TRAIN_IS_UNPROFITABLE :{WHITE}Zisk vlaku {COMMA16} za posledny rok bol {CURRENCY}
STR_EURO_INTRODUCE :{BLACK}{BIGFONT}Europska Menova Unia!{}{}Euro bolo uvedene ako hlavna mena pre kazdodenne prevody v tvojej krajine.
# Start of order review system.
# DON'T ADD OR REMOVE LINES HERE
STR_TRAIN_HAS_TOO_FEW_ORDERS :{WHITE}Vlak {COMMA16} ma priliz malo prikazov
STR_TRAIN_HAS_VOID_ORDER :{WHITE}Vlak {COMMA16} ma prazdny prikaz
STR_TRAIN_HAS_DUPLICATE_ENTRY :{WHITE}Vlak {COMMA16} ma zdvojene prikazy
STR_TRAIN_HAS_INVALID_ENTRY :{WHITE}Vlak {COMMA16} ma neplatnu stanicu v prikazoch
STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}Vozidlo {COMMA16} ma malo prikazov
STR_ROADVEHICLE_HAS_VOID_ORDER :{WHITE}Vozidlo {COMMA16} ma prazdny prikaz
STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Vozidlo {COMMA16} ma zdvojene prikazy
STR_ROADVEHICLE_HAS_INVALID_ENTRY :{WHITE}Vozidlo {COMMA16} ma neplatnu stanicu v prikazoch
STR_SHIP_HAS_TOO_FEW_ORDERS :{WHITE}Lod {COMMA16} ma malo prikazov
STR_SHIP_HAS_VOID_ORDER :{WHITE}Lod {COMMA16} ma prazdny prikaz
STR_SHIP_HAS_DUPLICATE_ENTRY :{WHITE}Lod {COMMA16} ma zdvojene prikazy
STR_SHIP_HAS_INVALID_ENTRY :{WHITE}Lod {COMMA16} ma neplatnu stanicu v prikazoch
STR_AIRCRAFT_HAS_TOO_FEW_ORDERS :{WHITE}Lietadlo {COMMA16} ma malo prikazov
STR_AIRCRAFT_HAS_VOID_ORDER :{WHITE}Lietadlo {COMMA16} ma prazdny prikaz
STR_AIRCRAFT_HAS_DUPLICATE_ENTRY :{WHITE}Lietadlo {COMMA16} ma zdvojene prikazy
STR_AIRCRAFT_HAS_INVALID_ENTRY :{WHITE}Lietadlo {COMMA16} ma neplatnu stanicu v prikazoch
# end of order system
STR_TRAIN_AUTORENEW_FAILED :{WHITE}Zlyhalo obnovenie vlaku {COMMA16} (finacny limit)
STR_ROADVEHICLE_AUTORENEW_FAILED :{WHITE}Zlyhalo obnovenie automobilu {COMMA16} (finacny limit)
STR_SHIP_AUTORENEW_FAILED :{WHITE}Zlyhalo obnovenie lode {COMMA16} (financny limit)
STR_AIRCRAFT_AUTORENEW_FAILED :{WHITE}Zlyhalo obnovenie lietadla {COMMA16} (finacny limit)
STR_CONFIG_PATCHES :{BLACK}Konfigurovat Zaplaty
STR_CONFIG_PATCHES_TIP :{BLACK}Konfigurovat Zaplaty
@@ -906,11 +980,14 @@ STR_CONFIG_PATCHES_OFF :Vyp.
STR_CONFIG_PATCHES_ON :Zap.
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Zobraz rychlost vozidla v stavovej liste: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Umoznit vystavbu na sikmine a pobrezi: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Umoznit odstranenie viacerych mestskych ciest, mostov, tunelov, etc: {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Povolit v oblasti pokrytia realistickejsiu velkost: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Umoznit odstranenie viacerych mestskych ciest, mostov, atd.: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Umoznit stavbu dlhych vlakov: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Zapnut realnu akceleraciu vlakov: {ORANGE}{STRING}
STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Umoznit spajat stanice: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Opustit stanicu ked jeden z nakladov je plny, pri 'plne naloz': {ORANGE}{STRING}
STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Pouzit vylepseny algoritmus nakladania: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflacia: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Vykladat tovar v stanici len ked je dopyt: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Umoznit stavbu dlhych mostov: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GOTODEPOT :{LTBLUE}Umoznit prikaz chod do depa: {ORANGE}{STRING}
@@ -931,11 +1008,21 @@ STR_CONFIG_PATCHES_NEW_TRAIN_PATHFIND :{LTBLUE}Novy algoritmus pre hladanie sme
STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Vzdy povolit male letiska: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LOST_TRAIN_DAYS :{LTBLUE}Vlak sa strati pokial nic nedosiahne za: {ORANGE}{STRING} dni
STR_CONFIG_PATCHES_LOST_TRAIN_DAYS_DISABLED :{LTBLUE}Vlak bude zruseny, ak neurobi zisk za: {ORANGE}vypnute
STR_CONFIG_PATCHES_ORDER_REVIEW :{LTBLUE}Obnovenie prikazu vozidla: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ORDER_REVIEW_OFF :nie
STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT :ano, okrem zastavenych vozidiel (v garazi)
STR_CONFIG_PATCHES_ORDER_REVIEW_ON :ano, u vsetkych vozidiel
STR_CONFIG_PATCHES_WARN_INCOME_LESS :{LTBLUE}Upozornit na stratu vlaku: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES :{LTBLUE}Stare vozidla sa neprestanu vyrabat: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AUTORENEW_VEHICLE :{LTBLUE}Automaticka obnova dopravnych prostriedkov, ked su stare
STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Obnovit vozidlo {ORANGE}{STRING}{LTBLUE} mesiacov pred/po dosiahnuti max. veku
STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Min. mnozstvo penazi pre automaticke obnovovanie vozidiel: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Dlzka zobrazenia chybovej spravy: {ORANGE}{STRING}
STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Zobrazit populaciu mesta v jeho nazve: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Neviditelne stromy (pri priesvitnych budovach): {ORANGE}{STRING}
STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}Uroven ciary snehu: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Maximalne pokrytie stanice: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Max. pokrytie stanice: {ORANGE}{STRING} {RED}Pozor: Vysoke hodnoty spomaluju hru
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Automaticke opravy vrtulnikov v heliporte: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Maximalny pocet vlakov hraca: {ORANGE}{STRING}
@@ -948,26 +1035,49 @@ STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH :{LTBLUE}Zakazat automobily pre pocitac:
STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT :{LTBLUE}Zakazat lietadla pre pocitac: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AI_BUILDS_SHIPS :{LTBLUE}Zakazat lode pre pocitac: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SERVINT_TRAINS :{LTBLUE}Vychodzi servisny interval pre vlaky: {ORANGE}{STRING} dni
STR_CONFIG_PATCHES_SERVINT_ROADVEH :{LTBLUE}Vychodzi servisny interval pre automobily: {ORANGE}{STRING} dni
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Vychodzi servisny interval pre lietadla: {ORANGE}{STRING} dni
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Vychodzi servisny interval pre lode: {ORANGE}{STRING} dni
STR_CONFIG_PATCHES_AINEW_ACTIVE :{LTBLUE}Povolit nove AI (alpha verzia): {ORANGE}{STRING}
STR_CONFIG_PATCHES_SERVINT_TRAINS :{LTBLUE}Implicitny servisny interval pre vlaky: {ORANGE}{STRING} dni
STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED :{LTBLUE}Implicitny servisny interval pre vlaky: {ORANGE}vypnuty
STR_CONFIG_PATCHES_SERVINT_ROADVEH :{LTBLUE}Implicitny servisny interval pre automobily: {ORANGE}{STRING} dni/%
STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED :{LTBLUE}Implicitny servisny interval pre automobily: {ORANGE}vypnuty
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Imlicitny servisny interval pre lietadla: {ORANGE}{STRING} dni/%
STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED :{LTBLUE}Implicitny servisny interval pre lietadla: {ORANGE}vypnuty
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Implicitny servisny interval pre lode: {ORANGE}{STRING} dni/%
STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Implicitny servisny interval pre lode: {ORANGE}vypnuty
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Vypnut servisy, ak su vypnute poruchy: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_DATE :{LTBLUE}Farebne novinky sa objavia v roku: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STARTING_DATE :{LTBLUE}Datum zaciatku hry: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENDING_DATE :{LTBLUE}Ukoncit hru v roku: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Mierne zmeny ekonomiky (viac mensich zmien)
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Povolit nakup akcii od ostatnych spolocnosti
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}When dragging place signals every: {ORANGE}{STRING} tile(s)
STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Pozicia hlavneho menu: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Na lavo
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :V strede
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :Na pravo
STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Vzdialenost pre uchytenie okna: {ORANGE}{STRING} bodov
STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Vzdialenost pre uchytenie okna: {ORANGE}vypnute
STR_CONFIG_PATCHES_GUI :{BLACK}Rozhranie
STR_CONFIG_PATCHES_CONSTRUCTION :{BLACK}Vystavba
STR_CONFIG_PATCHES_VEHICLES :{BLACK}Vozidla
STR_CONFIG_PATCHES_STATIONS :{BLACK}Stanice
STR_CONFIG_PATCHES_ECONOMY :{BLACK}Ekonomika
STR_CONFIG_PATCHES_AI :{BLACK}Protivnici
STR_CONFIG_PATCHES_DISABLED :zakazane
STR_CONFIG_PATCHES_INT32 :{INT32}
STR_CONFIG_PATCHES_CURRENCY :{CURRENCY}
STR_CONFIG_PATCHES_QUERY_CAPT :{WHITE}Zmenit hodnotu nastavenia
STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Niektore alebo vsetky implicitne servisne intervaly su nekompatibilne s vybranym nastavenim. 5-90% a 30-800 dni su sprave.
STR_TEMPERATE_LANDSCAPE :krajina mierneho pasma
STR_SUB_ARCTIC_LANDSCAPE :subarkticka krajina
STR_SUB_TROPICAL_LANDSCAPE :subtropicka krajina
STR_TOYLAND_LANDSCAPE :krajina hraciek
STR_CHEATS :{WHITE}Cheaty
STR_CHEATS_TIP :{BLACK}Checkbox indikuje opakovane pouzite cheatu
@@ -977,28 +1087,49 @@ STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Hrat ako hrac: {ORANGE}{COMMA16}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magicky buldozer (odstrani priemysel, budovy): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunely sa mozu navzajom krizit: {ORANGE}{STRING}
STR_CHEAT_BUILD_IN_PAUSE :{LTBLUE}Umoznit vystavbu v pauze: {ORANGE}{STRING}
STR_CHEAT_NO_JETCRASH :{LTBLUE}Triskove lietadla nebudu havarovat (casto) na malych letiskach: {ORANGE} {STRING}
STR_CHEAT_SWITCH_CLIMATE :{LTBLUE}Zmenit klimu: {ORANGE} {STRING}
STR_CHEAT_CHANGE_DATE :{LTBLUE}Zmenit datum: {ORANGE} {DATE_SHORT}
STR_HEADING_FOR_CHECKPOINT :{LTBLUE}Smeruje do {CHECKPOINT}
STR_HEADING_FOR_CHECKPOINT_VEL :{LTBLUE}Smeruje do {CHECKPOINT}, {VELOCITY}
STR_HEADING_FOR_WAYPOINT :{LTBLUE}Smeruje do {WAYPOINT}
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Smeruje do {WAYPOINT}, {VELOCITY}
STR_GO_TO_CHECKPOINT :Chod cez {CHECKPOINT}
STR_GO_TO_WAYPOINT :Chod cez {WAYPOINT}
STR_GO_NON_STOP_TO_WAYPOINT :Chod bez zastavky cez {WAYPOINT}
STR_CHECKPOINTNAME_CITY :Smerovy bod {TOWN}
STR_CHECKPOINTNAME_CITY_SERIAL :Smerovy bod {TOWN} #{COMMA16}
STR_LANDINFO_CHECKPOINT :Smerovy bod
STR_WAYPOINTNAME_CITY :Smerovy bod {TOWN}
STR_WAYPOINTNAME_CITY_SERIAL :Smerovy bod {TOWN} #{COMMA16}
STR_LANDINFO_WAYPOINT :Smerovy bod
STR_CHECKPOINT_VIEWPORT :{WHITE}{CHECKPOINT}
STR_CHECKPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{CHECKPOINT}
STR_CHECKPOINT_RAW :{CHECKPOINT}
STR_EDIT_CHECKPOINT_NAME :{WHITE}Upravit nazvy smerovych bodov
STR_WAYPOINT :{WHITE}Kontrolny bod
STR_WAYPOINT_GRAPHICS_TIP :{BLACK}Vyber typ kontrolneho bodu
STR_CANT_CHANGE_CHECKPOINT_NAME :{WHITE}Meno smeroveho bodu sa neda zmenit...
STR_CONVERT_RAIL_TO_CHECKPOINT_TIP :{BLACK}Konvertovat zeleznicu na smerove body
STR_CANT_BUILD_TRAIN_CHECKPOINT :{WHITE}Tu nie je mozne postavit zeleznicny smerovy bod...
STR_CANT_REMOVE_TRAIN_CHECKPOINT :{WHITE}Tu nie je mozne odstranit zeleznicny smerovy bod...
STR_WAYPOINT_VIEWPORT :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEWPORT_TINY :{TINYFONT}{WHITE}{WAYPOINT}
STR_WAYPOINT_RAW :{WAYPOINT}
STR_EDIT_WAYPOINT_NAME :{WHITE}Upravit nazvy smerovych bodov
STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Meno smeroveho bodu sa neda zmenit...
STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}Konvertovat zeleznicu na smerove body
STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Tu nie je mozne postavit zeleznicny smerovy bod...
STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Tu nie je mozne odstranit zeleznicny smerovy bod...
STR_BUILD_AUTORAIL_TIP :{BLACK}Automaticka stavba zeleznicnych kolaji
STR_NO_TOWN_IN_SCENARIO :{WHITE}...v tomto scenariu nie je ziadne mesto
STR_GENERATE_RANDOM_LANDSCAPE :{WHITE}Si si isty, ze chces vytvorit nahodny teren?
STR_MANY_RANDOM_TOWNS :{BLACK}Vela nahodnych miest
STR_RANDOM_TOWNS_TIP :{BLACK}Pokryt mapu s nahodne umiestnenymi mestami
STR_MANY_RANDOM_INDUSTRIES :{BLACK}Vela nahodneho priemyslu
STR_RANDOM_INDUSTRIES_TIP :{BLACK}Pokryt mapu s nahodne umiestnenym priemyslom
STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Nemozem vygenerovat priemysel
STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}Otvorit panel nastrojov pre zvysenie/znizenie terenu, vysadzby stromov, atd.
STR_LANDSCAPING_TOOLBAR :{WHITE}Zmena terenu
STR_LEVEL_LAND_TOOLTIP :{BLACK}Menit teren
STR_TREES_RANDOM_TYPE :{BLACK}Nahodne stromy
STR_TREES_RANDOM_TYPE_TIP :{BLACK}Umiestnit nahodne stromy
@@ -1010,6 +1141,8 @@ STR_CANT_BUILD_LOCKS :{WHITE}Tu sa neda postavit stavidlo...
STR_BUILD_LOCKS_TIP :{BLACK}Postavit stavidla...
STR_LANDINFO_LOCK :Stavidlo
STR_BUOY_IS_IN_USE :{WHITE}... boja sa pouziva!
STR_LANDINFO_COORDS :{BLACK}Suradnice: {LTBLUE}{NUMU16}x{NUMU16} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Nemozno odstranit cast stanice...
@@ -1023,6 +1156,9 @@ STR_STATION_DRAG_DROP :{BLACK}Automaticky postavit stanicu podla oznaceneho b
STR_FAST_FORWARD :{BLACK}Rychle posunutie hry do predu
STR_MESSAGE_HISTORY :{WHITE}Historia Sprav
STR_MESSAGE_HISTORY_TIP :{BLACK}Zoznam poslednych sprav
STR_MESSAGES_DISABLE_ALL :{BLACK}Zakazat vsetky
STR_MESSAGES_ENABLE_ALL :{BLACK}Povolit vsetky
STR_CONSTRUCT_COAL_MINE_TIP :{BLACK}Postavit uholnu banu
STR_CONSTRUCT_FOREST_TIP :{BLACK}Vysadit les
@@ -1045,7 +1181,8 @@ STR_CONSTRUCT_TOFFEE_QUARRY_TIP :{BLACK}Postavit karamelovy lom
STR_CONSTRUCT_SUGAR_MINE_TIP :{BLACK}Postavit cukrovu banu
STR_INDUSTRYDIR_CAPTION :{WHITE}Priemysel
STR_INDUSTRYDIR_ITEM :{ORANGE}{TOWN} {STRING}{BLACK} ({STRING})
STR_INDUSTRYDIR_ITEM :{ORANGE}{TOWN} {STRING}{BLACK} ({STRING}){YELLOW} ({COMMA16}% prevezenych)
STR_INDUSTRYDIR_ITEM_TWO :{ORANGE}{TOWN} {STRING}{BLACK} ({STRING}/{STRING}){YELLOW} ({COMMA16}%/{COMMA16}% prenesenych)
STR_INDUSTRYDIR_ITEM_NOPROD :{ORANGE}{TOWN} {STRING}
STR_INDUSTRY_TOO_CLOSE :{WHITE}...prilis blizko ineho priemyslu
@@ -1056,6 +1193,208 @@ STR_RAIL_REFIT_VEHICLE :{BLACK}Prerobit vlak
STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Vybrat typ prepravovaneho nakladu
STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Prerobit vlak na prepravu vybraneho nakladu
STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Nemozno prerobit vlak...
STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Servisne intervaly su v percentach: {ORANGE}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Zmenit produkciu
TEMP_AI_IN_PROGRESS :{WHITE}Vitajte v novom AI. Mozete ocakavat problemy. Ak by nejake nastali urobte screenshot a poslite ho na forum.
TEMP_AI_ACTIVATED :{WHITE}Varovanie: toto nove AI je iba alpha verzia! Momentalne iba automobily funguju!
############ network gui strings
STR_NETWORK_MULTIPLAYER :{WHITE}Hra pre viac hracov
STR_NETWORK_PLAYER_NAME :{BLACK}Meno hraca:
STR_NETWORK_ENTER_NAME_TIP :{BLACK}Toto je meno podla ktoreho vas ostatny identifikuju
STR_NETWORK_CONNECTION :{BLACK}Pripojenie:
STR_NETWORK_CONNECTION_TIP :{BLACK}Vyber si medzi hrou na internete alebo na localnej sieti
STR_NETWORK_START_SERVER :{BLACK}Urobit server
STR_NETWORK_START_SERVER_TIP :{BLACK}Spustit vlastny server
STR_NETWORK_GAME_NAME :{BLACK}Meno
STR_NETWORK_GAME_NAME_TIP :{BLACK}Nazov hry
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Jazyk, verzia serveru, atd.
STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Vyberte hru zo zoznamu
STR_NETWORK_FIND_SERVER :{BLACK}Najst server
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Hlada po sieti servery
STR_NETWORK_ADD_SERVER :{BLACK}Zadat server
STR_NETWORK_ADD_SERVER_TIP :{BLACK}Prida server do zoznamu, v ktorom sa automaticky budu hladat beziace hry.
STR_NETWORK_ENTER_IP :{BLACK}Zadajte IP adresu serveru
STR_NETWORK_CLIENTS_ONLINE :{BLACK}{COMMA16}/{COMMA16}
STR_NETWORK_CLIENTS_CAPTION :{BLACK}Klienti
STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Klienti online / klienti max
STR_NETWORK_GAME_INFO :{SILVER}INFO O HRE
STR_ORANGE :{ORANGE}{STRING}
STR_NETWORK_CLIENTS :{SILVER}Klienti: {WHITE}{COMMA8} / {COMMA8}
STR_NETWORK_LANGUAGE :{SILVER}Jazyk: {WHITE}{STRING}
STR_NETWORK_TILESET :{SILVER}Prostredie: {WHITE}{STRING}
STR_NETWORK_MAP_SIZE :{SILVER}Velkost mapy: {WHITE}{COMMA16}x{COMMA16}
STR_NETWORK_SERVER_VERSION :{SILVER}Verzia servera: {WHITE}{STRING}
STR_NETWORK_SERVER_ADDRESS :{SILVER}Adresa servera: {WHITE}{STRING} : {NUMU16}
STR_NETWORK_START_DATE :{SILVER}Datum zaciatku: {WHITE}{DATE_SHORT}
STR_NETWORK_CURRENT_DATE :{SILVER}Aktualny date: {WHITE}{DATE_SHORT}
STR_NETWORK_PASSWORD :{SILVER}Heslo:
STR_NETWORK_SERVER_OFFLINE :{SILVER}SERVER JE OFFLINE
STR_NETWORK_SERVER_FULL :{SILVER}SERVER JE PLNY
STR_NETWORK_VERSION_MISMATCH :{SILVER}ROZNE VERZIE
STR_NETWORK_JOIN_GAME :{BLACK}Pripojit sa
STR_NETWORK_START_GAME_WINDOW :{WHITE}Zacat novu hru pre viac hracov
STR_NETWORK_NEW_GAME_NAME :{BLACK}Nazov hry:
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}Nazov hry, ktory uvidia ostatni v zozname sietovych hier
STR_NETWORK_SET_PASSWORD :{BLACK}Nastavit heslo
STR_NETWORK_PASSWORD_TIP :{BLACK}Ochran hru heslom, ak nechcec aby sa pripajali ostatny ludia
STR_NETWORK_SELECT_MAP :{BLACK}Vyber mapu:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Ktoru mapu chces hrat?
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximalny pocet klientov:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Zvol maximalny pocet klientov. Moze sa ich pripojit aj menej.
STR_NETWORK_COMBO1 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (oznamit)
STR_NETWORK_COMBO2 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_2_CLIENTS :2 klienti
STR_NETWORK_3_CLIENTS :3 klienti
STR_NETWORK_4_CLIENTS :4 klienti
STR_NETWORK_5_CLIENTS :5 klientov
STR_NETWORK_6_CLIENTS :6 klientov
STR_NETWORK_7_CLIENTS :7 klientov
STR_NETWORK_8_CLIENTS :8 klientov
STR_NETWORK_9_CLIENTS :9 klientov
STR_NETWORK_10_CLIENTS :10 klientov
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Jazyk hracov:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Aby ostatni hraci vedeli, akym jazykom sa bude hovorit na serveri.
STR_NETWORK_COMBO3 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Spustit hru
STR_NETWORK_START_GAME_TIP :{BLACK}Zacat sietovu hru z nahodnej mapy alebo scenaria
STR_NETWORK_LOAD_GAME :{BLACK}Nacitat hru
STR_NETWORK_LOAD_GAME_TIP :{BLACK}Pokracovat v ulozenej hre (uistite sa, ze sa pripojite ako spravny hrac)
STR_NETWORK_LOAD_SCENARIO :{BLACK}Nahrat scenario
STR_NETWORK_LOAD_SCENARIO_TIP :{BLACK}Zacat sietovu hru zo scenaria
############ Leave those lines in this order!!
STR_NETWORK_LANG_ANY :Lubovolny
STR_NETWORK_LANG_ENGLISH :Anglicky
STR_NETWORK_LANG_GERMAN :Nemecky
STR_NETWORK_LANG_FRENCH :Francuzsky
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Sietova hra - lobby
STR_NETWORK_PREPARE_TO_JOIN :{BLACK}Pripravuje sa k vstupu: {ORANGE}{STRING}
STR_NETWORK_COMPANY_LIST_TIP :{BLACK}Aktualny zoznam spolocnosti v tejto hre. Bud mozes do jednej vstupit, alebo zalozit novu spolocnost.
STR_NETWORK_NEW_COMPANY :{BLACK}Nova spolocnost
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Zalozit novu spolocnost
STR_NETWORK_SPECTATE_GAME :{BLACK}Sledovat hru
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Sledovat hru len ako divak
STR_NETWORK_JOIN_COMPANY :{BLACK}Vstupit do spolocnosti
STR_NETWORK_JOIN_COMPANY_TIP :{BLACK}Pomoct viest tuto spolocnost
STR_NETWORK_REFRESH :{BLACK}Obnovit server
STR_NETWORK_REFRESH_TIP :{BLACK}Obnovit info o serveri
STR_NETWORK_COMPANY_INFO :{SILVER}INFO O SPOLOCNOSTI
STR_NETWORK_COMPANY_NAME :{SILVER}Nazov spolocnosti: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Zalozene: {WHITE}{NUMU16}
STR_NETWORK_VALUE :{SILVER}Hodnota spolocnosti: {WHITE}{CURRENCY64}
STR_NETWORK_CURRENT_BALANCE :{SILVER}Stav uctu: {WHITE}{CURRENCY64}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Zisk v minulom roku: {WHITE}{CURRENCY64}
STR_NETWORK_PERFORMANCE :{SILVER}Vykon: {WHITE}{NUMU16}
STR_NETWORK_VEHICLES :{SILVER}Vozidla: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_STATIONS :{SILVER}Stanice: {WHITE}{NUMU16} {TRAIN}, {NUMU16} {LORRY}, {NUMU16} {BUS}, {NUMU16} {PLANE}, {NUMU16} {SHIP}
STR_NETWORK_PLAYERS :{SILVER}Hraci: {WHITE}{STRING}
STR_NETWORK_CONNECTING :{WHITE}Pripajam sa...
############ Leave those lines in this order!!
STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Pripajam sa..
STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Overovanie..
STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Cakam..
STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Stahovanie mapy..
STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Spracovanie dat..
STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registracia..
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Prijem informacii o hre..
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Prijem informacii o spolocnosti..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{INT32} klient(i) pred nami
STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{INT32} / {INT32} kB stiahnute
STR_NETWORK_DISCONNECT :{BLACK}Odpojit sa
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Napis spravu, ktoru chces poslat
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Napis sumu, ktoru chces poskytnut
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server je chraneny. Napis heslo
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Spolocnost je chranena. Napis heslo
STR_NETWORK_CLIENT_LIST :{WHITE}Zoznam klientov
STR_NETWORK_ERR_NOTAVAILABLE :{WHITE} Nie su ziadne sietove zariadenie alebo hra je kompilovana bez ENABLE_NETWORK
STR_NETWORK_ERR_NOSERVER :{WHITE} Nebola najdena ziadna sietova hra
STR_NETWORK_ERR_NOCONNECTION :{WHITE} Server neodpoveda na ziadost
STR_NETWORK_ERR_DESYNC :{WHITE} Siet - Chyba synchronizacie hry
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} Siet - Stratene spojenie
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Nedokazem nahrat hru zo servera
STR_NETWORK_ERR_SERVER_START :{WHITE} Nemozem spustit server.
STR_NETWORK_ERR_CLIENT_START :{WHITE} Nemozem sa pripojit.
STR_NETWORK_ERR_TIMEOUT :{WHITE} Vyprsal casovy limit pre spojenie #{NUMU16}.
STR_NETWORK_ERR_SERVER_ERROR :{WHITE} Chyba vznikla v protokole a spojenie je zatvorene.
STR_NETWORK_ERR_WRONG_REVISION :{WHITE} Revizia hry u tohto klienta nezodpoveda revizii hry na serveri.
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Chybne heslo.
STR_NETWORK_ERR_SERVER_FULL :{WHITE} Server je plny
STR_NETWORK_ERR_SERVER_BANNED :{WHITE} Si zablokovany na tomto serveri
STR_NETWORK_ERR_KICKED :{WHITE} Bol si vyhodeny z hry
STR_NETWORK_ERR_CHEATER :{WHITE} Cheatovanie nie je povolene na tomto serveri
STR_NETWORK_ERR_LEFT :opustil hru
############ Leave those lines in this order!!
STR_NETWORK_ERR_CLIENT_GENERAL :generalna chyba
STR_NETWORK_ERR_CLIENT_DESYNC :chyba synchronizacie
STR_NETWORK_ERR_CLIENT_SAVEGAME :neviem nahrat mapu
STR_NETWORK_ERR_CLIENT_CONNECTION_LOST :spojenie prerusene
STR_NETWORK_ERR_CLIENT_PROTOCOL_ERROR :chyba protokolu
STR_NETWORK_ERR_CLIENT_NOT_AUTHORIZED :overenie odmietnute
STR_NETWORK_ERR_CLIENT_NOT_EXPECTED :neplatny packet prijaty
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :chybna revizia hry
STR_NETWORK_ERR_CLIENT_NAME_IN_USE :meno sa uz pouziva
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :chybne heslo
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :chybne id hraca v DoCommand
STR_NETWORK_ERR_CLIENT_KICKED :vyhodeny zo servera
STR_NETWORK_ERR_CLIENT_CHEATER :sa pokusal cheatovat
############ End of leave-in-this-order
STR_NETWORK_CLIENT_JOINED :vstupil do hry
STR_NETWORK_GIVE_MONEY :ti dal nejake peniaze ({CURRENCY})
STR_NETWORK_GAVE_MONEY_AWAY :dal si {STRING} nejake penazi ({CURRENCY})
STR_NETWORK_CHAT_COMPANY :[Tim] {STRING}:
STR_NETWORK_CHAT_TO_COMPANY :[Tim] pre {STRING}:
STR_NETWORK_CHAT_CLIENT :[Osobny] {STRING}:
STR_NETWORK_CHAT_TO_CLIENT :[Privatny] pre {STRING}:
STR_NETWORK_CHAT_ALL :[Vsetci] {STRING}:
STR_NETWORK_NAME_CHANGE :si zmenil meno na
STR_NETWORK_SERVER_SHUTDOWN :{WHITE} Server ukoncil relaciu
STR_NETWORK_SERVER_REBOOT :{WHITE} Server sa restartuje...{}Cakajte prosim...
STR_NETWORK_SERVER :Server
STR_NETWORK_CLIENT :Klient
STR_NETWORK_CLIENTLIST_NONE :(nikto)
STR_NETWORK_CLIENTLIST_KICK :Vyhodit
STR_NETWORK_CLIENTLIST_GIVE_MONEY :Darovat peniaze
STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Napisat vsetkym
STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Napisat pre spolocnost
STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privatna sprava
STR_NETWORK_SEND :{BLACK}Poslat
############ end network gui strings
##id 0x0800
STR_0800_COST :{TINYFONT}{RED}Cena: {CURRENCY}
@@ -1120,6 +1459,7 @@ STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Zeleznicne kolaje z exit-signalmi
STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Zeleznicne kolaje z combo-signalmi
##id 0x1800
STR_1800_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Teren ma nevhodny sklon pre stavbu cesty
STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Cesta musi byt najskor odstranena
@@ -1149,6 +1489,7 @@ STR_1818_ROAD_RAIL_LEVEL_CROSSING :Zeleznicny prejazd
##id 0x2000
STR_2000_TOWNS :{WHITE}Mesta
STR_TOWN_LABEL_POP :{WHITE}{STRING} ({COMMA32})
STR_2001 :{WHITE}{STRING}
STR_2002 :{TINYFONT}{BLACK}{STRING}
STR_2003 :{TINYFONT}{WHITE}{STRING}
@@ -1245,6 +1586,7 @@ STR_205B_TEAPOT_HOUSE :Kaviaren
STR_205C_PIGGY_BANK :Mala Banka
##id 0x2800
STR_LANDSCAPING :Uprava krajiny
STR_2800_PLANT_TREES :Sadit stromy
STR_2801_PLACE_SIGN :Vlozit popis
STR_2802_TREES :{WHITE}Stromy
@@ -1282,7 +1624,7 @@ STR_300E_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Letisko sa musi najskor zburat
STR_3030_RENAME_STATION_LOADING :Premenovat stanicu/vykladku
STR_3031_CAN_T_RENAME_STATION :{WHITE}Stanica sa neda premenovat...
STR_3032_RATINGS :{BLACK}Hodnotenie
STR_3033_ACCEPTS :{BLACK}Prijma
STR_3033_ACCEPTS :{BLACK}Prijima
STR_3034_LOCAL_RATING_OF_TRANSPORT :{BLACK}Hodnotenie prepravy:
############ range for rating starts
@@ -1297,10 +1639,10 @@ STR_303C_OUTSTANDING :Perfektne
############ range for rating ends
STR_303D :{WHITE}{STRING}: {YELLOW}{STRING} ({COMMA8}%)
STR_303E_NO_LONGER_ACCEPTS :{WHITE}{STATION} uz neprijma {STRING}
STR_303F_NO_LONGER_ACCEPTS_OR :{WHITE}{STATION} uz neprijma {STRING} or {STRING}
STR_3040_NOW_ACCEPTS :{WHITE}{STATION} teraz prijma {STRING}
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} teraz prijma {STRING} and {STRING}
STR_303E_NO_LONGER_ACCEPTS :{WHITE}{STATION} uz neprijima {STRING}
STR_303F_NO_LONGER_ACCEPTS_OR :{WHITE}{STATION} uz neprijima {STRING} alebo {STRING}
STR_3040_NOW_ACCEPTS :{WHITE}{STATION} teraz prijima {STRING}
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} teraz prijima {STRING} a {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Otocenie zastavky
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Otocenie vykladky
STR_3044_TOO_CLOSE_TO_ANOTHER_BUS :{WHITE}Prilis blizko inej zastavky
@@ -1526,7 +1868,7 @@ STR_SV_STNAME_EXCHANGE :{STRING} Predmestie
STR_SV_STNAME_AIRPORT :{STRING} Letisko
STR_SV_STNAME_OILFIELD :{STRING} Vrtna plosina
STR_SV_STNAME_MINES :{STRING} Bane
STR_SV_STNAME_DOCKS :{STRING} Bristav
STR_SV_STNAME_DOCKS :{STRING} Pristav
STR_SV_STNAME_BUOY_1 :{STRING} Boja 1
STR_SV_STNAME_BUOY_2 :{STRING} Boja 2
STR_SV_STNAME_BUOY_3 :{STRING} Boja 3
@@ -1548,6 +1890,8 @@ STR_SV_STNAME_FOREST :{STRING} Les
##id 0x6800
STR_6800_DIFFICULTY_LEVEL :{WHITE}Uroven obtiaznosti
STR_OPTIONS_SAVE_CHANGES :{BLACK}Ulozit
############ range for difficulty levels starts
STR_6801_EASY :{BLACK}Lahka
STR_6802_MEDIUM :{BLACK}Stredna
@@ -1573,8 +1917,10 @@ STR_6812_QUANTITY_OF_SEA_LAKES :{LTBLUE}Rozsah oceanov/jazier: {ORANGE}{STRING
STR_6813_ECONOMY :{LTBLUE}Ekonomika: {ORANGE}{STRING}
STR_6814_TRAIN_REVERSING :{LTBLUE}Otacanie vlakov: {ORANGE}{STRING}
STR_6815_DISASTERS :{LTBLUE}Havarie: {ORANGE}{STRING}
STR_16816_CITY_APPROVAL :{LTBLUE}Postoj miestnej spravy k stavebnym upravam mesta: {ORANGE}{STRING}
############ range for difficulty settings ends
STR_26816_NONE :Ziadny
STR_6816_LOW :Nizke
STR_6817_NORMAL :Normalne
STR_6818_HIGH :Vysoke
@@ -1611,6 +1957,9 @@ STR_6835_AT_END_OF_LINE_ONLY :Len na konci trasy
STR_6836_OFF :Vyp.
STR_6837_ON :Zap.
STR_6838_SHOW_HI_SCORE_CHART :{BLACK}Zobrazit tabulku najlepsich
STR_6839_PERMISSIVE :Priatelsky
STR_683A_TOLERANT :Tolerantny
STR_683B_HOSTILE :Nepriatelsky
##id 0x7000
STR_7000 :
@@ -1653,6 +2002,7 @@ STR_7024 :{COMMA32}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Graf prevadzkoveho zisku
STR_7026_BANK_BALANCE :{WHITE}Zostatok v banke
STR_7027_LOAN :{WHITE}Pozicka
STR_MAX_LOAN :{WHITE}Max. pozicka: {BLACK}{CURRENCY64}
STR_7028 :{BLACK}{CURRENCY64}
STR_7029_BORROW :{BLACK}Pozicat {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702A_REPAY :{BLACK}Vratit {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
@@ -1726,8 +2076,13 @@ STR_706D_PRESIDENT :Prezident
STR_706E_TYCOON :Tycoon
STR_706F_BUILD_HQ :{BLACK}Postavit sidlo
STR_7070_BUILD_COMPANY_HEADQUARTERS :{BLACK}Postavit sidlo spolocnosti / pozriet na sidlo spolocnosti
STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Sidlo spolocnosti mozes premiestnit za 1% hodnoty spolocnosti
STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Sidlo spolocnosti sa neda postavit...
STR_7072_VIEW_HQ :{BLACK}Pozriet sidlo
STR_RELOCATE_HQ :{BLACK}Premiestnit sidlo
STR_COMPANY_PASSWORD :{BLACK}Heslo
STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Heslo-ochrana vasej spolocnosti proti neautorizovanemu pripojeniu hracov
STR_SET_COMPANY_PASSWORD :Nastavte heslo spolocnosti
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Svetova kriza!{}{}Financni experti maju obavy z prepadu ekonomiky!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Koniec krizy!{}{}Ocakava sa vzostup predaja a posilnenie ekonomiky!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Prepinac velkosti okna
@@ -1741,6 +2096,7 @@ STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}25% podiel v tejto spolocnosti sa neda
STR_707D_OWNED_BY :{WHITE}({COMMA16}% vlastnene {STRING})
STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA16}% vlastnene {STRING}{} {COMMA16}% vlastnene {STRING})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{STRING} bola kupena spolocnostou {STRING}!
STR_7080_PROTECTED :{WHITE}Tato spolocnost zatial neobchoduje s akciami...
##id 0x8000
STR_8000_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Parny)
@@ -2031,12 +2387,15 @@ STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Opravovat non-stop v {TOWN} Vlakovom Depe
STR_HEADING_FOR_TRAIN_DEPOT :{LTBLUE}Smeruje do {TOWN} depa
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{LTBLUE}Smeruje do {TOWN} depa, {VELOCITY}
STR_INVALID_ORDER :{RED} (Neplatny prikaz)
STR_UNKNOWN_DESTINATION :neznamy ciel
STR_8812_EMPTY :{LTBLUE}Prazdny
STR_8813_FROM :{LTBLUE}{CARGO} z {STATION}
STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}Vlak {COMMA16} caka v depe
STR_8815_NEW_VEHICLES :{BLACK}Nove vozidla
STR_8816 :{BLACK}-
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Cena: {GOLD}{CURRENCY}{BLACK} Nosnost: {GOLD}{COMMA16}t{}{BLACK}Rychlost: {GOLD}{VELOCITY}{BLACK} Vykon: {GOLD}{COMMA16}hp{}{BLACK}Cena prevadzky: {GOLD}{CURRENCY}/rok{}{BLACK}Kapacita: {GOLD}{STRING}{}{BLACK}Navrnute: {GOLD}{NUMU16}{BLACK} Zivotnost: {GOLD}{COMMA16} rokov{}{BLACK}Spolahlivost: {GOLD}{COMMA8}%
STR_8817_COST_WEIGHT_T_SPEED_POWER :{BLACK}Cena: {GOLD}{CURRENCY}{BLACK} Nosnost: {GOLD}{COMMA16}t{}{BLACK}Rychlost: {GOLD}{VELOCITY}{BLACK} Vykon: {GOLD}{COMMA32}hp{}{BLACK}Cena prevadzky: {GOLD}{CURRENCY}/rok{}{BLACK}Kapacita: {GOLD}{STRING}{}{BLACK}Navrnute: {GOLD}{NUMU16}{BLACK} Zivotnost: {GOLD}{COMMA16} rokov{}{BLACK}Spolahlivost: {GOLD}{COMMA8}%
STR_8818_INFORMATION :{BLACK}Informacie
STR_8819_TRAIN_TOO_LONG :{WHITE}Vlak je prilis dlhy
STR_881A_TRAINS_CAN_ONLY_BE_ALTERED :{WHITE}Vlaky sa daju prerobit len v depe
@@ -2075,6 +2434,7 @@ STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Nemozno predat automobil...
STR_883A_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Nemoze najst cestu do depa
STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Nemozno zastavit/spustit vlak...
STR_883C_SERVICING_INTERVAL_DAYS :{BLACK}Servisny interval: {LTBLUE}{COMMA16}dni{BLACK} Posledny servis: {LTBLUE}{DATE_LONG}
STR_SERVICING_INTERVAL_PERCENT :{BLACK}Servisny interval: {LTBLUE}{COMMA16}%{BLACK} Posledny servis bol: {LTBLUE}{DATE_LONG}
STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Vlaky - kliknut na vlak pre informacie
STR_883E_BUILD_NEW_TRAINS_REQUIRES :{BLACK}Vyrobit nove vlaky (potrebne depo)
STR_883F_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Vlaky - kliknut na vlak pre informacie, potiahni pre zmenu pozicie
@@ -2262,7 +2622,7 @@ STR_GO_TO_SHIP_DEPOT :Chod do {TOWN} Lodenice
SERVICE_AT_SHIP_DEPOT :Opravit v {TOWN} Lodenici
##id 0xA000
STR_A000_AIRPORT_CONSTRUCT :{WHITE}Vystavba letiska.
STR_A000_AIRPORTS :{WHITE}Letiska
STR_A001_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Tu sa letisko neda postavit...
STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} Hangar
STR_A003_NEW_AIRCRAFT :{BLACK}Nove Lietadlo
@@ -2316,6 +2676,7 @@ STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Nemozno pomenovat lietadlo...
STR_A032_NAME_AIRCRAFT :{BLACK}Pomenovat lietadlo
STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Mesto oslavuje . . .{}Prve lietadlo pristalo na {STATION}!
STR_A034_PLANE_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Letecka havaria!{}{COMMA16} mrtvych pri poziari na {STATION}
STR_PLANE_CRASH_OUT_OF_FUEL :{BLACK}{BIGFONT}Letecka havaria!{}Lietadlu doslo palivo, {COMMA16} mrtvych pri poziari!
STR_A035_DESTINATIONS :{TINYFONT}{BLACK}Ciele:
STR_A036 :{TINYFONT}{BLACK}{STATION}
STR_A037_RENAME :{BLACK}Premenovat
@@ -2341,6 +2702,96 @@ STR_B002_OIL_REFINERY_EXPLOSION :{BLACK}{BIGFONT}Ropna rafineria explodovala n
STR_B003_FACTORY_DESTROYED_IN_SUSPICIOUS :{BLACK}{BIGFONT}Za nejasnych okolnost bola znicena tovaren nedaleko {TOWN}!
STR_B004_UFO_LANDS_NEAR :{BLACK}{BIGFONT}'UFO' pristalo nedaleko {TOWN}!
STR_B005_COAL_MINE_SUBSIDENCE_LEAVES :{BLACK}{BIGFONT}Zaval v uholnej bani nedaleko {TOWN}!
STR_B006_FLOOD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Povoden!{}Najmenej {COMMA16} ludi je nezvestnych alebo mrtvych po strasnych zaplavach!
STR_BRIBE_FAILED :{WHITE}Vas pokus o uplatok bol odhaleny
STR_BRIBE_FAILED_2 :{WHITE}miestnym vysetrovatelom.
STR_BUILD_DATE :{BLACK}Postavene: {LTBLUE}{DATE_LONG}
STR_MULTIPLAYER_PAUSED :{WHITE}Hra je pozastavena.{}Nie je mozne vykonat prikaz.
STR_PERFORMANCE_DETAIL :{WHITE}Podrobne hodnotenie vykonu
STR_PERFORMANCE_DETAIL_KEY :{BLACK}Podrobne
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA32}/{COMMA32})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{INT32}%
SET_PERFORMANCE_DETAIL_INT :{BLACK}{INT32}
############ Those following lines need to be in this order!!
STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Vozidla:
STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Stanice:
STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Min. profit:
STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Min. prijem:
STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Max. prijem:
STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Prepravene:
STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Naklad:
STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Hotovost:
STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Uver:
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Spolu:
############ End of order list
STR_PERFORMANCE_DETAIL_VEHICLES_TIP :{BLACK}Pocet vozidiel (automobilov, vlakov, lodi a lietadiel).
STR_PERFORMANCE_DETAIL_STATIONS_TIP :{BLACK}Pocet casti stanic. Kazda cast stanice (napr. zeleznicna stanica, autobusova zastavka, letisko) je zapocitana, aj ked su spojene do jednej stanice.
STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP :{BLACK}Zisk vozidla s najnizsim prijmom (zo vsetkych vozidiel starsich ako 2 roky)
STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP :{BLACK}Mnozstvo penazi zarobenych v mesiaci s najmensim ziskom v poslednych 12 kvartaloch
STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP :{BLACK}Mnozstvo penazi zarobenych v mesiaci s najvacsim ziskom v poslednych 12 kvartaloch
STR_PERFORMANCE_DETAIL_DELIVERED_TIP :{BLACK}Pocet jednotiek tovaru prevezenych v poslednych styroch kvartaloch.
STR_PERFORMANCE_DETAIL_CARGO_TIP :{BLACK}Typy nakladu donesene v poslednom kvartali.
STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}Mnozstvo penazi k dispozicii
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Mas velku pozicku?
STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Celkove body z vsetkych moznych
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}Nastavenie novych grafickych suborov
STR_NEWGRF_APPLY_CHANGES :{BLACK}Potvrdit zmeny
STR_NEWGRF_SET_PARAMETERS :{BLACK}Nastavit parametre
STR_NEWGRF_TIP :{BLACK}Zoznam sady nainstalovanych novych grafik. Nastavenie zmenite kliknutim na set.
STR_NEWGRF_NO_FILES_INSTALLED :{BLACK}Nie su nainstalovane ziadne subory s novou grafikou. Postup instalacie novych grafik najdete v manuali.
STR_NEWGRF_FILENAME :{BLACK}Nazov suboru:
STR_NEWGRF_GRF_ID :{BLACK}ID GRF:
STR_CURRENCY_WINDOW :{WHITE}Vlastna mena
STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Kurz meny: {ORANGE}{CURRENCY} = {POUNDSIGN} {COMMA16}
STR_CURRENCY_SEPARATOR :{LTBLUE}Oddelovac:
STR_CURRENCY_PREFIX :{LTBLUE}Predpona:
STR_CURRENCY_SUFFIX :{LTBLUE}Pripona:
STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Prechod na Euro: {ORANGE}{INT32}
STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Prechod na Euro: {ORANGE}nikdy
STR_CURRENCY_PREVIEW :{LTBLUE}Nahlad: {ORANGE}{CURRENCY}
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Zmenit parametre vlastnej meny
STR_TRAIN :{BLACK}{TRAIN}
STR_LORRY :{BLACK}{LORRY}
STR_PLANE :{BLACK}{PLANE}
STR_SHIP :{BLACK}{SHIP}
STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA16} Vlaky
STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA16} Auta
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA16} Lietadla
STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA16} Lode
STR_SCHEDULED_TRAINS_TIP :{BLACK}Zobrazit vsetky vlaky, ktore maju tuto stanicu v cestovnom poriadku
STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Zobrazit vsetky auta, ktore maju tuto stanicu v cestovnom poriadku
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Zobrazit vsetky lietadla, ktore maju tuto stanicu v cestovnom poriadku
STR_SCHEDULED_SHIPS_TIP :{BLACK}Zobrazit vsetky lode, ktore maju tuto stanicu v cestovnom poriadku
STR_REPLACE_VEHICLES :{BLACK}Vymena vozidiel
STR_REPLACE_VEHICLES_WHITE :{WHITE}Vymena vozidiel
STR_REPLACE_VEHICLES_START :{BLACK}Zacat vymenu vozidiel
STR_REPLACE_VEHICLES_STOP :{BLACK}Zastavit vymenu vozidiel
STR_NOT_REPLACING :{BLACK}Nevymiena sa
STR_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Nie je oznacene vozidlo
STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Vyber typ lokomotivy na vymenu
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Vyber typ novej lokomotivy, ktoru chces pouzit namiesto typu v lavom zozname
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Stlac toto tlacidlo, ak nechces vymienat typ lokomotivy vybrany v lavom zozname
STR_REPLACE_HELP_START_BUTTON :{BLACK}Stlac toto tlacidlo, ak chces zacat vymienat typ lokomotivy v lavom zozname za typ lokomotivy v pravom zozname
STR_REPLACE_HELP_RAILTYPE :{BLACK}Vyber typ kolajnic, pre ktore chces vymienat lokomotivy
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Tu sa zobrazuje, za ktoru lokomotiva sa lokomotiva v lavom zozname zamenuje
STR_REPLACE_HELP :{BLACK}Umoznuje vybrat typ lokomotivy, ktory automaticky sa zameni za iny typ, ak vlaky s takouto lokomotivou sa zastavia v depe
############ Lists rail types
STR_RAIL_VEHICLES :Lokomotiva pre zeleznicu
STR_MONORAIL_VEHICLES :Lokomotiva pre jednokolajovku
STR_MAGLEV_VEHICLES :Lokomotiva pre magneticku drahu
############ End of list of rail types
STR_TINY_BLACK :{BLACK}{TINYFONT}{COMMA16}

2795
lang/spanish.txt Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2082
lang/unfinished/estonian.txt Normal file

File diff suppressed because it is too large Load Diff

424
lang/unfinished/latvian.txt Normal file
View File

@@ -0,0 +1,424 @@
##name Latvian
##ownname Latvie<69>u valoda
##id 0x0000
STR_NULL :
STR_0001_OFF_EDGE_OF_MAP :{WHITE}&#256;rpus kartes robe<62>as
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}P&#257;r&#257;k tuvu kartes malai
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nav diezgan naudas - vajag {CURRENCY}
STR_0004 :{WHITE}{CURRENCY64}
STR_0005 :{RED}{CURRENCY64}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Zemei j&#257;b&#363;t plakanai
STR_0008_WAITING :{BLACK}Gaidam: {WHITE}{STRING}
STR_0009 :{WHITE}{STRING}
STR_000A_EN_ROUTE_FROM :{WHITE}{STRING}{YELLOW} (ce&#316;&#257; no
STR_000B :{YELLOW}{STATION})
STR_000C_ACCEPTS :{BLACK}Pie&#326;em: {WHITE}
STR_000D_ACCEPTS :{BLACK}Pie&#326;em: {GOLD}
STR_000E :
STR_000F_PASSENGERS :Pasa<73>ierus
STR_0010_COAL :Ogles
STR_0011_MAIL :Pastu
STR_0012_OIL :Naftu
STR_0013_LIVESTOCK :Liellopus
STR_0014_GOODS :Preces
STR_0015_GRAIN :Graudus
STR_0016_WOOD :Kokmatere&#257;lus
STR_0017_IRON_ORE :Dzelzs r&#363;du
STR_0018_STEEL :T&#275;raudu
STR_0019_VALUABLES :V&#275;rtspap&#299;ri
STR_001A_COPPER_ORE :Vara r&#363;da
STR_001B_MAIZE :Kukur&#363;za
STR_001C_FRUIT :Aug&#316;i
STR_001D_DIAMONDS :Dimanti
STR_001E_FOOD :P&#257;rtika
STR_001F_PAPER :Pap&#299;rs
STR_0020_GOLD :Zelts
STR_0021_WATER :&#362;dens
STR_0022_WHEAT :Kvie<69>i
STR_0023_RUBBER :Gumija
STR_0024_SUGAR :Cukurs
STR_0025_TOYS :Rota&#316;lietas
STR_0026_CANDY :Saldumi
STR_0027_COLA :Kola
STR_0028_COTTON_CANDY :Cukurvate
STR_0029_BUBBLES :Burbu&#316;i
STR_002A_TOFFEE :Cukurpl&#257;ksnes
STR_002B_BATTERIES :Baterijas
STR_002C_PLASTIC :Plastmasa
STR_002D_FIZZY_DRINKS :Burbu&#316;&#363;de&#326;i
STR_002E :
STR_002F_PASSENGER :Pasa<73>ieris
STR_0030_COAL :Ogle
STR_0031_MAIL :Pasts
STR_0032_OIL :Nafta
STR_0033_LIVESTOCK :Liellopi
STR_0034_GOODS :Preces
STR_0035_GRAIN :Graudi
STR_0036_WOOD :Kokmatere&#257;li
STR_0037_IRON_ORE :Dzelzs r&#363;da
STR_0038_STEEL :T&#275;rauds
STR_0039_VALUABLES :V&#275;rtspap&#299;ri
STR_003A_COPPER_ORE :Vara r&#363;da
STR_003B_MAIZE :Kukur&#363;za
STR_003C_FRUIT :Aug&#316;i
STR_003D_DIAMOND :Dimanti
STR_003E_FOOD :P&#257;rtika
STR_003F_PAPER :pap&#299;rs
STR_0040_GOLD :Zelts
STR_0041_WATER :&#362;dens
STR_0042_WHEAT :Kvie<69>i
STR_0043_RUBBER :Gumija
STR_0044_SUGAR :Cukurs
STR_0045_TOY :Rota&#316;lieta
STR_0046_CANDY :Saldumi
STR_0047_COLA :Kola
STR_0048_COTTON_CANDY :Cukurvate
STR_0049_BUBBLE :Burbulis
STR_004A_TOFFEE :Cukurpl&#257;ksn&#299;te
STR_004B_BATTERY :Baterijas
STR_004C_PLASTIC :Plastmasas
STR_004D_FIZZY_DRINK :Burbu&#316;&#363;de&#326;u
STR_004E :
STR_004F_PASSENGER :{COMMA16} pasa<73>ieris
STR_0050_TON_OF_COAL :{COMMA16} tonna og&#316;u
STR_0051_BAG_OF_MAIL :{COMMA16} pasta maiss
STR_0052_OF_OIL :{VOLUME} naftas
STR_0053_ITEM_OF_LIVESTOCK :{COMMA16} liellops
STR_0054_CRATE_OF_GOODS :{COMMA16} pre&#269;u kaste
STR_0055_TON_OF_GRAIN :{COMMA16} tonna graudu
STR_0056_TON_OF_WOOD :{COMMA16} tonna kokmatere&#257;lu
STR_0057_TON_OF_IRON_ORE :{COMMA16} tonna dzelzs r&#363;das
STR_0058_TON_OF_STEEL :{COMMA16} tonna t&#275;rauda
STR_0059_BAG_OF_VALUABLES :{COMMA16} maiss ar v&#275;rtspap&#299;riem
STR_005A_TON_OF_COPPER_ORE :{COMMA16} tonna vara r&#363;das
STR_005B_TON_OF_MAIZE :{COMMA16} tonna kukur&#363;zas
STR_005C_TON_OF_FRUIT :{COMMA16} tonna aug&#316;u
STR_005D_BAG_OF_DIAMONDS :{COMMA16} maiss ar dimantiem
STR_005E_TON_OF_FOOD :{COMMA16} tonna p&#257;rtikas pre&#269;u
STR_005F_TON_OF_PAPER :{COMMA16} tonna pap&#299;ra
STR_0060_BAG_OF_GOLD :{COMMA16} zelta maiss
STR_0061_OF_WATER :{VOLUME} &#363;dens
STR_0062_TON_OF_WHEAT :{COMMA16} tonna kvie<69>u
STR_0063_OF_RUBBER :{VOLUME} tonna gumijas
STR_0064_TON_OF_SUGAR :{COMMA16} tonna cukura
STR_0065_TOY :{COMMA16} rota&#316;lieta
STR_0066_BAG_OF_CANDY :{COMMA16} saldumu maiss
STR_0067_OF_COLA :{VOLUME} kolas
STR_0068_TON_OF_COTTON_CANDY :{COMMA16} tonna cukurvates
STR_0069_BUBBLE :{COMMA16} burbulis
STR_006A_TON_OF_TOFFEE :{COMMA16} tonna cukurpl&#257;ksn&#299;<3B>u
STR_006B_BATTERY :{COMMA16} baterija
STR_006C_OF_PLASTIC :{VOLUME} plastmasas
STR_006D_FIZZY_DRINK :{COMMA16} burbu&#316;&#363;denis
STR_006E :
STR_006F_PASSENGERS :{COMMA16} pasa<73>ieri
STR_0070_TONS_OF_COAL :{COMMA16} tonnas og&#316;u
STR_0071_BAGS_OF_MAIL :{COMMA16} pasta maisi
STR_0072_OF_OIL :{VOLUME} naftas
STR_0073_ITEMS_OF_LIVESTOCK :{COMMA16} liellopi
STR_0074_CRATES_OF_GOODS :{COMMA16} kastes ar prec&#275;m
STR_0075_TONS_OF_GRAIN :{COMMA16} tonnas graudu
STR_0076_TONS_OF_WOOD :{COMMA16} tonnas kokmatere&#257;lu
STR_0077_TONS_OF_IRON_ORE :{COMMA16} tonnas dzelzs r&#363;das
STR_0078_TONS_OF_STEEL :{COMMA16} tonnas t&#275;rauda
STR_0079_BAGS_OF_VALUABLES :{COMMA16} maisi ar v&#275;rtsliet&#257;m
STR_007A_TONS_OF_COPPER_ORE :{COMMA16} tonnas vara r&#363;das
STR_007B_TONS_OF_MAIZE :{COMMA16} tonnas kukur&#363;zas
STR_007C_TONS_OF_FRUIT :{COMMA16} tonnas aug&#316;u
STR_007D_BAGS_OF_DIAMONDS :{COMMA16} maisi ar dimantiem
STR_007E_TONS_OF_FOOD :{COMMA16} tonnas p&#257;rtikas pre&#269;u
STR_007F_TONS_OF_PAPER :{COMMA16} tonnas pap&#299;ra
STR_0080_BAGS_OF_GOLD :{COMMA16} zelta maisi
STR_0081_OF_WATER :{VOLUME} &#363;dens
STR_0082_TONS_OF_WHEAT :{COMMA16} tonnas kvie<69>u
STR_0083_OF_RUBBER :{VOLUME} gumijas
STR_0084_TONS_OF_SUGAR :{COMMA16} tonnas cukura
STR_0085_TOYS :{COMMA16} rota&#316;lietas
STR_0086_BAGS_OF_CANDY :{COMMA16} saldumu maisi
STR_0087_OF_COLA :{VOLUME} kolas
STR_0088_TONS_OF_COTTON_CANDY :{COMMA16} tonnas cukurvates
STR_0089_BUBBLES :{COMMA16} burbu&#316;i
STR_008A_TONS_OF_TOFFEE :{COMMA16} tonnas cukurpl&#257;ksn&#299;<3B>u
STR_008B_BATTERIES :{COMMA16} baterijas
STR_008C_OF_PLASTIC :{VOLUME} plastmasas
STR_008D_FIZZY_DRINKS :{COMMA16} burbu&#316;&#363;de&#326;u
STR_008E :
STR_008F_PS :{TINYFONT}PA
STR_0090_CL :{TINYFONT}OG
STR_0091_ML :{TINYFONT}PT
STR_0092_OL :{TINYFONT}NF
STR_0093_LV :{TINYFONT}LL
STR_0094_GD :{TINYFONT}PR
STR_0095_GR :{TINYFONT}GR
STR_0096_WD :{TINYFONT}KM
STR_0097_OR :{TINYFONT}DZ
STR_0098_ST :{TINYFONT}TR
STR_0099_VL :{TINYFONT}VP
STR_009A_CO :{TINYFONT}VR
STR_009B_MZ :{TINYFONT}KU
STR_009C_FT :{TINYFONT}AU
STR_009D_DM :{TINYFONT}DM
STR_009E_FD :{TINYFONT}PP
STR_009F_PR :{TINYFONT}PS
STR_00A0_GD :{TINYFONT}ZE
STR_00A1_WR :{TINYFONT}UD
STR_00A2_WH :{TINYFONT}KV
STR_00A3_RB :{TINYFONT}GU
STR_00A4_SG :{TINYFONT}CU
STR_00A5_TY :{TINYFONT}RT
STR_00A6_SW :{TINYFONT}SA
STR_00A7_CL :{TINYFONT}KO
STR_00A8_CF :{TINYFONT}CV
STR_00A9_BU :{TINYFONT}BB
STR_00AA_TF :{TINYFONT}CP
STR_00AB_BA :{TINYFONT}BT
STR_00AC_PL :{TINYFONT}PL
STR_00AD_FZ :{TINYFONT}BU
STR_00AE :{WHITE}{DATE_SHORT}
STR_00AF :{WHITE}{DATE_LONG}
STR_00B0_MAP :{WHITE}Karte - {STRING}
STR_00B1_GAME_OPTIONS :{WHITE}Sp<53>les parametri
STR_00B2_MESSAGE :{YELLOW}Zi<5A>ojums
STR_00B3_MESSAGE_FROM :{YELLOW}Zi<5A>ojums no {STRING}
STR_00B4_CAN_T_DO_THIS :{WHITE}T<> nevar dar<61>t....
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}<7D>o laukumu nevar nol<6F>dzin<69>t....
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Ori<72>in<69>l<EFBFBD>s autorties<65>bas {COPYRIGHT} 1995 Chris Sawyer, Visas ties<65>bas rezerv<72>tas
STR_00B7_VERSION :{BLACK}OpenTTD versija {REV}
STR_00B8_ORIGINAL_DESIGN_PROGRAM :{BLACK}Ori<72>in<69>lais dizains: Chris Sawyer
STR_00B9_ORIGINAL_GRAPHICS :{BLACK}Ori<72>in<69>l<EFBFBD> grafika: Simon Foster
STR_SPECIAL_THANKS :{BLACK}<7D>pa<70>a pateic<69>ba sekojo<6A><6F>m person<6F>m:
STR_SPECIAL_THANKS_SIGNALS :{BLACK}<7D> Pirms-sign<67>li un semafori {COPYRIGHT} 2003 Michael Blunck
STR_SPECIAL_THANKS_CANALS :{BLACK}<7D> Pamati slied<65>m un ce<63>u nog<6F>z<EFBFBD>m {COPYRIGHT} Marcin Grzegorczyk
STR_SPECIAL_THANKS_FOUNDATIONS :{BLACK}<7D> Kan<61>lu/dambju grafika {COPYRIGHT} 2003-2004 George
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2004 OpenTTD grupa
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
STR_00C7_QUIT :{WHITE}Beigt
STR_00C8_YES :{BLACK}J<>
STR_00C9_NO :{BLACK}N<>
STR_00CA_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Vai Tu tie<69><65>m gribi pamest <20>o sp<73>li un iet uz {STRING}?
STR_00CB_1 :{BLACK}1
STR_00CC_2 :{BLACK}2
STR_00CD_3 :{BLACK}3
############ range for menu starts
############ range for menu ends
############ range for months starts
############ range for months ends
############ range for service numbers starts
############ range for service numbers ends
############ range for days starts
############ range for days ends
############ range for cargo acecpted starts
############ range for cargo acecpted ends
############ range for menu starts
############ range ends here
############ range for menu starts
############ range ends here
############ range for menu starts
############ range ends here
############ start of townname region
############ end of townname region
# Start of order review system.
# DON'T ADD OR REMOVE LINES HERE
# end of order system
############ network gui strings
############ Leave those lines in this order!!
############ End of leave-in-this-order
############ Leave those lines in this order!!
############ End of leave-in-this-order
############ Leave those lines in this order!!
############ End of leave-in-this-order
############ end network gui strings
##id 0x0800
##id 0x1000
##id 0x1800
##id 0x2000
##id 0x2800
##id 0x3000
############ range for rating starts
############ range for rating ends
##id 0x3800
##id 0x4000
##id 0x4800
############ range for requires starts
############ range for requires ends
##id 0x5000
##id 0x5800
############ WARNING, using range 0x6000 for strings that are stored in the savegame
############ These strings may never get a new id, or savegames will break!
##id 0x6000
############ end of savegame specific region!
##id 0x6800
############ range for difficulty levels starts
############ range for difficulty levels ends
############ range for difficulty settings starts
############ range for difficulty settings ends
##id 0x7000
##id 0x8000
##id 0x8800
##id 0x9000
##id 0x9800
##id 0xA000
##id 0xB000
############ Those following lines need to be in this order!!
############ End of order list

433
lang/unfinished/russian.txt Normal file
View File

@@ -0,0 +1,433 @@
##name Russian_latin_char
##ownname Russkiy
##id 0x0000
STR_NULL :
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Za krayami karti
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Blizko k krayu karti
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Ne hvataet deneg - neobhodimo {CURRENCY}
STR_0004 :{WHITE}{CURRENCY64}
STR_0005 :{RED}{CURRENCY64}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Neobhodima ploskaya poverhnosty
STR_0008_WAITING :{BLACK}Ozhidanie: {WHITE}{STRING}
STR_0009 :{WHITE}{STRING}
STR_000A_EN_ROUTE_FROM :{WHITE}{STRING}{YELLOW} (marshrut iz
STR_000B :{YELLOW}{STATION})
STR_000C_ACCEPTS :{BLACK}Prinimaetsya: {WHITE}
STR_000D_ACCEPTS :{BLACK}Prinimaetsya: {GOLD}
STR_000E :
STR_000F_PASSENGERS :Passajiri
STR_0010_COAL :Ugoly
STR_0011_MAIL :Pochta
STR_0012_OIL :Nefty
STR_0013_LIVESTOCK :Domashniy skot
STR_0014_GOODS :Tovary
STR_0015_GRAIN :Zerno
STR_0016_WOOD :Derevo
STR_0017_IRON_ORE :Zheleznaya Ruda
STR_0018_STEEL :Staly
STR_0019_VALUABLES :Dragocennosti
STR_001A_COPPER_ORE :Mednaya Ruda
STR_001B_MAIZE :Kukuruza
STR_001C_FRUIT :Frukti
STR_001D_DIAMONDS :Almazi
STR_001E_FOOD :Prodovolstvie
STR_001F_PAPER :Bumaga
STR_0020_GOLD :Zoloto
STR_0021_WATER :Voda
STR_0022_WHEAT :Pshenica
STR_0023_RUBBER :Rezina
STR_0024_SUGAR :Sahar
STR_0025_TOYS :Igrushki
STR_0026_CANDY :Sladosti
STR_0027_COLA :Kola
STR_0028_COTTON_CANDY :Saharnaya vata
STR_0029_BUBBLES :Puzirki
STR_002A_TOFFEE :Iriska
STR_002B_BATTERIES :Batareyki
STR_002C_PLASTIC :Plastik
STR_002D_FIZZY_DRINKS :Shipuchie napitki
STR_002E :
STR_002F_PASSENGER :Passajiri
STR_0030_COAL :Ugoly
STR_0031_MAIL :Pochta
STR_0032_OIL :Nefty
STR_0033_LIVESTOCK :Domashniy skot
STR_0034_GOODS :Tovary
STR_0035_GRAIN :Zerno
STR_0036_WOOD :Derevo
STR_0037_IRON_ORE :Zheleznaya ruda
STR_0038_STEEL :Staly
STR_0039_VALUABLES :Dragocennosti
STR_003A_COPPER_ORE :Mednaya ruda
STR_003B_MAIZE :Kukuruza
STR_003C_FRUIT :Frukti
STR_003D_DIAMOND :Almazi
STR_003E_FOOD :Prodovolstvie
STR_003F_PAPER :Bumaga
STR_0040_GOLD :Zoloto
STR_0041_WATER :Voda
STR_0042_WHEAT :Pshenica
STR_0043_RUBBER :Rezina
STR_0044_SUGAR :Sahar
STR_0045_TOY :Igrushki
STR_0046_CANDY :Sladosti
STR_0047_COLA :Kola
STR_0048_COTTON_CANDY :Saharnaya vata
STR_0049_BUBBLE :Puzirki
STR_004A_TOFFEE :Iriska
STR_004B_BATTERY :Batareyki
STR_004C_PLASTIC :Plastik
STR_004D_FIZZY_DRINK :Shipuchie napitki
STR_004E :
STR_004F_PASSENGER :{COMMA16} passajirov
STR_0050_TON_OF_COAL :{COMMA16} tonna uglya
STR_0051_BAG_OF_MAIL :{COMMA16} sumka s pochtoy
STR_0052_OF_OIL :{VOLUME} nefti
STR_0053_ITEM_OF_LIVESTOCK :{COMMA16} golov domashnego skota
STR_0054_CRATE_OF_GOODS :{COMMA16} korobka s tovarom
STR_0055_TON_OF_GRAIN :{COMMA16} tonna zerna
STR_0056_TON_OF_WOOD :{COMMA16} tonna dereva
STR_0057_TON_OF_IRON_ORE :{COMMA16} tonna zheleznoy rudi
STR_0058_TON_OF_STEEL :{COMMA16} tonna stali
STR_0059_BAG_OF_VALUABLES :{COMMA16} sumka s dragocennostyami
STR_005A_TON_OF_COPPER_ORE :{COMMA16} tonna mednoy rudi
STR_005B_TON_OF_MAIZE :{COMMA16} tonna kukuruzi
STR_005C_TON_OF_FRUIT :{COMMA16} tonna fruktov
STR_005D_BAG_OF_DIAMONDS :{COMMA16} meshok s almazami
STR_005E_TON_OF_FOOD :{COMMA16} tonna prodovolstviya
STR_005F_TON_OF_PAPER :{COMMA16} tonna bumagi
STR_0060_BAG_OF_GOLD :{COMMA16} meshok zolota
STR_0061_OF_WATER :{VOLUME} vodi
STR_0062_TON_OF_WHEAT :{COMMA16} tonna pshenici
STR_0063_OF_RUBBER :{VOLUME} rezini
STR_0064_TON_OF_SUGAR :{COMMA16} tonna sahara
STR_0065_TOY :{COMMA16} igrushka
STR_0066_BAG_OF_CANDY :{COMMA16} meshok sladostey
STR_0067_OF_COLA :{VOLUME} koli
STR_0068_TON_OF_COTTON_CANDY :{COMMA16} tonna saharnoy vati
STR_0069_BUBBLE :{COMMA16} puzirki
STR_006A_TON_OF_TOFFEE :{COMMA16} tonna irisok
STR_006B_BATTERY :{COMMA16} batareyki
STR_006C_OF_PLASTIC :{VOLUME} plastika
STR_006D_FIZZY_DRINK :{COMMA16} shipuchie napitki
STR_006E :
STR_006F_PASSENGERS :{COMMA16} passajiri
STR_0070_TONS_OF_COAL :{COMMA16} tonn uglya
STR_0071_BAGS_OF_MAIL :{COMMA16} meshkov s pochtoy
STR_0072_OF_OIL :{VOLUME} nefti
STR_0073_ITEMS_OF_LIVESTOCK :{COMMA16} golov domashnego skota
STR_0074_CRATES_OF_GOODS :{COMMA16} korobok s tovarom
STR_0075_TONS_OF_GRAIN :{COMMA16} tonn zerna
STR_0076_TONS_OF_WOOD :{COMMA16} tonn dereva
STR_0077_TONS_OF_IRON_ORE :{COMMA16} tonn zheleznoy rudi
STR_0078_TONS_OF_STEEL :{COMMA16} tonn stali
STR_0079_BAGS_OF_VALUABLES :{COMMA16} meshkov s dragocennostyami
STR_007A_TONS_OF_COPPER_ORE :{COMMA16} tonn mednoy rudi
STR_007B_TONS_OF_MAIZE :{COMMA16} tonn kukuruzi
STR_007C_TONS_OF_FRUIT :{COMMA16} tonn fruktov
STR_007D_BAGS_OF_DIAMONDS :{COMMA16} meshkov s almazami
STR_007E_TONS_OF_FOOD :{COMMA16} tonn prodovolstviya
STR_007F_TONS_OF_PAPER :{COMMA16} tonn bumagi
STR_0080_BAGS_OF_GOLD :{COMMA16} meshkov zolota
STR_0081_OF_WATER :{VOLUME} vodi
STR_0082_TONS_OF_WHEAT :{COMMA16} tonn pshenici
STR_0083_OF_RUBBER :{VOLUME} rezini
STR_0084_TONS_OF_SUGAR :{COMMA16} tonn sahara
STR_0085_TOYS :{COMMA16} igrushek
STR_0086_BAGS_OF_CANDY :{COMMA16} meshkov so sladostyami
STR_0087_OF_COLA :{VOLUME} koli
STR_0088_TONS_OF_COTTON_CANDY :{COMMA16} tonn saharnoy vati
STR_0089_BUBBLES :{COMMA16} puzirkov
STR_008A_TONS_OF_TOFFEE :{COMMA16} tonn irisok
STR_008B_BATTERIES :{COMMA16} batareek
STR_008C_OF_PLASTIC :{VOLUME} plastika
STR_008D_FIZZY_DRINKS :{COMMA16} shipuchih napitkov
STR_008E :
STR_008F_PS :{TINYFONT}PS
STR_0090_CL :{TINYFONT}CL
STR_0091_ML :{TINYFONT}ML
STR_0092_OL :{TINYFONT}OL
STR_0093_LV :{TINYFONT}LV
STR_0094_GD :{TINYFONT}GD
STR_0095_GR :{TINYFONT}GR
STR_00AF :{WHITE}{DATE_LONG}
STR_00B0_MAP :{WHITE}Karta - {STRING}
STR_00B1_GAME_OPTIONS :{WHITE}Igrovie Opcii
STR_00B2_MESSAGE :{YELLOW}Soobshenie
STR_00B3_MESSAGE_FROM :{YELLOW}Soobshenie ot {STRING}
STR_00B4_CAN_T_DO_THIS :{WHITE}Ne mogu eto sdelaty....
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Ne vozmozno ochistity etu mestnosty....
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Originalnie avtorskie prava {COPYRIGHT} 1995 Chris Sawyer, Vse prava sohraneni
STR_00B7_VERSION :{BLACK}OpenTTD versiya {REV}
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2005 Komanda OpenTTD
STR_TRANSLATED_BY :{BLACK} Perevodchik(i) -
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
STR_00C7_QUIT :{WHITE}Vihod
STR_00C8_YES :{BLACK}Da
STR_00C9_NO :{BLACK}Net
STR_00CA_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Vi uvereni, chto hotite pokinuty etu igru i vernutsya k {STRING}?
STR_00CB_1 :{BLACK}1
STR_00CC_2 :{BLACK}2
STR_00CD_3 :{BLACK}3
STR_00CE_4 :{BLACK}4
STR_00CF_5 :{BLACK}5
STR_00D0_NOTHING :Nichego
STR_00D1_DARK_BLUE :Temno-Siniy
STR_00D2_PALE_GREEN :Bledno-Zeleniy
STR_00D3_PINK :Rozoviy
STR_00D4_YELLOW :Zheltiy
STR_00D5_RED :Krasniy
STR_00D6_LIGHT_BLUE :Svetlo-Siniy
STR_00D7_GREEN :Zeleniy
STR_00D8_DARK_GREEN :Temno-Zeleniy
STR_00D9_BLUE :Siniy
STR_00DA_CREAM :Kremoviy
STR_00DB_MAUVE :Liloviy
STR_00DC_PURPLE :Purpurniy
STR_00DD_ORANGE :Oranjeviy
STR_00DE_BROWN :Korichneviy
STR_00DF_GREY :Seriy
STR_00E0_WHITE :Beliy
STR_00E1_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Slishkom mnogo transporta v igre
STR_00E2 :{BLACK}{COMMA16}
STR_00E3 :{RED}{COMMA16}
STR_00E4_LOCATION :{BLACK}Poziciya
STR_00E5_CONTOURS :Konturi
STR_00E6_VEHICLES :Transportnie sredstva
STR_00E7_INDUSTRIES :Industrii
STR_00E8_ROUTES :Marshruti
STR_00E9_VEGETATION :Rastitelnosty
STR_00EA_OWNERS :Vladelci
STR_00EB_ROADS :{BLACK}{TINYFONT}Dorogi
############ range for menu starts
############ range for menu ends
############ range for months starts
############ range for months ends
############ range for service numbers starts
############ range for service numbers ends
############ range for days starts
############ range for days ends
############ range for cargo acecpted starts
############ range for cargo acecpted ends
############ range for menu starts
############ range ends here
############ range for menu starts
############ range ends here
############ range for menu starts
############ range ends here
############ start of townname region
############ end of townname region
# Start of order review system.
# DON'T ADD OR REMOVE LINES HERE
# end of order system
############ network gui strings
############ Leave those lines in this order!!
############ End of leave-in-this-order
############ Leave those lines in this order!!
############ End of leave-in-this-order
############ Leave those lines in this order!!
############ End of leave-in-this-order
############ end network gui strings
##id 0x0800
##id 0x1000
##id 0x1800
##id 0x2000
##id 0x2800
##id 0x3000
############ range for rating starts
############ range for rating ends
##id 0x3800
##id 0x4000
##id 0x4800
############ range for requires starts
############ range for requires ends
##id 0x5000
##id 0x5800
############ WARNING, using range 0x6000 for strings that are stored in the savegame
############ These strings may never get a new id, or savegames will break!
##id 0x6000
############ end of savegame specific region!
##id 0x6800
############ range for difficulty levels starts
############ range for difficulty levels ends
############ range for difficulty settings starts
############ range for difficulty settings ends
##id 0x7000
##id 0x8000
##id 0x8800
##id 0x9000
##id 0x9800
##id 0xA000
##id 0xB000
############ Those following lines need to be in this order!!
############ End of order list
############ Lists rail types
############ End of list of rail types

476
lang/unfinished/turkish.txt Normal file
View File

@@ -0,0 +1,476 @@
##name Turkish
##ownname T<>rk<72>e
##id 0x0000
STR_NULL :
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Harita Siniri
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Harita sinirina <20>ok yakin
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Yetersiz Nakit- Gereken {CURRENCY}
STR_0004 :{WHITE}{CURRENCY64}
STR_0005 :{RED}{CURRENCY64}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Zeminin d<>z olmasi gerekiyor
STR_0008_WAITING :{BLACK}Bekliyor: {WHITE}{STRING}
STR_0009 :{WHITE}{STRING}
STR_000A_EN_ROUTE_FROM :{WHITE}{STRING}{YELLOW} (Tasindigi Istasyon:
STR_000B :{YELLOW}{STATION})
STR_000C_ACCEPTS :{BLACK}Kabul: {WHITE}
STR_000D_ACCEPTS :{BLACK}Kabul: {GOLD}
STR_000E :
STR_000F_PASSENGERS :Yolcu
STR_0010_COAL :K<>m<EFBFBD>r
STR_0011_MAIL :Posta
STR_0012_OIL :Petrol
STR_0013_LIVESTOCK :Hayvansal <20>r<EFBFBD>nler
STR_0014_GOODS :Mam<61>l Madde
STR_0015_GRAIN :Hububat
STR_0016_WOOD :Aga<67>
STR_0017_IRON_ORE :Demir
STR_0018_STEEL :<3A>elik
STR_0019_VALUABLES :M<>cevherat
STR_001A_COPPER_ORE :Bakir
STR_001B_MAIZE :Maize
STR_001C_FRUIT :Meyve
STR_001D_DIAMONDS :Elmas
STR_001E_FOOD :Gida
STR_001F_PAPER :Kagit
STR_0020_GOLD :Altin
STR_0021_WATER :Su
STR_0022_WHEAT :Bugday
STR_0023_RUBBER :Kau<61>uk
STR_0024_SUGAR :Seker
STR_0025_TOYS :Oyuncak
STR_0026_CANDY :Sekerleme
STR_0027_COLA :Kola
STR_0028_COTTON_CANDY :Pamuk Helva
STR_0029_BUBBLES :K<>p<EFBFBD>k<EFBFBD><6B>k
STR_002A_TOFFEE :Tofita
STR_002B_BATTERIES :Pil
STR_002C_PLASTIC :Plastik
STR_002D_FIZZY_DRINKS :Fizzy Gazozu
STR_002E :
STR_002F_PASSENGER :Yolcu
STR_0030_COAL :K<>m<EFBFBD>r
STR_0031_MAIL :Posta
STR_0032_OIL :Petrol
STR_0033_LIVESTOCK :Hayvansal <20>r<EFBFBD>n
STR_0034_GOODS :Mam<61>l Madde
STR_0035_GRAIN :Hububat
STR_0036_WOOD :Aga<67>
STR_0037_IRON_ORE :Demir
STR_0038_STEEL :<3A>elik
STR_0039_VALUABLES :M<>cevherat
STR_003A_COPPER_ORE :Bakir
STR_003B_MAIZE :Maize
STR_003C_FRUIT :Meyve
STR_003D_DIAMOND :Elmas
STR_003E_FOOD :Gida
STR_003F_PAPER :Kagit
STR_0040_GOLD :Altin
STR_0041_WATER :Su
STR_0042_WHEAT :Bugday
STR_0043_RUBBER :Kau<61>uk
STR_0044_SUGAR :Seker
STR_0045_TOY :Oyuncak
STR_0046_CANDY :Tatli
STR_0047_COLA :Kola
STR_0048_COTTON_CANDY :Pamuk Helva
STR_0049_BUBBLE :K<>p<EFBFBD>k<EFBFBD><6B>k
STR_004A_TOFFEE :Tofita
STR_004B_BATTERY :Pil
STR_004C_PLASTIC :Plastik
STR_004D_FIZZY_DRINK :Fizzy Gazozu
STR_004E :
STR_004F_PASSENGER :{COMMA16} yolcu
STR_0050_TON_OF_COAL :{COMMA16} ton k<>m<EFBFBD>r
STR_0051_BAG_OF_MAIL :{COMMA16} <20>anta posta
STR_0052_OF_OIL :{VOLUME} petrol
STR_0053_ITEM_OF_LIVESTOCK :{COMMA16} adet hayvansal <20>r<EFBFBD>n
STR_0054_CRATE_OF_GOODS :{COMMA16} kasa mam<61>l madde
STR_0055_TON_OF_GRAIN :{COMMA16} ton hububat
STR_0056_TON_OF_WOOD :{COMMA16} ton aga<67>
STR_0057_TON_OF_IRON_ORE :{COMMA16} ton demir
STR_0058_TON_OF_STEEL :{COMMA16} ton <20>elik
STR_0059_BAG_OF_VALUABLES :{COMMA16} <20>anta m<>cevherat
STR_005A_TON_OF_COPPER_ORE :{COMMA16} ton bakir
STR_005B_TON_OF_MAIZE :{COMMA16} ton misir
STR_005C_TON_OF_FRUIT :{COMMA16} ton meyve
STR_005D_BAG_OF_DIAMONDS :{COMMA16} <20>anta elmas
STR_005E_TON_OF_FOOD :{COMMA16} ton gida
STR_005F_TON_OF_PAPER :{COMMA16} ton kagit
STR_0060_BAG_OF_GOLD :{COMMA16} <20>anta altin
STR_0061_OF_WATER :{VOLUME} su
STR_0062_TON_OF_WHEAT :{COMMA16} ton bugday
STR_0063_OF_RUBBER :{VOLUME} of rubber
STR_0064_TON_OF_SUGAR :{COMMA16} ton seker
STR_0065_TOY :{COMMA16} oyuncak
STR_0066_BAG_OF_CANDY :{COMMA16} <20>anta sekerleme
STR_0067_OF_COLA :{VOLUME} kola
STR_0068_TON_OF_COTTON_CANDY :{COMMA16} ton pamuk helva
STR_0069_BUBBLE :{COMMA16} k<>p<EFBFBD>k<EFBFBD><6B>k
STR_006A_TON_OF_TOFFEE :{COMMA16} ton tofita
STR_006B_BATTERY :{COMMA16} pil
STR_006C_OF_PLASTIC :{VOLUME} plastik
STR_006D_FIZZY_DRINK :{COMMA16} fizzy gazozu
STR_006E :
STR_006F_PASSENGERS :{COMMA16} yolcu
STR_0070_TONS_OF_COAL :{COMMA16} ton k<>m<EFBFBD>r
STR_0071_BAGS_OF_MAIL :{COMMA16} <20>anta posta
STR_0072_OF_OIL :{VOLUME} petrol
STR_0073_ITEMS_OF_LIVESTOCK :{COMMA16} adet hayvansal <20>r<EFBFBD>n
STR_0074_CRATES_OF_GOODS :{COMMA16} kasa mam<61>l madde
STR_0075_TONS_OF_GRAIN :{COMMA16} ton hububat
STR_0076_TONS_OF_WOOD :{COMMA16} ton aga<67>
STR_0077_TONS_OF_IRON_ORE :{COMMA16} ton demir
STR_0078_TONS_OF_STEEL :{COMMA16} ton <20>elik
STR_0079_BAGS_OF_VALUABLES :{COMMA16} <20>anta m<>cevherat
STR_007A_TONS_OF_COPPER_ORE :{COMMA16} ton bakir
STR_007B_TONS_OF_MAIZE :{COMMA16} ton misir
STR_007C_TONS_OF_FRUIT :{COMMA16} ton meyve
STR_007D_BAGS_OF_DIAMONDS :{COMMA16} <20>anta elmas
STR_007E_TONS_OF_FOOD :{COMMA16} ton gida
STR_007F_TONS_OF_PAPER :{COMMA16} ton kagit
STR_0080_BAGS_OF_GOLD :{COMMA16} <20>anta altin
STR_0081_OF_WATER :{VOLUME} su
STR_0082_TONS_OF_WHEAT :{COMMA16} ton bugday
STR_0083_OF_RUBBER :{VOLUME} kau<61>uk
STR_0084_TONS_OF_SUGAR :{COMMA16} ton seker
STR_0085_TOYS :{COMMA16} oyuncak
STR_0086_BAGS_OF_CANDY :{COMMA16} <20>anta sekerleme
STR_0087_OF_COLA :{VOLUME} kola
STR_0088_TONS_OF_COTTON_CANDY :{COMMA16} ton pamuk helva
STR_0089_BUBBLES :{COMMA16} k<>p<EFBFBD>k<EFBFBD><6B>k
STR_008A_TONS_OF_TOFFEE :{COMMA16} ton tofita
STR_008B_BATTERIES :{COMMA16} pil
STR_008C_OF_PLASTIC :{VOLUME} plastik
STR_008D_FIZZY_DRINKS :{COMMA16} fizzy gazozu
STR_008E :
STR_008F_PS :{TINYFONT}YL
STR_0090_CL :{TINYFONT}K<>
STR_0091_ML :{TINYFONT}PO
STR_0092_OL :{TINYFONT}PE
STR_0093_LV :{TINYFONT}H<>
STR_0094_GD :{TINYFONT}MM
STR_0095_GR :{TINYFONT}HB
STR_0096_WD :{TINYFONT}AG
STR_0097_OR :{TINYFONT}OR
STR_0098_ST :{TINYFONT}<7D>E
STR_0099_VL :{TINYFONT}M<>
STR_009A_CO :{TINYFONT}KO
STR_009B_MZ :{TINYFONT}MI
STR_009C_FT :{TINYFONT}FT
STR_009D_DM :{TINYFONT}DM
STR_009E_FD :{TINYFONT}GI
STR_009F_PR :{TINYFONT}KA
STR_00A0_GD :{TINYFONT}MM
STR_00A1_WR :{TINYFONT}WR
STR_00A2_WH :{TINYFONT}BU
STR_00A3_RB :{TINYFONT}KU
STR_00A4_SG :{TINYFONT}SG
STR_00A5_TY :{TINYFONT}OY
STR_00A6_SW :{TINYFONT}TA
STR_00A7_CL :{TINYFONT}K<>
STR_00A8_CF :{TINYFONT}PH
STR_00A9_BU :{TINYFONT}KP
STR_00AA_TF :{TINYFONT}TF
STR_00AB_BA :{TINYFONT}PI
STR_00AC_PL :{TINYFONT}PL
STR_00AD_FZ :{TINYFONT}FG
STR_00AE :{WHITE}{DATE_SHORT}
STR_00AF :{WHITE}{DATE_LONG}
STR_00B0_MAP :{WHITE}Map - {STRING}
STR_00B1_GAME_OPTIONS :{WHITE}Oyun Se<53>enekleri
STR_00B2_MESSAGE :{YELLOW}Mesaj
STR_00B3_MESSAGE_FROM :{YELLOW}Mesaj {STRING}
STR_00B4_CAN_T_DO_THIS :{WHITE}Bunu yapamazsiniz..
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Bu b<>lgeyi temizleyemezsiniz...
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Orjinal telif hakki {COPYRIGHT} 1995 Chris Sawyer, T<>m haklari saklidir
STR_00B7_VERSION :{BLACK}OpenTTD versiyon {REV}
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2004 OpenTTD ekibi
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
STR_00C7_QUIT :{WHITE}<7D>ik
STR_00C8_YES :{BLACK}Evet
STR_00C9_NO :{BLACK}Hayir
STR_00CA_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Oyunu sonlandirip {STRING}'a d<>nmek istediginizden emin misiniz?
STR_00CB_1 :{BLACK}1
STR_00CC_2 :{BLACK}2
STR_00CD_3 :{BLACK}3
STR_00CE_4 :{BLACK}4
STR_00CF_5 :{BLACK}5
STR_00D0_NOTHING :Hi<48>
STR_00D1_DARK_BLUE :Koyu Mavi
STR_00D2_PALE_GREEN :A<>ik Yesil
STR_00D3_PINK :Pembe
STR_00D4_YELLOW :Sari
STR_00D5_RED :Kirmizi
STR_00D6_LIGHT_BLUE :A<>ik Mavi
STR_00D7_GREEN :Yesil
STR_00D8_DARK_GREEN :Koyu Yesil
STR_00D9_BLUE :Mavi
STR_00DA_CREAM :Krem
STR_00DB_MAUVE :Leylak
STR_00DC_PURPLE :Mor
STR_00DD_ORANGE :Turuncu
STR_00DE_BROWN :Kahverengi
STR_00DF_GREY :Gri
STR_00E0_WHITE :Beyaz
STR_00E1_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Oyunda <20>ok fazla vasita var
STR_00E2 :{BLACK}{COMMA16}
STR_00E3 :{RED}{COMMA16}
STR_00E4_LOCATION :{BLACK}Konum
STR_00E5_CONTOURS :Dis Hatlar
STR_00E6_VEHICLES :Vasitalar
STR_00E7_INDUSTRIES :End<6E>striler
STR_00E8_ROUTES :Yollar
STR_00E9_VEGETATION :Bitkiler
STR_00EA_OWNERS :Sahipler
STR_00EB_ROADS :{BLACK}{TINYFONT}Yollar
STR_00EC_RAILROADS :{BLACK}{TINYFONT}Demiryollari
STR_00ED_STATIONS_AIRPORTS_DOCKS :{BLACK}{TINYFONT}Istasyon/Havaalani/Liman
STR_00EE_BUILDINGS_INDUSTRIES :{BLACK}{TINYFONT}Binalar/End<6E>striler
STR_00EF_VEHICLES :{BLACK}{TINYFONT}Vasitalar
STR_00F0_100M :{BLACK}{TINYFONT}100m
STR_00F1_200M :{BLACK}{TINYFONT}200m
STR_00F2_300M :{BLACK}{TINYFONT}300m
STR_00F3_400M :{BLACK}{TINYFONT}400m
STR_00F4_500M :{BLACK}{TINYFONT}500m
STR_00F5_TRAINS :{BLACK}{TINYFONT}Trenler
STR_00F6_ROAD_VEHICLES :{BLACK}{TINYFONT}Yol Tasitlari
STR_00F7_SHIPS :{BLACK}{TINYFONT}Gemiler
STR_00F8_AIRCRAFT :{BLACK}{TINYFONT}Hava Tasitlari
STR_00F9_TRANSPORT_ROUTES :{BLACK}{TINYFONT}Nakil Rotalari
STR_00FA_COAL_MINE :{BLACK}{TINYFONT}K<>m<EFBFBD>r Madeni
STR_00FB_POWER_STATION :{BLACK}{TINYFONT}Enerji Santrali
STR_00FC_FOREST :{BLACK}{TINYFONT}Orman
STR_00FD_SAWMILL :{BLACK}{TINYFONT}Bi<42>ki Fabrikasi
STR_00FE_OIL_REFINERY :{BLACK}{TINYFONT}Petrol Rafinerisi
############ range for menu starts
############ range for menu ends
############ range for months starts
############ range for months ends
############ range for service numbers starts
############ range for service numbers ends
############ range for days starts
############ range for days ends
############ range for cargo acecpted starts
############ range for cargo acecpted ends
############ range for menu starts
############ range ends here
############ range for menu starts
############ range ends here
############ range for menu starts
############ range ends here
############ start of townname region
############ end of townname region
# Start of order review system.
# DON'T ADD OR REMOVE LINES HERE
# end of order system
############ network gui strings
############ Leave those lines in this order!!
############ End of leave-in-this-order
############ Leave those lines in this order!!
############ End of leave-in-this-order
############ Leave those lines in this order!!
############ End of leave-in-this-order
############ end network gui strings
##id 0x0800
##id 0x1000
##id 0x1800
##id 0x2000
##id 0x2800
##id 0x3000
############ range for rating starts
############ range for rating ends
##id 0x3800
##id 0x4000
##id 0x4800
############ range for requires starts
############ range for requires ends
##id 0x5000
##id 0x5800
############ WARNING, using range 0x6000 for strings that are stored in the savegame
############ These strings may never get a new id, or savegames will break!
##id 0x6000
############ end of savegame specific region!
##id 0x6800
############ range for difficulty levels starts
############ range for difficulty levels ends
############ range for difficulty settings starts
############ range for difficulty settings ends
##id 0x7000
##id 0x8000
##id 0x8800
##id 0x9000
##id 0x9800
##id 0xA000
##id 0xB000
############ Those following lines need to be in this order!!
############ End of order list
############ Lists rail types
############ End of list of rail types

View File

@@ -21,6 +21,7 @@ CFG=langs - Win32 Debug
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
@@ -35,9 +36,10 @@ MTL=midl.exe
# PROP Output_Dir ""
# PROP Intermediate_Dir ""
# PROP Target_Dir ""
# Begin Target
# Begin Target
# Name "langs - Win32 Debug"
# Begin Source File
SOURCE=.\lang\american.txt
@@ -49,8 +51,19 @@ InputPath=.\lang\american.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\catalan.txt
# Begin Custom Build
InputPath=.\lang\catalan.txt
"lang\catalan.lng" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
strgen\debug\strgen.exe lang\catalan.txt
# End Custom Build
# End Source File
# Begin Source File
SOURCE=.\lang\czech.txt
# Begin Custom Build
InputPath=.\lang\czech.txt
@@ -60,8 +73,8 @@ InputPath=.\lang\czech.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\danish.txt
# Begin Custom Build
InputPath=.\lang\danish.txt
@@ -71,8 +84,8 @@ InputPath=.\lang\danish.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\dutch.txt
# Begin Custom Build
InputPath=.\lang\dutch.txt
@@ -82,8 +95,8 @@ InputPath=.\lang\dutch.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\english.txt
# Begin Custom Build
InputPath=.\lang\english.txt
@@ -93,8 +106,19 @@ InputPath=.\lang\english.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\finnish.txt
# Begin Custom Build
InputPath=.\lang\finnish.txt
"lang\finnish.lng" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
strgen\debug\strgen.exe lang\finnish.txt
# End Custom Build
# End Source File
# Begin Source File
SOURCE=.\lang\french.txt
# Begin Custom Build
InputPath=.\lang\french.txt
@@ -104,8 +128,8 @@ InputPath=.\lang\french.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\galician.txt
# Begin Custom Build
InputPath=.\lang\galician.txt
@@ -115,8 +139,8 @@ InputPath=.\lang\galician.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\german.txt
# Begin Custom Build
InputPath=.\lang\german.txt
@@ -126,8 +150,8 @@ InputPath=.\lang\german.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\hungarian.txt
# Begin Custom Build
InputPath=.\lang\hungarian.txt
@@ -137,8 +161,19 @@ InputPath=.\lang\hungarian.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\icelandic.txt
# Begin Custom Build
InputPath=.\lang\icelandic.txt
"lang\icelandic.lng" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
strgen\debug\strgen.exe lang\icelandic.txt
# End Custom Build
# End Source File
# Begin Source File
SOURCE=.\lang\italian.txt
# Begin Custom Build
InputPath=.\lang\italian.txt
@@ -148,8 +183,8 @@ InputPath=.\lang\italian.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\norwegian.txt
# Begin Custom Build
InputPath=.\lang\norwegian.txt
@@ -159,8 +194,8 @@ InputPath=.\lang\norwegian.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\origveh.txt
# Begin Custom Build
InputPath=.\lang\origveh.txt
@@ -170,8 +205,8 @@ InputPath=.\lang\origveh.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\polish.txt
# Begin Custom Build
InputPath=.\lang\polish.txt
@@ -181,8 +216,19 @@ InputPath=.\lang\polish.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\portuguese.txt
# Begin Custom Build
InputPath=.\lang\portuguese.txt
"lang\portuguese.lng" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
strgen\debug\strgen.exe lang\portuguese.txt
# End Custom Build
# End Source File
# Begin Source File
SOURCE=.\lang\romanian.txt
# Begin Custom Build
InputPath=.\lang\romanian.txt
@@ -192,8 +238,8 @@ InputPath=.\lang\romanian.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\slovak.txt
# Begin Custom Build
InputPath=.\lang\slovak.txt
@@ -203,8 +249,19 @@ InputPath=.\lang\slovak.txt
# End Custom Build
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\lang\spanish.txt
# Begin Custom Build
InputPath=.\lang\spanish.txt
"lang\spanish.lng" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
strgen\debug\strgen.exe lang\spanish.txt
# End Custom Build
# End Source File
# Begin Source File
SOURCE=.\lang\swedish.txt
# Begin Custom Build
InputPath=.\lang\swedish.txt
@@ -214,5 +271,6 @@ InputPath=.\lang\swedish.txt
# End Custom Build
# End Source File
# End Target
# End Project

View File

@@ -44,10 +44,23 @@
<Tool
Name="VCCustomBuildTool"
Description="Generating american language file"
CommandLine="strgen\debug\strgen.exe &quot;$(InputPath)&quot;"
CommandLine="strgen\debug\strgen.exe &quot;$(InputPath)&quot;
"
Outputs="lang\american.lng"/>
</FileConfiguration>
</File>
<File
RelativePath=".\lang\catalan.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating catalan language file"
CommandLine="strgen\debug\strgen.exe &quot;$(InputPath)&quot;
"
Outputs="lang\catalan.lng"/>
</FileConfiguration>
</File>
<File
RelativePath=".\lang\czech.txt">
<FileConfiguration
@@ -96,6 +109,18 @@
Outputs="lang\english.lng"/>
</FileConfiguration>
</File>
<File
RelativePath=".\lang\finnish.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating finnish language file"
CommandLine="strgen\debug\strgen.exe &quot;$(InputPath)&quot;
"
Outputs="lang\finnish.lng"/>
</FileConfiguration>
</File>
<File
RelativePath=".\lang\french.txt">
<FileConfiguration
@@ -144,6 +169,18 @@
Outputs="lang\hungarian.lng"/>
</FileConfiguration>
</File>
<File
RelativePath=".\lang\icelandic.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating icelandic language file"
CommandLine="strgen\debug\strgen.exe &quot;$(InputPath)&quot;
"
Outputs="lang\icelandic.lng"/>
</FileConfiguration>
</File>
<File
RelativePath=".\lang\italian.txt">
<FileConfiguration
@@ -175,7 +212,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Generating Original Vehicle names file"
CommandLine="strgen\debug\strgen.exe &quot;$(InputPath)&quot;"
CommandLine="strgen\debug\strgen.exe &quot;$(InputPath)&quot;
"
Outputs="lang\origveh.lng"/>
</FileConfiguration>
</File>
@@ -191,6 +229,18 @@
Outputs="lang\polish.lng"/>
</FileConfiguration>
</File>
<File
RelativePath=".\lang\portuguese.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating portuguese language file"
CommandLine="strgen\debug\strgen.exe &quot;$(InputPath)&quot;
"
Outputs="lang\portuguese.lng"/>
</FileConfiguration>
</File>
<File
RelativePath=".\lang\romanian.txt">
<FileConfiguration
@@ -215,6 +265,18 @@
Outputs="lang\slovak.lng"/>
</FileConfiguration>
</File>
<File
RelativePath=".\lang\spanish.txt">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="Generating spanish language file"
CommandLine="strgen\debug\strgen.exe &quot;$(InputPath)&quot;
"
Outputs="lang\spanish.lng"/>
</FileConfiguration>
</File>
<File
RelativePath="lang\swedish.txt">
<FileConfiguration

101
macros.h
View File

@@ -1,6 +1,8 @@
#ifndef MACROS_H
#define MACROS_H
#include "map.h"
#define MAX_INT 0x7FFFFFFF
#ifdef min
@@ -11,20 +13,20 @@
#undef max
#endif
static INLINE int min(int a, int b) { if (a <= b) return a; return b; }
static INLINE int max(int a, int b) { if (a >= b) return a; return b; }
static INLINE int64 max64(int64 a, int64 b) { if (a >= b) return a; return b; }
static inline int min(int a, int b) { if (a <= b) return a; return b; }
static inline int max(int a, int b) { if (a >= b) return a; return b; }
static inline int64 max64(int64 a, int64 b) { if (a >= b) return a; return b; }
static INLINE uint minu(uint a, uint b) { if (a <= b) return a; return b; }
static INLINE uint maxu(uint a, uint b) { if (a >= b) return a; return b; }
static inline uint minu(uint a, uint b) { if (a <= b) return a; return b; }
static inline uint maxu(uint a, uint b) { if (a >= b) return a; return b; }
static INLINE int clamp(int a, int min, int max) { if (a <= min) return min; if (a >= max) return max; return a; }
static INLINE int clamp2(int a, int min, int max) { if (a <= min) a=min; if (a >= max) a=max; return a; }
static INLINE bool int32_add_overflow(int32 a, int32 b) { return (int32)(a^b)>=0 && (int32)(a^(a+b))<0; }
static INLINE bool int32_sub_overflow(int32 a, int32 b) { return (int32)(a^b)<0 && (int32)(a^(a-b))<0; }
static inline int clamp(int a, int min, int max) { if (a <= min) return min; if (a >= max) return max; return a; }
static inline int clamp2(int a, int min, int max) { if (a <= min) a=min; if (a >= max) a=max; return a; }
static inline bool int32_add_overflow(int32 a, int32 b) { return (int32)(a^b)>=0 && (int32)(a^(a+b))<0; }
static inline bool int32_sub_overflow(int32 a, int32 b) { return (int32)(a^b)<0 && (int32)(a^(a-b))<0; }
static INLINE bool str_eq(const byte *a, const byte *b)
static inline bool str_eq(const byte *a, const byte *b)
{
int i=0;
while (a[i] == b[i]) {
@@ -36,7 +38,7 @@ static INLINE bool str_eq(const byte *a, const byte *b)
}
// Will crash if strings are equal
static INLINE bool str_is_below(byte *a, byte *b) {
static inline bool str_is_below(byte *a, byte *b) {
while (*a <= *b) {
if (*a < *b) return true;
a++;
@@ -46,19 +48,19 @@ static INLINE bool str_is_below(byte *a, byte *b) {
}
static INLINE int32 BIGMULSS(int32 a, int32 b, int shift) {
static inline int32 BIGMULSS(int32 a, int32 b, int shift) {
return (int32)(((int64)(a) * (int64)(b)) >> (shift));
}
static INLINE int64 BIGMULSS64(int64 a, int64 b, int shift) {
static inline int64 BIGMULSS64(int64 a, int64 b, int shift) {
return ((a) * (b)) >> (shift);
}
static INLINE uint32 BIGMULUS(uint32 a, uint32 b, int shift) {
static inline uint32 BIGMULUS(uint32 a, uint32 b, int shift) {
return (uint32)(((uint64)(a) * (uint64)(b)) >> (shift));
}
static INLINE int64 BIGMULS(int32 a, int32 b) {
static inline int64 BIGMULS(int32 a, int32 b) {
return (int32)(((int64)(a) * (int64)(b)));
}
@@ -66,54 +68,15 @@ static INLINE int64 BIGMULS(int32 a, int32 b) {
//#define IS_INSIDE_1D(x, base, size) ((x) >= (base) && (x) < (base) + (size))
#define IS_INSIDE_1D(x, base, size) ( (uint)((x) - (base)) < ((uint)(size)) )
#define TILE_X_BITS 8
#define TILE_Y_BITS 8
#define LANDSCAPE_SIZE_FACTOR 1
#define TILE_FROM_XY(x,y) (int)((((y) >> 4) << TILE_X_BITS) + ((x) >> 4))
#define TILE_XY(x,y) (int)(((y) << TILE_X_BITS) + (x))
#define IS_TILETYPE(_t_, _s_) (_map_type_and_height[(_t_)] >> 4 == (_s_))
#define GET_TILETYPE(_t_) (_map_type_and_height[(_t_)] >> 4)
#define GET_TILEHEIGHT(_t_) ((_map_type_and_height[_t_] & 0xF) * 8)
enum {
CORRECT_Z_BITS = 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5 | 1 << 6 | 1 << 7
};
#define CORRECT_Z(tileh) (CORRECT_Z_BITS & (1 << tileh))
#define TILES_X (1 << TILE_X_BITS)
#define TILES_Y (1 << TILE_Y_BITS)
#define TILE_X_MAX (TILES_X-1)
#define TILE_Y_MAX (TILES_Y-1)
#define TILE_ASSERT(x) assert( TILE_MASK(x) == (x) );
extern uint SafeTileAdd(uint x, int add, const char *exp, const char *file, int line);
#if !defined(_DEBUG) || TILE_X_BITS != 8
# define TILE_ADD(x,y) ((x)+(y))
#else
# if defined(__GNUC__)
# define TILE_ADD(x,y) (SafeTileAdd((x),(y), "??", __FILE__, __LINE__))
# else
# define TILE_ADD(x,y) (SafeTileAdd((x),(y), #x ## ", " ## #y, __FILE__, __LINE__))
# endif
#endif
#define TILE_ADDXY(tile, x, y) TILE_ADD(tile, TILE_XY(x,y))
#if TILE_X_BITS == 8
#define GET_TILE_X(t) (uint)((byte)(t))
#define GET_TILE_Y(t) (uint)((t) >> 8)
#define TILE_MASK(x) ((uint16)(x))
#else
#define GET_TILE_X(t) (uint)((t) & ((1 << TILE_X_BITS)-1))
#define GET_TILE_Y(t) (uint)((t) >> TILE_X_BITS)
#define TILE_MASK(x) (int)((x) & ((1 << (TILE_X_BITS + TILE_Y_BITS))-1))
#endif
//#define REMADP_COORDS(x,y,z) { int t = x; x = (y-t)*2; y+=t-z; }
#define PACK_POINT(x,y) ((x) | ((y) << 16))
@@ -125,6 +88,7 @@ extern uint SafeTileAdd(uint x, int add, const char *exp, const char *file, int
#define HASBIT(x,y) ((x) & (1 << (y)))
#define SETBIT(x,y) ((x) |= (1 << (y)))
#define CLRBIT(x,y) ((x) &= ~(1 << (y)))
#define TOGGLEBIT(x,y) ((x) ^= (1 << (y)))
// checking more bits. Maybe unneccessary, but easy to use
#define HASBITS(x,y) ((x) & (y))
@@ -145,7 +109,7 @@ extern const byte _ffb_64[128];
*/
#define KILL_FIRST_BIT(x) _ffb_64[(x)+64]
static INLINE int FindFirstBit2x64(int value)
static inline int FindFirstBit2x64(int value)
{
int i = 0;
if ( (byte) value == 0) {
@@ -156,21 +120,12 @@ static INLINE int FindFirstBit2x64(int value)
}
#if TILE_X_BITS + TILE_Y_BITS <= 16
typedef uint16 TileIndex;
typedef int16 TileIndexDiff;
#else
typedef uint32 TileIndex;
typedef int32 TileIndexDiff;
#endif
/* [min,max), strictly less than */
#define IS_BYTE_INSIDE(a,min,max) ((byte)((a)-(min)) < (byte)((max)-(min)))
#define IS_INT_INSIDE(a,min,max) ((uint)((a)-(min)) < (uint)((max)-(min)))
#define CHANCE16(a,b) ((uint16)Random() <= (uint16)((65536 * a) / b))
#define ICHANCE16(a,b) ((uint16)InteractiveRandom() <= (uint16)((65536 * a) / b))
#define CHANCE16R(a,b,r) ((uint16)(r=Random()) <= (uint16)((65536 * a) / b))
#define CHANCE16I(a,b,v) ((uint16)(v) <= (uint16)((65536 * a) / b))
@@ -195,17 +150,17 @@ static INLINE int FindFirstBit2x64(int value)
#define abs myabs
static INLINE int intxchg_(int *a, int b) { int t = *a; *a = b; return t; }
static inline int intxchg_(int *a, int b) { int t = *a; *a = b; return t; }
#define intxchg(a,b) intxchg_(&(a), (b))
#define intswap(a,b) ((b) = intxchg_(&(a), (b)))
static INLINE int myabs(int a) { if (a<0) a = -a; return a; }
static INLINE int64 myabs64(int64 a) { if (a<0) a = -a; return a; }
static inline int myabs(int a) { if (a<0) a = -a; return a; }
static inline int64 myabs64(int64 a) { if (a<0) a = -a; return a; }
static INLINE void swap_byte(byte *a, byte *b) { byte t = *a; *a = *b; *b = t; }
static INLINE void swap_uint16(uint16 *a, uint16 *b) { uint16 t = *a; *a = *b; *b = t; }
static INLINE void swap_int16(int16 *a, int16 *b) { int16 t = *a; *a = *b; *b = t; }
static INLINE void swap_tile(TileIndex *a, TileIndex *b) { TileIndex t = *a; *a = *b; *b = t; }
static inline void swap_byte(byte *a, byte *b) { byte t = *a; *a = *b; *b = t; }
static inline void swap_uint16(uint16 *a, uint16 *b) { uint16 t = *a; *a = *b; *b = t; }
static inline void swap_int16(int16 *a, int16 *b) { int16 t = *a; *a = *b; *b = t; }
static inline void swap_tile(TileIndex *a, TileIndex *b) { TileIndex t = *a; *a = *b; *b = t; }
@@ -214,14 +169,14 @@ static INLINE void swap_tile(TileIndex *a, TileIndex *b) { TileIndex t = *a; *a
# define ADD_WORD(x) (x)&0xFF, ((x) >> 8)&0xFF
# define ADD_DWORD(x) (x)&0xFF, ((x) >> 8)&0xFF, ((x) >> 16)&0xFF, ((x) >> 24)&0xFF
#elif defined(TTD_BIG_ENDIAN)
static INLINE uint16 READ_LE_UINT16(const void *b) {
static inline uint16 READ_LE_UINT16(const void *b) {
return ((const byte*)b)[0] + (((const byte*)b)[1] << 8);
}
# define ADD_WORD(x) ((x) >> 8)&0xFF, (x)&0xFF
# define ADD_DWORD(x) ((x) >> 24)&0xFF, ((x) >> 16)&0xFF, ((x) >> 8)&0xFF, (x)&0xFF
#endif
static INLINE void WRITE_LE_UINT16(void *b, uint16 x) {
static inline void WRITE_LE_UINT16(void *b, uint16 x) {
((byte*)b)[0] = (byte)x;
((byte*)b)[1] = (byte)(x >> 8);
}

File diff suppressed because it is too large Load Diff

View File

@@ -17,6 +17,8 @@ $(MAKE_CONFIG):
$(call CONFIG_LINE,\# MIDI: sets path to midi player)
$(call CONFIG_LINE,\# MIDI_ARG: sets an argument which is used when calling the midi player. Default off)
$(call CONFIG_LINE,\# SUPRESS_LANG_ERRORS: supresses output about missing and mismatched strings)
$(call CONFIG_LINE,\# WITH_NETWORK: makes OpenTTD able to play multiplayer using TCP and UDP)
$(call CONFIG_LINE,\# DEDICATED: compiles a dedicated server. This one can only host using a CLI, but do not need SDL)
$(call CONFIG_LINE,STATIC:=$(STATIC))
$(call CONFIG_LINE,TRANSLATOR:=$(TRANSLATOR))
$(call CONFIG_LINE,DISPLAY_WARNINGS:=$(DISPLAY_WARNINGS))
@@ -25,21 +27,27 @@ $(MAKE_CONFIG):
$(call CONFIG_LINE,MIDI:=$(MIDI))
$(call CONFIG_LINE,MIDI_ARG:=$(MIDI_ARG))
$(call CONFIG_LINE,SUPRESS_LANG_ERRORS:=$(SUPRESS_LANG_ERRORS))
$(call CONFIG_LINE,WITH_NETWORK:=$(WITH_NETWORK))
$(call CONFIG_LINE,DEDICATED:=$(DEDICATED))
$(call CONFIG_LINE,)
$(call CONFIG_LINE,\# DATA_DIR_PREFIX is the path to OpenTTD. It can be absolute or relative)
$(call CONFIG_LINE,\# USE_HOMEDIR sets \~/ in front of DATA_DIR_PREFIX so it uses the homedir)
$(call CONFIG_LINE,\# do not type \~/ yourself because that will not work)
$(call CONFIG_LINE,\# Folders should end with /)
$(call CONFIG_LINE,\# Disable asserts. Leave them on for easier bug finding)
$(call CONFIG_LINE,DISABLE_ASSERTS:=$(DISABLE_ASSERTS))
$(call CONFIG_LINE,)
$(call CONFIG_LINE,\# See Makefile for details on these paths)
$(call CONFIG_LINE,\# Folders should not end with /)
$(call CONFIG_LINE,INSTALL:=$(INSTALL))
$(call CONFIG_LINE,PREFIX:=$(PREFIX))
$(call CONFIG_LINE,BINARY_DIR:=$(BINARY_DIR))
$(call CONFIG_LINE,INSTALL_DIR:=$(INSTALL_DIR))
$(call CONFIG_LINE,DATA_DIR:=$(DATA_DIR))
$(call CONFIG_LINE,USE_HOMEDIR:=$(USE_HOMEDIR))
$(call CONFIG_LINE,GAME_DATA_DIR:=$(GAME_DATA_DIR))
$(call CONFIG_LINE,PERSONAL_DIR:=$(PERSONAL_DIR))
$(call CONFIG_LINE,SECOND_DATA_PATH:=$(SECOND_DATA_PATH))
$(call CONFIG_LINE,CUSTOM_LANG_PATH:=$(CUSTOM_LANG_PATH))
$(call CONFIG_LINE,)
$(call CONFIG_LINE,\# Experimental)
$(call CONFIG_LINE,WITH_NETWORK:=$(WITH_NETWORK))
$(call CONFIG_LINE,WITH_DIRECTMUSIC:=$(WITH_DIRECTMUSIC))
$(call CONFIG_LINE,)
$(call CONFIG_LINE,)
@@ -73,12 +81,15 @@ $(MAKE_CONFIG):
$(call CONFIG_LINE,OSX:=$(OSX))
$(call CONFIG_LINE,FREEBSD:=$(FREEBSD))
$(call CONFIG_LINE,MORPHOS:=$(MORPHOS))
$(call CONFIG_LINE,BEOS:=$(BEOS))
$(call CONFIG_LINE,SUNOS:=$(SUNOS))
$(call CONFIG_LINE,CYGWIN:=$(CYGWIN))
$(call CONFIG_LINE,MINGW:=$(MINGW))
$(call CONFIG_LINE,)
$(call CONFIG_LINE,\# misc)
$(call CONFIG_LINE,SDL-CONFIG:=$(SDL-CONFIG))
$(call CONFIG_LINE,BEOS_NET_SERVER:=$(BEOS_NET_SERVER))
$(call CONFIG_LINE,CONFIG_INCLUDED:=yes)
$(call CONFIG_LINE,PATH_SET:=$(PATH_SET))
$(call CONFIG_LINE,CONFIG_VERSION:=$(MAKEFILE_VERSION))

View File

@@ -4,6 +4,10 @@
ifdef WINDIR
ifndef UNIX
WIN32:=1
CYGWIN:=1
MINGW:=1
STATIC:=1
SKIP_STATIC_CHECK:=1
endif
else
UNIX:=1
@@ -19,6 +23,8 @@ ifeq ($(VENDOR), apple)
OSX:=1
# OSX uses the unix setup too
UNIX:=1
# OSX generally uses static since so few computers actually have all the libs installed in unix style
STATIC:=1
endif
# Automatically recognize if building on MorphOS
@@ -28,6 +34,24 @@ MORPHOS:=1
UNIX:=1
endif
# Automatically recognize if building on BeOS
ifeq ($(shell uname), BeOS)
BEOS:=1
# BeOS uses UNIX setup too
UNIX:=1
# Except that in BeOS 5.0 we need to use net_server, not BONE networking
ifeq ($(shell uname -r), 5.0)
BEOS_NET_SERVER:=1
endif
endif
# Automatically recognize if building on SunOS/Solaris
ifeq ($(shell uname), SunOS)
SUNOS:=1
# SunOS uses UNIX setup too
UNIX:=1
endif
# FreeBSD uses sdl11 instead of sdl
ifdef FREEBSD
SDL-CONFIG:=sdl11-config
@@ -35,6 +59,8 @@ else
SDL-CONFIG:=sdl-config
endif
# Networking, enabled by default
WITH_NETWORK:=1
# Library detections
WITH_SDL:=$(shell $(SDL-CONFIG) --version 2>/dev/null)
@@ -78,3 +104,9 @@ endif
endif
endif
endif
# workaround
# cygwin have problems with libpng, so we will just disable it for now until the problem is solved
ifdef CYGWIN
WITH_PNG:=
endif

62
map.c Normal file
View File

@@ -0,0 +1,62 @@
#include "stdafx.h"
#include "ttd.h"
#include "map.h"
#define TILE_X_BITS 8
#define TILE_Y_BITS 8
uint _map_log_x = TILE_X_BITS;
uint _map_log_y = TILE_Y_BITS;
#define MAP_SIZE ((1 << TILE_X_BITS) * (1 << TILE_Y_BITS))
byte _map_type_and_height [MAP_SIZE];
byte _map5 [MAP_SIZE];
byte _map3_lo [MAP_SIZE];
byte _map3_hi [MAP_SIZE];
byte _map_owner [MAP_SIZE];
uint16 _map2 [MAP_SIZE];
byte _map_extra_bits [MAP_SIZE / 4];
#ifdef _DEBUG
TileIndex TileAdd(TileIndex tile, TileIndexDiff add,
const char *exp, const char *file, int line)
{
int dx;
int dy;
uint x;
uint y;
dx = add & MapMaxX();
if (dx >= (int)MapSizeX() / 2) dx -= MapSizeX();
dy = (add - dx) / (int)MapSizeX();
x = TileX(tile) + dx;
y = TileY(tile) + dy;
if (x >= MapSizeX() || y >= MapSizeY()) {
char buf[512];
sprintf(buf, "TILE_ADD(%s) when adding 0x%.4X and 0x%.4X failed",
exp, tile, add);
#if !defined(_MSC_VER)
fprintf(stderr, "%s:%d %s\n", file, line, buf);
#else
_assert(buf, (char*)file, line);
#endif
}
assert(TILE_XY(x,y) == TILE_MASK(tile + add));
return TILE_XY(x,y);
}
#endif
const TileIndexDiffC _tileoffs_by_dir[] = {
{-1, 0},
{ 0, 1},
{ 1, 0},
{ 0, -1}
};

113
map.h Normal file
View File

@@ -0,0 +1,113 @@
#ifndef MAP_H
#define MAP_H
#define TILE_FROM_XY(x,y) (int)((((y) >> 4) << MapLogX()) + ((x) >> 4))
#define TILE_XY(x,y) (int)(((y) << MapLogX()) + (x))
#define TILE_MASK(x) ((x) & ((1 << (MapLogX() + MapLogY())) - 1))
extern byte _map_type_and_height[];
extern byte _map5[];
extern byte _map3_lo[];
extern byte _map3_hi[];
extern byte _map_owner[];
extern uint16 _map2[];
extern byte _map_extra_bits[];
// binary logarithm of the map size, try to avoid using this one
static inline uint MapLogX(void) { extern uint _map_log_x; return _map_log_x; }
static inline uint MapLogY(void) { extern uint _map_log_y; return _map_log_y; }
/* The size of the map */
static inline uint MapSizeX(void) { return 1 << MapLogX(); }
static inline uint MapSizeY(void) { return 1 << MapLogY(); }
/* The maximum coordinates */
static inline uint MapMaxX(void) { return MapSizeX() - 1; }
static inline uint MapMaxY(void) { return MapSizeY() - 1; }
/* The number of tiles in the map */
static inline uint MapSize(void) { return MapSizeX() * MapSizeY(); }
typedef uint16 TileIndex;
static inline uint TileX(TileIndex tile)
{
return tile & MapMaxX();
}
static inline uint TileY(TileIndex tile)
{
return tile >> MapLogX();
}
typedef int16 TileIndexDiff;
typedef struct TileIndexDiffC {
int16 x;
int16 y;
} TileIndexDiffC;
static inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc)
{
return (tidc.y << MapLogX()) + tidc.x;
}
#ifndef _DEBUG
#define TILE_ADD(x,y) ((x) + (y))
#else
extern TileIndex TileAdd(TileIndex tile, TileIndexDiff add,
const char *exp, const char *file, int line);
#define TILE_ADD(x, y) (TileAdd((x), (y), #x " + " #y, __FILE__, __LINE__))
#endif
#define TILE_ADDXY(tile, x, y) TILE_ADD(tile, TILE_XY(x, y))
static inline TileIndexDiff TileOffsByDir(uint dir)
{
extern const TileIndexDiffC _tileoffs_by_dir[4];
assert(dir < lengthof(_tileoffs_by_dir));
return ToTileIndexDiff(_tileoffs_by_dir[dir]);
}
static inline uint TileHeight(TileIndex tile)
{
assert(tile < MapSize());
return _map_type_and_height[tile] & 0xf;
}
static inline void SetTileHeight(TileIndex tile, uint height)
{
assert(tile < MapSize());
assert(height < 16);
_map_type_and_height[tile] &= ~0x0F;
_map_type_and_height[tile] |= height;
}
static inline uint TilePixelHeight(TileIndex tile)
{
return TileHeight(tile) * 8;
}
static inline int TileType(TileIndex tile)
{
assert(tile < MapSize());
return _map_type_and_height[tile] >> 4;
}
static inline void SetTileType(TileIndex tile, uint type)
{
assert(tile < MapSize());
_map_type_and_height[tile] &= ~0xF0;
_map_type_and_height[tile] |= type << 4;
}
static inline bool IsTileType(TileIndex tile, int type)
{
return TileType(tile) == type;
}
#endif

382
md5.c Normal file
View File

@@ -0,0 +1,382 @@
/*
Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved.
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
L. Peter Deutsch
ghost@aladdin.com
*/
/* $Id: md5.c,v 1.6 2002/04/13 19:20:28 lpd Exp $ */
/*
Independent implementation of MD5 (RFC 1321).
This code implements the MD5 Algorithm defined in RFC 1321, whose
text is available at
http://www.ietf.org/rfc/rfc1321.txt
The code is derived from the text of the RFC, including the test suite
(section A.5) but excluding the rest of Appendix A. It does not include
any code or documentation that is identified in the RFC as being
copyrighted.
The original and principal author of md5.c is L. Peter Deutsch
<ghost@aladdin.com>. Other authors are noted in the change history
that follows (in reverse chronological order):
2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order
either statically or dynamically; added missing #include <string.h>
in library.
2002-03-11 lpd Corrected argument list for main(), and added int return
type, in test program and T value program.
2002-02-21 lpd Added missing #include <stdio.h> in test program.
2000-07-03 lpd Patched to eliminate warnings about "constant is
unsigned in ANSI C, signed in traditional"; made test program
self-checking.
1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
1999-05-03 lpd Original version.
*/
#include "stdafx.h"
#include "md5.h"
#include <string.h>
#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */
#if defined(TTD_BIG_ENDIAN)
# define BYTE_ORDER 1
#else
# define BYTE_ORDER -1
#endif
#define T_MASK ((md5_word_t)~0)
#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
#define T3 0x242070db
#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)
#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)
#define T6 0x4787c62a
#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)
#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)
#define T9 0x698098d8
#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)
#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)
#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841)
#define T13 0x6b901122
#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)
#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71)
#define T16 0x49b40821
#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)
#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)
#define T19 0x265e5a51
#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)
#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)
#define T22 0x02441453
#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)
#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)
#define T25 0x21e1cde6
#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)
#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)
#define T28 0x455a14ed
#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)
#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)
#define T31 0x676f02d9
#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)
#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)
#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e)
#define T35 0x6d9d6122
#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)
#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)
#define T38 0x4bdecfa9
#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)
#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)
#define T41 0x289b7ec6
#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)
#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)
#define T44 0x04881d05
#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)
#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)
#define T47 0x1fa27cf8
#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)
#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)
#define T50 0x432aff97
#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)
#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)
#define T53 0x655b59c3
#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)
#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82)
#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)
#define T57 0x6fa87e4f
#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)
#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)
#define T60 0x4e0811a1
#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)
#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)
#define T63 0x2ad7d2bb
#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)
static void
md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
{
md5_word_t
a = pms->abcd[0], b = pms->abcd[1],
c = pms->abcd[2], d = pms->abcd[3];
md5_word_t t;
#if BYTE_ORDER > 0
/* Define storage only for big-endian CPUs. */
md5_word_t X[16];
#else
/* Define storage for little-endian or both types of CPUs. */
md5_word_t xbuf[16];
const md5_word_t *X;
#endif
{
#if BYTE_ORDER == 0
/*
* Determine dynamically whether this is a big-endian or
* little-endian machine, since we can use a more efficient
* algorithm on the latter.
*/
static const int w = 1;
if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
#endif
#if BYTE_ORDER <= 0 /* little-endian */
{
/*
* On little-endian machines, we can process properly aligned
* data without copying it.
*/
if (!((data - (const md5_byte_t *)0) & 3)) {
/* data are properly aligned */
X = (const md5_word_t *)data;
} else {
/* not aligned */
memcpy(xbuf, data, 64);
X = xbuf;
}
}
#endif
#if BYTE_ORDER == 0
else /* dynamic big-endian */
#endif
#if BYTE_ORDER >= 0 /* big-endian */
{
/*
* On big-endian machines, we must arrange the bytes in the
* right order.
*/
const md5_byte_t *xp = data;
int i;
# if BYTE_ORDER == 0
X = xbuf; /* (dynamic only) */
# else
# define xbuf X /* (static only) */
# endif
for (i = 0; i < 16; ++i, xp += 4)
xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
}
#endif
}
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
/* Round 1. */
/* Let [abcd k s i] denote the operation
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
#define SET(a, b, c, d, k, s, Ti)\
t = a + F(b,c,d) + X[k] + Ti;\
a = ROTATE_LEFT(t, s) + b
/* Do the following 16 operations. */
SET(a, b, c, d, 0, 7, T1);
SET(d, a, b, c, 1, 12, T2);
SET(c, d, a, b, 2, 17, T3);
SET(b, c, d, a, 3, 22, T4);
SET(a, b, c, d, 4, 7, T5);
SET(d, a, b, c, 5, 12, T6);
SET(c, d, a, b, 6, 17, T7);
SET(b, c, d, a, 7, 22, T8);
SET(a, b, c, d, 8, 7, T9);
SET(d, a, b, c, 9, 12, T10);
SET(c, d, a, b, 10, 17, T11);
SET(b, c, d, a, 11, 22, T12);
SET(a, b, c, d, 12, 7, T13);
SET(d, a, b, c, 13, 12, T14);
SET(c, d, a, b, 14, 17, T15);
SET(b, c, d, a, 15, 22, T16);
#undef SET
/* Round 2. */
/* Let [abcd k s i] denote the operation
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
#define SET(a, b, c, d, k, s, Ti)\
t = a + G(b,c,d) + X[k] + Ti;\
a = ROTATE_LEFT(t, s) + b
/* Do the following 16 operations. */
SET(a, b, c, d, 1, 5, T17);
SET(d, a, b, c, 6, 9, T18);
SET(c, d, a, b, 11, 14, T19);
SET(b, c, d, a, 0, 20, T20);
SET(a, b, c, d, 5, 5, T21);
SET(d, a, b, c, 10, 9, T22);
SET(c, d, a, b, 15, 14, T23);
SET(b, c, d, a, 4, 20, T24);
SET(a, b, c, d, 9, 5, T25);
SET(d, a, b, c, 14, 9, T26);
SET(c, d, a, b, 3, 14, T27);
SET(b, c, d, a, 8, 20, T28);
SET(a, b, c, d, 13, 5, T29);
SET(d, a, b, c, 2, 9, T30);
SET(c, d, a, b, 7, 14, T31);
SET(b, c, d, a, 12, 20, T32);
#undef SET
/* Round 3. */
/* Let [abcd k s t] denote the operation
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define SET(a, b, c, d, k, s, Ti)\
t = a + H(b,c,d) + X[k] + Ti;\
a = ROTATE_LEFT(t, s) + b
/* Do the following 16 operations. */
SET(a, b, c, d, 5, 4, T33);
SET(d, a, b, c, 8, 11, T34);
SET(c, d, a, b, 11, 16, T35);
SET(b, c, d, a, 14, 23, T36);
SET(a, b, c, d, 1, 4, T37);
SET(d, a, b, c, 4, 11, T38);
SET(c, d, a, b, 7, 16, T39);
SET(b, c, d, a, 10, 23, T40);
SET(a, b, c, d, 13, 4, T41);
SET(d, a, b, c, 0, 11, T42);
SET(c, d, a, b, 3, 16, T43);
SET(b, c, d, a, 6, 23, T44);
SET(a, b, c, d, 9, 4, T45);
SET(d, a, b, c, 12, 11, T46);
SET(c, d, a, b, 15, 16, T47);
SET(b, c, d, a, 2, 23, T48);
#undef SET
/* Round 4. */
/* Let [abcd k s t] denote the operation
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
#define I(x, y, z) ((y) ^ ((x) | ~(z)))
#define SET(a, b, c, d, k, s, Ti)\
t = a + I(b,c,d) + X[k] + Ti;\
a = ROTATE_LEFT(t, s) + b
/* Do the following 16 operations. */
SET(a, b, c, d, 0, 6, T49);
SET(d, a, b, c, 7, 10, T50);
SET(c, d, a, b, 14, 15, T51);
SET(b, c, d, a, 5, 21, T52);
SET(a, b, c, d, 12, 6, T53);
SET(d, a, b, c, 3, 10, T54);
SET(c, d, a, b, 10, 15, T55);
SET(b, c, d, a, 1, 21, T56);
SET(a, b, c, d, 8, 6, T57);
SET(d, a, b, c, 15, 10, T58);
SET(c, d, a, b, 6, 15, T59);
SET(b, c, d, a, 13, 21, T60);
SET(a, b, c, d, 4, 6, T61);
SET(d, a, b, c, 11, 10, T62);
SET(c, d, a, b, 2, 15, T63);
SET(b, c, d, a, 9, 21, T64);
#undef SET
/* Then perform the following additions. (That is increment each
of the four registers by the value it had before this block
was started.) */
pms->abcd[0] += a;
pms->abcd[1] += b;
pms->abcd[2] += c;
pms->abcd[3] += d;
}
void
md5_init(md5_state_t *pms)
{
pms->count[0] = pms->count[1] = 0;
pms->abcd[0] = 0x67452301;
pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;
pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;
pms->abcd[3] = 0x10325476;
}
void
md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes)
{
const md5_byte_t *p = data;
int left = nbytes;
int offset = (pms->count[0] >> 3) & 63;
md5_word_t nbits = (md5_word_t)(nbytes << 3);
if (nbytes <= 0)
return;
/* Update the message length. */
pms->count[1] += nbytes >> 29;
pms->count[0] += nbits;
if (pms->count[0] < nbits)
pms->count[1]++;
/* Process an initial partial block. */
if (offset) {
int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);
memcpy(pms->buf + offset, p, copy);
if (offset + copy < 64)
return;
p += copy;
left -= copy;
md5_process(pms, pms->buf);
}
/* Process full blocks. */
for (; left >= 64; p += 64, left -= 64)
md5_process(pms, p);
/* Process a final partial block. */
if (left)
memcpy(pms->buf, p, left);
}
void
md5_finish(md5_state_t *pms, md5_byte_t digest[16])
{
static const md5_byte_t pad[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
md5_byte_t data[8];
int i;
/* Save the length before padding. */
for (i = 0; i < 8; ++i)
data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
/* Pad to 56 bytes mod 64. */
md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
/* Append the length. */
md5_append(pms, data, 8);
for (i = 0; i < 16; ++i)
digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));
}

91
md5.h Normal file
View File

@@ -0,0 +1,91 @@
/*
Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved.
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
L. Peter Deutsch
ghost@aladdin.com
*/
/* $Id: md5.h,v 1.4 2002/04/13 19:20:28 lpd Exp $ */
/*
Independent implementation of MD5 (RFC 1321).
This code implements the MD5 Algorithm defined in RFC 1321, whose
text is available at
http://www.ietf.org/rfc/rfc1321.txt
The code is derived from the text of the RFC, including the test suite
(section A.5) but excluding the rest of Appendix A. It does not include
any code or documentation that is identified in the RFC as being
copyrighted.
The original and principal author of md5.h is L. Peter Deutsch
<ghost@aladdin.com>. Other authors are noted in the change history
that follows (in reverse chronological order):
2002-04-13 lpd Removed support for non-ANSI compilers; removed
references to Ghostscript; clarified derivation from RFC 1321;
now handles byte order either statically or dynamically.
1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
added conditionalization for C++ compilation from Martin
Purschke <purschke@bnl.gov>.
1999-05-03 lpd Original version.
*/
#ifndef md5_INCLUDED
# define md5_INCLUDED
/*
* This package supports both compile-time and run-time determination of CPU
* byte order. If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be
* compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is
* defined as non-zero, the code will be compiled to run only on big-endian
* CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to
* run on either big- or little-endian CPUs, but will run slightly less
* efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
*/
typedef unsigned char md5_byte_t; /* 8-bit byte */
typedef unsigned int md5_word_t; /* 32-bit word */
/* Define the state of the MD5 Algorithm. */
typedef struct md5_state_s {
md5_word_t count[2]; /* message length in bits, lsw first */
md5_word_t abcd[4]; /* digest buffer */
md5_byte_t buf[64]; /* accumulate block */
} md5_state_t;
#ifdef __cplusplus
extern "C"
{
#endif
/* Initialize the algorithm. */
void md5_init(md5_state_t *pms);
/* Append a string to the message. */
void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
/* Finish the message and return the digest. */
void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
#ifdef __cplusplus
} /* end extern "C" */
#endif
#endif /* md5_INCLUDED */

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

BIN
media/openttd.128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

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