1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-13 17:49:10 +00:00

Compare commits

...

67 Commits

Author SHA1 Message Date
frosch
6cbe06b1e8 (svn r22891) -Release 1.1.3-RC1 2011-09-04 15:07:41 +00:00
frosch
c33d1fc60b (svn r22890) [1.1] -Prepare: 1.1.3-RC1 2011-09-04 15:03:59 +00:00
frosch
41f777b0ec (svn r22887) [1.1] -Backport from trunk:
- Fix: [NewGRF] DCxx text references via the textstack are not allowed, but caused crash [FS#4758] (r22882)
- Fix: Miscalculation of train curve speed limits (r22879)
- Fix: Report an error in the news if autoreplace/renew fails due to the engine type being no longer available [FS#4712] (r22876)
2011-09-03 18:59:26 +00:00
frosch
daa89c982e (svn r22886) [1.1] -Backport from trunk:
- Fix: Harden memory allocation (r22881, r22880, r22875)
- Fix: Validate image dimensions before loading [FS#4747] (r22878, r22877, r22874, r22873)
- Fix: Perform stricter checks on RLE compressed BMP images [FS#4746] (r22872, r22871)
2011-09-03 18:56:34 +00:00
frosch
0ca913841d (svn r22885) [1.1] -Backport from trunk:
- Fix: [NewGRF] Variables 40 and 81 of callback 18 are not the same as 80 (r22867)
- Fix: [NewGRF] Generic callbacks shall chain to the next GRF when the callback fails (r22866, r22865)
2011-09-03 18:51:59 +00:00
frosch
7d984241f3 (svn r22884) [1.1] -Backport from trunk:
- Fix: Perform stricter checks on some commands [FS#4745] (r22845)
- Fix: Harden savegame load against too many AI config settings [FS#4748] (r22843)
2011-09-03 18:50:20 +00:00
rubidium
a95c366f58 (svn r22842) [1.1] -Backport from trunk:
- Add: River graphics for the original base set (r22766)
2011-08-25 13:46:19 +00:00
rubidium
d233a561a1 (svn r22841) [1.1] -Backport from trunk:
- Fix: Compilation with GCC 4.7 (r22832, r22728, r22719)
- Update: Translations
2011-08-25 13:41:06 +00:00
rubidium
0ded8c0cb8 (svn r22840) [1.1] -Backport from trunk:
- Fix: Allow to demolish aqueducts built in the scenario editor [FS#4741] (r22821)
- Fix: Towns expanding from the "wrong" side of a tunnel or bridge [FS#4731] (r22810, r22809)
- Fix: [NewGRF] String codes for dates should use unsigned words, like old OpenTTD did before it learned dates before 1920 (r22774)
- Fix: [NoAI] Clarify the meaning of AIStation::IsWithinTownInfluence(), AITile::IsWithinTownInfluence() and AITown::IsWithinTownInfluence() [FS#4702] (r22763)
2011-08-25 13:30:26 +00:00
rubidium
15d5df9496 (svn r22839) [1.1] -Backport from trunk:
- Fix: [NewGRF] Also free allocated depot tables of NewGRF airports (r22760)
- Fix: [NewGRF] Invalid memory access when querying the grfID of the default objects [FS#4730] (r22757)
- Fix: When marking tile selections dirty, use the height information of the corners instead of the surface slope. This is more accurate when the foundation is kind of undefined [FS#4727] (r22755)
- Fix: Make aircraft point to the exit when leaving the hangar [FS#4696] (r22743, r22742, r22741)
2011-08-25 13:27:56 +00:00
rubidium
85ee1737e4 (svn r22838) [1.1] -Backport from trunk:
- Fix: Display the size of the leveled platform in the measurement tooltip of terraforming operations [FS#4708] (r22740, r22739)
- Fix: Setting company passwords via the GUI on servers (including starting a company with the default password) failed, so no client could join that company [FS#4722] (r22738)
- Fix: [NewGRF] The construction stage sprites were incorrectly selected in cases other than 1 or 4 sprites per set (r22731)
- Fix: [NoAI] AITile::GetCargoAcceptance, AITile::GetCargoProduction and AIRail::BuildNewGRFRailStation did not check the cargo argument for validity (r22726)
2011-08-25 13:24:32 +00:00
rubidium
c5387508eb (svn r22837) [1.1] -Backport from trunk:
- Fix: [NewGRF] Always draw NewGRF supplied texts with a default colour (r22725)
- Fix: [NewGRF] Do not restrict AdvVarAct2 to 255 operations (r22723)
- Fix: If there is no point in opening the rail/air toolbar, do not open it for people who use hotkeys either rather than only for those using GUI elements (r22716, r22715, r22714)
- Fix: [NoAI] Allow AIAirport::GetNoiseLevelIncrease() also for expired airports [FS#4704] (r22710)
2011-08-25 13:21:25 +00:00
rubidium
a8c7707fe0 (svn r22752) [1.1] -Update: forgotten documentation changes from trunk 2011-08-14 18:56:33 +00:00
rubidium
eb7bceb240 (svn r22748) [1.1] -Prepare: 1.1.2 2011-08-14 15:23:27 +00:00
rubidium
6f8248c36d (svn r22747) [1.1] -Backport from trunk:
- Fix: Some corrupted savegames could crash OpenTTD instead of showing the 'savegame corrupted' message [FS#4717] (r22737, r22736)
- Fix: Triggering NOT_REACHED when playing with a NewGRF that supplies genders/cases for a language that was not installed [FS#4718] (r22735)
2011-08-14 15:23:10 +00:00
rubidium
41db186ea7 (svn r22704) [1.1] -Backport from trunk: language updates 2011-07-30 17:55:23 +00:00
rubidium
310d9e4ee3 (svn r22703) [1.1] -Prepare for 1.1.2-RC2 2011-07-30 17:53:09 +00:00
rubidium
be65972895 (svn r22702) [1.1] -Backport from trunk:
- Fix: Cost of adding an extra road type to a bridge or tunnel was undercalculated [FS#4680, FS#4681] (r22700, r22699)
- Fix: Only insert cleared object tiles into _cleared_object_areas if clearing actually succeeds, else subsequential tests of the same tile will be skipped and considered successful [FS#4694] (r22698)
- Fix: When building a house it could be built at the wrong place if multitile houses failed some tests (r22697)
2011-07-30 17:48:23 +00:00
rubidium
a51531e410 (svn r22701) [1.1] -Backport from trunk:
- Fix: [Network] Failed network address resolving could trigger temporary freezes [FS#4697] (r22696, r22695)
- Fix: [NewGRF] The override managers were not reset in some cases like creating a new scenario [FS#4691] (r22693)
- Fix: [NewGRF] Aircrafts defined with IDs above the default aircrafts always defaulted to passenger cargo (r22690)
2011-07-30 17:45:37 +00:00
rubidium
4b800313f4 (svn r22685) [1.1] -Prepare: 1.1.2-RC1 2011-07-24 14:43:42 +00:00
rubidium
e1841b5d68 (svn r22684) [1.1] -Backport from trunk:
- Change: [NewGRF] Only allow access (via hotkey and menu) to the bounding box visualisation when NewGRF developer tools are enabled (r22675)
- Fix: [NewGRF] Disallow accessing variable 1B in network games due to desync reasons (r22682)
- Update: languages
2011-07-24 14:34:38 +00:00
rubidium
4f8053e559 (svn r22654) [1.1] -Backport from trunk:
- Fix: Switching from a red to a white highlight (by switching to another tool) without switching the highlight mode (HT_RECT etc.) did not mark the selection dirty [FS#4670] (r22649)
- Fix: [NewGRF] Parameters from NewGRFs were not properly parsed in all cases [FS#4599] (r22648, r22630, r22629, r22628, r22627)
- Fix: GetSection() does not return a LockPart [FS#4678] (r22645)
- Fix: [NewGRF] Disallow building NewObjects on water tiles owned by another company (r22643)
2011-07-10 20:35:31 +00:00
rubidium
3a39cea23b (svn r22653) [1.1] -Backport from trunk:
- Fix: [NewGRF] Disable the 'set parameters' button in the NewGRF GUI, if the GRF specifies to have no parameters and one would not be able to set any parameters anyway (r22642)
- Fix: Keep the previous owner of the upper and lower lock parts if they are built on existing water (r22638)
- Fix: [NewGRF] Airports should not expose the tile specific random bits of the north tile. Only airport tiles should access those (r22636)
- Fix: [NewGRF] Correctly reseed random bits of industries and industry tiles (r22635, r22634)
2011-07-10 20:29:19 +00:00
rubidium
a873aa3337 (svn r22652) [1.1] -Backport from trunk:
- Fix: [NewGRF] Implement variables 25 and 7F for railtypes (r22633)
- Fix: [NewGRF] Additional text in fund industry window is NewGRF supplied and thus should have a default colour (r22631)
- Fix: Also initialise _old_vds with newgame settings; TTD savegames do not contain these settings [FS#4622] (r22626)
- Fix: Do not zero the orders of disaster vehicles when converting savegames [FS#4642] (r22625)
2011-07-10 20:25:59 +00:00
rubidium
a1826a043e (svn r22651) [1.1] -Backport from trunk:
- Fix: When closing an AI company the local player cheated to, we need to cheat him to another company [FS#4654] (r22624, r22623)
- Fix: When closing down companies their shares in other companies must be sold even if share trading is disabled at that point of time (r22622)
- Fix: When asking the user to confirm an unsafe unpausing, there is no need to execute a command if 'no' is choosed. This also prevents crashing when clicking unpause while the confirm window is shown (r22621)
- Fix: Enforce refit orders to be 'always go to depot' orders; service-only and stop-in-depot orders make no sense with refitting [FS#4651] (r22620)
- Fix: Consider the size of the vehicle sprite for the lineheight in the company GUI. This also makes the widget containing the sprite not skip drawing it, if the bounds of the widget are outside of the drawing area though the sprite actually needs drawing [FS#4662] (r22619)
2011-07-10 20:23:04 +00:00
rubidium
a6750a145e (svn r22650) [1.1] -Backport from trunk:
- Fix: When changing difficulty settings over the network, do not just reopen the difficulty window if any game options window is opened; instead invalidate them properly [FS#4653] (r22618, r22617)
- Fix: [NewGRF] If callback 33 returns a value out of range, no sound effect shall be played [FS#4656] (r22614)
- Fix: Use rotated heightmap sizes for reporting scaling problems [FS#4663] (r22608)
- Fix: No client error packet was sent to the admin bots [FS#4585] (r22384)
2011-07-10 20:17:56 +00:00
rubidium
b5bad6aa19 (svn r22602) [1.1] -Fix: MSVC compile warning 2011-06-19 12:12:10 +00:00
rubidium
725d00630f (svn r22601) [1.1] -Backport from trunk:
- Add: Makefile support for bundling pdb and running regressions with the MSVC makefile (r22581, r22580, r22576)
- Fix: Do not show cargo accepted/produced in the new station window when no tiles are selected (mouse hovering a window or toolbar) [FS#4647] (r22595, r22593)
- Fix: Add active NewGRFs to the list of available ones when selecting the empty preset [FS#4644] (r22594)
- Fix: Reading of heightmaps with uncommon BMP formats failed due to uninitialised variables [FS#4645] (r22592)
2011-06-18 19:43:51 +00:00
rubidium
0b02b285a8 (svn r22600) [1.1] -Backport from trunk:
- Fix: PBS order forecasting modified the current order index in case of a goto-nearest-depot order and no depot could be found [FS#4641] (r22589)
- Fix: Remove BaseStorageArrays from _changed_storage_arrays on destruction (r22583, r22551)
- Fix: Do not increment STL iterators after they've been invalidated (r22582)
- Fix: Do not lower the arrow buttons in the NewGRF/AI parameter windows if they are clicked when disabled (r22553, r22499)
2011-06-18 19:40:56 +00:00
rubidium
5cb560d4bd (svn r22599) [1.1] -Backport from trunk:
- Fix: Clear airport persistent storage on construction/removal of airports (r22552)
- Fix: Possible crash when opening the airport build window for the first time [FS#4619] (r22538)
- Fix: Replace the half small airport structure on the intercontinental airport with some grass [FS#3494] (r22537)
- Fix: Documentation omission regarding admin protocol [FS#4632] (r22536)
2011-06-18 19:20:01 +00:00
rubidium
4ba397c285 (svn r22598) [1.1] -Backport from trunk:
- Fix: [NoAI] Doing rescan_ai in a game with running AIs caused a crash [FS#4631] (r22534)
- Fix: Do not create an implicit order if the current order is the first order in the order list and we visit the station of the last entry of the order list (r22532)
- Fix: MinGW 64 related compilation issues [FS#4623] (r22522, r22491, r22490, r22489)
- Fix: The layout selectors of the airport build GUI did not latch properly (r22497, r22495)
2011-06-18 18:37:10 +00:00
rubidium
863d0e08e3 (svn r22597) [1.1] -Backport from trunk:
- Fix: Callback result for airport layout name was incorrectly used (r22496)
- Fix: Airport preview sprite can depend on the layout, so update the cached SpriteID when the layout changes (r22494)
- Fix: Engine IDs for coal and mail wagons were swapped in the TTO savegame conversion [FS#4622] (r22487)
- Fix: The caption of centered windows could be moved out of the main window and thus become inaccessible when resizing the main window (r22485, r22484)
2011-06-18 18:33:20 +00:00
frosch
041714e538 (svn r22527) [1.1] -Prepare for 1.1.1 2011-05-31 19:25:02 +00:00
rubidium
7bbfbcddb7 (svn r22524) [1.1] -Backport from trunk:
- Language updates
- Documentation updates
2011-05-29 20:08:21 +00:00
rubidium
c224791f7f (svn r22520) [1.1] -Backport from trunk:
- Fix: Only try to insert implicit orders for ground vehicles. Aircraft may reach unscheduled terminals when skipping orders etc [FS#4624] (r22492)
- Change: Automatic orders are better called implicit orders as no real order influencing path finding is added (r22474, r22473)
2011-05-29 17:55:15 +00:00
rubidium
7fcdcbc8dd (svn r22468) [1.1] -Prepare for 1.1.1-RC1 2011-05-15 18:33:51 +00:00
rubidium
a7487b5ede (svn r22467) [1.1] -Backport from trunk:
- Fix: When determining the executable path failed, the working directory was used instead, circumventing the not-home-directory check [FS#4613] (r22465)
- Fix: [Windows] Prevent a crash when launching OpenTTD with -d from a MSYS console [FS#4587] (r22464)
- Fix: Update the saveload window immediatelly after scanning a new directory, so queued events reach the window when already updated [FS#4615] (r22463)
2011-05-15 18:06:13 +00:00
rubidium
2b709f2d38 (svn r22462) [1.1] -Backport language changes from trunk 2011-05-15 09:44:40 +00:00
rubidium
59a11e6626 (svn r22461) [1.1] -Backport from trunk:
- Fix: [NewGRF] Zero register 0x100 as specified before resolving custom station foundations (r22452)
- Fix: Do not 'log' the NewGRFs in the screenshot when in the menu [FS#4610] (r22450)
- Fix: Keep better accounting of the order in which clients joined; client can't be starved from joining and they get shown the amount of clients waiting in front of them. (r22372, r22370, r22369, r22368, r22367, r22366, r22365, r22364, r22363, r22362, r22361)
- Fix: Delete the client list popup when the client got removed (instead of previously selecting some other client) (r22360, r22359, r22358)
2011-05-15 09:38:54 +00:00
rubidium
829a2c201d (svn r22449) [1.1] -Backport from trunk:
- Feature: [NewGRF] Allow to filter by town of the current industry when using industry variable 0x68 [FS#4591] (r22434)
- Change: Improve the speed of YAPF by tweaking hash tables size (r22351, r22350, r22348)
2011-05-13 18:04:10 +00:00
rubidium
704a361ada (svn r22448) [1.1] -Backport from trunk:
- Fix: [NewGRF] When GRFs are disabled via Action E or due to GRM failure, also display an error in the GUI (r22444, r22443)
- Fix: [NewGRF] Do not popup fatal NewGRF error messages in the intro screen. The GRFs are not going to be activated there anyway and the GRF settings GUI will not display the errors either (r22442)
- Fix: Catenary was drawn incorrectly next to level crossings with foundations (r22437)
- Fix: [NewGRF] Apply railtype property 12 (station graphics) also to station groundsprites from action 1 (r22436)
2011-05-13 17:57:07 +00:00
rubidium
bde2fec339 (svn r22447) [1.1] -Backport from trunk:
- Fix: Git revision detection would return too much when tags are involved (r22435)
- Fix: [NewGRF] When action14 specified different values for the palette, the values were OR-ed. Use the last set value instead (r22416)
- Fix: [Network] Kicking yourself via remote console crashes the server [FS#4606] (r22414)
- Fix: [NewGRF] Make sure the action2 ID of a generic feature callback is valid (r22409)
2011-05-13 17:52:35 +00:00
rubidium
eb4c66a4fb (svn r22395) [1.1] -Backport: loads of string changes 2011-04-30 21:03:14 +00:00
rubidium
2b2cabfce1 (svn r22394) [1.1] -Backport from trunk:
- Change: Show one digit of the fractional train length in the depot (r22336, r22305, r22304, r22303)
- Fix: Check the availability year of all houses, not just the NewGRF houses, when making sure that at least one is available onwards from year 0 [FS#4581] (r22389, r22300, r22299)
- Fix: When a game uses a lot of NewGRFs the buffer for storing that information in the PNG is too small (r22388)
2011-04-30 20:58:04 +00:00
rubidium
e43d961737 (svn r22393) [1.1] -Backport from trunk:
- Fix: Windows' recv seems to return "graceful closed" before having passed the remaining buffer which causes OpenTTD to think all connections are "incorrectly" terminated, i.e. without the "I'm leaving" packet from the client. So let the client wait a tiny bit after sending the "I'm leaving" packet and before gracefully closing the connection [FS#4601] (r22387)
- Fix: When the last AI company gets removed, the 'dead' state was not reset in the AI debug window [FS#4602] (r22386)
- Fix: No client error packet was sent to the admin bots [FS#4585] (r22384)
- Fix: Recolouring of silicon bridge was done incorrectly (r22380, r22379, r22378)
2011-04-30 20:50:41 +00:00
rubidium
30df6de7bd (svn r22392) [1.1] -Backport from trunk:
- Fix: Crash when clicking a removed company in the vehicle list dropdowns [FS#4592] (r22373)
- Fix: Make sure saving has completely and utterly finished before starting a new one. Otherwise you could start a save, which would be marked as done by the previous save stopping and then yet another save could be started... and that could create a deadlock [FS#4596] (r22371)
- Fix: When inserting automatic orders, do not create consecutive duplicate orders (r22333, r22332, r22331, r22330, r22329, r22328, r22327)
- Fix: Destinations of conditional orders were update incorrectly when deleting orders in front of the conditional orders, if the target order was the order just before of the conditional order (r22326)
2011-04-30 20:46:58 +00:00
rubidium
3330813d95 (svn r22391) [1.1] -Backport from trunk:
- Fix: Vehicles skipped orders when inserting automatic orders failed (r22324)
- Fix: [NewGRF] When determining refittability use the cargo translation table of the GRF setting the refitmask instead of the GRF defining the action 3 (r22316)
- Fix: Make road vehicles, ships and aircraft skip orders if they are leaving a depot and heading to the same one again; just like trains (r22309)
- Fix: Waiting on a server could kick the client, or rather the client would kick itself due to an unexpected packet [FS#4574] (r22308)
2011-04-30 20:42:50 +00:00
rubidium
41fe2dea36 (svn r22390) [1.1] -Backport from trunk:
- Fix: When drawing the town authority window, check whether the availability of the actions changed, and force a complete redraw in that case (r22307)
- Fix: The 'freeform edges' setting could be enabled when there were buoys on the northern border [FS#4580] (r22297)
- Fix: Reset Window::scrolling_scrollbar when raising scrollbar buttons [FS#4571] (r22294)
- Fix: [NewGRF] the c and p parts of station vars 40, 41 and 49 were incorrect for large stations (r22286)
2011-04-30 20:41:17 +00:00
rubidium
ad37641fee (svn r22281) [1.1] -Backport from trunk:
- Fix: In the scenario editor you could build a ship depot using the appropriate hotkey. Removing that depot causes an assertion to trigger [FS#4558] (r22266)
[1.1] -Prepare: 1.1.0
2011-03-31 21:16:12 +00:00
frosch
c1c35b5ac5 (svn r22261) [1.1] -Prepare: for 1.1.0-RC3 2011-03-18 20:56:54 +00:00
frosch
71d169ffd3 (svn r22260) [1.1] -Backport from trunk:
- Fix: New game settings were applied to early when starting a game via a heightmap. [FS#4557] (r22259)
2011-03-18 20:54:07 +00:00
rubidium
564a50628c (svn r22257) [1.1] -Backport from trunk: language updates 2011-03-17 21:15:27 +00:00
rubidium
633454f0dd (svn r22252) [1.1] -Backport from trunk:
- Fix: Do not resort town, industry and signs list directly in OnInvalidateData(). There might be a scheduled rebuild which needs execution first. So, only set a trigger for resorting [FS#4546] (r22249, r22248, r22247, r22246, r22245, r22244, r22243, r22242, r22241, r22236, r22228, r22227, r22226)
2011-03-14 19:03:17 +00:00
rubidium
fbea0fc6b1 (svn r22251) [1.1] -Backport from trunk:
- Fix: [NewGRF] Object variable 0x48 was not available in callback 0x15C (r22231)
[1.1] -Update: the intro game (romazoon)
2011-03-14 18:10:24 +00:00
rubidium
30cf8d1971 (svn r22224) [1.1] -Backport from trunk:
- Fix: Compilation when compiling with --disable-ai (r22222)
- Fix: When downloading a file via HTTP failed mid-way and OpenTTD fell back to the old system the partial downloaded amount would be counted twice [FS#4543] (r22208)
- Fix: The 'center' (for movement) of vehicles is (currently still) always at 4/8th original vehicle length from the front, so trains should stop at the same location regardless of the length of the front engine [FS#4545] (r22206)
- Fix: Make the base costs for building and demolishing NewObjects also local to the individual NewGRFs (r22204)
- Fix: Removing a station order could stop when removing first automatic order (r22200)
- Fix: Invalidate the object build window when using the date cheat (r22193)
2011-03-07 19:18:38 +00:00
rubidium
01bc61309f (svn r22184) [1.1] -Prepare: for 1.1.0-RC2 2011-03-04 20:50:07 +00:00
rubidium
308b0d354c (svn r22183) [1.1] -Backport from trunk:
- Fix: Following a vehicle with a very high VehicleID was impossible (r22181)
[1.1] -Backport language changes from trunk
2011-03-04 19:04:42 +00:00
rubidium
1d2baecb5e (svn r22178) [1.1] -Backport from trunk:
- Fix: [NewGRF] Memory leak if an industry NewGRF had more than one prop A or 15, or a station NewGRF had more than one prop 09 (r22175, r22165)
- Fix: [NewGRF] Disable a station NewGRF when it contains an unterminated spritelayout in action0 prop 08 instead of crashing (r22164)
- Fix: Building a station part adjacent to both an existing station and a rail waypoint failed [FS#4541] (r22163)
2011-03-03 21:47:13 +00:00
rubidium
40f3583c54 (svn r22166) [1.1] -Backport from trunk:
- Fix: No update of NewGRF window when unknown GRF name becomes available [FS#4533] (r22162)
- Fix: [NewGRF] Industry prop 0x11 is 4-bytes long, not 3 bytes (r22157)
- Fix: Stations/infrastructure were not properly sold on some clients during bankruptcy [FS#4529] (r22154)
- Fix: The Greek translation did not work as it breached the 200.000 bytes 'limit' for loading language files [FS#4536] (r22153)
2011-03-03 20:48:24 +00:00
rubidium
5552c0a7e9 (svn r22152) [1.1] -Backport from trunk:
- Fix: Windows video driver crashed when it could not go to full screen at the resolution of the configuration file when starting OpenTTD [FS#4521] (r22149)
- Fix: Do not run savegame conversion during SlNullPointers; the pointer might not be converted or be NULL at that point (r22146)
- Fix: Some valid keycodes were ignored along with the invalid ones (r22142)
- Fix: When commands need to invalidate windows, process these events asynchronously before the next redraw. Calling window code directly from command scope uses wrong _current_company and might issue nested DoCommands() which interfer with the running command [FS#4523] (r22141, r22140, r22135, r22134)
- Fix: [NewGRF] Skipping only the invalid part of an action14 failed, the rest of the action was skipped instead (r22138)
2011-02-26 20:13:14 +00:00
rubidium
f2d2713f05 (svn r22151) [1.1] -Backport from trunk:
- Fix: Spectators had crashes when closing buoy windows (r22131)
- Fix: Build-station-window showed wrong selection when reopening [FS#4530] (r22128)
- Fix: Canals would get drawn as land in the smallmap when using the owner window (r22127)
- Fix: The animation-ness of two goldmine tiles were swapped, causing the wheeltower to not work properly, and the bottom corner to show the wrong sprite [FS#4528] (r22125)
- Fix: CommandQueue::Pop() did not update 'last'; popping the last item caused the queue to disconnect unless there was only one item [FS#4522] (r22123)
2011-02-26 20:06:18 +00:00
rubidium
cad2aa6b14 (svn r22150) [1.1] -Backport from trunk:
- Fix: When a NOT_REACHED in saveload can be reached due to an invalid savegame, use SlErrorCorrupt instead. In other words, do not crash but show an error message (r22122)
- Fix: In case of high frame_freq one could get commands executed after a new network game was started (r22121)
- Fix: [NoAI] Prevent AIs from getting consistently over their allowed amount of operations by subtracting the amount they went over 'budget' from the budget for the next 'tick' (r22120)
- Fix: The refit window was not correctly updated after selecting with Ctrl+Click [FS#4525] (r22118)
- Fix: CanRemoveRoadWithStop() failed for _current_company = OWNER_TOWN, and for OWNER_NONE-owned road (r22117)
2011-02-26 20:03:44 +00:00
rubidium
96ab68d6bc (svn r22103) [1.1] -Prepare: for 1.1.0-RC1 2011-02-18 21:05:28 +00:00
rubidium
35fb1fe0e1 (svn r22100) [1.1] -Backport from trunk: language updates 2011-02-18 20:38:05 +00:00
rubidium
fab07a9265 (svn r22099) [1.1] -Backport from trunk:
- Fix: Remove invalid keycodes when reading hotkeys.cfg [FS#4510] (r22094)
- Fix: The server list did not get sorted with one item in it, so the 'position in the list' variable was never updated causing problems when using the keyboard shortcuts for scrolling [FS#4514] (r22093)
- Fix: When deleting towns, only relocate objects during DC_EXEC (r22087)
2011-02-18 20:35:40 +00:00
rubidium
177135320d (svn r22088) [1.1] -Revert (r22041): assertions to check whether Pools are actually checked before allocation still triggered in some corner cases, so leave it in trunk but remove it from the 1.1 branch 2011-02-15 22:04:57 +00:00
rubidium
5be6a1c7e6 (svn r22082) [1.1] -Branch: for the 1.1 series 2011-02-14 20:19:53 +00:00
305 changed files with 7573 additions and 3235 deletions

View File

@@ -42,8 +42,8 @@ NFORENUM := $(shell [ `nforenum -s -v 2>/dev/null | wc -l ` -eq 1 ] && echo "nfo
MD5SUM := $(shell [ "$(OS)" = "OSX" ] && echo "md5 -r" || echo "md5sum")
# Some "should not be changed" settings.
NFO_FILES := $(GRF_DIR)/*.nfo
PNG_FILES := $(GRF_DIR)/*.png
NFO_FILES := $(GRF_DIR)/*.nfo $(GRF_DIR)/rivers/*.nfo
PNG_FILES := $(GRF_DIR)/*.png $(GRF_DIR)/rivers/*.png
# Build the GRF.
all: $(BIN_DIR)/openttd.grf

View File

@@ -27,9 +27,21 @@ SRC_DIR = "$(ROOT_DIR)/src"
BUNDLE_DIR = "$(ROOT_DIR)/bundle"
BUNDLES_DIR = "$(ROOT_DIR)/bundles"
TTD = openttd.exe
PDB = openttd.pdb
MODE = Release
TARGET := $(shell echo $(PLATFORM) | sed "s@win64@x64@;s@win32@Win32@")
all:
$(Q)cp objs/$(TARGET)/Release/$(TTD) $(BIN_DIR)/$(TTD)
$(Q)cp objs/$(TARGET)/$(MODE)/$(TTD) $(BIN_DIR)/$(TTD)
include Makefile.bundle.in
bundle_pdb:
@echo '[BUNDLE] Creating $(BUNDLE_NAME).pdb.xz'
$(Q)mkdir -p "$(BUNDLES_DIR)"
$(Q)cp objs/$(TARGET)/Release/$(PDB) $(BUNDLES_DIR)/$(BUNDLE_NAME).pdb
$(Q)xz -9 $(BUNDLES_DIR)/$(BUNDLE_NAME).pdb
regression: all
$(Q)cp bin/$(TTD) bin/openttd
$(Q)cd bin && sh ai/regression/run.sh

View File

@@ -28,6 +28,7 @@ else
./openttd -x -c ai/regression/regression.cfg $params -g ai/regression/regression.sav -d ai=2 2>&1 | awk '{ gsub("0x(\\(nil\\)|0+)(x0)?", "0x00000000", $0); gsub("^dbg: \\[ai\\]", "", $0); gsub("^ ", "ERROR: ", $0); gsub("ERROR: \\[1\\] ", "", $0); gsub("\\[P\\] ", "", $0); print $0; }' > tmp.regression
fi
ret=0
if [ -z "$gdb" ]; then
res="`diff -ub ai/regression/regression.txt tmp.regression`"
if [ -z "$res" ]; then
@@ -35,6 +36,7 @@ if [ -z "$gdb" ]; then
else
echo "Regression test failed! Difference:"
echo "$res"
ret=1
fi
echo ""
echo "Regression test done"
@@ -49,3 +51,5 @@ fi
if [ "$1" != "-k" ]; then
rm -f tmp.regression
fi
exit $ret

Binary file not shown.

Binary file not shown.

View File

@@ -55,7 +55,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
TRGC.GRF = ed446637e034104c5559b32c18afe78d
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
OPENTTD.GRF = e67a3aaf13b81bab5d72d7440244e20c
OPENTTD.GRF = f99b8f65d32a8883a2b0979eb2f6729f
[origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM.

View File

@@ -55,7 +55,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
TRGC.GRF = ed446637e034104c5559b32c18afe78d
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
OPENTTD.GRF = e67a3aaf13b81bab5d72d7440244e20c
OPENTTD.GRF = f99b8f65d32a8883a2b0979eb2f6729f
[origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM.

View File

@@ -55,7 +55,7 @@ TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32
TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
OPENTTD.GRF = e67a3aaf13b81bab5d72d7440244e20c
OPENTTD.GRF = f99b8f65d32a8883a2b0979eb2f6729f
[origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM.

View File

@@ -1,3 +1,240 @@
1.1.3-RC1 (2011-09-04)
------------------------------------------------------------------------
- Add: River graphics for the original base set (r22766)
- Fix: [NewGRF] DCxx text references via the textstack are not allowed, but caused crash [FS#4758] (r22882)
- Fix: Harden memory allocation (r22881, r22880, r22875)
- Fix: Miscalculation of train curve speed limits (r22879)
- Fix: Validate image dimensions before loading [FS#4747] (r22878, r22877, r22874, r22873)
- Fix: Report an error in the news if autoreplace/renew fails due to the engine type being no longer available [FS#4712] (r22876)
- Fix: Perform stricter checks on RLE compressed BMP images [FS#4746] (r22872, r22871)
- Fix: [NewGRF] Variables 40 and 81 of callback 18 are not the same as 80 (r22867)
- Fix: [NewGRF] Generic callbacks shall chain to the next GRF when the callback fails (r22866, r22865)
- Fix: Perform stricter checks on some commands [FS#4745] (r22845)
- Fix: Harden savegame load against too many AI config settings [FS#4748] (r22843)
- Fix: Compilation with GCC 4.7 (r22832, r22728, r22719)
- Fix: Allow to demolish aqueducts built in the scenario editor [FS#4741] (r22821)
- Fix: Towns expanding from the "wrong" side of a tunnel or bridge [FS#4731] (r22810, r22809)
- Fix: [NewGRF] String codes for dates should use unsigned words, like old OpenTTD did before it learned dates before 1920 (r22774)
- Fix: [NoAI] Clarify the meaning of AIStation::IsWithinTownInfluence(), AITile::IsWithinTownInfluence() and AITown::IsWithinTownInfluence() [FS#4702] (r22763)
- Fix: [NewGRF] Also free allocated depot tables of NewGRF airports (r22760)
- Fix: [NewGRF] Invalid memory access when querying the grfID of the default objects [FS#4730] (r22757)
- Fix: When marking tile selections dirty, use the height information of the corners instead of the surface slope. This is more accurate when the foundation is kind of undefined [FS#4727] (r22755)
- Fix: Make aircraft point to the exit when leaving the hangar [FS#4696] (r22743, r22742, r22741)
- Fix: Display the size of the leveled platform in the measurement tooltip of terraforming operations [FS#4708] (r22740, r22739)
- Fix: Setting company passwords via the GUI on servers (including starting a company with the default password) failed, so no client could join that company [FS#4722] (r22738)
- Fix: [NewGRF] The construction stage sprites were incorrectly selected in cases other than 1 or 4 sprites per set (r22731)
- Fix: [NoAI] AITile::GetCargoAcceptance, AITile::GetCargoProduction and AIRail::BuildNewGRFRailStation did not check the cargo argument for validity (r22726)
- Fix: [NewGRF] Always draw NewGRF supplied texts with a default colour (r22725)
- Fix: [NewGRF] Do not restrict AdvVarAct2 to 255 operations (r22723)
- Fix: If there is no point in opening the rail/air toolbar, do not open it for people who use hotkeys either rather than only for those using GUI elements (r22716, r22715, r22714)
- Fix: [NoAI] Allow AIAirport::GetNoiseLevelIncrease() also for expired airports [FS#4704] (r22710)
1.1.2 (2011-08-14)
------------------------------------------------------------------------
- Fix: Some corrupted savegames could crash OpenTTD instead of showing the 'savegame corrupted' message [FS#4717] (r22737, r22736)
- Fix: [NewGRF] Triggering NOT_REACHED when playing with a NewGRF that supplies genders/cases for a language that was not installed [FS#4718] (r22735)
1.1.2-RC2 (2011-07-30)
------------------------------------------------------------------------
- Fix: Cost of adding an extra road type to a bridge or tunnel was undercalculated [FS#4680, FS#4681] (r22700, r22699)
- Fix: Only insert cleared object tiles into _cleared_object_areas if clearing actually succeeds, else subsequential tests of the same tile will be skipped and considered successful [FS#4694] (r22698)
- Fix: When building a house it could be built at the wrong place if multitile houses failed some tests (r22697)
- Fix: [Network] Failed network address resolving could trigger temporary freezes [FS#4697] (r22696, r22695)
- Fix: [NewGRF] The override managers were not reset in some cases like creating a new scenario [FS#4691] (r22693)
- Fix: [NewGRF] Aircrafts defined with IDs above the default aircrafts always defaulted to passenger cargo (r22690)
1.1.2-RC1 (2011-07-24)
------------------------------------------------------------------------
- Change: [NewGRF] Only allow access (via hotkey and menu) to the bounding box visualisation when NewGRF developer tools are enabled (r22675)
- Fix: [NewGRF] Disallow accessing variable 1B in network games due to desync reasons (r22682)
- Fix: Switching from a red to a white highlight (by switching to another tool) without switching the highlight mode (HT_RECT etc.) did not mark the selection dirty [FS#4670] (r22649)
- Fix: [NewGRF] Parameters from NewGRFs were not properly parsed in all cases [FS#4599] (r22648, r22630, r22629, r22628, r22627)
- Fix: GetSection() does not return a LockPart [FS#4678] (r22645)
- Fix: [NewGRF] Disallow building NewObjects on water tiles owned by another company (r22643)
- Fix: [NewGRF] Disable the 'set parameters' button in the NewGRF GUI, if the GRF specifies to have no parameters and one would not be able to set any parameters anyway (r22642)
- Fix: Keep the previous owner of the upper and lower lock parts if they are built on existing water (r22638)
- Fix: [NewGRF] Airports should not expose the tile specific random bits of the north tile. Only airport tiles should access those (r22636)
- Fix: [NewGRF] Correctly reseed random bits of industries and industry tiles (r22635, r22634)
- Fix: [NewGRF] Implement variables 25 and 7F for railtypes (r22633)
- Fix: [NewGRF] Additional text in fund industry window is NewGRF supplied and thus should have a default colour (r22631)
- Fix: Also initialise _old_vds with newgame settings; TTD savegames do not contain these settings [FS#4622] (r22626)
- Fix: Do not zero the orders of disaster vehicles when converting savegames [FS#4642] (r22625)
- Fix: When closing an AI company the local player cheated to, we need to cheat him to another company [FS#4654] (r22624, r22623)
- Fix: When closing down companies their shares in other companies must be sold even if share trading is disabled at that point of time (r22622)
- Fix: When asking the user to confirm an unsafe unpausing, there is no need to execute a command if 'no' is choosed. This also prevents crashing when clicking unpause while the confirm window is shown (r22621)
- Fix: Enforce refit orders to be 'always go to depot' orders; service-only and stop-in-depot orders make no sense with refitting [FS#4651] (r22620)
- Fix: Consider the size of the vehicle sprite for the lineheight in the company GUI. This also makes the widget containing the sprite not skip drawing it, if the bounds of the widget are outside of the drawing area though the sprite actually needs drawing [FS#4662] (r22619)
- Fix: When changing difficulty settings over the network, do not just reopen the difficulty window if any game options window is opened; instead invalidate them properly [FS#4653] (r22618, r22617)
- Fix: [NewGRF] If callback 33 returns a value out of range, no sound effect shall be played [FS#4656] (r22614)
- Fix: Use rotated heightmap sizes for reporting scaling problems [FS#4663] (r22608)
- Fix: Do not show cargo accepted/produced in the new station window when no tiles are selected (mouse hovering a window or toolbar) [FS#4647] (r22595, r22593)
- Fix: Add active NewGRFs to the list of available ones when selecting the empty preset [FS#4644] (r22594)
- Fix: Reading of heightmaps with uncommon BMP formats failed due to uninitialised variables [FS#4645] (r22592)
- Fix: PBS order forecasting modified the current order index in case of a goto-nearest-depot order and no depot could be found [FS#4641] (r22589)
- Fix: Remove BaseStorageArrays from _changed_storage_arrays on destruction (r22583, r22551)
- Fix: Do not increment STL iterators after they have been invalidated (r22582)
- Fix: Do not lower the arrow buttons in the NewGRF/AI parameter windows if they are clicked when disabled (r22553, r22499)
- Fix: Clear airport persistent storage on construction/removal of airports (r22552)
- Fix: Possible crash when opening the airport build window for the first time [FS#4619] (r22538)
- Fix: Replace the half small airport structure on the intercontinental airport with some grass [FS#3494] (r22537)
- Fix: Documentation omission regarding admin protocol [FS#4632] (r22536)
- Fix: [NoAI] Doing rescan_ai in a game with running AIs caused a crash [FS#4631] (r22534)
- Fix: Do not create an implicit order if the current order is the first order in the order list and we visit the station of the last entry of the order list (r22532)
- Fix: MinGW 64 related compilation issues [FS#4623] (r22522, r22491, r22490, r22489)
- Fix: The layout selectors of the airport build GUI did not latch properly (r22497, r22495)
- Fix: Callback result for airport layout name was incorrectly used (r22496)
- Fix: Airport preview sprite can depend on the layout, so update the cached SpriteID when the layout changes (r22494)
- Fix: Engine IDs for coal and mail wagons were swapped in the TTO savegame conversion [FS#4622] (r22487)
- Fix: The caption of centered windows could be moved out of the main window and thus become inaccessible when resizing the main window (r22485, r22484)
- Fix: No client error packet was sent to the admin bots [FS#4585] (r22384)
1.1.1 (2011-06-01)
------------------------------------------------------------------------
- Change: Automatic orders are better called implicit orders as no real order influencing path finding is added (r22474, r22473)
- Fix: Only try to insert implicit orders for ground vehicles. Aircraft may reach unscheduled terminals when skipping orders [FS#4624] (r22492)
1.1.1-RC1 (2011-05-15)
------------------------------------------------------------------------
- Feature: [NewGRF] Allow to filter by town of the current industry when using industry variable 0x68 [FS#4591] (r22434)
- Change: Improve the speed of YAPF by tweaking hash tables size (r22351, r22350, r22348)
- Change: Show one digit of the fractional train length in the depot (r22336, r22305, r22304, r22303)
- Fix: When determining the executable path failed, the working directory was used instead, circumventing the not-home-directory check [FS#4613] (r22465)
- Fix: [Windows] Prevent a crash when launching OpenTTD with -d from a MSYS console [FS#4587] (r22464)
- Fix: Update the saveload window immediatelly after scanning a new directory, so queued events reach the window when already updated [FS#4615] (r22463)
- Fix: [NewGRF] The c and p parts of station vars 40, 41 and 49 were incorrect for large stations (r22455, r22286)
- Fix: [NewGRF] Zero register 0x100 as specified before resolving custom station foundations (r22452)
- Fix: Do not 'log' the NewGRFs in the screenshot when in the menu [FS#4610] (r22450)
- Fix: [NewGRF] When GRFs are disabled via Action E or due to GRM failure, also display an error in the GUI (r22444, r22443)
- Fix: [NewGRF] Do not popup fatal NewGRF error messages in the intro screen. The GRFs are not going to be activated there anyway and the GRF settings GUI will not display the errors either (r22442)
- Fix: Catenary was drawn incorrectly next to level crossings with foundations (r22437)
- Fix: [NewGRF] Apply railtype property 12 (station graphics) also to station groundsprites from action 1 (r22436)
- Fix: Git revision detection would return too much when tags are involved (r22435)
- Fix: [NewGRF] When action14 specified different values for the palette, the values were OR-ed. Use the last set value instead (r22416)
- Fix: [Network] Kicking yourself via remote console crashes the server [FS#4606] (r22414)
- Fix: [NewGRF] Make sure the action2 ID of a generic feature callback is valid (r22409)
- Fix: Check the availability year of all houses, not just the NewGRF houses, when making sure that at least one is available onwards from year 0 [FS#4581] (r22389, r22300, r22299)
- Fix: When a game uses a lot of NewGRFs the buffer for storing that information in the PNG is too small (r22388)
- Fix: Windows' recv seems to return 'graceful closed' before having passed the remaining buffer which causes OpenTTD to think all connections are 'incorrectly' terminated, i.e. without the 'I am leaving' packet from the client. So let the client wait a tiny bit after sending the 'I am leaving' packet and before gracefully closing the connection [FS#4601] (r22387)
- Fix: When the last AI company gets removed, the 'dead' state was not reset in the AI debug window [FS#4602] (r22386)
- Fix: Recolouring of silicon bridge was done incorrectly (r22380, r22379, r22378)
- Fix: Crash when clicking a removed company in the vehicle list dropdowns [FS#4592] (r22373)
- Fix: Keep better accounting of the order in which clients joined; client cannot be starved from joining and they get shown the amount of clients waiting in front of them (r22372, r22370, r22369, r22368, r22367, r22366, r22365, r22364, r22363, r22362, r22361)
- Fix: Make sure saving has completely and utterly finished before starting a new one. Otherwise you could start a save, which would be marked as done by the previous save stopping and then yet another save could be started... and that could create a deadlock [FS#4596] (r22371)
- Fix: Delete the client list popup when the client got removed (instead of previously selecting some other client) (r22360, r22359, r22358)
- Fix: When inserting automatic orders, do not create consecutive duplicate orders (r22333, r22332, r22331, r22330, r22329, r22328, r22327)
- Fix: Destinations of conditional orders were update incorrectly when deleting orders in front of the conditional orders, if the target order was the order just before of the conditional order (r22326)
- Fix: Vehicles skipped orders when inserting automatic orders failed (r22324)
- Fix: [NewGRF] When determining refittability use the cargo translation table of the GRF setting the refitmask instead of the GRF defining the action 3 (r22316)
- Fix: Make road vehicles, ships and aircraft skip orders if they are leaving a depot and heading to the same one again; just like trains (r22309)
- Fix: Waiting on a server could kick the client, or rather the client would kick itself due to an unexpected packet [FS#4574] (r22308)
- Fix: When drawing the town authority window, check whether the availability of the actions changed, and force a complete redraw in that case (r22307)
- Fix: The 'freeform edges' setting could be enabled when there were buoys on the northern border [FS#4580] (r22297)
- Fix: Reset Window::scrolling_scrollbar when raising scrollbar buttons [FS#4571] (r22294)
1.1.0 (2011-04-01)
------------------------------------------------------------------------
- Fix: In the scenario editor you could build a ship depot using the appropriate hotkey. Removing that depot causes an assertion to trigger [FS#4558] (r22266)
1.1.0-RC3 (2011-03-18)
------------------------------------------------------------------------
- Fix: New game settings were applied too early when starting a game via a heightmap [FS#4557] (r22259)
- Fix: Do not resort town, industry and signs list directly in OnInvalidateData(). There might be a scheduled rebuild which needs execution first. So, only set a trigger for resorting [FS#4546] (r22249, r22248, r22247, r22246, r22245, r22244, r22243, r22242, r22241, r22236, r22228, r22227, r22226)
- Fix: [NewGRF] Object variable 0x48 was not available in callback 0x15C (r22231)
- Fix: Compilation when compiling with --disable-ai (r22222)
- Fix: When downloading a file via HTTP failed mid-way and OpenTTD fell back to the old system the partial downloaded amount would be counted twice [FS#4543] (r22208)
- Fix: The 'center' (for movement) of vehicles is (currently still) always at 4/8th original vehicle length from the front, so trains should stop at the same location regardless of the length of the front engine [FS#4545] (r22206)
- Fix: Make the base costs for building and demolishing NewObjects also local to the individual NewGRFs (r22204)
- Fix: Removing a station order could stop when removing first automatic order (r22200)
- Fix: Invalidate the object build window when using the date cheat (r22193)
1.1.0-RC2 (2011-03-04)
------------------------------------------------------------------------
- Fix: Following a vehicle with a very high VehicleID was impossible (r22181)
- Fix: [NewGRF] Memory leak if an industry NewGRF had more than one prop A or 15, or a station NewGRF had more than one prop 09 (r22175, r22165)
- Fix: [NewGRF] Disable a station NewGRF when it contains an unterminated spritelayout in action0 prop 08 instead of crashing (r22164)
- Fix: Building a station part adjacent to both an existing station and a rail waypoint failed [FS#4541] (r22163)
- Fix: No update of NewGRF window when unknown GRF name becomes available [FS#4533] (r22162)
- Fix: [NewGRF] Industry prop 0x11 is 4-bytes long, not 3 bytes (r22157)
- Fix: Stations/infrastructure were not properly sold on some clients during bankruptcy [FS#4529] (r22154)
- Fix: The Greek translation did not work as it breached the 200.000 bytes 'limit' for loading language files [FS#4536] (r22153)
- Fix: Windows video driver crashed when it could not go to full screen at the resolution of the configuration file when starting OpenTTD [FS#4521] (r22149)
- Fix: Do not run savegame conversion during SlNullPointers; the pointer might not be converted or be NULL at that point (r22146)
- Fix: Some valid keycodes were ignored along with the invalid ones (r22142)
- Fix: When commands need to invalidate windows, process these events asynchronously before the next redraw. Calling window code directly from command scope uses wrong _current_company and might issue nested DoCommands() which interfer with the running command [FS#4523] (r22141, r22140, r22135, r22134)
- Fix: [NewGRF] Skipping only the invalid part of an action14 failed, the rest of the action was skipped instead (r22138)
- Fix: Spectators had crashes when closing buoy windows (r22131)
- Fix: Build-station-window showed wrong selection when reopening [FS#4530] (r22128)
- Fix: Canals would get drawn as land in the smallmap when using the owner window (r22127)
- Fix: The animation-ness of two goldmine tiles were swapped, causing the wheeltower to not work properly, and the bottom corner to show the wrong sprite [FS#4528] (r22125)
- Fix: CommandQueue::Pop() did not update 'last'; popping the last item caused the queue to disconnect unless there was only one item [FS#4522] (r22123)
- Fix: When a NOT_REACHED in saveload can be reached due to an invalid savegame, use SlErrorCorrupt instead. In other words, do not crash but show an error message (r22122)
- Fix: In case of high frame_freq one could get commands executed after a new network game was started (r22121)
- Fix: [NoAI] Prevent AIs from getting consistently over their allowed amount of operations by subtracting the amount they went over 'budget' from the budget for the next 'tick' (r22120)
- Fix: The refit window was not correctly updated after selecting with Ctrl+Click [FS#4525] (r22118)
- Fix: CanRemoveRoadWithStop() failed for _current_company = OWNER_TOWN, and for OWNER_NONE-owned road (r22117)
1.1.0-RC1 (2011-02-18)
------------------------------------------------------------------------
- Feature: [NewGRF] Test all possible industry layouts during construction and prospecting [FS#4131] (r22012, r22010)
- Feature: Wheel scrolling in the console (r21982)
- Feature: Console command to reset the engine pool. It removes the traces of engines which are no longer associated to a NewGRF, and can be used to e.g. 'fix' scenarios which were screwed up by the author. You can only use it when there are no vehicles in the game though (r21975)
- Feature: Add a setting to enable/disable funding local road reconstruction (r21974)
- Feature: Introduce 'minimal' number of industries as a replacment for the old 'none' setting in the new game window (r21969)
- Change: When loading old savegames with long trains set the maximum train length to the length of the longest train (r22061)
- Change: Always report mammoth trains are disabled to NewGRFs, and allow the maximum train length to be modified in multiplayer as well [FS#4471] (r22004)
- Fix: Remove invalid keycodes when reading hotkeys.cfg [FS#4510] (r22094)
- Fix: The server list did not get sorted with one item in it, so the 'position in the list' variable was never updated causing problems when using the keyboard shortcuts for scrolling [FS#4514] (r22093)
- Fix: When deleting towns, only relocate objects during DC_EXEC (r22087)
- Fix: [Windows] If fullscreen fails with current resolution, use desktop resolution [FS#4489] (r22081)
- Fix: The owner view of the smallmap was not updated after a company colour change (r22079)
- Fix: Maximum train length interfered with wagon replacement when wagon removal was turned on [FS#4499] (r22078)
- Fix: NewGRFs with invalid multi-tile houses could cause a valid 1x1 house following it to be seen as multi-tile, causing crashes [FS#4501] (r22075)
- Fix: Immediately update the train weight when you change the multiplier for train cargo weight (r22073)
- Fix: Some hotkey names in hotkey.cfg for the scenario editor toolbar were completely bogus (r22071)
- Fix: Crashes when disconnecting after requesting the map [FS#4503] (r22070)
- Fix: Delete all savegame packets, not just the first one (r22069)
- Fix: Return 'connection lost' instead of 'okay' when SendPackets closed the connection, so we do not try to do anything else with the closed socket (r22068)
- Fix: Do not hold a mutex when sending packets and thus possibly closing the connection as that wants to acquire the mutex again (r22067)
- Fix: Verify we can allocate an Order, OrderList, CargoPacket, CargoPayment, and others before we actually try to do so (all corner cases) [FS#4468] (r22066, r22057, r22047, r22042, r22040, r22033, r22031, r22026, r22025, r22024, r22023, r22022)
- Fix: Crash when disconnecting and reconnecting while the server is still saving the savegame [FS#4497] (r22064)
- Fix: Memory leak when saving with LZMA or zlib fails mid-way (r22062)
- Fix: Make the send chat message window follow the position of the status bar (r22059)
- Fix: Metric and imperial HP are not the same. As imperial HP are used internally, set a conversion rate for metric HP [FS#4408] (r22056)
- Fix: [Squirrel] Some invalid squirrel code caused the squirrel compiler to crash [FS#4490] (r22055)
- Fix: The land area information window was not updated after a language change (r22053)
- Fix: Roads under road stops would get a wrong owner after overbuilding (r22051)
- Fix: In ancient savegames, e.g. TTO savegames, non primary vehicles (wagons and such) could have unitnumbers or even orders. However, these orders would not be updated when a station is removed. As such some savegames have wagons with current orders to invalid stations which triggers trouble in the load conversion. So, trash any orders/unitnumbers a non-primary vehicle has [FS#4496] (r22050)
- Fix: [NewGRF] Company 0 does not always exist, so put temporary vehicles in a valid company (r22048)
- Fix: Make sure order indices stay in range when copying, sharing, unsharing or deleting all orders [FS#4487] (r22046)
- Fix: Update the consist cache when a part of a train is flipped in the depot [FS#4493] (r22044)
- Fix: Invalidate the right windows when a part of a train is flipped in the depot (r22043)
- Fix: Tab completion in chat did not cycle through all possible options (r22038)
- Fix: Crash when watching the vehicle view of a vehicle that has multiple sequential nearest depot orders (or consists of a single nearest depot order) when there is no depot with index 0 [FS#4488] (r22034)
- Fix: The server list got not resorted/redrawn after NewGRFs were downloaded [FS#4482] (r22029)
- Fix: When paused and having the allowed actions while paused setting on 'no actions' cheating money would fail [FS#4479] (r22016)
- Fix: Only show one AI per unique ID instead of all versions in the output of 'openttd -h' (r22007)
- Fix: Smoke/sparks of trains would be shown under bridges, or rather through bridges [FS#4480] (r22006)
- Fix: When the difference between force and resistance is smaller than the mass(*4) there would be no acceleration anymore, even when at higher (or lower) speed the force and resistance balance out better [FS#4473] (r21997)
- Fix: [YAPF] Under some circumstances vehicles could be lost [FS#4472] (r21996)
- Fix: [NewGRF] Make computations of closest-land/water-distances handle waterish tiles more correctly (r21994)
- Fix: When building a lock on dry land costs for clearing water were deducted rather than for building canals (r21993)
- Fix: AIs trying to change the AIOF_GOTO_NEAREST_DEPOT flag for existing orders triggered an assert. Explicitly forbid this as precondition for SetOrderFlags [FS#4467] (r21992)
- Fix: The share/copy-orders-cursor was not updated to refer to the new vehicle when it got autoreplaced/-renewed [FS#4466] (r21991)
- Fix: Vehicle status bar glitches on speed changes (r21989)
- Fix: Scrolling of the console in pages used wrong line height and scrolled too much (r21979)
- Fix: Redraw the town authority window after modifying town authority settings (r21973)
- Fix: Crash when a multiplayer company goes bankrupt with 'you' in it [FS#4464] (r21970)
1.1.0-beta5 (2011-02-04)
------------------------------------------------------------------------
- Feature: GUI setting to disable reversing at signals (r21962)
@@ -18,7 +255,7 @@
- Fix: The town window would not be invalidated in the scenario editor if the ground changed and thus the required cargos for town growth [FS#4554] (r21929)
- Fix: Converting an expensive rail type to a cheap one could give more money than removing and rebuilding cost (r21919)
- Fix: Languages improperly sorted in the 'start server' window [FS#4443] (r21918)
- Fix: the minimum speed needed for (realistic) acceleration to work properly can sometimes be more than the (temporary) maximum speed causing Clamp to 'fail'. Make sure that the minimum speed always overrules the maximum speed [FS#4442] (r21916)
- Fix: The minimum speed needed for (realistic) acceleration to work properly can sometimes be more than the (temporary) maximum speed causing Clamp to 'fail'. Make sure that the minimum speed always overrules the maximum speed [FS#4442] (r21916)
- Fix: Include the capacity of non-refittable vehicles in the refitted-capacity, if their cargo matches (r21904)
- Fix: Do not count articulated parts when passing the number of vehicles to refit to the command. That may exceed 8 bits (r21902)
- Fix: [NoAI] Hide automatic orders from AIs as they have no way of dealing with them (r21900)
@@ -226,7 +463,7 @@
- Change: Limit the number of exceptions in the refittable cargo list to 7 (r21083)
- Change: Reduce the chances to accidentally break savegames with NewGRFs by limiting loading of savegames that miss NewGRFs or change NewGRF settings in-game [FS#3012] (r21116)
- Change: Tuned realistic acceleration to be a bit more realistic in order to make acceleration 'slower', which highlights the differences between vehicle types more (r21106)
- Change: Do not make client reconnect waiting time depend on the company; in coop games that does not spread clients at all, and most companies have a low number causing it not to be spread out either. Use the ClientID instead. (r21008)
- Change: Do not make client reconnect waiting time depend on the company; in coop games that does not spread clients at all, and most companies have a low number causing it not to be spread out either. Use the ClientID instead (r21008)
- Change: Add installing options or rather options to not install certain documentation, in a similar way to GRFCodec/catcodec (r20999)
- Change: Only display liveries in the livery window if they are used by some vehicle somewhen (r20849)
- Change: [NoAI] Rename AIAbstractList to AIList (r20563)
@@ -660,7 +897,7 @@
- Fix: Report a more useful error when failing to build a bubble generator (r19137)
- Fix: Resize station cargo widget when needed to display all accepted cargo types [FS#3617] (r19123)
- Fix: [NewGRF] Industry property 0x17 was interpreted incorrectly and in some cases circumvented the density difficulty setting (r19120)
- Fix: removing towns (in the scenario editor) that had stations/depots refer to them or vehicles were on the town's road could cause a crash [FS#3616] (r19119)
- Fix: Removing towns (in the scenario editor) that had stations/depots refer to them or vehicles were on the town's road could cause a crash [FS#3616] (r19119)
- Fix: In the order window the Non-stop dropdown was not enabled for depot and waypoint orders and some buttons were raised too soon [FS#3593] (r19118, r19117)
- Fix: Do not crash on broken lng file and prevent it from happening again [FS#3611] (r19113, r19112)
- Fix: Not all news data was properly freed when starting a new game [FS#3614] (r19105)
@@ -2816,7 +3053,7 @@
- Fix: Certain resolutions caused a crash when minimap was partly dragged outside the game window (r2424)
- Fix: Deleting canals under bridges removed bridges first in certain configurations (r2436)
- Fix: [NPF] Vehicles try to drive into a tunnel entrance from above (r2471)
- Fix: [NewGRF] Some road vehicle action 0 properties were loaded as the wrong type (int8,int16,int32) causing undefined results. (like cargo types being wrong) (r2474)
- Fix: [NewGRF] Some road vehicle action 0 properties were loaded as the wrong type (int8, int16, int32) causing undefined results, like cargo types being wrong (r2474)
- Fix: The console variable autoclean_unprotected was linked to the variable _network_autoclean_protected (r2498)
- Fix: Old bug in the PCX writer: The first pixel column contained garbage, the picture was shifted one to the right, and the last column was dropped (r2512)
- Fix: Using the mouse wheel could lead to a crash if mouse was not over a widget (r2530)
@@ -2882,9 +3119,9 @@
- Fix: Disallow building an oil rig above sea level (r3416)
- Fix: When removing a town-owned tunnel the player's rating was not reduced (r3418)
- Fix: (Possible) game crash on removing track/road under bridge if a vehicle was on the track/road under the bridge and the track/road sloped (r3419)
- Fix: [NewGRF] Only power should decide whether a rail vehicle is an engine or a wagon. (fixes SHIKI 810 in jpsetw.grf) (r3424)
- Fix: [NewGRF] Only power should decide whether a rail vehicle is an engine or a wagon (r3424)
- Fix: Incorrect validating of tree-planting command which can allow a buffer-overflow (r3446)
- Fix: [NewGRF] When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index. (fixes tropicstw.grf) (r3449)
- Fix: [NewGRF] When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index (r3449)
- Fix: You could not remove an item from a list-type of config ingame from the configuration file (r3475)
- Fix: [NewGRF] Always reinitialize the TTDPatch flags as patch settings may have changed (r3486)
- Fix: Price for demolishing a bridge was dependent on orientation and map size (r3487)
@@ -3068,7 +3305,7 @@
- Fix: Destroyed train locks crossings [SF#1105112]
- Fix: Upgrade rail fails when train under bridge [SF#1105281]
- Fix: Trains do not think they're on a slope any more while they drive around in a tunnel [SF#1105959]
- Fix: 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 cannot be deleted by other players if they are used.) [SF#1105963]
- Fix: 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 cannot be deleted by other players if they are used [SF#1105963]
- Fix: Graph's keys get confused [SF#1106354]
- Fix: Placing signals with 2x1 drags is treated as placing a single signal [SF#1106930]
- Fix: Console ignoring return character occasionally [SF#1107350]
@@ -3168,7 +3405,7 @@
- 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: Shares are now also sold when a company goes bankrupt [SF#1090313]
- Fix: 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) [SF#1087701]
- Fix: It is no longer possible to crash trains of other companies by building a depot close to a station; trains do no longer enter tiles that do not belong to his owner [SF#1087701]
- Fix: Crashed trains are not reported to have too few orders any more [SF#1087403]
- Fix: Backup-order-list was not closed with an OT_NOTHING, [SF#1086375]
- Fix: Docks now have a button to display the catchment area [SF#1085255]

View File

@@ -1296,6 +1296,15 @@ make_compiler_cflags() {
cxxflags="$cxxflags -std=gnu++0x"
fi
if [ $cc_version -ge 47 ]; then
# Disable -Wnarrowing which gives many warnings, such as:
# warning: narrowing conversion of '...' from 'unsigned int' to 'int' inside { } [-Wnarrowing]
# They are valid according to the C++ standard, but useless.
cxxflags="$cxxflags -Wno-narrowing"
# Disable bogus 'attempt to free a non-heap object' warning
flags="$flags -Wno-free-nonheap-object"
fi
if [ "$enable_lto" != "0" ]; then
# GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}'
has_lto=`$1 -dumpspecs | grep '\%{flto'`

View File

@@ -1,5 +1,5 @@
Multiplayer manual for OpenTTD
Last updated: 2011-01-20
Last updated: 2011-02-16
------------------------------------------------------------------------
@@ -17,6 +17,12 @@ Table of contents
1.0) Starting a server
---- -----------------
- Make sure that you have your firewall of the computer as well as possible
routers or modems of the server configured such that:
* port 3979 is free for both UDP and TCP connections in- and outgoing
* port 3978 is free outbound for UDP in order to advertise with the master
server (if desired). Otherwise you'll have to tell players your IP.
* port 3977 if use of the admin interface is desired (see admin_network.txt)
- Click "multiplayer" on the startup screen
- Click "start server"
- Type in a game name
@@ -206,7 +212,8 @@ Table of contents
6.0) Troubleshooting
---- ---------------
- My advertising server does not show up in list at servers.openttd.org
Run openttd with the '-d net=2' parameter, as this will show whether it
receives replies from the master server. If it does not receive replies it
is most likely that you need to configure your router to forward ports
3979 (both TCP and UDP) to the computer that is hosting the game.
Run openttd with the '-d net=2' parameter. That will show which incoming
communication is received, whether the replies from the master server or
communication from an admin tool reach the programme. See section 1
'Starting a server' further up for the ports and protocols used by OpenTTD.
The ports can be configured in the config file.

View File

@@ -99,7 +99,7 @@ elif [ -d "$ROOT_DIR/.git" ]; then
# No rev? Maybe it is a custom git-svn clone
REV_NR=`LC_ALL=C git log --pretty=format:%b --grep="git-svn-id:.*@[0-9]*" -1 | sed "s@.*\@\([0-9]*\).*@\1@"`
fi
TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null`"
TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`"
if [ -n "$TAG" ]; then
BRANCH=""
REV="$TAG"

View File

@@ -1,6 +1,6 @@
OpenTTD's known bugs
Last updated: 2011-02-04
Release version: 1.1.0-beta5
Last updated: 2011-09-04
Release version: 1.1.3-RC1
------------------------------------------------------------------------
@@ -39,7 +39,12 @@ officially supporting Mac OS X again. For now it remains unsupported and
we only apply bug fixes provided by the community but we are unable to fix
these bugs ourselves.
- 2484 [OSX] Cannot enter CJK characters
- 4744 [OSX] Crash when switching to full screen with OS X Lion
- 4689 [OSX] Crash when hiding window after coming from full screen
- 4594 [Windows] Minimizing the windows when a modal error message is
shown makes it difficult to exit the game
- 4420 [OSX] OS' mouse pointer still shows
- 2484 [OSX] Cannot enter CJK characters
2.1) Known bugs that will not be solved
---- ----------------------------------
@@ -262,7 +267,7 @@ OpenTTD hangs when started on 32 bits Windows [FS#4083]
default we are not able to detect this failure, except when Windows'
music initialisation function returns after several hours and then
there is no point in switching the music driver anymore.
The reason we do not use the "win32" music driver as default are
The reason we still use the "win32" music driver as default are
described in the "Long delay between switching music/song" section
of this document.
@@ -292,3 +297,44 @@ Can't change volume inside OpenTTD [FS#4416]
in OpenTTD. As a result you can't change the volume inside OpenTTD
for backends such as SDL; just use the volume control provided by
your operating system.
Can't run OpenTTD with the -d option from a MSYS console [FS#4587]
The MSYS console does not allow OpenTTD to open an extra console for
debugging output. Compiling OpenTTD with the --enable-console
configure option prevents this issue and allows the -d option to use
the MSYS console for its output.
Unreadable characters for non-latin locales [FS#4607]
OpenTTD does not ship a non-latin font in its graphics files. As a
result OpenTTD needs to acquire the font from somewhere else. What
OpenTTD does is ask the operating system, or a system library, for
the best font for a given language if the currently loaded font
does not provide all characters of the chosen translation. This
means that OpenTTD has no influence over the quality of the chosen
font; it just does the best it can do.
If the text is unreadable there are several steps that you can take
to improve this. The first step is finding a good font and configure
this in the configuration file. See section 9.0 of readme.txt for
more information. You can also increase the font size to make the
characters bigger and possible better readable.
If the problem is with the clarity of the font you might want to
enable anti-aliasing by setting the small_aa/medium_aa/large_aa
settings to "true". However, anti-aliasing only works when a 32 bits
blitter has been selected, e.g. blitter = "32bpp-anim", as with the
8 bits blitter there are not enough colours to properly perform the
anti-aliasing.
Train does not crash with itself [FS#4635]:
When a train drives in a circle the front engine passes through
wagons of the same train without crashing. This is intentional.
Signals are only aware of tracks, they do not consider the train
length and whether there would be enough room for a train in some
circle it might drive on. Also the path a train might take is not
necessarily known when passing a signal.
Checking all circumstances would take a lot of additional computational
power for signals, which is not considered worth the effort, as
it does not add anything to gameplay.
Nevertheless trains shall not crash in normal operation, so making
a train not crash with itself is the best solution for everyone.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -8,13 +8,13 @@
//
-1 * 0 0C "Fixing (alignment) bugs in the orignal graphics. By Addi."
-1 * 6 07 83 01 \7= 03 69
// Different grahpics for same wood truck
// Different graphics for same wood truck
-1 * 14 0A 04 01 87 0C 01 89 0C 01 07 0E 01 09 0E
-1 sprites/fix_graphics.png 82 8 09 16 22 -6 -7
-1 sprites/fix_graphics.png 114 8 09 16 22 -14 -7
-1 sprites/fix_graphics.png 146 8 09 16 22 -6 -7
-1 sprites/fix_graphics.png 178 8 09 16 22 -14 -7
// Different grahpics for lots of trucks
// Different graphics for lots of trucks
-1 * 5 0A 01 28 C4 0D
-1 sprites/fix_graphics.png 226 8 01 18 8 -3 -10
-1 sprites/fix_graphics.png 242 8 09 16 20 -14 -7
@@ -56,19 +56,19 @@
-1 sprites/fix_graphics.png 610 40 09 16 20 -14 -7
-1 sprites/fix_graphics.png 642 40 01 12 28 -14 -6
-1 sprites/fix_graphics.png 690 40 09 16 20 -6 -7
// Different grahpics for same truck
// Different graphics for same truck
-1 * 14 0A 04 01 9D 0C 01 9F 0C 01 A1 0C 01 A3 0C
-1 sprites/fix_graphics.png 738 40 09 16 22 -14 -7
-1 sprites/fix_graphics.png 770 40 09 16 22 -6 -7
-1 sprites/fix_graphics.png 2 72 09 16 22 -14 -7
-1 sprites/fix_graphics.png 34 72 09 16 22 -6 -7
// Different grahpics for same paper truck
// Different graphics for same paper truck
-1 * 14 0A 04 01 5D 0D 01 5F 0D 01 61 0D 01 63 0D
-1 sprites/fix_graphics.png 82 72 09 16 22 -14 -7
-1 sprites/fix_graphics.png 114 72 09 17 22 -5 -7
-1 sprites/fix_graphics.png 146 72 09 17 22 -14 -8
-1 sprites/fix_graphics.png 178 72 09 16 22 -6 -7
// Different grahpics for same paper truck (truck #2)
// Different graphics for same paper truck (truck #2)
-1 * 14 0A 04 01 1D 0E 01 1F 0E 01 21 0E 01 23 0E
-1 sprites/fix_graphics.png 226 72 09 16 22 -14 -7
-1 sprites/fix_graphics.png 258 72 09 16 22 -6 -7
@@ -135,13 +135,13 @@
// Non-toyland specific
-1 * 6 07 83 01 \7= 03 0A
// Grahpics for the tubular bridge pillars had incorrect offsets
// graphics for the tubular bridge pillars had incorrect offsets
-1 * 5 0A 01 04 05 0A
-1 sprites/fix_graphics.png 98 296 09 9 4 2 -1
-1 sprites/fix_graphics.png 114 296 09 9 4 2 -1
-1 sprites/fix_graphics.png 130 296 09 9 4 -4 0
-1 sprites/fix_graphics.png 146 296 09 9 4 -4 0
// Grahpics for the cantilever bridge pillars had incorrect offsets
// graphics for the cantilever bridge pillars had incorrect offsets
-1 * 5 0A 01 04 DD 09
-1 sprites/fix_graphics.png 178 296 09 11 10 2 -3
-1 sprites/fix_graphics.png 194 296 09 12 10 2 -2
@@ -150,15 +150,51 @@
// Toyland specific
-1 * 6 07 83 01 \7! 03 0A
// Grahpics for the toyland tubular bridge pillars had incorrect offsets
// Graphics for the toyland tubular bridge pillars had incorrect offsets
-1 * 5 0A 01 04 05 0A
-1 sprites/fix_graphics.png 248 296 09 9 4 2 -1
-1 sprites/fix_graphics.png 264 296 09 9 4 2 -1
-1 sprites/fix_graphics.png 280 296 09 9 4 -4 0
-1 sprites/fix_graphics.png 296 296 09 9 4 -4 0
// Grahpics for the toyland cantilever bridge pillars had incorrect offsets
// Graphics for the toyland cantilever bridge pillars had incorrect offsets
-1 * 5 0A 01 04 DD 09
-1 sprites/fix_graphics.png 328 296 09 11 10 2 -3
-1 sprites/fix_graphics.png 344 296 09 12 10 2 -2
-1 sprites/fix_graphics.png 360 296 09 11 10 -10 -1
-1 sprites/fix_graphics.png 376 296 09 11 10 -10 -1
// Wrong, non-translated colours in tubular bridge in 'normal' climates
// Toyland has separate sprites which are not colour translated, thus
// this does not apply there;
// Pillars are changed for all climates further up
-1 * 6 07 83 01 \7= 03 \b22
// Main tubular bridge sprites
-1 * 5 0A 01 \b6 \w2559
-1 sprites/fix_graphics.png 2 330 09 40 32 -30 -26
-1 sprites/fix_graphics.png 52 330 09 50 44 -42 -26
-1 sprites/fix_graphics.png 116 330 09 45 46 -42 -21
-1 sprites/fix_graphics.png 180 330 09 45 46 -2 -20
-1 sprites/fix_graphics.png 244 330 09 50 44 0 -25
-1 sprites/fix_graphics.png 308 330 09 41 32 0 -25
// start rail bridge
-1 * 5 0A 01 01 \w2569
-1 sprites/fix_graphics.png 350 330 09 29 52 -25 -4
// start rail + road bridge
-1 * 5 0A 01 02 \w2574
-1 sprites/fix_graphics.png 420 330 09 29 50 -25 -4
-1 sprites/fix_graphics.png 489 330 09 29 52 -25 -4
// start road + monorail bridge
-1 * 5 0A 01 02 \w2580
-1 sprites/fix_graphics.png 559 330 09 29 50 -25 -4
-1 sprites/fix_graphics.png 629 330 09 29 52 -25 -4
// start monrail + maglev bridge
-1 * 5 0A 01 02 \w2586
-1 sprites/fix_graphics.png 699 330 09 29 50 -25 -4
-1 sprites/fix_graphics.png 489 283 09 29 52 -25 -4
// start maglev bridge
-1 * 5 0A 01 01 \w2592
-1 sprites/fix_graphics.png 559 283 09 29 50 -25 -4
// GUI sprite
-1 * 5 0A 01 01 \w2600
-1 sprites/fix_graphics.png 433 298 09 15 40 0 5

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -80,6 +80,7 @@
"David Dallaston: tram tracks" 0D
"Jonathan G. Rennison: aqueducts" 0D
"Bilbo, Jasper Vries: font" 0D
"Andrew Parkhouse: rivers" 0D
"OpenTTD developers: other graphics" 00
//
@@ -104,3 +105,8 @@
#include "chars.nfo"
#include "overrides.nfo"
#include "fix_graphics.nfo"
#include "rivers/rapids.nfo"
#include "rivers/temperate.nfo"
#include "rivers/arctic.nfo"
#include "rivers/tropic.nfo"
#include "rivers/toyland.nfo"

View File

@@ -0,0 +1,282 @@
//
// $Id$
//
// This file is part of OpenTTD.
// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
//
-1 * 0 0C "Arctic river graphics by andythenorth (Andrew Parkhouse)"
-1 * 4 01 05 01 3C
-1 sprites/arctic_snowy.png 10 10 09 19 38 -5 0
-1 sprites/arctic_snowy.png 58 10 09 18 38 -5 13
-1 sprites/arctic_snowy.png 106 10 09 18 38 -31 13
-1 sprites/arctic_snowy.png 154 10 09 19 38 -31 0
-1 sprites/arctic_snowy.png 202 10 09 9 19 14 11
-1 sprites/arctic_snowy.png 234 10 09 9 16 -7 22
-1 sprites/arctic_snowy.png 266 10 09 9 19 -31 11
-1 sprites/arctic_snowy.png 298 10 09 9 16 -7 0
-1 sprites/arctic_snowy.png 330 10 09 6 8 25 13
-1 sprites/arctic_snowy.png 346 10 09 4 12 -5 27
-1 sprites/arctic_snowy.png 364 10 09 6 8 -31 13
-1 sprites/arctic_snowy.png 380 10 09 5 12 -5 0
-1 sprites/arctic_snowy.png 10 40 09 11 40 -7 0
-1 sprites/arctic_snowy.png 58 40 09 18 39 -6 5
-1 sprites/arctic_snowy.png 106 40 09 11 38 -31 12
-1 sprites/arctic_snowy.png 154 40 09 18 39 -31 0
-1 sprites/arctic_snowy.png 202 40 09 6 20 13 5
-1 sprites/arctic_snowy.png 234 40 09 7 13 -6 16
-1 sprites/arctic_snowy.png 266 40 09 6 20 -31 12
-1 sprites/arctic_snowy.png 298 40 09 7 13 -5 0
-1 sprites/arctic_snowy.png 330 40 09 5 8 25 6
-1 sprites/arctic_snowy.png 346 40 09 3 12 -5 20
-1 sprites/arctic_snowy.png 364 40 09 4 8 -31 13
-1 sprites/arctic_snowy.png 380 40 09 4 15 -7 0
-1 sprites/arctic_snowy.png 10 70 09 20 38 -5 -8
-1 sprites/arctic_snowy.png 58 70 09 26 38 -5 5
-1 sprites/arctic_snowy.png 106 70 09 20 37 -31 11
-1 sprites/arctic_snowy.png 154 70 09 27 38 -31 -8
-1 sprites/arctic_snowy.png 202 70 09 9 16 17 3
-1 sprites/arctic_snowy.png 234 70 09 9 15 -7 22
-1 sprites/arctic_snowy.png 266 70 09 9 16 -31 11
-1 sprites/arctic_snowy.png 298 70 09 9 15 -6 -8
-1 sprites/arctic_snowy.png 330 70 09 7 8 25 5
-1 sprites/arctic_snowy.png 346 70 09 5 10 -4 27
-1 sprites/arctic_snowy.png 364 70 09 7 8 -31 11
-1 sprites/arctic_snowy.png 380 70 09 6 12 -5 -8
-1 sprites/arctic_snowy.png 10 100 09 18 39 -6 0
-1 sprites/arctic_snowy.png 58 100 09 11 38 -5 12
-1 sprites/arctic_snowy.png 106 100 09 18 39 -31 5
-1 sprites/arctic_snowy.png 154 100 09 11 40 -32 0
-1 sprites/arctic_snowy.png 202 100 09 6 20 13 12
-1 sprites/arctic_snowy.png 234 100 09 7 13 -5 16
-1 sprites/arctic_snowy.png 266 100 09 6 20 -31 5
-1 sprites/arctic_snowy.png 298 100 09 7 13 -6 0
-1 sprites/arctic_snowy.png 330 100 09 4 8 26 13
-1 sprites/arctic_snowy.png 346 100 09 3 12 -5 20
-1 sprites/arctic_snowy.png 364 100 09 5 8 -31 6
-1 sprites/arctic_snowy.png 380 100 09 4 15 -6 0
-1 sprites/arctic_snowy.png 10 130 09 27 38 -5 -8
-1 sprites/arctic_snowy.png 58 130 09 20 37 -4 11
-1 sprites/arctic_snowy.png 106 130 09 26 37 -31 5
-1 sprites/arctic_snowy.png 154 130 09 20 38 -31 -8
-1 sprites/arctic_snowy.png 202 130 09 9 16 17 11
-1 sprites/arctic_snowy.png 234 130 09 9 15 -6 22
-1 sprites/arctic_snowy.png 266 130 09 9 16 -31 3
-1 sprites/arctic_snowy.png 298 130 09 9 15 -7 -8
-1 sprites/arctic_snowy.png 330 130 09 7 8 25 11
-1 sprites/arctic_snowy.png 346 130 09 5 10 -4 26
-1 sprites/arctic_snowy.png 364 130 09 7 8 -31 5
-1 sprites/arctic_snowy.png 380 130 09 6 12 -5 -8
-1 * 7 02 05 30 01 00 00 00
-1 * 4 01 05 01 3C
-1 sprites/arctic_brown.png 10 10 09 19 38 -5 0
-1 sprites/arctic_brown.png 58 10 09 18 38 -5 13
-1 sprites/arctic_brown.png 106 10 09 18 38 -31 13
-1 sprites/arctic_brown.png 154 10 09 19 38 -31 0
-1 sprites/arctic_brown.png 202 10 09 9 19 14 11
-1 sprites/arctic_brown.png 234 10 09 9 16 -7 22
-1 sprites/arctic_brown.png 266 10 09 9 19 -31 11
-1 sprites/arctic_brown.png 298 10 09 9 16 -7 0
-1 sprites/arctic_brown.png 330 10 09 6 8 25 13
-1 sprites/arctic_brown.png 346 10 09 4 12 -5 27
-1 sprites/arctic_brown.png 364 10 09 6 8 -31 13
-1 sprites/arctic_brown.png 380 10 09 5 12 -5 0
-1 sprites/arctic_brown.png 10 40 09 11 40 -7 0
-1 sprites/arctic_brown.png 58 40 09 18 39 -6 5
-1 sprites/arctic_brown.png 106 40 09 11 38 -31 12
-1 sprites/arctic_brown.png 154 40 09 18 39 -31 0
-1 sprites/arctic_brown.png 202 40 09 6 20 13 5
-1 sprites/arctic_brown.png 234 40 09 7 13 -6 16
-1 sprites/arctic_brown.png 266 40 09 6 20 -31 12
-1 sprites/arctic_brown.png 298 40 09 7 13 -5 0
-1 sprites/arctic_brown.png 330 40 09 5 8 25 6
-1 sprites/arctic_brown.png 346 40 09 3 12 -5 20
-1 sprites/arctic_brown.png 364 40 09 4 8 -31 13
-1 sprites/arctic_brown.png 380 40 09 4 15 -7 0
-1 sprites/arctic_brown.png 10 70 09 20 38 -5 -8
-1 sprites/arctic_brown.png 58 70 09 26 38 -5 5
-1 sprites/arctic_brown.png 106 70 09 20 37 -31 11
-1 sprites/arctic_brown.png 154 70 09 27 38 -31 -8
-1 sprites/arctic_brown.png 202 70 09 9 16 17 3
-1 sprites/arctic_brown.png 234 70 09 9 15 -7 22
-1 sprites/arctic_brown.png 266 70 09 9 16 -31 11
-1 sprites/arctic_brown.png 298 70 09 9 15 -6 -8
-1 sprites/arctic_brown.png 330 70 09 7 8 25 5
-1 sprites/arctic_brown.png 346 70 09 5 10 -4 27
-1 sprites/arctic_brown.png 364 70 09 7 8 -31 11
-1 sprites/arctic_brown.png 380 70 09 6 12 -5 -8
-1 sprites/arctic_brown.png 10 100 09 18 39 -6 0
-1 sprites/arctic_brown.png 58 100 09 11 38 -5 12
-1 sprites/arctic_brown.png 106 100 09 18 39 -31 5
-1 sprites/arctic_brown.png 154 100 09 11 40 -32 0
-1 sprites/arctic_brown.png 202 100 09 6 20 13 12
-1 sprites/arctic_brown.png 234 100 09 7 13 -5 16
-1 sprites/arctic_brown.png 266 100 09 6 20 -31 5
-1 sprites/arctic_brown.png 298 100 09 7 13 -6 0
-1 sprites/arctic_brown.png 330 100 09 4 8 26 13
-1 sprites/arctic_brown.png 346 100 09 3 12 -5 20
-1 sprites/arctic_brown.png 364 100 09 5 8 -31 6
-1 sprites/arctic_brown.png 380 100 09 4 15 -6 0
-1 sprites/arctic_brown.png 10 130 09 27 38 -5 -8
-1 sprites/arctic_brown.png 58 130 09 20 37 -4 11
-1 sprites/arctic_brown.png 106 130 09 26 37 -31 5
-1 sprites/arctic_brown.png 154 130 09 20 38 -31 -8
-1 sprites/arctic_brown.png 202 130 09 9 16 17 11
-1 sprites/arctic_brown.png 234 130 09 9 15 -6 22
-1 sprites/arctic_brown.png 266 130 09 9 16 -31 3
-1 sprites/arctic_brown.png 298 130 09 9 15 -7 -8
-1 sprites/arctic_brown.png 330 130 09 7 8 25 11
-1 sprites/arctic_brown.png 346 130 09 5 10 -4 26
-1 sprites/arctic_brown.png 364 130 09 7 8 -31 5
-1 sprites/arctic_brown.png 380 130 09 6 12 -5 -8
-1 * 7 02 05 31 01 00 00 00
-1 * 4 01 05 01 3C
-1 sprites/arctic_snowy.png 10 210 09 19 38 -5 0
-1 sprites/arctic_snowy.png 58 210 09 18 38 -5 13
-1 sprites/arctic_snowy.png 106 210 09 18 38 -31 13
-1 sprites/arctic_snowy.png 154 210 09 19 38 -31 0
-1 sprites/arctic_snowy.png 202 210 09 9 19 14 11
-1 sprites/arctic_snowy.png 234 210 09 9 16 -7 22
-1 sprites/arctic_snowy.png 266 210 09 9 19 -31 11
-1 sprites/arctic_snowy.png 298 210 09 9 16 -7 0
-1 sprites/arctic_snowy.png 330 210 09 6 8 25 13
-1 sprites/arctic_snowy.png 346 210 09 4 12 -5 27
-1 sprites/arctic_snowy.png 364 210 09 6 8 -31 13
-1 sprites/arctic_snowy.png 380 210 09 5 12 -5 0
-1 sprites/arctic_snowy.png 10 240 09 11 40 -7 0
-1 sprites/arctic_snowy.png 58 240 09 18 39 -6 5
-1 sprites/arctic_snowy.png 106 240 09 11 38 -31 12
-1 sprites/arctic_snowy.png 154 240 09 18 39 -31 0
-1 sprites/arctic_snowy.png 202 240 09 6 20 13 5
-1 sprites/arctic_snowy.png 234 240 09 7 13 -6 16
-1 sprites/arctic_snowy.png 266 240 09 6 20 -31 12
-1 sprites/arctic_snowy.png 298 240 09 7 13 -5 0
-1 sprites/arctic_snowy.png 330 240 09 5 8 25 6
-1 sprites/arctic_snowy.png 346 240 09 3 12 -5 20
-1 sprites/arctic_snowy.png 364 240 09 4 8 -31 13
-1 sprites/arctic_snowy.png 380 240 09 4 15 -7 0
-1 sprites/arctic_snowy.png 10 270 09 20 38 -5 -8
-1 sprites/arctic_snowy.png 58 270 09 26 38 -5 5
-1 sprites/arctic_snowy.png 106 270 09 20 37 -31 11
-1 sprites/arctic_snowy.png 154 270 09 27 38 -31 -8
-1 sprites/arctic_snowy.png 202 270 09 9 16 17 3
-1 sprites/arctic_snowy.png 234 270 09 9 15 -7 22
-1 sprites/arctic_snowy.png 266 270 09 9 16 -31 11
-1 sprites/arctic_snowy.png 298 270 09 9 15 -6 -8
-1 sprites/arctic_snowy.png 330 270 09 7 8 25 5
-1 sprites/arctic_snowy.png 346 270 09 5 10 -4 27
-1 sprites/arctic_snowy.png 364 270 09 7 8 -31 11
-1 sprites/arctic_snowy.png 380 270 09 6 12 -5 -8
-1 sprites/arctic_snowy.png 10 300 09 18 39 -6 0
-1 sprites/arctic_snowy.png 58 300 09 11 38 -5 12
-1 sprites/arctic_snowy.png 106 300 09 18 39 -31 5
-1 sprites/arctic_snowy.png 154 300 09 11 40 -32 0
-1 sprites/arctic_snowy.png 202 300 09 6 20 13 12
-1 sprites/arctic_snowy.png 234 300 09 7 13 -5 16
-1 sprites/arctic_snowy.png 266 300 09 6 20 -31 5
-1 sprites/arctic_snowy.png 298 300 09 7 13 -6 0
-1 sprites/arctic_snowy.png 330 300 09 4 8 26 13
-1 sprites/arctic_snowy.png 346 300 09 3 12 -5 20
-1 sprites/arctic_snowy.png 364 300 09 5 8 -31 6
-1 sprites/arctic_snowy.png 380 300 09 4 15 -6 0
-1 sprites/arctic_snowy.png 10 330 09 27 38 -5 -8
-1 sprites/arctic_snowy.png 58 330 09 20 37 -4 11
-1 sprites/arctic_snowy.png 106 330 09 26 37 -31 5
-1 sprites/arctic_snowy.png 154 330 09 20 38 -31 -8
-1 sprites/arctic_snowy.png 202 330 09 9 16 17 11
-1 sprites/arctic_snowy.png 234 330 09 9 15 -6 22
-1 sprites/arctic_snowy.png 266 330 09 9 16 -31 3
-1 sprites/arctic_snowy.png 298 330 09 9 15 -7 -8
-1 sprites/arctic_snowy.png 330 330 09 7 8 25 11
-1 sprites/arctic_snowy.png 346 330 09 5 10 -4 26
-1 sprites/arctic_snowy.png 364 330 09 7 8 -31 5
-1 sprites/arctic_snowy.png 380 330 09 6 12 -5 -8
-1 * 7 02 05 32 01 00 00 00
-1 * 4 01 05 01 3C
-1 sprites/arctic_brown.png 10 210 09 19 38 -5 0
-1 sprites/arctic_brown.png 58 210 09 18 38 -5 13
-1 sprites/arctic_brown.png 106 210 09 18 38 -31 13
-1 sprites/arctic_brown.png 154 210 09 19 38 -31 0
-1 sprites/arctic_brown.png 202 210 09 9 19 14 11
-1 sprites/arctic_brown.png 234 210 09 9 16 -7 22
-1 sprites/arctic_brown.png 266 210 09 9 19 -31 11
-1 sprites/arctic_brown.png 298 210 09 9 16 -7 0
-1 sprites/arctic_brown.png 330 210 09 6 8 25 13
-1 sprites/arctic_brown.png 346 210 09 4 12 -5 27
-1 sprites/arctic_brown.png 364 210 09 6 8 -31 13
-1 sprites/arctic_brown.png 380 210 09 5 12 -5 0
-1 sprites/arctic_brown.png 10 240 09 11 40 -7 0
-1 sprites/arctic_brown.png 58 240 09 18 39 -6 5
-1 sprites/arctic_brown.png 106 240 09 11 38 -31 12
-1 sprites/arctic_brown.png 154 240 09 18 39 -31 0
-1 sprites/arctic_brown.png 202 240 09 6 20 13 5
-1 sprites/arctic_brown.png 234 240 09 7 13 -6 16
-1 sprites/arctic_brown.png 266 240 09 6 20 -31 12
-1 sprites/arctic_brown.png 298 240 09 7 13 -5 0
-1 sprites/arctic_brown.png 330 240 09 5 8 25 6
-1 sprites/arctic_brown.png 346 240 09 3 12 -5 20
-1 sprites/arctic_brown.png 364 240 09 4 8 -31 13
-1 sprites/arctic_brown.png 380 240 09 4 15 -7 0
-1 sprites/arctic_brown.png 10 270 09 20 38 -5 -8
-1 sprites/arctic_brown.png 58 270 09 26 38 -5 5
-1 sprites/arctic_brown.png 106 270 09 20 37 -31 11
-1 sprites/arctic_brown.png 154 270 09 27 38 -31 -8
-1 sprites/arctic_brown.png 202 270 09 9 16 17 3
-1 sprites/arctic_brown.png 234 270 09 9 15 -7 22
-1 sprites/arctic_brown.png 266 270 09 9 16 -31 11
-1 sprites/arctic_brown.png 298 270 09 9 15 -6 -8
-1 sprites/arctic_brown.png 330 270 09 7 8 25 5
-1 sprites/arctic_brown.png 346 270 09 5 10 -4 27
-1 sprites/arctic_brown.png 364 270 09 7 8 -31 11
-1 sprites/arctic_brown.png 380 270 09 6 12 -5 -8
-1 sprites/arctic_brown.png 10 300 09 18 39 -6 0
-1 sprites/arctic_brown.png 58 300 09 11 38 -5 12
-1 sprites/arctic_brown.png 106 300 09 18 39 -31 5
-1 sprites/arctic_brown.png 154 300 09 11 40 -32 0
-1 sprites/arctic_brown.png 202 300 09 6 20 13 12
-1 sprites/arctic_brown.png 234 300 09 7 13 -5 16
-1 sprites/arctic_brown.png 266 300 09 6 20 -31 5
-1 sprites/arctic_brown.png 298 300 09 7 13 -6 0
-1 sprites/arctic_brown.png 330 300 09 4 8 26 13
-1 sprites/arctic_brown.png 346 300 09 3 12 -5 20
-1 sprites/arctic_brown.png 364 300 09 5 8 -31 6
-1 sprites/arctic_brown.png 380 300 09 4 15 -6 0
-1 sprites/arctic_brown.png 10 330 09 27 38 -5 -8
-1 sprites/arctic_brown.png 58 330 09 20 37 -4 11
-1 sprites/arctic_brown.png 106 330 09 26 37 -31 5
-1 sprites/arctic_brown.png 154 330 09 20 38 -31 -8
-1 sprites/arctic_brown.png 202 330 09 9 16 17 11
-1 sprites/arctic_brown.png 234 330 09 9 15 -6 22
-1 sprites/arctic_brown.png 266 330 09 9 16 -31 3
-1 sprites/arctic_brown.png 298 330 09 9 15 -7 -8
-1 sprites/arctic_brown.png 330 330 09 7 8 25 11
-1 sprites/arctic_brown.png 346 330 09 5 10 -4 26
-1 sprites/arctic_brown.png 364 330 09 7 8 -31 5
-1 sprites/arctic_brown.png 380 330 09 6 12 -5 -8
-1 * 7 02 05 33 01 00 00 00
-1 * 14 02 05 34 81 81 00 FF 01 30 00 04 04 31 00
-1 * 14 02 05 35 81 81 00 FF 01 32 00 04 04 33 00
-1 * 14 02 05 36 81 80 00 FF 01 34 00 00 00 35 00
-1 * 6 07 83 01 \7! 01 01
-1 * 7 03 05 01 06 00 36 00

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,139 @@
//
// $Id$
//
// This file is part of OpenTTD.
// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
//
-1 * 0 0C "Rapid graphics"
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 10 09 23 64 -31 0
-1 sprites/rapids.png 90 10 09 39 64 -31 -8
-1 sprites/rapids.png 170 10 09 23 64 -31 0
-1 sprites/rapids.png 250 10 09 39 64 -31 -8
-1 * 7 02 05 00 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 60 09 23 64 -31 0
-1 sprites/rapids.png 90 60 09 39 64 -31 -8
-1 sprites/rapids.png 170 60 09 23 64 -31 0
-1 sprites/rapids.png 250 60 09 39 64 -31 -8
-1 * 7 02 05 01 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 110 09 23 64 -31 0
-1 sprites/rapids.png 90 110 09 39 64 -31 -8
-1 sprites/rapids.png 170 110 09 23 64 -31 0
-1 sprites/rapids.png 250 110 09 39 64 -31 -8
-1 * 7 02 05 02 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 160 09 23 64 -31 0
-1 sprites/rapids.png 90 160 09 39 64 -31 -8
-1 sprites/rapids.png 170 160 09 23 64 -31 0
-1 sprites/rapids.png 250 160 09 39 64 -31 -8
-1 * 7 02 05 03 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 210 09 23 64 -31 0
-1 sprites/rapids.png 90 210 09 39 64 -31 -8
-1 sprites/rapids.png 170 210 09 23 64 -31 0
-1 sprites/rapids.png 250 210 09 39 64 -31 -8
-1 * 7 02 05 04 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 260 09 23 64 -31 0
-1 sprites/rapids.png 90 260 09 39 64 -31 -8
-1 sprites/rapids.png 170 260 09 23 64 -31 0
-1 sprites/rapids.png 250 260 09 39 64 -31 -8
-1 * 7 02 05 05 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 310 09 23 64 -31 0
-1 sprites/rapids.png 90 310 09 39 64 -31 -8
-1 sprites/rapids.png 170 310 09 23 64 -31 0
-1 sprites/rapids.png 250 310 09 39 64 -31 -8
-1 * 7 02 05 06 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 360 09 23 64 -31 0
-1 sprites/rapids.png 90 360 09 39 64 -31 -8
-1 sprites/rapids.png 170 360 09 23 64 -31 0
-1 sprites/rapids.png 250 360 09 39 64 -31 -8
-1 * 7 02 05 07 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 410 09 23 64 -31 0
-1 sprites/rapids.png 90 410 09 39 64 -31 -8
-1 sprites/rapids.png 170 410 09 23 64 -31 0
-1 sprites/rapids.png 250 410 09 39 64 -31 -8
-1 * 7 02 05 08 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 460 09 23 64 -31 0
-1 sprites/rapids.png 90 460 09 39 64 -31 -8
-1 sprites/rapids.png 170 460 09 23 64 -31 0
-1 sprites/rapids.png 250 460 09 39 64 -31 -8
-1 * 7 02 05 09 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 510 09 23 64 -31 0
-1 sprites/rapids.png 90 510 09 39 64 -31 -8
-1 sprites/rapids.png 170 510 09 23 64 -31 0
-1 sprites/rapids.png 250 510 09 39 64 -31 -8
-1 * 7 02 05 0A 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 560 09 23 64 -31 0
-1 sprites/rapids.png 90 560 09 39 64 -31 -8
-1 sprites/rapids.png 170 560 09 23 64 -31 0
-1 sprites/rapids.png 250 560 09 39 64 -31 -8
-1 * 7 02 05 0B 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 610 09 23 64 -31 0
-1 sprites/rapids.png 90 610 09 39 64 -31 -8
-1 sprites/rapids.png 170 610 09 23 64 -31 0
-1 sprites/rapids.png 250 610 09 39 64 -31 -8
-1 * 7 02 05 0C 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 660 09 23 64 -31 0
-1 sprites/rapids.png 90 660 09 39 64 -31 -8
-1 sprites/rapids.png 170 660 09 23 64 -31 0
-1 sprites/rapids.png 250 660 09 39 64 -31 -8
-1 * 7 02 05 0D 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 710 09 23 64 -31 0
-1 sprites/rapids.png 90 710 09 39 64 -31 -8
-1 sprites/rapids.png 170 710 09 23 64 -31 0
-1 sprites/rapids.png 250 710 09 39 64 -31 -8
-1 * 7 02 05 0E 01 00 00 00
-1 * 4 01 05 01 04
-1 sprites/rapids.png 10 760 09 23 64 -31 0
-1 sprites/rapids.png 90 760 09 39 64 -31 -8
-1 sprites/rapids.png 170 760 09 23 64 -31 0
-1 sprites/rapids.png 250 760 09 39 64 -31 -8
-1 * 7 02 05 0F 01 00 00 00
-1 * 39 02 05 10 80 00 01 10
00 00
01 00
02 00
03 00
04 00
05 00
06 00
07 00
08 00
09 00
0A 00
0B 00
0C 00
0D 00
0E 00
0F 00
-1 * 7 03 05 01 05 00 10 00

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,146 @@
//
// $Id$
//
// This file is part of OpenTTD.
// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
//
-1 * 0 0C "Temperate river graphics by andythenorth (Andrew Parkhouse)"
-1 * 4 01 05 01 3C
-1 sprites/temperate.png 10 10 09 19 38 -5 0
-1 sprites/temperate.png 58 10 09 18 38 -5 13
-1 sprites/temperate.png 106 10 09 18 38 -31 13
-1 sprites/temperate.png 154 10 09 19 38 -31 0
-1 sprites/temperate.png 202 10 09 9 19 14 11
-1 sprites/temperate.png 234 10 09 9 16 -7 22
-1 sprites/temperate.png 266 10 09 9 19 -31 11
-1 sprites/temperate.png 298 10 09 9 16 -7 0
-1 sprites/temperate.png 330 10 09 6 8 25 13
-1 sprites/temperate.png 346 10 09 4 12 -5 27
-1 sprites/temperate.png 364 10 09 6 8 -31 13
-1 sprites/temperate.png 380 10 09 5 12 -5 0
-1 sprites/temperate.png 10 40 09 11 40 -7 0
-1 sprites/temperate.png 58 40 09 18 39 -6 5
-1 sprites/temperate.png 106 40 09 11 38 -31 12
-1 sprites/temperate.png 154 40 09 18 39 -31 0
-1 sprites/temperate.png 202 40 09 6 20 13 5
-1 sprites/temperate.png 234 40 09 7 13 -6 16
-1 sprites/temperate.png 266 40 09 6 20 -31 12
-1 sprites/temperate.png 298 40 09 7 13 -5 0
-1 sprites/temperate.png 330 40 09 5 8 25 6
-1 sprites/temperate.png 346 40 09 3 12 -5 20
-1 sprites/temperate.png 364 40 09 4 8 -31 13
-1 sprites/temperate.png 380 40 09 4 15 -7 0
-1 sprites/temperate.png 10 70 09 20 38 -5 -8
-1 sprites/temperate.png 58 70 09 26 38 -5 5
-1 sprites/temperate.png 106 70 09 20 37 -31 11
-1 sprites/temperate.png 154 70 09 27 38 -31 -8
-1 sprites/temperate.png 202 70 09 9 16 17 3
-1 sprites/temperate.png 234 70 09 9 15 -7 22
-1 sprites/temperate.png 266 70 09 9 16 -31 11
-1 sprites/temperate.png 298 70 09 9 15 -6 -8
-1 sprites/temperate.png 330 70 09 7 8 25 5
-1 sprites/temperate.png 346 70 09 5 10 -4 27
-1 sprites/temperate.png 364 70 09 7 8 -31 11
-1 sprites/temperate.png 380 70 09 6 12 -5 -8
-1 sprites/temperate.png 10 100 09 18 39 -6 0
-1 sprites/temperate.png 58 100 09 11 38 -5 12
-1 sprites/temperate.png 106 100 09 18 39 -31 5
-1 sprites/temperate.png 154 100 09 11 40 -32 0
-1 sprites/temperate.png 202 100 09 6 20 13 12
-1 sprites/temperate.png 234 100 09 7 13 -5 16
-1 sprites/temperate.png 266 100 09 6 20 -31 5
-1 sprites/temperate.png 298 100 09 7 13 -6 0
-1 sprites/temperate.png 330 100 09 4 8 26 13
-1 sprites/temperate.png 346 100 09 3 12 -5 20
-1 sprites/temperate.png 364 100 09 5 8 -31 6
-1 sprites/temperate.png 380 100 09 4 15 -6 0
-1 sprites/temperate.png 10 130 09 27 38 -5 -8
-1 sprites/temperate.png 58 130 09 20 37 -4 11
-1 sprites/temperate.png 106 130 09 26 37 -31 5
-1 sprites/temperate.png 154 130 09 20 38 -31 -8
-1 sprites/temperate.png 202 130 09 9 16 17 11
-1 sprites/temperate.png 234 130 09 9 15 -6 22
-1 sprites/temperate.png 266 130 09 9 16 -31 3
-1 sprites/temperate.png 298 130 09 9 15 -7 -8
-1 sprites/temperate.png 330 130 09 7 8 25 11
-1 sprites/temperate.png 346 130 09 5 10 -4 26
-1 sprites/temperate.png 364 130 09 7 8 -31 5
-1 sprites/temperate.png 380 130 09 6 12 -5 -8
-1 * 7 02 05 20 01 00 00 00
-1 * 4 01 05 01 3C
-1 sprites/temperate.png 10 210 09 19 38 -5 0
-1 sprites/temperate.png 58 210 09 18 38 -5 13
-1 sprites/temperate.png 106 210 09 18 38 -31 13
-1 sprites/temperate.png 154 210 09 19 38 -31 0
-1 sprites/temperate.png 202 210 09 9 19 14 11
-1 sprites/temperate.png 234 210 09 9 16 -7 22
-1 sprites/temperate.png 266 210 09 9 19 -31 11
-1 sprites/temperate.png 298 210 09 9 16 -7 0
-1 sprites/temperate.png 330 210 09 6 8 25 13
-1 sprites/temperate.png 346 210 09 4 12 -5 27
-1 sprites/temperate.png 364 210 09 6 8 -31 13
-1 sprites/temperate.png 380 210 09 5 12 -5 0
-1 sprites/temperate.png 10 240 09 11 40 -7 0
-1 sprites/temperate.png 58 240 09 18 39 -6 5
-1 sprites/temperate.png 106 240 09 11 38 -31 12
-1 sprites/temperate.png 154 240 09 18 39 -31 0
-1 sprites/temperate.png 202 240 09 6 20 13 5
-1 sprites/temperate.png 234 240 09 7 13 -6 16
-1 sprites/temperate.png 266 240 09 6 20 -31 12
-1 sprites/temperate.png 298 240 09 7 13 -5 0
-1 sprites/temperate.png 330 240 09 5 8 25 6
-1 sprites/temperate.png 346 240 09 3 12 -5 20
-1 sprites/temperate.png 364 240 09 4 8 -31 13
-1 sprites/temperate.png 380 240 09 4 15 -7 0
-1 sprites/temperate.png 10 270 09 20 38 -5 -8
-1 sprites/temperate.png 58 270 09 26 38 -5 5
-1 sprites/temperate.png 106 270 09 20 37 -31 11
-1 sprites/temperate.png 154 270 09 27 38 -31 -8
-1 sprites/temperate.png 202 270 09 9 16 17 3
-1 sprites/temperate.png 234 270 09 9 15 -7 22
-1 sprites/temperate.png 266 270 09 9 16 -31 11
-1 sprites/temperate.png 298 270 09 9 15 -6 -8
-1 sprites/temperate.png 330 270 09 7 8 25 5
-1 sprites/temperate.png 346 270 09 5 10 -4 27
-1 sprites/temperate.png 364 270 09 7 8 -31 11
-1 sprites/temperate.png 380 270 09 6 12 -5 -8
-1 sprites/temperate.png 10 300 09 18 39 -6 0
-1 sprites/temperate.png 58 300 09 11 38 -5 12
-1 sprites/temperate.png 106 300 09 18 39 -31 5
-1 sprites/temperate.png 154 300 09 11 40 -32 0
-1 sprites/temperate.png 202 300 09 6 20 13 12
-1 sprites/temperate.png 234 300 09 7 13 -5 16
-1 sprites/temperate.png 266 300 09 6 20 -31 5
-1 sprites/temperate.png 298 300 09 7 13 -6 0
-1 sprites/temperate.png 330 300 09 4 8 26 13
-1 sprites/temperate.png 346 300 09 3 12 -5 20
-1 sprites/temperate.png 364 300 09 5 8 -31 6
-1 sprites/temperate.png 380 300 09 4 15 -6 0
-1 sprites/temperate.png 10 330 09 27 38 -5 -8
-1 sprites/temperate.png 58 330 09 20 37 -4 11
-1 sprites/temperate.png 106 330 09 26 37 -31 5
-1 sprites/temperate.png 154 330 09 20 38 -31 -8
-1 sprites/temperate.png 202 330 09 9 16 17 11
-1 sprites/temperate.png 234 330 09 9 15 -6 22
-1 sprites/temperate.png 266 330 09 9 16 -31 3
-1 sprites/temperate.png 298 330 09 9 15 -7 -8
-1 sprites/temperate.png 330 330 09 7 8 25 11
-1 sprites/temperate.png 346 330 09 5 10 -4 26
-1 sprites/temperate.png 364 330 09 7 8 -31 5
-1 sprites/temperate.png 380 330 09 6 12 -5 -8
-1 * 7 02 05 21 01 00 00 00
-1 * 14 02 05 22 81 80 00 FF 01 20 00 00 00 21 00
-1 * 6 07 83 01 \7! 00 01
-1 * 7 03 05 01 06 00 22 00

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,146 @@
//
// $Id$
//
// This file is part of OpenTTD.
// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
//
-1 * 0 0C "Toyland river graphics by andythenorth (Andrew Parkhouse)"
-1 * 4 01 05 01 3C
-1 sprites/toyland.png 10 10 09 19 38 -5 0
-1 sprites/toyland.png 58 10 09 18 38 -5 13
-1 sprites/toyland.png 106 10 09 18 38 -31 13
-1 sprites/toyland.png 154 10 09 19 38 -31 0
-1 sprites/toyland.png 202 10 09 9 19 14 11
-1 sprites/toyland.png 234 10 09 9 16 -7 22
-1 sprites/toyland.png 266 10 09 9 19 -31 11
-1 sprites/toyland.png 298 10 09 9 16 -7 0
-1 sprites/toyland.png 330 10 09 6 8 25 13
-1 sprites/toyland.png 346 10 09 4 12 -5 27
-1 sprites/toyland.png 364 10 09 6 8 -31 13
-1 sprites/toyland.png 380 10 09 5 12 -5 0
-1 sprites/toyland.png 10 40 09 11 40 -7 0
-1 sprites/toyland.png 58 40 09 18 39 -6 5
-1 sprites/toyland.png 106 40 09 11 38 -31 12
-1 sprites/toyland.png 154 40 09 18 39 -31 0
-1 sprites/toyland.png 202 40 09 6 20 13 5
-1 sprites/toyland.png 234 40 09 7 13 -6 16
-1 sprites/toyland.png 266 40 09 6 20 -31 12
-1 sprites/toyland.png 298 40 09 7 13 -5 0
-1 sprites/toyland.png 330 40 09 5 8 25 6
-1 sprites/toyland.png 346 40 09 3 12 -5 20
-1 sprites/toyland.png 364 40 09 4 8 -31 13
-1 sprites/toyland.png 380 40 09 4 15 -7 0
-1 sprites/toyland.png 10 70 09 20 38 -5 -8
-1 sprites/toyland.png 58 70 09 26 38 -5 5
-1 sprites/toyland.png 106 70 09 20 37 -31 11
-1 sprites/toyland.png 154 70 09 27 38 -31 -8
-1 sprites/toyland.png 202 70 09 9 16 17 3
-1 sprites/toyland.png 234 70 09 9 15 -7 22
-1 sprites/toyland.png 266 70 09 9 16 -31 11
-1 sprites/toyland.png 298 70 09 9 15 -6 -8
-1 sprites/toyland.png 330 70 09 7 8 25 5
-1 sprites/toyland.png 346 70 09 5 10 -4 27
-1 sprites/toyland.png 364 70 09 7 8 -31 11
-1 sprites/toyland.png 380 70 09 6 12 -5 -8
-1 sprites/toyland.png 10 100 09 18 39 -6 0
-1 sprites/toyland.png 58 100 09 11 38 -5 12
-1 sprites/toyland.png 106 100 09 18 39 -31 5
-1 sprites/toyland.png 154 100 09 11 40 -32 0
-1 sprites/toyland.png 202 100 09 6 20 13 12
-1 sprites/toyland.png 234 100 09 7 13 -5 16
-1 sprites/toyland.png 266 100 09 6 20 -31 5
-1 sprites/toyland.png 298 100 09 7 13 -6 0
-1 sprites/toyland.png 330 100 09 4 8 26 13
-1 sprites/toyland.png 346 100 09 3 12 -5 20
-1 sprites/toyland.png 364 100 09 5 8 -31 6
-1 sprites/toyland.png 380 100 09 4 15 -6 0
-1 sprites/toyland.png 10 130 09 27 38 -5 -8
-1 sprites/toyland.png 58 130 09 20 37 -4 11
-1 sprites/toyland.png 106 130 09 26 37 -31 5
-1 sprites/toyland.png 154 130 09 20 38 -31 -8
-1 sprites/toyland.png 202 130 09 9 16 17 11
-1 sprites/toyland.png 234 130 09 9 15 -6 22
-1 sprites/toyland.png 266 130 09 9 16 -31 3
-1 sprites/toyland.png 298 130 09 9 15 -7 -8
-1 sprites/toyland.png 330 130 09 7 8 25 11
-1 sprites/toyland.png 346 130 09 5 10 -4 26
-1 sprites/toyland.png 364 130 09 7 8 -31 5
-1 sprites/toyland.png 380 130 09 6 12 -5 -8
-1 * 7 02 05 50 01 00 00 00
-1 * 4 01 05 01 3C
-1 sprites/toyland.png 10 210 09 19 38 -5 0
-1 sprites/toyland.png 58 210 09 18 38 -5 13
-1 sprites/toyland.png 106 210 09 18 38 -31 13
-1 sprites/toyland.png 154 210 09 19 38 -31 0
-1 sprites/toyland.png 202 210 09 9 19 14 11
-1 sprites/toyland.png 234 210 09 9 16 -7 22
-1 sprites/toyland.png 266 210 09 9 19 -31 11
-1 sprites/toyland.png 298 210 09 9 16 -7 0
-1 sprites/toyland.png 330 210 09 6 8 25 13
-1 sprites/toyland.png 346 210 09 4 12 -5 27
-1 sprites/toyland.png 364 210 09 6 8 -31 13
-1 sprites/toyland.png 380 210 09 5 12 -5 0
-1 sprites/toyland.png 10 240 09 11 40 -7 0
-1 sprites/toyland.png 58 240 09 18 39 -6 5
-1 sprites/toyland.png 106 240 09 11 38 -31 12
-1 sprites/toyland.png 154 240 09 18 39 -31 0
-1 sprites/toyland.png 202 240 09 6 20 13 5
-1 sprites/toyland.png 234 240 09 7 13 -6 16
-1 sprites/toyland.png 266 240 09 6 20 -31 12
-1 sprites/toyland.png 298 240 09 7 13 -5 0
-1 sprites/toyland.png 330 240 09 5 8 25 6
-1 sprites/toyland.png 346 240 09 3 12 -5 20
-1 sprites/toyland.png 364 240 09 4 8 -31 13
-1 sprites/toyland.png 380 240 09 4 15 -7 0
-1 sprites/toyland.png 10 270 09 20 38 -5 -8
-1 sprites/toyland.png 58 270 09 26 38 -5 5
-1 sprites/toyland.png 106 270 09 20 37 -31 11
-1 sprites/toyland.png 154 270 09 27 38 -31 -8
-1 sprites/toyland.png 202 270 09 9 16 17 3
-1 sprites/toyland.png 234 270 09 9 15 -7 22
-1 sprites/toyland.png 266 270 09 9 16 -31 11
-1 sprites/toyland.png 298 270 09 9 15 -6 -8
-1 sprites/toyland.png 330 270 09 7 8 25 5
-1 sprites/toyland.png 346 270 09 5 10 -4 27
-1 sprites/toyland.png 364 270 09 7 8 -31 11
-1 sprites/toyland.png 380 270 09 6 12 -5 -8
-1 sprites/toyland.png 10 300 09 18 39 -6 0
-1 sprites/toyland.png 58 300 09 11 38 -5 12
-1 sprites/toyland.png 106 300 09 18 39 -31 5
-1 sprites/toyland.png 154 300 09 11 40 -32 0
-1 sprites/toyland.png 202 300 09 6 20 13 12
-1 sprites/toyland.png 234 300 09 7 13 -5 16
-1 sprites/toyland.png 266 300 09 6 20 -31 5
-1 sprites/toyland.png 298 300 09 7 13 -6 0
-1 sprites/toyland.png 330 300 09 4 8 26 13
-1 sprites/toyland.png 346 300 09 3 12 -5 20
-1 sprites/toyland.png 364 300 09 5 8 -31 6
-1 sprites/toyland.png 380 300 09 4 15 -6 0
-1 sprites/toyland.png 10 330 09 27 38 -5 -8
-1 sprites/toyland.png 58 330 09 20 37 -4 11
-1 sprites/toyland.png 106 330 09 26 37 -31 5
-1 sprites/toyland.png 154 330 09 20 38 -31 -8
-1 sprites/toyland.png 202 330 09 9 16 17 11
-1 sprites/toyland.png 234 330 09 9 15 -6 22
-1 sprites/toyland.png 266 330 09 9 16 -31 3
-1 sprites/toyland.png 298 330 09 9 15 -7 -8
-1 sprites/toyland.png 330 330 09 7 8 25 11
-1 sprites/toyland.png 346 330 09 5 10 -4 26
-1 sprites/toyland.png 364 330 09 7 8 -31 5
-1 sprites/toyland.png 380 330 09 6 12 -5 -8
-1 * 7 02 05 51 01 00 00 00
-1 * 14 02 05 52 81 80 00 FF 01 50 00 00 00 51 00
-1 * 6 07 83 01 \7! 03 01
-1 * 7 03 05 01 06 00 52 00

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,282 @@
//
// $Id$
//
// This file is part of OpenTTD.
// OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
// OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
//
-1 * 0 0C "Tropic river graphics by andythenorth (Andrew Parkhouse)"
-1 * 4 01 05 01 3C
-1 sprites/tropic_desert.png 10 10 09 19 38 -5 0
-1 sprites/tropic_desert.png 58 10 09 18 38 -5 13
-1 sprites/tropic_desert.png 106 10 09 18 38 -31 13
-1 sprites/tropic_desert.png 154 10 09 19 38 -31 0
-1 sprites/tropic_desert.png 202 10 09 9 19 14 11
-1 sprites/tropic_desert.png 234 10 09 9 16 -7 22
-1 sprites/tropic_desert.png 266 10 09 9 19 -31 11
-1 sprites/tropic_desert.png 298 10 09 9 16 -7 0
-1 sprites/tropic_desert.png 330 10 09 6 8 25 13
-1 sprites/tropic_desert.png 346 10 09 4 12 -5 27
-1 sprites/tropic_desert.png 364 10 09 6 8 -31 13
-1 sprites/tropic_desert.png 380 10 09 5 12 -5 0
-1 sprites/tropic_desert.png 10 40 09 11 40 -7 0
-1 sprites/tropic_desert.png 58 40 09 18 39 -6 5
-1 sprites/tropic_desert.png 106 40 09 11 38 -31 12
-1 sprites/tropic_desert.png 154 40 09 18 39 -31 0
-1 sprites/tropic_desert.png 202 40 09 6 20 13 5
-1 sprites/tropic_desert.png 234 40 09 7 13 -6 16
-1 sprites/tropic_desert.png 266 40 09 6 20 -31 12
-1 sprites/tropic_desert.png 298 40 09 7 13 -5 0
-1 sprites/tropic_desert.png 330 40 09 5 8 25 6
-1 sprites/tropic_desert.png 346 40 09 3 12 -5 20
-1 sprites/tropic_desert.png 364 40 09 4 8 -31 13
-1 sprites/tropic_desert.png 380 40 09 4 15 -7 0
-1 sprites/tropic_desert.png 10 70 09 20 38 -5 -8
-1 sprites/tropic_desert.png 58 70 09 26 38 -5 5
-1 sprites/tropic_desert.png 106 70 09 20 37 -31 11
-1 sprites/tropic_desert.png 154 70 09 27 38 -31 -8
-1 sprites/tropic_desert.png 202 70 09 9 16 17 3
-1 sprites/tropic_desert.png 234 70 09 9 15 -7 22
-1 sprites/tropic_desert.png 266 70 09 9 16 -31 11
-1 sprites/tropic_desert.png 298 70 09 9 15 -6 -8
-1 sprites/tropic_desert.png 330 70 09 7 8 25 5
-1 sprites/tropic_desert.png 346 70 09 5 10 -4 27
-1 sprites/tropic_desert.png 364 70 09 7 8 -31 11
-1 sprites/tropic_desert.png 380 70 09 6 12 -5 -8
-1 sprites/tropic_desert.png 10 100 09 18 39 -6 0
-1 sprites/tropic_desert.png 58 100 09 11 38 -5 12
-1 sprites/tropic_desert.png 106 100 09 18 39 -31 5
-1 sprites/tropic_desert.png 154 100 09 11 40 -32 0
-1 sprites/tropic_desert.png 202 100 09 6 20 13 12
-1 sprites/tropic_desert.png 234 100 09 7 13 -5 16
-1 sprites/tropic_desert.png 266 100 09 6 20 -31 5
-1 sprites/tropic_desert.png 298 100 09 7 13 -6 0
-1 sprites/tropic_desert.png 330 100 09 4 8 26 13
-1 sprites/tropic_desert.png 346 100 09 3 12 -5 20
-1 sprites/tropic_desert.png 364 100 09 5 8 -31 6
-1 sprites/tropic_desert.png 380 100 09 4 15 -6 0
-1 sprites/tropic_desert.png 10 130 09 27 38 -5 -8
-1 sprites/tropic_desert.png 58 130 09 20 37 -4 11
-1 sprites/tropic_desert.png 106 130 09 26 37 -31 5
-1 sprites/tropic_desert.png 154 130 09 20 38 -31 -8
-1 sprites/tropic_desert.png 202 130 09 9 16 17 11
-1 sprites/tropic_desert.png 234 130 09 9 15 -6 22
-1 sprites/tropic_desert.png 266 130 09 9 16 -31 3
-1 sprites/tropic_desert.png 298 130 09 9 15 -7 -8
-1 sprites/tropic_desert.png 330 130 09 7 8 25 11
-1 sprites/tropic_desert.png 346 130 09 5 10 -4 26
-1 sprites/tropic_desert.png 364 130 09 7 8 -31 5
-1 sprites/tropic_desert.png 380 130 09 6 12 -5 -8
-1 * 7 02 05 40 01 00 00 00
-1 * 4 01 05 01 3C
-1 sprites/tropic_forest.png 10 10 09 19 38 -5 0
-1 sprites/tropic_forest.png 58 10 09 18 38 -5 13
-1 sprites/tropic_forest.png 106 10 09 18 38 -31 13
-1 sprites/tropic_forest.png 154 10 09 19 38 -31 0
-1 sprites/tropic_forest.png 202 10 09 9 19 14 11
-1 sprites/tropic_forest.png 234 10 09 9 16 -7 22
-1 sprites/tropic_forest.png 266 10 09 9 19 -31 11
-1 sprites/tropic_forest.png 298 10 09 9 16 -7 0
-1 sprites/tropic_forest.png 330 10 09 6 8 25 13
-1 sprites/tropic_forest.png 346 10 09 4 12 -5 27
-1 sprites/tropic_forest.png 364 10 09 6 8 -31 13
-1 sprites/tropic_forest.png 380 10 09 5 12 -5 0
-1 sprites/tropic_forest.png 10 40 09 11 40 -7 0
-1 sprites/tropic_forest.png 58 40 09 18 39 -6 5
-1 sprites/tropic_forest.png 106 40 09 11 38 -31 12
-1 sprites/tropic_forest.png 154 40 09 18 39 -31 0
-1 sprites/tropic_forest.png 202 40 09 6 20 13 5
-1 sprites/tropic_forest.png 234 40 09 7 13 -6 16
-1 sprites/tropic_forest.png 266 40 09 6 20 -31 12
-1 sprites/tropic_forest.png 298 40 09 7 13 -5 0
-1 sprites/tropic_forest.png 330 40 09 5 8 25 6
-1 sprites/tropic_forest.png 346 40 09 3 12 -5 20
-1 sprites/tropic_forest.png 364 40 09 4 8 -31 13
-1 sprites/tropic_forest.png 380 40 09 4 15 -7 0
-1 sprites/tropic_forest.png 10 70 09 20 38 -5 -8
-1 sprites/tropic_forest.png 58 70 09 26 38 -5 5
-1 sprites/tropic_forest.png 106 70 09 20 37 -31 11
-1 sprites/tropic_forest.png 154 70 09 27 38 -31 -8
-1 sprites/tropic_forest.png 202 70 09 9 16 17 3
-1 sprites/tropic_forest.png 234 70 09 9 15 -7 22
-1 sprites/tropic_forest.png 266 70 09 9 16 -31 11
-1 sprites/tropic_forest.png 298 70 09 9 15 -6 -8
-1 sprites/tropic_forest.png 330 70 09 7 8 25 5
-1 sprites/tropic_forest.png 346 70 09 5 10 -4 27
-1 sprites/tropic_forest.png 364 70 09 7 8 -31 11
-1 sprites/tropic_forest.png 380 70 09 6 12 -5 -8
-1 sprites/tropic_forest.png 10 100 09 18 39 -6 0
-1 sprites/tropic_forest.png 58 100 09 11 38 -5 12
-1 sprites/tropic_forest.png 106 100 09 18 39 -31 5
-1 sprites/tropic_forest.png 154 100 09 11 40 -32 0
-1 sprites/tropic_forest.png 202 100 09 6 20 13 12
-1 sprites/tropic_forest.png 234 100 09 7 13 -5 16
-1 sprites/tropic_forest.png 266 100 09 6 20 -31 5
-1 sprites/tropic_forest.png 298 100 09 7 13 -6 0
-1 sprites/tropic_forest.png 330 100 09 4 8 26 13
-1 sprites/tropic_forest.png 346 100 09 3 12 -5 20
-1 sprites/tropic_forest.png 364 100 09 5 8 -31 6
-1 sprites/tropic_forest.png 380 100 09 4 15 -6 0
-1 sprites/tropic_forest.png 10 130 09 27 38 -5 -8
-1 sprites/tropic_forest.png 58 130 09 20 37 -4 11
-1 sprites/tropic_forest.png 106 130 09 26 37 -31 5
-1 sprites/tropic_forest.png 154 130 09 20 38 -31 -8
-1 sprites/tropic_forest.png 202 130 09 9 16 17 11
-1 sprites/tropic_forest.png 234 130 09 9 15 -6 22
-1 sprites/tropic_forest.png 266 130 09 9 16 -31 3
-1 sprites/tropic_forest.png 298 130 09 9 15 -7 -8
-1 sprites/tropic_forest.png 330 130 09 7 8 25 11
-1 sprites/tropic_forest.png 346 130 09 5 10 -4 26
-1 sprites/tropic_forest.png 364 130 09 7 8 -31 5
-1 sprites/tropic_forest.png 380 130 09 6 12 -5 -8
-1 * 7 02 05 41 01 00 00 00
-1 * 4 01 05 01 3C
-1 sprites/tropic_desert.png 10 210 09 19 38 -5 0
-1 sprites/tropic_desert.png 58 210 09 18 38 -5 13
-1 sprites/tropic_desert.png 106 210 09 18 38 -31 13
-1 sprites/tropic_desert.png 154 210 09 19 38 -31 0
-1 sprites/tropic_desert.png 202 210 09 9 19 14 11
-1 sprites/tropic_desert.png 234 210 09 9 16 -7 22
-1 sprites/tropic_desert.png 266 210 09 9 19 -31 11
-1 sprites/tropic_desert.png 298 210 09 9 16 -7 0
-1 sprites/tropic_desert.png 330 210 09 6 8 25 13
-1 sprites/tropic_desert.png 346 210 09 4 12 -5 27
-1 sprites/tropic_desert.png 364 210 09 6 8 -31 13
-1 sprites/tropic_desert.png 380 210 09 5 12 -5 0
-1 sprites/tropic_desert.png 10 240 09 11 40 -7 0
-1 sprites/tropic_desert.png 58 240 09 18 39 -6 5
-1 sprites/tropic_desert.png 106 240 09 11 38 -31 12
-1 sprites/tropic_desert.png 154 240 09 18 39 -31 0
-1 sprites/tropic_desert.png 202 240 09 6 20 13 5
-1 sprites/tropic_desert.png 234 240 09 7 13 -6 16
-1 sprites/tropic_desert.png 266 240 09 6 20 -31 12
-1 sprites/tropic_desert.png 298 240 09 7 13 -5 0
-1 sprites/tropic_desert.png 330 240 09 5 8 25 6
-1 sprites/tropic_desert.png 346 240 09 3 12 -5 20
-1 sprites/tropic_desert.png 364 240 09 4 8 -31 13
-1 sprites/tropic_desert.png 380 240 09 4 15 -7 0
-1 sprites/tropic_desert.png 10 270 09 20 38 -5 -8
-1 sprites/tropic_desert.png 58 270 09 26 38 -5 5
-1 sprites/tropic_desert.png 106 270 09 20 37 -31 11
-1 sprites/tropic_desert.png 154 270 09 27 38 -31 -8
-1 sprites/tropic_desert.png 202 270 09 9 16 17 3
-1 sprites/tropic_desert.png 234 270 09 9 15 -7 22
-1 sprites/tropic_desert.png 266 270 09 9 16 -31 11
-1 sprites/tropic_desert.png 298 270 09 9 15 -6 -8
-1 sprites/tropic_desert.png 330 270 09 7 8 25 5
-1 sprites/tropic_desert.png 346 270 09 5 10 -4 27
-1 sprites/tropic_desert.png 364 270 09 7 8 -31 11
-1 sprites/tropic_desert.png 380 270 09 6 12 -5 -8
-1 sprites/tropic_desert.png 10 300 09 18 39 -6 0
-1 sprites/tropic_desert.png 58 300 09 11 38 -5 12
-1 sprites/tropic_desert.png 106 300 09 18 39 -31 5
-1 sprites/tropic_desert.png 154 300 09 11 40 -32 0
-1 sprites/tropic_desert.png 202 300 09 6 20 13 12
-1 sprites/tropic_desert.png 234 300 09 7 13 -5 16
-1 sprites/tropic_desert.png 266 300 09 6 20 -31 5
-1 sprites/tropic_desert.png 298 300 09 7 13 -6 0
-1 sprites/tropic_desert.png 330 300 09 4 8 26 13
-1 sprites/tropic_desert.png 346 300 09 3 12 -5 20
-1 sprites/tropic_desert.png 364 300 09 5 8 -31 6
-1 sprites/tropic_desert.png 380 300 09 4 15 -6 0
-1 sprites/tropic_desert.png 10 330 09 27 38 -5 -8
-1 sprites/tropic_desert.png 58 330 09 20 37 -4 11
-1 sprites/tropic_desert.png 106 330 09 26 37 -31 5
-1 sprites/tropic_desert.png 154 330 09 20 38 -31 -8
-1 sprites/tropic_desert.png 202 330 09 9 16 17 11
-1 sprites/tropic_desert.png 234 330 09 9 15 -6 22
-1 sprites/tropic_desert.png 266 330 09 9 16 -31 3
-1 sprites/tropic_desert.png 298 330 09 9 15 -7 -8
-1 sprites/tropic_desert.png 330 330 09 7 8 25 11
-1 sprites/tropic_desert.png 346 330 09 5 10 -4 26
-1 sprites/tropic_desert.png 364 330 09 7 8 -31 5
-1 sprites/tropic_desert.png 380 330 09 6 12 -5 -8
-1 * 7 02 05 42 01 00 00 00
-1 * 4 01 05 01 3C
-1 sprites/tropic_forest.png 10 210 09 19 38 -5 0
-1 sprites/tropic_forest.png 58 210 09 18 38 -5 13
-1 sprites/tropic_forest.png 106 210 09 18 38 -31 13
-1 sprites/tropic_forest.png 154 210 09 19 38 -31 0
-1 sprites/tropic_forest.png 202 210 09 9 19 14 11
-1 sprites/tropic_forest.png 234 210 09 9 16 -7 22
-1 sprites/tropic_forest.png 266 210 09 9 19 -31 11
-1 sprites/tropic_forest.png 298 210 09 9 16 -7 0
-1 sprites/tropic_forest.png 330 210 09 6 8 25 13
-1 sprites/tropic_forest.png 346 210 09 4 12 -5 27
-1 sprites/tropic_forest.png 364 210 09 6 8 -31 13
-1 sprites/tropic_forest.png 380 210 09 5 12 -5 0
-1 sprites/tropic_forest.png 10 240 09 11 40 -7 0
-1 sprites/tropic_forest.png 58 240 09 18 39 -6 5
-1 sprites/tropic_forest.png 106 240 09 11 38 -31 12
-1 sprites/tropic_forest.png 154 240 09 18 39 -31 0
-1 sprites/tropic_forest.png 202 240 09 6 20 13 5
-1 sprites/tropic_forest.png 234 240 09 7 13 -6 16
-1 sprites/tropic_forest.png 266 240 09 6 20 -31 12
-1 sprites/tropic_forest.png 298 240 09 7 13 -5 0
-1 sprites/tropic_forest.png 330 240 09 5 8 25 6
-1 sprites/tropic_forest.png 346 240 09 3 12 -5 20
-1 sprites/tropic_forest.png 364 240 09 4 8 -31 13
-1 sprites/tropic_forest.png 380 240 09 4 15 -7 0
-1 sprites/tropic_forest.png 10 270 09 20 38 -5 -8
-1 sprites/tropic_forest.png 58 270 09 26 38 -5 5
-1 sprites/tropic_forest.png 106 270 09 20 37 -31 11
-1 sprites/tropic_forest.png 154 270 09 27 38 -31 -8
-1 sprites/tropic_forest.png 202 270 09 9 16 17 3
-1 sprites/tropic_forest.png 234 270 09 9 15 -7 22
-1 sprites/tropic_forest.png 266 270 09 9 16 -31 11
-1 sprites/tropic_forest.png 298 270 09 9 15 -6 -8
-1 sprites/tropic_forest.png 330 270 09 7 8 25 5
-1 sprites/tropic_forest.png 346 270 09 5 10 -4 27
-1 sprites/tropic_forest.png 364 270 09 7 8 -31 11
-1 sprites/tropic_forest.png 380 270 09 6 12 -5 -8
-1 sprites/tropic_forest.png 10 300 09 18 39 -6 0
-1 sprites/tropic_forest.png 58 300 09 11 38 -5 12
-1 sprites/tropic_forest.png 106 300 09 18 39 -31 5
-1 sprites/tropic_forest.png 154 300 09 11 40 -32 0
-1 sprites/tropic_forest.png 202 300 09 6 20 13 12
-1 sprites/tropic_forest.png 234 300 09 7 13 -5 16
-1 sprites/tropic_forest.png 266 300 09 6 20 -31 5
-1 sprites/tropic_forest.png 298 300 09 7 13 -6 0
-1 sprites/tropic_forest.png 330 300 09 4 8 26 13
-1 sprites/tropic_forest.png 346 300 09 3 12 -5 20
-1 sprites/tropic_forest.png 364 300 09 5 8 -31 6
-1 sprites/tropic_forest.png 380 300 09 4 15 -6 0
-1 sprites/tropic_forest.png 10 330 09 27 38 -5 -8
-1 sprites/tropic_forest.png 58 330 09 20 37 -4 11
-1 sprites/tropic_forest.png 106 330 09 26 37 -31 5
-1 sprites/tropic_forest.png 154 330 09 20 38 -31 -8
-1 sprites/tropic_forest.png 202 330 09 9 16 17 11
-1 sprites/tropic_forest.png 234 330 09 9 15 -6 22
-1 sprites/tropic_forest.png 266 330 09 9 16 -31 3
-1 sprites/tropic_forest.png 298 330 09 9 15 -7 -8
-1 sprites/tropic_forest.png 330 330 09 7 8 25 11
-1 sprites/tropic_forest.png 346 330 09 5 10 -4 26
-1 sprites/tropic_forest.png 364 330 09 7 8 -31 5
-1 sprites/tropic_forest.png 380 330 09 6 12 -5 -8
-1 * 7 02 05 43 01 00 00 00
-1 * 14 02 05 44 81 81 00 FF 01 40 00 01 01 41 00
-1 * 14 02 05 45 81 81 00 FF 01 42 00 01 01 43 00
-1 * 14 02 05 46 81 80 00 FF 01 44 00 00 00 45 00
-1 * 6 07 83 01 \7! 02 01
-1 * 7 03 05 01 06 00 46 00

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,3 +1,63 @@
openttd (1.1.3-RC1) unstable; urgency=low
* New upstream release 1.1.3-RC1
-- Matthijs Kooijman <matthijs@stdin.nl> Sun, 04 Sep 2011 17:00:00 +0200
openttd (1.1.2) unstable; urgency=low
* New upstream release 1.1.2
-- Matthijs Kooijman <matthijs@stdin.nl> Sun, 14 Aug 2011 17:00:00 +0200
openttd (1.1.2~RC2) unstable; urgency=low
* New upstream release 1.1.2-RC2
-- Matthijs Kooijman <matthijs@stdin.nl> Sat, 30 Jul 2011 21:00:00 +0200
openttd (1.1.2~RC1) unstable; urgency=low
* New upstream release 1.1.2-RC1
-- Matthijs Kooijman <matthijs@stdin.nl> Sun, 24 Jul 2011 21:00:00 +0200
openttd (1.1.1) unstable; urgency=low
* New upstream release 1.1.1
-- Matthijs Kooijman <matthijs@stdin.nl> Wed, 01 Jun 2011 00:00:00 +0200
openttd (1.1.1~RC1) unstable; urgency=low
* New upstream release 1.1.1-RC1
-- Matthijs Kooijman <matthijs@stdin.nl> Sun, 15 May 2011 21:00:00 +0200
openttd (1.1.0) unstable; urgency=low
* New upstream release 1.1.0
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 01 Apr 2011 00:00:00 +0100
openttd (1.1.0~RC3) unstable; urgency=low
* New upstream release 1.1.0-RC3
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 18 Mar 2011 22:00:00 +0100
openttd (1.1.0~RC2) unstable; urgency=low
* New upstream release 1.1.0-RC2
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 04 Mar 2011 22:00:00 +0100
openttd (1.1.0~RC1) unstable; urgency=low
* New upstream release 1.1.0-RC1
-- Matthijs Kooijman <matthijs@stdin.nl> Fri, 18 Feb 2011 22:00:00 +0100
openttd (1.1.0~beta5) unstable; urgency=low
* New upstream release 1.1.0-beta5

View File

@@ -1,6 +1,6 @@
@echo off
set OPENTTD_VERSION=1.1.0-beta5
set OPENTTD_VERSION=1.1.3-RC1
set OPENSFX_VERSION=0.8.0
set NOSOUND_VERSION=0.8.0
set OPENGFX_VERSION=0.7.0

6
os/rpm/openttd-rpmlintrc Normal file
View File

@@ -0,0 +1,6 @@
# the man page is in the subpackage data
addFilter("openttd.*: W: no-manual-page-for-binary openttd")
# no other package depends on this package, so this should not matter
addFilter("openttd.*: W: file-contains-date-and-time /usr/bin/openttd")
addFilter("openttd.*: W: file-contains-current-date /usr/bin/openttd")

100
os/rpm/openttd.changes Normal file
View File

@@ -0,0 +1,100 @@
-------------------------------------------------------------------
Sun Mar 6 09:36:55 UTC 2011 - ammler@openttdcoop.org
- upstream update 1.1.0-RC2
* Feature: XZ/LZMA2 savegame support. New default reduces
savegame size by 10 to 30% with slightly more CPU usage.
(requires xz-devel)
* Feature: Remote administration
* Feature: a lot improvements with GUI
* Feature: Customizable hotkeys
* Sources for openttd.grf are pngs (requires grfcodec >= 5.1)
-------------------------------------------------------------------
Sun Nov 21 11:11:38 UTC 2010 - ammler@openttdcoop.org
- upstream update 1.0.5
* Fix: Reading (very) recently freed memory [CVE-2010-4168]
-------------------------------------------------------------------
Sun Oct 31 17:53:41 UTC 2010 - ammler@openttdcoop.org
- upstream update 1.0.4
* build openttd.grf from source
-------------------------------------------------------------------
Tue Aug 10 20:16:03 UTC 2010 - ammler@openttdcoop.org
- upstream update 1.0.3
-------------------------------------------------------------------
Wed Jun 23 11:42:59 UTC 2010 - Marcel Gmür <ammler@openttdcoop.org>
- upstream update 1.0.2
* Feature: Translated desktop shortcut comments (r19884)
* many minor Bugfixes
-------------------------------------------------------------------
Sat May 1 15:59:32 UTC 2010 - Marcel Gmür <ammler@openttdcoop.org>
- upstream update 1.0.1
* Fix: Leaking a file descriptor
* Fix a lot small bugs, like minor desync issues on Mulitplayer
- no strip on make
-------------------------------------------------------------------
Thu Apr 1 08:53:54 UTC 2010 - Marcel Gmür <ammler@openttdcoop.org>
- upstream update 1.0.0 (finally!)
* completely independend game but still working also
with ttd original gaphics, sounds and music
- Add: Recommends openmsx
- requires lzo2
-------------------------------------------------------------------
Fri Dec 18 2009 Marcel Gmür <ammler@openttdcoop.org> - 0.7.4
- support for differen branches
- easy support for dedicated branch
- let openttd build system make the dektop file
- split the package to data and gui
- disable requires
-------------------------------------------------------------------
Thu Oct 01 2009 Marcel Gmür <ammler@openttdcoop.org> - 0.7.3
- disable libicu for RHEL4
-------------------------------------------------------------------
Sat Sep 26 2009 Marcel Gmür <ammler@openttdcoop.org> - 0.7.2
- no subfolder games for datadir
- cleanup: no post and postun anymore
- Recommends: opengfx (for suse and mandriva)
- add SUSE support
-------------------------------------------------------------------
Mon Oct 20 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Added libicu dependency
-------------------------------------------------------------------
Thu Sep 23 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Merged both versions of the spec file
-------------------------------------------------------------------
Fri Aug 29 2008 Jonathan Coome <maedhros@openttd.org>
- Rewrite spec file from scratch.
-------------------------------------------------------------------
Sat Aug 02 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Updated spec file
-------------------------------------------------------------------
Thu Mar 27 2008 Denis Burlaka <burlaka@yandex.ru>
- Universal spec file

View File

@@ -1,202 +1,199 @@
# $Id$
#-------------------------------------------------------------------------------
# spec file for the openttd rpm package
#
# Copyright (c) 2007-2011 The OpenTTD developers
#
# This file and all modifications and additions to the pristine
# package are under the same license as the package itself
#
# Note: for (at least) CentOS '#' comments end '\' continue command on new line.
# So place all '#' commented parameters of e.g. configure to the end.
#
#-------------------------------------------------------------------------------
%define dedicated 0
Name: openttd
Version: 1.1.0
Release: 1%{?dist}
%define binname openttd
Group: Amusements/Games
License: GPLv2
URL: http://www.openttd.org
Summary: OpenTTD is an Open Source clone of Chris Sawyer's Transport Tycoon Deluxe
%define srcver 1.1.2
Source: %{name}-%{version}-source.tar.bz2
%if %{dedicated}
Name: %{binname}-dedicated
%else
Name: %{binname}
%endif
Version: %{srcver}
Release: 1%{?dist}
Group: Amusements/Games/Strategy/Other
License: GPLv2
URL: http://www.openttd.org
Summary: An open source clone of Chris Sawyer's Transport Tycoon Deluxe
Source: openttd%{?branch:-%{branch}}-%{srcver}-source.tar.bz2
# the main package works with the exact same data package version only
Requires: %{binname}-data = %{version}
BuildRequires: gcc-c++
BuildRequires: libpng-devel
BuildRequires: zlib-devel
%if 0%{?mdkversion}
BuildRequires: liblzo-devel
BuildRequires: liblzma-devel
%else
BuildRequires: lzo-devel
BuildRequires: xz-devel
%endif
#needed by libdrm
%if 0%{?rhel_version} >= 600
BuildRequires: kernel
%endif
# for lzma detection
%if 0%{?suse_version}
BuildRequires: pkg-config
%endif
# Desktop specific tags, not needed for dedicated
%if !%{dedicated}
BuildRequires: fontconfig-devel
BuildRequires: SDL-devel
BuildRequires: grfcodec
Requires: fontconfig
Requires: SDL
Requires: zlib
Requires: xz-devel
BuildRequires: gcc-c++
BuildRequires: fontconfig-devel
BuildRequires: libpng-devel
BuildRequires: libicu-devel
BuildRequires: SDL-devel
BuildRequires: zlib-devel
# vendor specific dependencies
%if %{_vendor}=="alt"
Requires: freetype
BuildRequires: freetype-devel
%endif
%if %{_vendor}=="redhat" || %{_vendor}=="fedora"
Requires: freetype
BuildRequires: freetype-devel
BuildRequires: desktop-file-utils
%endif
%if %{_vendor}=="suse" || %{_vendor}=="mandriva"
Requires: freetype2
BuildRequires: freetype2-devel
%endif
%if %{_vendor}=="suse"
BuildRequires: update-desktop-files
%if !0%{?rhel_version}
BuildRequires: libicu-devel
%endif
%if 0%{?rhel_version} || 0%{?fedora}
BuildRequires: freetype-devel
%endif
%if 0%{?suse_version} || 0%{?mdkversion}
BuildRequires: freetype2-devel
%endif
%if 0%{?suse_version}
BuildRequires: update-desktop-files
%endif
%endif
%if %{dedicated}
Conflicts: %{binname} %{binname}-gui
%else
Provides: %{binname}-gui
Conflicts: %{binname}-dedicated
Requires: openttd-opensfx
# recommends works for suse (not sles9) and mandriva, only
%if 0%{?suse_version} > 910 || %{_vendor}=="mandriva"
Recommends: opengfx
# for 0.8.0
#Recommends: opensfx
%if 0%{?suse_version} || 0%{?mdkversion}
# require timidity is part of openmsx
Recommends: openttd-openmsx
%endif
%endif
# Recommends would fit better but not well supported...
Requires: openttd-opengfx >= 0.3.2
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
%description
OpenTTD is a reimplementation of the Microprose game "Transport Tycoon Deluxe"
with lots of new features and enhancements. To play the game you need either
the original data from the game or install the recommend package OpenGFX.
the original data from the game or install the recommend subackages OpenGFX for
free graphics, OpenSFX for free sounds and OpenMSX for free music.
OpenTTD is licensed under the GNU General Public License version 2.0. For more
information, see the file 'COPYING' included with every release and source
download of the game.
# the subpackage data needs only to build once, the dedicated version
# can reuse the data package of the gui package
%if !%{dedicated}
%package data
Summary: Data package for OpenTTD
Group: Amusements/Games/Strategy/Other
%if 0%{?suse_version} >= 1120 || 0%{?fedora} || 0%{?mdkversion}
BuildArch: noarch
%endif
BuildRequires: grfcodec
%description data
OpenTTD is a reimplementation of the Microprose game "Transport Tycoon Deluxe"
with lots of new features and enhancements. To play the game you need either
the original data from the game or the required package OpenGFX and OpenSFX.
This package is required by openttd gui and openttd dedicated package. This
way it is possible to install a openttd version without SDL requirement.
%endif
%prep
%setup -q
%setup -qn openttd%{?branch:-%{branch}}-%{srcver}
# we build the grfs from sources but validate the result with the existing data
md5sum bin/data/* > validate.data
%build
# suse sle <10 has no support for makedepend
%if 0%{?sles_version} == 9 || 0%{?sles_version} == 10
%define do_makedepend 0
%else
%define do_makedepend 1
%endif
./configure \
--prefix-dir="%{_prefix}" \
--binary-name="%{name}" \
--enable-strip \
--binary-dir="bin" \
--data-dir="share/%{name}" \
--with-makedepend="%{do_makedepend}" \
# --revision="%{ver}%{?prever:-%{prever}}" \
# --enable-debug=0 \
# --with-sdl \
# --with-zlib \
# --with-png \
# --with-freetype \
# --with-fontconfig \
# --with-icu \
# --menu_group="Game;" \
# --menu-name="OpenTTD" \
# --doc-dir="share\doc\%{name}" \
# --icon-dir="share/pixmaps" \
# --icon-theme-dir="share/icons/hicolor" \
# --man-dir="share/man/man6" \
# --menu-dir="share/applications"
--prefix-dir="%{_prefix}" \
--binary-name="%{binname}" \
--binary-dir="bin" \
--data-dir="share/%{binname}" \
--doc-dir="share/doc/%{binname}" \
--menu-name="OpenTTD%{?branch: %{branch}}" \
--menu-group="Game;StrategyGame;" \
--enable-dedicated="%{dedicated}" \
make %{?_smp_mflags}
%install
%if %{dedicated}
# dedicated package needs binary only
install -D -m0755 bin/openttd %{buildroot}/%{_bindir}/%{binname}
%else
make install INSTALL_DIR="%{buildroot}"
# Validate menu entrys (vendor specific)
%if %{_vendor} == "redhat" || %{_vendor}=="fedora"
desktop-file-install \
--vendor="%{_vendor}" \
--remove-key Version \
--dir="%{buildroot}/%{_datadir}/applications/" \
"%{buildroot}/%{_datadir}/applications/%{name}.desktop" \
# --delete-original
%endif
%if %{_vendor}=="suse"
%__cat > %{name}.desktop << EOF
[Desktop Entry]
Encoding=UTF-8
Name=OpenTTD
Comment=OpenTTD - A clone of the Microprose game 'Transport Tycoon Deluxe'
GenericName=OpenTTD
Type=Application
Terminal=false
Exec=%{name}
Icon=%{name}
Categories=Game;StrategyGame;
EOF
%suse_update_desktop_file -i %{name} Game StrategyGame
%if 0%{?suse_version}
%suse_update_desktop_file -r %{binname} Game StrategyGame
%endif
%endif
%clean
#rm -rf "%{buildroot}"
rm -rf "%{buildroot}"
%post
# Update the icon cache (vendor specific)
%if %{_vendor}=="mandriva"
%update_icon_cache hicolor
%endif
%if %{_vendor} == "redhat" || %{_vendor}=="fedora"
touch --no-create %{_datadir}/icons/hicolor
if [ -x %{_bindir}/gtk-update-icon-cache ]; then
%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
fi
%endif
%postun
# Update the icon cache (vendor specific)
%if %{_vendor}=="mandriva"
%update_icon_cache hicolor
%endif
%if %{_vendor} == "redhat" || %{_vendor}=="fedora"
touch --no-create %{_datadir}/icons/hicolor
if [ -x %{_bindir}/gtk-update-icon-cache ]; then
%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
fi
%endif
%check
md5sum -c validate.data
%files
%defattr(-, root, games, -)
%dir %{_datadir}/doc/%{name}
%dir %{_datadir}/%{name}
%dir %{_datadir}/%{name}/lang
%dir %{_datadir}/%{name}/data
%dir %{_datadir}/%{name}/gm
%dir %{_datadir}/%{name}/scripts
%attr(755, root, games) %{_bindir}/%{name}
%{_datadir}/doc/%{name}/*
%{_datadir}/%{name}/lang/*
%{_datadir}/%{name}/data/*
%{_datadir}/%{name}/scripts/*
%{_datadir}/applications/*%{name}.desktop
%{_datadir}/pixmaps/*
%{_datadir}/icons/*
%doc %{_mandir}/man6/%{name}.6.*
%attr(755, root, root) %{_bindir}/%{binname}
# all other files are for the gui version only, also no
# subpackage needed for the dedicated version
%if !%{dedicated}
%defattr(-, root, root)
%dir %{_datadir}/icons/hicolor
%dir %{_datadir}/icons/hicolor/16x16
%dir %{_datadir}/icons/hicolor/16x16/apps
%dir %{_datadir}/icons/hicolor/32x32
%dir %{_datadir}/icons/hicolor/32x32/apps
%dir %{_datadir}/icons/hicolor/48x48
%dir %{_datadir}/icons/hicolor/48x48/apps
%dir %{_datadir}/icons/hicolor/64x64
%dir %{_datadir}/icons/hicolor/64x64/apps
%dir %{_datadir}/icons/hicolor/128x128
%dir %{_datadir}/icons/hicolor/128x128/apps
%dir %{_datadir}/icons/hicolor/256x256
%dir %{_datadir}/icons/hicolor/256x256/apps
%{_datadir}/applications/%{binname}.desktop
%{_datadir}/icons/hicolor/16x16/apps/%{binname}.png
%{_datadir}/icons/hicolor/32x32/apps/%{binname}.png
%{_datadir}/icons/hicolor/48x48/apps/%{binname}.png
%{_datadir}/icons/hicolor/64x64/apps/%{binname}.png
%{_datadir}/icons/hicolor/128x128/apps/%{binname}.png
%{_datadir}/icons/hicolor/256x256/apps/%{binname}.png
%{_datadir}/pixmaps/%{binname}.32.xpm
%files data
%defattr(-, root, root)
%dir %{_datadir}/doc/%{binname}
%dir %{_datadir}/%{binname}
%dir %{_datadir}/%{binname}/lang
%dir %{_datadir}/%{binname}/data
%dir %{_datadir}/%{binname}/gm
%dir %{_datadir}/%{binname}/scripts
%dir %{_datadir}/%{binname}/ai
%{_datadir}/doc/%{binname}/*
%{_datadir}/%{binname}/lang/*
%{_datadir}/%{binname}/data/*
%{_datadir}/%{binname}/scripts/*
%{_datadir}/%{binname}/ai/*
%{_datadir}/%{binname}/gm/*
%doc %{_mandir}/man6/%{binname}.6.*
%endif
%changelog
* Sat Sep 26 2009 Marcel Gmür <ammler@openttdcoop.org> - 0.7.2
- no subfolder games for datadir
- cleanup: no post and postun anymore
- Recommends: opengfx (for suse and mandriva)
- add SUSE support
* Mon Oct 20 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Added libicu dependency
* Thu Sep 23 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Merged both versions of the spec file
* Fri Aug 29 2008 Jonathan Coome <maedhros@openttd.org>
- Rewrite spec file from scratch.
* Sat Aug 02 2008 Benedikt Brüggemeier <skidd13@openttd.org>
- Updated spec file
* Thu Mar 27 2008 Denis Burlaka <burlaka@yandex.ru>
- Universal spec file

View File

@@ -1,9 +1,9 @@
# Version numbers to update
!define APPV_MAJOR 1
!define APPV_MINOR 1
!define APPV_MAINT 0
!define APPV_BUILD 4
!define APPV_EXTRA "-beta5"
!define APPV_MAINT 3
!define APPV_BUILD 0
!define APPV_EXTRA "-RC1"
!define APPNAME "OpenTTD" ; Define application name
!define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version
@@ -560,12 +560,12 @@ Function CheckWindowsVersion
StrCmp $R0 "win9x" 0 WinNT
ClearErrors
StrCmp ${APPARCH} "win9x" Done 0
MessageBox MB_OKCANCEL|MB_ICONSTOP "You are trying to install the Windows 2000, XP and Vista version on Windows 95, 98 or ME. This is will not work. Please download the correct version. Do you really want to continue?" IDOK Done IDCANCEL Abort
MessageBox MB_OKCANCEL|MB_ICONSTOP "You are trying to install the Windows 2000, XP, Vista and 7 version on Windows 95, 98 or ME. This is will not work. Please download the correct version. Do you really want to continue?" IDOK Done IDCANCEL Abort
GoTo Done
WinNT:
ClearErrors
StrCmp ${APPARCH} "win9x" 0 Done
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "You are trying to install the Windows 95, 98 and ME version on Windows 2000, XP or Vista. This is not advised, but will work with reduced capabilities. We suggest that you download the correct version. Do you really want to continue?" IDOK Done IDCANCEL Abort
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "You are trying to install the Windows 95, 98 and ME version on Windows 2000, XP, Vista or 7. This is not advised, but will work with reduced capabilities. We suggest that you download the correct version. Do you really want to continue?" IDOK Done IDCANCEL Abort
Abort:
Quit
Done:

View File

@@ -227,6 +227,9 @@ Function DetermineSVNVersion()
Loop
If oExec.ExitCode = 0 Then
version = oExec.StdOut.ReadLine()
If Right(version, 2) = "^0" Then
version = Left(version, Len(version) - 2)
End If
branch = ""
End If ' oExec.ExitCode = 0
End If ' Err.Number = 0

View File

@@ -1074,6 +1074,7 @@
<ClInclude Include="..\src\pathfinder\yapf\yapf_node.hpp" />
<ClInclude Include="..\src\pathfinder\yapf\yapf_node_rail.hpp" />
<ClInclude Include="..\src\pathfinder\yapf\yapf_node_road.hpp" />
<ClInclude Include="..\src\pathfinder\yapf\yapf_node_ship.hpp" />
<ClCompile Include="..\src\pathfinder\yapf\yapf_rail.cpp" />
<ClCompile Include="..\src\pathfinder\yapf\yapf_road.cpp" />
<ClCompile Include="..\src\pathfinder\yapf\yapf_ship.cpp" />

View File

@@ -2442,6 +2442,9 @@
<ClInclude Include="..\src\pathfinder\yapf\yapf_node_road.hpp">
<Filter>YAPF</Filter>
</ClInclude>
<ClInclude Include="..\src\pathfinder\yapf\yapf_node_ship.hpp">
<Filter>YAPF</Filter>
</ClInclude>
<ClCompile Include="..\src\pathfinder\yapf\yapf_rail.cpp">
<Filter>YAPF</Filter>
</ClCompile>

View File

@@ -3662,6 +3662,10 @@
RelativePath=".\..\src\pathfinder\yapf\yapf_node_road.hpp"
>
</File>
<File
RelativePath=".\..\src\pathfinder\yapf\yapf_node_ship.hpp"
>
</File>
<File
RelativePath=".\..\src\pathfinder\yapf\yapf_rail.cpp"
>

View File

@@ -3659,6 +3659,10 @@
RelativePath=".\..\src\pathfinder\yapf\yapf_node_road.hpp"
>
</File>
<File
RelativePath=".\..\src\pathfinder\yapf\yapf_node_ship.hpp"
>
</File>
<File
RelativePath=".\..\src\pathfinder\yapf\yapf_rail.cpp"
>

View File

@@ -1,6 +1,6 @@
OpenTTD readme
Last updated: 2011-02-04
Release version: 1.1.0-beta5
Last updated: 2011-09-04
Release version: 1.1.3-RC1
------------------------------------------------------------------------
@@ -249,9 +249,12 @@ wait for an error message to pop up. The error message will tell you
4.2) OpenTTD directories
---- -------------------
The required 3rd party files listed in the section 4.1 "(Required) 3rd party files"
as well as other non-compulsory extensions (NewGRFs, AI, heightmaps, scenarios) can be
placed in a few different locations:
OpenTTD uses its own directory to store its required 3rd party base set files (see section
4.1 "Required 3rd party files") and non-compulsory extension and configuration files. See
below for their proper place within this OpenTTD main data directory.
The main OpenTTD directories can be found in various locations, depending on your operating
system:
1. The current working directory (from where you started OpenTTD)
For non-Windows operating systems OpenTTD will not scan for files in this
directory if it is your personal directory, i.e. "~/", or when it is the
@@ -273,7 +276,26 @@ placed in a few different locations:
5. The installation directory (Linux only)
Linux: /usr/share/games/openttd
6. The application bundle (Mac OSX only)
It includes the OpenTTD files (grf+lng) and it will work as long as they aren't touched
It includes the OpenTTD files (grf+lng) and it will work as long as they aren't
touched
Different types of data or extensions go into different subdirectories of the chosen main
OpenTTD directory:
Config File: (no subdirectory)
Screenshots: (no subdirectory)
Base Graphics: data (or a subdirectory thereof)
Sound Sets: data (or a subdirectory thereof)
NewGRFs: data (or a subdirectory thereof)
32bpp Sets: data (or a subdirectory thereof)
Music Sets: gm (or a subdirectory thereof)
AIs: ai (or a subdirectory thereof)
AI Libraries: ai/libraries (or a subdirectory thereof)
Savegames: save
Automatic Savegames: save/autosave
Scenarios: scenario
The (automatically created) directory content_download is for OpenTTD's internal use and
no files should be added to it or its subdirectories manually.
Notes:
- Linux in the previous list means .deb, but most paths should be similar for others.
@@ -357,7 +379,7 @@ OpenTTD in debug mode.
The configuration file for OpenTTD (openttd.cfg) is in a simple Windows-like
.INI format. It's mostly undocumented. Almost all settings can be changed
ingame by using the 'Advanced Settings' window.
When you can not find openttd.cfg you should look in the directories as
When you cannot find openttd.cfg you should look in the directories as
described in section 4.2. If you do not have an openttd.cfg OpenTTD will
create one after closing.
@@ -419,7 +441,8 @@ DOS:
---- ---------------------------
The following libraries are used by OpenTTD for:
- libSDL/liballegro: hardware access (video, sound, mouse)
- zlib: (de)compressing of old (0.3.0-1.0.5) savegames, content downloads, heightmaps
- zlib: (de)compressing of old (0.3.0-1.0.5) savegames, content downloads,
heightmaps
- liblzo2: (de)compressing of old (pre 0.3.0) savegames
- liblzma: (de)compressing of savegames (1.1.0 and later)
- libpng: making screenshots and loading heightmaps
@@ -445,9 +468,10 @@ you remove the graphics file using "make maintainer-clean".
The following compilers are known to compile OpenTTD:
- Microsoft Visual C++ (MSVC) 2005, 2008 and 2010.
Version 2005 gives bogus warnings about scoping issues.
- GNU Compiler Collection (GCC) 3.3 - 4.6.
- GNU Compiler Collection (GCC) 3.3 - 4.7.
Versions 4.1 and earlier give bogus warnings about uninitialised variables.
Versions 4.4 and later give bogus warnings about freeing heap objects.
Versions 4.4 - 4.6 give bogus warnings about freeing non-heap objects.
Versions 4.5 and later give invalid warnings when lto is enabled.
- Intel C++ Compiler (ICC) 12.0.
The following compilers are known not to compile OpenTTD:
@@ -455,7 +479,8 @@ The following compilers are known not to compile OpenTTD:
- GNU Compiler Collection (GCC) 3.2 and earlier.
These old versions fail due to OpenTTD's template usage.
- Intel C++ Compiler (ICC) 11.1 and earlier.
Version 10.0 and earlier fail a configure check and fail with recent system headers.
Version 10.0 and earlier fail a configure check and fail with recent system
headers.
Version 10.1 fails to compile station_gui.cpp.
Version 11.1 fails with internal error when compiling network.cpp.
- Clang/LLVM 2.8 and earlier.
@@ -542,66 +567,76 @@ Under Windows 98 and lower it is impossible to use a dedicated server; it will
fail to start. Perhaps this is for the better because those OSes are not known
for their stability.
With the added support for font-based text selecting a non-latin language will
result in garbage (lots of '?') shown on screen. Please open your configuration
file and add a desired font for small/medium/-and large_font. This can be a font
name like "Tahoma" or a path to a font.
With the added support for font-based text selecting a non-latin language can
result in lots of question marks ('?') being shown on screen. Please open your
configuration file (openttd.cfg - see Section 4.2 for where to find it)
and add a suitable font for the small, medium and / or large font, e.g.:
small_font = "Tahoma"
medium_font = "Tahoma"
large_font = "Tahoma"
You should use a font name like "Tahoma" or a path to the desired font.
Any NewGRF file used in a game is stored inside the savegame and will refuse
to load if you don't have that NewGRF file available. A list of missing files
will be output to the console at the moment, so use the '-d' flag (on windows)
to see this list. You just have to find the files (http://grfcrawler.tt-forums.net/)
put them in the data/ folder and you're set to go.
can be viewed in the NewGRF window accessible from the file load dialogue window.
You can try to obtain the missing files from that NewGRF dialogue or - if they
are not available online - you can search manually through our forum's graphics
development section (http://www.tt-forums.net/viewforum.php?f=66) or GrfCrawler
(http://grfcrawler.tt-forums.net/). Put the NewGRF files in OpenTTD's data folder
(see section 4.2 "OpenTTD directories") and rescan the list of available NewGRFs.
Once you have all missing files, you are set to go.
X.X) Credits
---- -------
The OpenTTD team (in alphabetical order):
Albert Hofkamp (Alberth) - GUI expert
Jean-François Claeys (Belugas) - GUI, newindustries and more
Matthijs Kooijman (blathijs) - Pathfinder-guru, pool rework
Christoph Elsenhans (frosch) - General coding
Loïc Guilloux (glx) - Windows Expert
Michael Lutz (michi_cc) - Path based signals
Owen Rudge (orudge) - Forum host, OS/2 port
Peter Nelson (peter1138) - Spiritual descendant from newGRF gods
Ingo von Borstel (planetmaker) - Support
Remko Bijker (Rubidium) - Lead coder and way more
Zdeněk Sojka (SmatZ) - Bug finder and fixer
José Soler (Terkhen) - General coding
Thijs Marinussen (Yexo) - AI Framework
Albert Hofkamp (Alberth) - GUI expert
Jean-François Claeys (Belugas) - GUI, newindustries and more
Matthijs Kooijman (blathijs) - Pathfinder-guru, pool rework
Christoph Elsenhans (frosch) - General coding
Loïc Guilloux (glx) - Windows Expert
Michael Lutz (michi_cc) - Path based signals
Owen Rudge (orudge) - Forum host, OS/2 port
Peter Nelson (peter1138) - Spiritual descendant from newGRF gods
Ingo von Borstel (planetmaker) - Support
Remko Bijker (Rubidium) - Lead coder and way more
Zdeněk Sojka (SmatZ) - Bug finder and fixer
José Soler (Terkhen) - General coding
Thijs Marinussen (Yexo) - AI Framework
Inactive Developers:
Bjarni Corfitzen (Bjarni) - MacOSX port, coder and vehicles
Victor Fischer (Celestar) - Programming everywhere you need him to
Tamás Faragó (Darkvater) - Ex-Lead coder
Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;)
Jonathan Coome (Maedhros) - High priest of the NewGRF Temple
Attila Bán (MiHaMiX) - WebTranslator 1 and 2
Christoph Mallon (Tron) - Programmer, code correctness police
Bjarni Corfitzen (Bjarni) - MacOSX port, coder and vehicles
Victor Fischer (Celestar) - Programming everywhere you need him to
Tamás Faragó (Darkvater) - Ex-Lead coder
Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;)
Jonathan Coome (Maedhros) - High priest of the NewGRF Temple
Attila Bán (MiHaMiX) - WebTranslator 1 and 2
Christoph Mallon (Tron) - Programmer, code correctness police
Retired Developers:
Ludvig Strigeus (ludde) - OpenTTD author, main coder (0.1 - 0.3.3)
Serge Paquet (vurlix) - Assistant project manager, coder (0.1 - 0.3.3)
Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3.0 - 0.3.6)
Benedikt Brüggemeier (skidd13) - Bug fixer and code reworker
Patric Stout (TrueLight) - Programmer (0.3 - pre0.7), sys op (active)
Ludvig Strigeus (ludde) - OpenTTD author, main coder (0.1 - 0.3.3)
Serge Paquet (vurlix) - Assistant project manager, coder (0.1 - 0.3.3)
Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3.0 - 0.3.6)
Benedikt Brüggemeier (skidd13) - Bug fixer and code reworker
Patric Stout (TrueLight) - Programmer (0.3 - pre0.7), sys op (active)
Thanks to:
Josef Drexler - For his great work on TTDPatch.
Marcin Grzegorczyk - For his TTDPatch work and documentation of Transport Tycoon Deluxe internals and graphics (signals and track foundations)
Petr Baudiš (pasky) - Many patches, newgrf support, etc.
Simon Sasburg (HackyKid) - For the many bugfixes he has blessed us with
Stefan Meißner (sign_de) - For his work on the console
Mike Ragsdale - OpenTTD installer
Cian Duffy (MYOB) - BeOS port / manual writing
Christian Rosentreter (tokai) - MorphOS / AmigaOS port
Richard Kempton (RichK67) - Additional airports, initial TGP implementation
Alberto Demichelis - Squirrel scripting language
L. Peter Deutsch - MD5 implementation
Michael Blunck - For revolutionizing TTD with awesome graphics
George - Canal graphics
David Dallaston (Pikka) - Tram tracks
All Translators - For their support to make OpenTTD a truly international game
Bug Reporters - Thanks for all bug reports
Chris Sawyer - For an amazing game!
Josef Drexler - For his great work on TTDPatch.
Marcin Grzegorczyk - For his TTDPatch work and documentation of Transport Tycoon Deluxe internals and graphics (signals and track foundations)
Petr Baudiš (pasky) - Many patches, newgrf support, etc.
Simon Sasburg (HackyKid) - For the many bugfixes he has blessed us with
Stefan Meißner (sign_de) - For his work on the console
Mike Ragsdale - OpenTTD installer
Cian Duffy (MYOB) - BeOS port / manual writing
Christian Rosentreter (tokai) - MorphOS / AmigaOS port
Richard Kempton (RichK67) - Additional airports, initial TGP implementation
Alberto Demichelis - Squirrel scripting language
L. Peter Deutsch - MD5 implementation
Michael Blunck - For revolutionizing TTD with awesome graphics
George - Canal graphics
Andrew Parkhouse (andythenorth) - River graphics
David Dallaston (Pikka) - Tram tracks
All Translators - For their support to make OpenTTD a truly international game
Bug Reporters - Thanks for all bug reports
Chris Sawyer - For an amazing game!

View File

@@ -875,6 +875,7 @@ pathfinder/yapf/yapf_destrail.hpp
pathfinder/yapf/yapf_node.hpp
pathfinder/yapf/yapf_node_rail.hpp
pathfinder/yapf/yapf_node_road.hpp
pathfinder/yapf/yapf_node_ship.hpp
pathfinder/yapf/yapf_rail.cpp
pathfinder/yapf/yapf_road.cpp
pathfinder/yapf/yapf_ship.cpp

View File

@@ -54,6 +54,10 @@ extern "C" {
typedef __int64 SQInteger;
typedef unsigned __int64 SQUnsignedInteger;
typedef unsigned __int64 SQHash; /*should be the same size of a pointer*/
#elif defined(_WIN32)
typedef long long SQInteger;
typedef unsigned long long SQUnsignedInteger;
typedef unsigned long long SQHash; /*should be the same size of a pointer*/
#else
typedef long SQInteger;
typedef unsigned long SQUnsignedInteger;
@@ -77,6 +81,8 @@ typedef float SQFloat;
#if defined(SQUSEDOUBLE) && !defined(_SQ64)
#ifdef _MSC_VER
typedef __int64 SQRawObjectVal; //must be 64bits
#elif defined(_WIN32)
typedef long long SQRawObjectVal; //must be 64bits
#else
typedef long SQRawObjectVal; //must be 64bits
#endif

View File

@@ -168,7 +168,7 @@ public:
static void GameLoop() {}
static bool HasAI(const struct ContentInfo *ci, bool md5sum) { return false; }
static void Rescan() {}
static char *GetConsoleList(char *p, const char *last) { return p; }
static char *GetConsoleList(char *p, const char *last, bool newest_only = false) { return p; }
static void nop() { }
};

View File

@@ -75,9 +75,9 @@ AIInfo *AIConfig::GetInfo() const
return this->info;
}
bool AIConfig::ResetInfo()
bool AIConfig::ResetInfo(bool force_exact_match)
{
this->info = AI::FindInfo(this->name, -1, false);
this->info = AI::FindInfo(this->name, force_exact_match ? this->version : -1, force_exact_match);
return this->info != NULL;
}

View File

@@ -57,10 +57,12 @@ public:
/**
* When ever the AI Scanner is reloaded, all infos become invalid. This
* function tells AIConfig about this.
* @param force_exact_match If true try to find the exact same version
* as specified. If false any version is ok.
* @return \c true if the reset was successful, \c false if the AI was no longer
* found.
*/
bool ResetInfo();
bool ResetInfo(bool force_exact_match);
/**
* Get the AIInfo linked to this AIConfig.

View File

@@ -170,13 +170,24 @@
* a random new AI on reload). */
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
if (_settings_game.ai_config[c] != NULL && _settings_game.ai_config[c]->HasAI()) {
if (!_settings_game.ai_config[c]->ResetInfo()) {
if (!_settings_game.ai_config[c]->ResetInfo(true)) {
DEBUG(ai, 0, "After a reload, the AI by the name '%s' was no longer found, and removed from the list.", _settings_game.ai_config[c]->GetName());
_settings_game.ai_config[c]->ChangeAI(NULL);
if (Company::IsValidAiID(c)) {
/* The code belonging to an already running AI was deleted. We can only do
* one thing here to keep everything sane and that is kill the AI. After
* killing the offending AI we start a random other one in it's place, just
* like what would happen if the AI was missing during loading. */
AI::Stop(c);
AI::StartNew(c, false);
}
} else if (Company::IsValidAiID(c)) {
/* Update the reference in the Company struct. */
Company::Get(c)->ai_info = _settings_game.ai_config[c]->GetInfo();
}
}
if (_settings_newgame.ai_config[c] != NULL && _settings_newgame.ai_config[c]->HasAI()) {
if (!_settings_newgame.ai_config[c]->ResetInfo()) {
if (!_settings_newgame.ai_config[c]->ResetInfo(false)) {
DEBUG(ai, 0, "After a reload, the AI by the name '%s' was no longer found, and removed from the list.", _settings_newgame.ai_config[c]->GetName());
_settings_newgame.ai_config[c]->ChangeAI(NULL);
}

View File

@@ -182,13 +182,20 @@ struct AIListWindow : public Window {
nwi->widget_data = (this->vscroll->GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (_game_mode == GM_NORMAL && Company::IsValidID(this->slot)) {
delete this;
return;
}
if (!gui_scope) return;
this->vscroll->SetCount((int)this->ai_info_list->size() + 1);
/* selected goes from -1 .. length of ai list - 1. */
@@ -367,6 +374,7 @@ struct AISettingsWindow : public Window {
/* One of the arrows is clicked (or green/red rect in case of bool value) */
if (IsInsideMM(x, 0, 21)) {
int new_val = this->ai_config->GetSetting(config_item.name);
int old_val = new_val;
if (bool_item) {
new_val = !new_val;
} else if (x >= 10) {
@@ -381,18 +389,19 @@ struct AISettingsWindow : public Window {
this->clicked_increase = false;
}
this->ai_config->SetSetting(config_item.name, new_val);
this->clicked_button = num;
this->timeout = 5;
if (new_val != old_val) {
this->ai_config->SetSetting(config_item.name, new_val);
this->clicked_button = num;
this->timeout = 5;
this->CheckDifficultyLevel();
this->CheckDifficultyLevel();
}
} else if (!bool_item) {
/* Display a query box so users can enter a custom value. */
this->clicked_row = num;
SetDParam(0, this->ai_config->GetSetting(config_item.name));
ShowQueryString(STR_JUST_INT, STR_CONFIG_SETTING_QUERY_CAPTION, 10, 100, this, CS_NUMERAL, QSF_NONE);
}
this->SetDirty();
break;
}
@@ -437,7 +446,12 @@ struct AISettingsWindow : public Window {
}
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (_game_mode == GM_NORMAL && Company::IsValidID(this->slot)) delete this;
}
@@ -692,12 +706,19 @@ struct AIConfigWindow : public Window {
}
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!IsEditable(this->selected_slot)) {
this->selected_slot = INVALID_COMPANY;
}
if (!gui_scope) return;
this->SetWidgetDisabledState(AIC_WIDGET_DECREASE, GetGameSettings().difficulty.max_no_competitors == 0);
this->SetWidgetDisabledState(AIC_WIDGET_INCREASE, GetGameSettings().difficulty.max_no_competitors == MAX_COMPANIES - 1);
this->SetWidgetDisabledState(AIC_WIDGET_CHANGE, this->selected_slot == INVALID_COMPANY);
@@ -797,9 +818,8 @@ struct AIDebugWindow : public QueryStringBaseWindow {
/* Check if the currently selected company is still active. */
if (ai_debug_company == INVALID_COMPANY || !Company::IsValidAiID(ai_debug_company)) {
if (ai_debug_company != INVALID_COMPANY) {
/* Raise and disable the widget for the previous selection. */
/* Raise the widget for the previous selection. */
this->RaiseWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
this->DisableWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
ai_debug_company = INVALID_COMPANY;
}
@@ -829,9 +849,6 @@ struct AIDebugWindow : public QueryStringBaseWindow {
if (this->show_break_box) this->DrawEditBox(AID_WIDGET_BREAK_STR_EDIT_BOX);
/* If there are no active companies, don't display anything else. */
if (ai_debug_company == INVALID_COMPANY) return;
/* Paint the company icons */
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
NWidgetCore *button = this->GetWidget<NWidgetCore>(i + AID_WIDGET_COMPANY_BUTTON_START);
@@ -862,6 +879,9 @@ struct AIDebugWindow : public QueryStringBaseWindow {
DrawCompanyIcon(i, button->pos_x + button->current_x / 2 - 7 + offset, this->GetWidget<NWidgetBase>(AID_WIDGET_COMPANY_BUTTON_START + i)->pos_y + 2 + offset);
}
/* If there are no active companies, don't display anything else. */
if (ai_debug_company == INVALID_COMPANY) return;
Backup<CompanyByte> cur_company(_current_company, ai_debug_company, FILE_LINE);
AILog::LogData *log = (AILog::LogData *)AIObject::GetLogPointer();
cur_company.Restore();
@@ -1032,11 +1052,16 @@ struct AIDebugWindow : public QueryStringBaseWindow {
return state;
}
virtual void OnInvalidateData(int data = 0)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (data == -1 || ai_debug_company == data) this->SetDirty();
if (data == -2) {
if (gui_scope && data == -2) {
/* The continue button should be disabled when the game is unpaused and
* it was previously paused by the break string ( = a line in the log
* was highlighted )*/
@@ -1048,8 +1073,9 @@ struct AIDebugWindow : public QueryStringBaseWindow {
}
}
/* If the log message is related to the active company tab, check the break string */
if (data == ai_debug_company && this->break_check_enabled && !StrEmpty(this->edit_str_buf)) {
/* If the log message is related to the active company tab, check the break string.
* This needs to be done in gameloop-scope, so the AI is suspended immediately. */
if (!gui_scope && data == ai_debug_company && this->break_check_enabled && !StrEmpty(this->edit_str_buf)) {
/* Get the log instance of the active company */
Backup<CompanyByte> cur_company(_current_company, ai_debug_company, FILE_LINE);
AILog::LogData *log = (AILog::LogData *)AIObject::GetLogPointer();

View File

@@ -131,7 +131,7 @@
extern uint8 GetAirportNoiseLevelForTown(const AirportSpec *as, TileIndex town_tile, TileIndex tile);
if (!::IsValidTile(tile)) return -1;
if (!IsValidAirportType(type)) return -1;
if (!IsAirportInformationAvailable(type)) return -1;
if (_settings_game.economy.station_noise_level) {
const AirportSpec *as = ::AirportSpec::Get(type);

View File

@@ -180,6 +180,7 @@ public:
* built at this tile.
* @param tile The tile to check.
* @param type The AirportType to check.
* @pre IsAirportInformationAvailable(type).
* @return The amount of noise added to the nearest town.
* @note The noise will be added to the town with TownID GetNearestTown(tile, type).
*/

View File

@@ -15,9 +15,15 @@
* functions may still be available if you return an older API version
* in GetAPIVersion() in info.nut.
*
* \b 1.1.0
* \b 1.1.2
*
* 1.1.0 is not yet released. The following changes are not set in stone yet.
* No changes
*
* \b 1.1.1
*
* No changes
*
* \b 1.1.0
*
* API additions:
* \li IsEnd for all lists.

View File

@@ -66,11 +66,11 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
if (order_position == AIOrder::ORDER_INVALID) return NULL;
}
const Order *order = v->orders.list->GetFirstOrder();
while (order->GetType() == OT_AUTOMATIC) order = order->next;
while (order->GetType() == OT_IMPLICIT) order = order->next;
while (order_position > 0) {
order_position = (AIOrder::OrderPosition)(order_position - 1);
order = order->next;
while (order->GetType() == OT_AUTOMATIC) order = order->next;
while (order->GetType() == OT_IMPLICIT) order = order->next;
}
return order;
}
@@ -135,12 +135,12 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
int cur_order_pos = ::Vehicle::Get(vehicle_id)->cur_real_order_index;
const Order *order = ::Vehicle::Get(vehicle_id)->GetOrder(0);
if (order == NULL) return ORDER_INVALID;
int num_automatic_orders = 0;
int num_implicit_orders = 0;
for (int i = 0; i < cur_order_pos; i++) {
if (order->GetType() == OT_AUTOMATIC) num_automatic_orders++;
if (order->GetType() == OT_IMPLICIT) num_implicit_orders++;
order = order->next;
}
return (AIOrder::OrderPosition)(cur_order_pos - num_automatic_orders);
return (AIOrder::OrderPosition)(cur_order_pos - num_implicit_orders);
}
return (order_position >= 0 && order_position < ::Vehicle::Get(vehicle_id)->GetNumManualOrders()) ? order_position : ORDER_INVALID;
}

View File

@@ -14,6 +14,7 @@
#include "ai_map.hpp"
#include "ai_station.hpp"
#include "ai_industrytype.hpp"
#include "ai_cargo.hpp"
#include "../../debug.h"
#include "../../station_base.h"
#include "../../company_func.h"
@@ -170,6 +171,7 @@
EnforcePrecondition(false, platform_length > 0 && platform_length <= 0xFF);
EnforcePrecondition(false, IsRailTypeAvailable(GetCurrentRailType()));
EnforcePrecondition(false, station_id == AIStation::STATION_NEW || station_id == AIStation::STATION_JOIN_ADJACENT || AIStation::IsValidStation(station_id));
EnforcePrecondition(false, AICargo::IsValidCargo(cargo_id));
EnforcePrecondition(false, source_industry == AIIndustryType::INDUSTRYTYPE_UNKNOWN || source_industry == AIIndustryType::INDUSTRYTYPE_TOWN || AIIndustryType::IsValidIndustryType(source_industry));
EnforcePrecondition(false, goal_industry == AIIndustryType::INDUSTRYTYPE_UNKNOWN || goal_industry == AIIndustryType::INDUSTRYTYPE_TOWN || AIIndustryType::IsValidIndustryType(goal_industry));

View File

@@ -279,6 +279,7 @@ public:
* @pre num_platforms > 0 && num_platforms <= 255.
* @pre platform_length > 0 && platform_length <= 255.
* @pre station_id == AIStation::STATION_NEW || station_id == AIStation::STATION_JOIN_ADJACENT || AIStation::IsValidStation(station_id).
* @pre AICargo::IsValidCargo(cargo_type)
* @pre source_industry == AIIndustryType::INDUSTRYTYPE_UNKNOWN || source_industry == AIIndustryType::INDUSTRYTYPE_TOWN || AIIndustryType::IsValidIndustryType(source_industry).
* @pre goal_industry == AIIndustryType::INDUSTRYTYPE_UNKNOWN || goal_industry == AIIndustryType::INDUSTRYTYPE_TOWN || AIIndustryType::IsValidIndustryType(goal_industry).
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY

View File

@@ -117,7 +117,8 @@ public:
/**
* Find out if this station is within the rating influence of a town.
* Stations within the radius influence the rating of the town.
* The service quality of stations with signs within this radius
* influences the rating of the town.
* @param station_id The station to check.
* @param town_id The town to check.
* @return True if the tile is within the rating influence of the town.

View File

@@ -13,6 +13,7 @@
#include "ai_tile.hpp"
#include "ai_map.hpp"
#include "ai_town.hpp"
#include "ai_cargo.hpp"
#include "../../station_func.h"
#include "../../company_func.h"
#include "../../water_map.h"
@@ -192,7 +193,7 @@
/* static */ int32 AITile::GetCargoAcceptance(TileIndex tile, CargoID cargo_type, int width, int height, int radius)
{
if (!::IsValidTile(tile) || width <= 0 || height <= 0 || radius < 0) return -1;
if (!::IsValidTile(tile) || width <= 0 || height <= 0 || radius < 0 || !AICargo::IsValidCargo(cargo_type)) return -1;
CargoArray acceptance = ::GetAcceptanceAroundTiles(tile, width, height, _settings_game.station.modified_catchment ? radius : (int)CA_UNMODIFIED);
return acceptance[cargo_type];
@@ -200,7 +201,7 @@
/* static */ int32 AITile::GetCargoProduction(TileIndex tile, CargoID cargo_type, int width, int height, int radius)
{
if (!::IsValidTile(tile) || width <= 0 || height <= 0 || radius < 0) return -1;
if (!::IsValidTile(tile) || width <= 0 || height <= 0 || radius < 0 || !AICargo::IsValidCargo(cargo_type)) return -1;
CargoArray produced = ::GetProductionAroundTiles(tile, width, height, _settings_game.station.modified_catchment ? radius : (int)CA_UNMODIFIED);
return produced[cargo_type];

View File

@@ -319,6 +319,7 @@ public:
* @param height The height of the station.
* @param radius The radius of the station.
* @pre AIMap::IsValidTile(tile).
* @pre AICargo::IsValidCargo(cargo_type)
* @pre width > 0.
* @pre height > 0.
* @pre radius >= 0.
@@ -335,6 +336,7 @@ public:
* @param height The height of the station.
* @param radius The radius of the station.
* @pre AIMap::IsValidTile(tile).
* @pre AICargo::IsValidCargo(cargo_type)
* @pre width > 0.
* @pre height > 0.
* @pre radius >= 0.
@@ -439,7 +441,8 @@ public:
/**
* Find out if this tile is within the rating influence of a town.
* Stations on this tile influence the rating of the town.
* If a station sign would be on this tile, the servicing quality of the station would
* influence the rating of the town.
* @param tile The tile to check.
* @param town_id The town to check.
* @return True if the tile is within the rating influence of the town.

View File

@@ -209,7 +209,8 @@ public:
/**
* Find out if this tile is within the rating influence of a town.
* Stations on this tile influence the rating of the town.
* If a station sign would be on this tile, the servicing quality of the station would
* influence the rating of the town.
* @param town_id The town to check.
* @param tile The tile to check.
* @pre IsValidTown(town_id).

View File

@@ -1243,12 +1243,18 @@ void AircraftNextAirportPos_and_Order(Aircraft *v)
v->pos = v->previous_pos = AircraftGetEntryPoint(v, apc, rotation);
}
/**
* Aircraft is about to leave the hangar.
* @param v Aircraft leaving.
*/
void AircraftLeaveHangar(Aircraft *v)
{
const Station *st = Station::GetByTile(v->tile);
v->cur_speed = 0;
v->subspeed = 0;
v->progress = 0;
v->direction = DIR_SE;
v->direction = st->airport.GetHangarExitDirection(v->tile);
v->vehstatus &= ~VS_HIDDEN;
{
Vehicle *u = v->Next();
@@ -1311,6 +1317,12 @@ static void AircraftEventHandler_InHangar(Aircraft *v, const AirportFTAClass *ap
!v->current_order.IsType(OT_GOTO_DEPOT))
return;
/* We are leaving a hangar, but have to go to the exact same one; re-enter */
if (v->current_order.IsType(OT_GOTO_DEPOT) && v->current_order.GetDestination() == v->targetairport) {
VehicleEnterDepot(v);
return;
}
/* if the block of the next position is busy, stay put */
if (AirportHasBlock(v, &apc->layout[v->pos], apc)) return;

View File

@@ -26,6 +26,7 @@
#include "widgets/dropdown_type.h"
#include "core/geometry_func.hpp"
#include "hotkeys.h"
#include "vehicle_func.h"
#include "sprite.h"
#include "table/strings.h"
@@ -195,6 +196,7 @@ Window *ShowBuildAirToolbar()
EventState AirportToolbarGlobalHotkeys(uint16 key, uint16 keycode)
{
if (!CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) return ES_NOT_HANDLED;
int num = CheckHotkeyMatch<BuildAirToolbarWindow>(_airtoolbar_hotkeys, keycode, NULL, true);
if (num == -1) return ES_NOT_HANDLED;
Window *w = ShowBuildAirToolbar();
@@ -422,11 +424,6 @@ public:
_selected_airport_index = airport_index;
_selected_airport_layout = 0;
if (_selected_airport_index != -1) {
const AirportSpec *as = AirportClass::Get(_selected_airport_class, _selected_airport_index);
this->preview_sprite = GetCustomAirportSprite(as, _selected_airport_layout);
}
this->UpdateSelectSize();
this->SetDirty();
}
@@ -445,6 +442,8 @@ public:
if (rotation == DIR_E || rotation == DIR_W) Swap(w, h);
SetTileSelectSize(w, h);
this->preview_sprite = GetCustomAirportSprite(as, _selected_airport_layout);
this->SetWidgetDisabledState(BAIRW_LAYOUT_DECREASE, _selected_airport_layout == 0);
this->SetWidgetDisabledState(BAIRW_LAYOUT_INCREASE, _selected_airport_layout + 1 >= as->num_table);
@@ -578,7 +577,7 @@ static const NWidgetPart _nested_build_airport_widgets[] = {
static const WindowDesc _build_airport_desc(
WDP_AUTO, 0, 0,
WC_BUILD_STATION, WC_BUILD_TOOLBAR,
WDF_CONSTRUCTION,
WDF_CONSTRUCTION | WDF_UNCLICK_BUTTONS,
_nested_build_airport_widgets, lengthof(_nested_build_airport_widgets)
);
@@ -590,4 +589,5 @@ static void ShowBuildAirportPicker(Window *parent)
void InitializeAirportGui()
{
_selected_airport_class = APC_BEGIN;
_selected_airport_index = -1;
}

View File

@@ -328,7 +328,7 @@ void AddArticulatedParts(Vehicle *first)
v = rv;
rv->subtype = 0;
gcache->cached_veh_length = 8; // Callback is called when the consist is finished
gcache->cached_veh_length = VEHICLE_LENGTH; // Callback is called when the consist is finished
rv->state = RVSB_IN_DEPOT;
rv->roadtype = front->roadtype;

View File

@@ -213,29 +213,35 @@ static CargoID GetNewCargoTypeForReplace(Vehicle *v, EngineID engine_type, bool
* Get the EngineID of the replacement for a vehicle
* @param v The vehicle to find a replacement for
* @param c The vehicle's owner (it's faster to forward the pointer than refinding it)
* @return the EngineID of the replacement. INVALID_ENGINE if no buildable replacement is found
* @param [out] e the EngineID of the replacement. INVALID_ENGINE if no replacement is found
* @return Error if the engine to build is not available
*/
static EngineID GetNewEngineType(const Vehicle *v, const Company *c)
static CommandCost GetNewEngineType(const Vehicle *v, const Company *c, EngineID &e)
{
assert(v->type != VEH_TRAIN || !v->IsArticulatedPart());
e = INVALID_ENGINE;
if (v->type == VEH_TRAIN && Train::From(v)->IsRearDualheaded()) {
/* we build the rear ends of multiheaded trains with the front ones */
return INVALID_ENGINE;
return CommandCost();
}
EngineID e = EngineReplacementForCompany(c, v->engine_type, v->group_id);
e = EngineReplacementForCompany(c, v->engine_type, v->group_id);
/* Autoreplace, if engine is available */
if (e != INVALID_ENGINE && IsEngineBuildable(e, v->type, _current_company)) {
return e;
return CommandCost();
}
if (v->NeedsAutorenewing(c) && // replace if engine is too old
IsEngineBuildable(v->engine_type, v->type, _current_company)) { // engine can still be build
return v->engine_type;
}
/* Autorenew if needed */
if (v->NeedsAutorenewing(c)) e = v->engine_type;
return INVALID_ENGINE;
/* Nothing to do or all is fine? */
if (e == INVALID_ENGINE || IsEngineBuildable(e, v->type, _current_company)) return CommandCost();
/* The engine we need is not available. Report error to user */
return CommandCost(STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE + v->type);
}
/**
@@ -252,7 +258,9 @@ static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehic
/* Shall the vehicle be replaced? */
const Company *c = Company::Get(_current_company);
EngineID e = GetNewEngineType(old_veh, c);
EngineID e;
CommandCost cost = GetNewEngineType(old_veh, c, e);
if (cost.Failed()) return cost;
if (e == INVALID_ENGINE) return CommandCost(); // neither autoreplace is set, nor autorenew is triggered
/* Does it need to be refitted */
@@ -260,7 +268,7 @@ static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehic
if (refit_cargo == CT_INVALID) return CommandCost(); // incompatible cargos
/* Build the new vehicle */
CommandCost cost = DoCommand(old_veh->tile, e, 0, DC_EXEC | DC_AUTOREPLACE, GetCmdBuildVeh(old_veh));
cost = DoCommand(old_veh->tile, e, 0, DC_EXEC | DC_AUTOREPLACE, GetCmdBuildVeh(old_veh));
if (cost.Failed()) return cost;
Vehicle *new_veh = Vehicle::Get(_new_vehicle_id);
@@ -662,8 +670,11 @@ CommandCost CmdAutoreplaceVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1
/* Test whether any replacement is set, before issuing a whole lot of commands that would end in nothing changed */
Vehicle *w = v;
bool any_replacements = false;
while (w != NULL && !any_replacements) {
any_replacements = (GetNewEngineType(w, c) != INVALID_ENGINE);
while (w != NULL) {
EngineID e;
CommandCost cost = GetNewEngineType(w, c, e);
if (cost.Failed()) return cost;
any_replacements |= (e != INVALID_ENGINE);
w = (!free_wagon && w->type == VEH_TRAIN ? Train::From(w)->GetNextUnit() : NULL);
}
@@ -731,7 +742,7 @@ CommandCost CmdSetAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
GroupID id_g = GB(p1, 16, 16);
CommandCost cost;
if (!Group::IsValidID(id_g) && !IsAllGroupID(id_g) && !IsDefaultGroupID(id_g)) return CMD_ERROR;
if (Group::IsValidID(id_g) ? Group::Get(id_g)->owner != _current_company : !IsAllGroupID(id_g) && !IsDefaultGroupID(id_g)) return CMD_ERROR;
if (!Engine::IsValidID(old_engine_type)) return CMD_ERROR;
if (new_engine_type != INVALID_ENGINE) {

View File

@@ -491,9 +491,15 @@ public:
this->GetWidget<NWidgetCore>(RVW_WIDGET_RIGHT_MATRIX)->widget_data = (this->vscroll[0]->GetCapacity() << MAT_ROW_START) + (1 << MAT_COL_START);
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (data != 0) {
/* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */
this->engines[0].ForceRebuild();
} else {
this->engines[1].ForceRebuild();

View File

@@ -13,6 +13,7 @@
#include "bmp.h"
#include "core/bitmath_func.hpp"
#include "core/alloc_func.hpp"
#include "core/mem_func.hpp"
void BmpInitializeBuffer(BmpBuffer *buffer, FILE *file)
{
@@ -129,53 +130,63 @@ static inline bool BmpRead4(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
*/
static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
{
uint i;
uint x = 0;
uint y = info->height - 1;
byte n, c, b;
byte *pixel = &data->bitmap[y * info->width];
while (y != 0 || x < info->width) {
if (EndOfBuffer(buffer)) return false; // the file is shorter than expected
n = ReadByte(buffer);
c = ReadByte(buffer);
byte n = ReadByte(buffer);
byte c = ReadByte(buffer);
if (n == 0) {
switch (c) {
case 0: // end of line
x = 0;
pixel = &data->bitmap[--y * info->width];
break;
case 1: // end of bitmap
x = info->width;
y = 0;
pixel = NULL;
break;
case 2: // delta
x += ReadByte(buffer);
i = ReadByte(buffer);
if (x >= info->width || (y == 0 && i > 0)) return false;
y -= i;
pixel = &data->bitmap[y * info->width + x];
break;
default: // uncompressed
i = 0;
while (i++ < c) {
if (EndOfBuffer(buffer) || x >= info->width) return false;
b = ReadByte(buffer);
*pixel++ = GB(b, 4, 4);
x++;
if (x < info->width && i++ < c) {
*pixel++ = GB(b, 0, 4);
x++;
}
case 0: // end of line
x = 0;
if (y == 0) return false;
pixel = &data->bitmap[--y * info->width];
break;
case 1: // end of bitmap
return true;
case 2: { // delta
if (EndOfBuffer(buffer)) return false;
byte dx = ReadByte(buffer);
byte dy = ReadByte(buffer);
/* Check for over- and underflow. */
if (x + dx >= info->width || x + dx < x || dy > y) return false;
x += dx;
y -= dy;
pixel = &data->bitmap[y * info->width + x];
break;
}
default: { // uncompressed
uint i = 0;
while (i++ < c) {
if (EndOfBuffer(buffer) || x >= info->width) return false;
byte b = ReadByte(buffer);
*pixel++ = GB(b, 4, 4);
x++;
if (i++ < c) {
if (x >= info->width) return false;
*pixel++ = GB(b, 0, 4);
x++;
}
}
/* Padding for 16 bit align */
SkipBytes(buffer, ((c + 1) / 2) % 2);
break;
}
/* Padding for 16 bit align */
SkipBytes(buffer, ((c + 1) / 2) % 2);
break;
}
} else {
i = 0;
while (i++ < n) {
if (EndOfBuffer(buffer) || x >= info->width) return false;
/* Apparently it is common to encounter BMPs where the count of
* pixels to be written is higher than the remaining line width.
* Ignore the superfluous pixels instead of reporting an error. */
uint i = 0;
while (x < info->width && i++ < n) {
*pixel++ = GB(c, 4, 4);
x++;
if (x < info->width && i++ < n) {
@@ -212,43 +223,55 @@ static inline bool BmpRead8(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
*/
static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
{
uint i;
uint x = 0;
uint y = info->height - 1;
byte n, c;
byte *pixel = &data->bitmap[y * info->width];
while (y != 0 || x < info->width) {
if (EndOfBuffer(buffer)) return false; // the file is shorter than expected
n = ReadByte(buffer);
c = ReadByte(buffer);
byte n = ReadByte(buffer);
byte c = ReadByte(buffer);
if (n == 0) {
switch (c) {
case 0: // end of line
x = 0;
pixel = &data->bitmap[--y * info->width];
break;
case 1: // end of bitmap
x = info->width;
y = 0;
pixel = NULL;
break;
case 2: // delta
x += ReadByte(buffer);
i = ReadByte(buffer);
if (x >= info->width || (y == 0 && i > 0)) return false;
y -= i;
pixel = &data->bitmap[y * info->width + x];
break;
default: // uncompressed
if ((x += c) > info->width) return false;
for (i = 0; i < c; i++) *pixel++ = ReadByte(buffer);
/* Padding for 16 bit align */
SkipBytes(buffer, c % 2);
break;
case 0: // end of line
x = 0;
if (y == 0) return false;
pixel = &data->bitmap[--y * info->width];
break;
case 1: // end of bitmap
return true;
case 2: { // delta
if (EndOfBuffer(buffer)) return false;
byte dx = ReadByte(buffer);
byte dy = ReadByte(buffer);
/* Check for over- and underflow. */
if (x + dx >= info->width || x + dx < x || dy > y) return false;
x += dx;
y -= dy;
pixel = &data->bitmap[y * info->width + x];
break;
}
default: { // uncompressed
for (uint i = 0; i < c; i++) {
if (EndOfBuffer(buffer) || x >= info->width) return false;
*pixel++ = ReadByte(buffer);
x++;
}
/* Padding for 16 bit align */
SkipBytes(buffer, c % 2);
break;
}
}
} else {
for (i = 0; i < n; i++) {
if (x >= info->width) return false;
/* Apparently it is common to encounter BMPs where the count of
* pixels to be written is higher than the remaining line width.
* Ignore the superfluous pixels instead of reporting an error. */
for (uint i = 0; x < info->width && i < n; i++) {
*pixel++ = c;
x++;
}
@@ -287,6 +310,7 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
{
uint32 header_size;
assert(info != NULL);
MemSetT(info, 0);
/* Reading BMP header */
if (ReadWord(buffer) != 0x4D42) return false; // signature should be 'BM'

View File

@@ -420,7 +420,11 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo
Money infra_cost = 0;
switch (transport_type) {
case TRANSPORT_ROAD: infra_cost = (bridge_len + 2) * _price[PR_BUILD_ROAD] * 2; break;
case TRANSPORT_ROAD:
infra_cost = (bridge_len + 2) * _price[PR_BUILD_ROAD] * 2;
/* In case we add a new road type as well, we must be aware of those costs. */
if (IsBridgeTile(start)) infra_cost *= CountBits(GetRoadTypes(start) | (RoadTypes)road_rail_type);
break;
case TRANSPORT_RAIL: infra_cost = (bridge_len + 2) * RailBuildCost((RailType)road_rail_type); break;
default: break;
}

View File

@@ -21,6 +21,7 @@
#include "newgrf_engine.h"
#include "newgrf_text.h"
#include "group.h"
#include "string_func.h"
#include "strings_func.h"
#include "window_func.h"
#include "date_func.h"
@@ -739,7 +740,7 @@ static uint ShowAdditionalText(int left, int right, int y, EngineID engine)
/* STR_BLACK_STRING is used to start the string with {BLACK} */
SetDParam(0, GetGRFStringID(GetEngineGRFID(engine), 0xD000 + callback));
PrepareTextRefStackUsage(0);
StartTextRefStackUsage(0);
uint result = DrawStringMultiLine(left, right, y, INT32_MAX, STR_BLACK_STRING);
StopTextRefStackUsage();
return result;
@@ -1218,8 +1219,14 @@ struct BuildVehicleWindow : Window {
}
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
/* When switching to original acceleration model for road vehicles, clear the selected sort criteria if it is not available now. */
if (this->vehicle_type == VEH_ROAD &&
_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL &&

View File

@@ -216,7 +216,7 @@ void CargoList<Tinst>::Truncate(uint max_remaining)
CargoPacket *cp = *it;
if (max_remaining == 0) {
/* Nothing should remain, just remove the packets. */
this->packets.erase(it++);
it = this->packets.erase(it);
static_cast<Tinst *>(this)->RemoveFromCache(cp);
delete cp;
continue;
@@ -276,7 +276,7 @@ bool CargoList<Tinst>::MoveTo(Tother_inst *dest, uint max_move, MoveToAction mta
if (cp->count <= max_move) {
/* Can move the complete packet */
max_move -= cp->count;
this->packets.erase(it++);
it = this->packets.erase(it);
static_cast<Tinst *>(this)->RemoveFromCache(cp);
switch (mta) {
case MTA_FINAL_DELIVERY:

View File

@@ -13,6 +13,7 @@
#include "cargotype.h"
#include "core/bitmath_func.hpp"
#include "newgrf_cargo.h"
#include "string_func.h"
#include "strings_func.h"
#include "core/sort_func.hpp"

View File

@@ -125,6 +125,7 @@ static int32 ClickChangeDateCheat(int32 p1, int32 p2)
EnginesMonthlyLoop();
SetWindowDirty(WC_STATUS_BAR, 0);
InvalidateWindowClassesData(WC_BUILD_STATION, 0);
InvalidateWindowClassesData(WC_BUILD_OBJECT, 0);
ResetSignalVariant();
return _cur_year;
}

View File

@@ -530,7 +530,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac
/* Only show the error when it's for us. */
StringID error_part1 = GB(cmd, 16, 16);
if (estimate_only || (IsLocalCompany() && error_part1 != 0 && my_cmd)) {
ShowErrorMessage(error_part1, res.GetErrorMessage(), WL_INFO, x, y);
ShowErrorMessage(error_part1, res.GetErrorMessage(), WL_INFO, x, y, res.GetTextRefStackSize(), res.GetTextRefStack());
}
} else if (estimate_only) {
ShowEstimatedCostOrIncome(res.GetCost(), x, y);
@@ -735,3 +735,25 @@ void CommandCost::AddCost(const CommandCost &ret)
this->success = false;
}
}
/**
* Values to put on the #TextRefStack for the error message.
* There is only one static instance of the array, just like there is only one
* instance of normal DParams.
*/
uint32 CommandCost::textref_stack[16];
/**
* Activate usage of the NewGRF #TextRefStack for the error message.
* @param number of entries to copy from the temporary NewGRF registers
*/
void CommandCost::UseTextRefStack(uint num_registers)
{
extern TemporaryStorageArray<int32, 0x110> _temp_store;
assert(num_registers < lengthof(textref_stack));
this->textref_stack_size = num_registers;
for (uint i = 0; i < num_registers; i++) {
textref_stack[i] = _temp_store.Get(0x100 + i);
}
}

View File

@@ -25,30 +25,33 @@ class CommandCost {
Money cost; ///< The cost of this action
StringID message; ///< Warning message for when success is unset
bool success; ///< Whether the comment went fine up to this moment
uint textref_stack_size; ///< Number of uint32 values to put on the #TextRefStack for the error message.
static uint32 textref_stack[16];
public:
/**
* Creates a command cost return with no cost and no error
*/
CommandCost() : expense_type(INVALID_EXPENSES), cost(0), message(INVALID_STRING_ID), success(true) {}
CommandCost() : expense_type(INVALID_EXPENSES), cost(0), message(INVALID_STRING_ID), success(true), textref_stack_size(0) {}
/**
* Creates a command return value the is failed with the given message
*/
explicit CommandCost(StringID msg) : expense_type(INVALID_EXPENSES), cost(0), message(msg), success(false) {}
explicit CommandCost(StringID msg) : expense_type(INVALID_EXPENSES), cost(0), message(msg), success(false), textref_stack_size(0) {}
/**
* Creates a command cost with given expense type and start cost of 0
* @param ex_t the expense type
*/
explicit CommandCost(ExpensesType ex_t) : expense_type(ex_t), cost(0), message(INVALID_STRING_ID), success(true) {}
explicit CommandCost(ExpensesType ex_t) : expense_type(ex_t), cost(0), message(INVALID_STRING_ID), success(true), textref_stack_size(0) {}
/**
* Creates a command return value with the given start cost and expense type
* @param ex_t the expense type
* @param cst the initial cost of this command
*/
CommandCost(ExpensesType ex_t, const Money &cst) : expense_type(ex_t), cost(cst), message(INVALID_STRING_ID), success(true) {}
CommandCost(ExpensesType ex_t, const Money &cst) : expense_type(ex_t), cost(cst), message(INVALID_STRING_ID), success(true), textref_stack_size(0) {}
/**
@@ -100,6 +103,26 @@ public:
this->message = message;
}
void UseTextRefStack(uint num_registers);
/**
* Returns the number of uint32 values for the #TextRefStack of the error message.
* @return number of uint32 values.
*/
uint GetTextRefStackSize() const
{
return this->textref_stack_size;
}
/**
* Returns a pointer to the values for the #TextRefStack of the error message.
* @return uint32 values for the #TextRefStack
*/
const uint32 *GetTextRefStack() const
{
return textref_stack;
}
/**
* Returns the error message of a command
* @return the error message, if succeeded #INVALID_STRING_ID

View File

@@ -556,7 +556,7 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY)
GeneratePresidentName(c);
SetWindowDirty(WC_GRAPH_LEGEND, 0);
SetWindowDirty(WC_TOOLBAR_MENU, 0);
SetWindowClassesDirty(WC_CLIENT_LIST_POPUP);
SetWindowDirty(WC_CLIENT_LIST, 0);
BuildOwnerLegend();
InvalidateWindowData(WC_SMALLMAP, 0, 1);
@@ -813,7 +813,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
#ifdef ENABLE_NETWORK
/* Has the network client a correct ClientIndex? */
if (!(flags & DC_EXEC)) return CommandCost();
NetworkClientInfo *ci = NetworkFindClientInfoFromClientID(client_id);
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
if (ci == NULL) return CommandCost();
/* Delete multiplayer progress bar */

View File

@@ -800,8 +800,14 @@ public:
}
}
virtual void OnInvalidateData(int data = 0)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
this->SetWidgetsDisabledState(true, SCLW_WIDGET_CLASS_RAIL, SCLW_WIDGET_CLASS_ROAD, SCLW_WIDGET_CLASS_SHIP, SCLW_WIDGET_CLASS_AIRCRAFT, WIDGET_LIST_END);
bool current_class_valid = this->livery_class == LC_OTHER;
@@ -1818,6 +1824,15 @@ struct CompanyWindow : Window
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
{
switch (widget) {
case CW_WIDGET_DESC_COLOUR_SCHEME_EXAMPLE: {
Point offset;
Dimension d = GetSpriteSize(SPR_VEH_BUS_SW_VIEW, &offset);
d.width -= offset.x;
d.height -= offset.y;
*size = maxdim(*size, d);
break;
}
case CW_WIDGET_DESC_COMPANY_VALUE:
SetDParam(0, INT64_MAX); // Arguably the maximum company value
size->width = GetStringBoundingBox(STR_COMPANY_VIEW_COMPANY_VALUE).width;
@@ -1863,9 +1878,13 @@ struct CompanyWindow : Window
DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE, TC_FROMSTRING, SA_CENTER);
break;
case CW_WIDGET_DESC_COLOUR_SCHEME_EXAMPLE:
DrawSprite(SPR_VEH_BUS_SW_VIEW, COMPANY_SPRITE_COLOUR(c->index), (r.left + r.right) / 2, r.top + FONT_HEIGHT_NORMAL / 10);
case CW_WIDGET_DESC_COLOUR_SCHEME_EXAMPLE: {
Point offset;
Dimension d = GetSpriteSize(SPR_VEH_BUS_SW_VIEW, &offset);
d.height -= offset.y;
DrawSprite(SPR_VEH_BUS_SW_VIEW, COMPANY_SPRITE_COLOUR(c->index), r.left - offset.x, (r.top + r.bottom - d.height) / 2 - offset.y);
break;
}
case CW_WIDGET_DESC_VEHICLE_COUNTS: {
uint amounts[4];

View File

@@ -490,17 +490,21 @@ DEF_CONSOLE_CMD(ConClearBuffer)
static bool ConKickOrBan(const char *argv, bool ban)
{
const char *ip = argv;
uint n;
if (strchr(argv, '.') == NULL && strchr(argv, ':') == NULL) { // banning with ID
ClientID client_id = (ClientID)atoi(argv);
if (client_id == CLIENT_ID_SERVER) {
/* Don't kill the server, or the client doing the rcon. The latter can't be kicked because
* kicking frees closes and subsequently free the connection related instances, which we
* would be reading from and writing to after returning. So we would read or write data
* from freed memory up till the segfault triggers. */
if (client_id == CLIENT_ID_SERVER || client_id == _redirect_console_to_client) {
IConsolePrintF(CC_ERROR, "ERROR: Silly boy, you can not %s yourself!", ban ? "ban" : "kick");
return true;
}
NetworkClientInfo *ci = NetworkFindClientInfoFromClientID(client_id);
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
if (ci == NULL) {
IConsoleError("Invalid client");
return true;
@@ -513,10 +517,11 @@ static bool ConKickOrBan(const char *argv, bool ban)
}
/* When banning, kick+ban all clients with that IP */
ip = GetClientIP(ci);
n = NetworkServerKickOrBanIP(client_id, ban);
} else {
n = NetworkServerKickOrBanIP(argv, ban);
}
uint n = NetworkServerKickOrBanIP(ip, ban);
if (n == 0) {
IConsolePrint(CC_DEFAULT, ban ? "Client not online, address added to banlist" : "Client not found");
} else {
@@ -695,7 +700,7 @@ DEF_CONSOLE_CMD(ConClientNickChange)
return true;
}
if (NetworkFindClientInfoFromClientID(client_id) == NULL) {
if (NetworkClientInfo::GetByClientID(client_id) == NULL) {
IConsoleError("Invalid client");
return true;
}
@@ -723,7 +728,7 @@ DEF_CONSOLE_CMD(ConJoinCompany)
return true;
}
if (NetworkFindClientInfoFromClientID(_network_own_client_id)->client_playas == company_id) {
if (NetworkClientInfo::GetByClientID(_network_own_client_id)->client_playas == company_id) {
IConsoleError("You are already there!");
return true;
}
@@ -762,7 +767,7 @@ DEF_CONSOLE_CMD(ConMoveClient)
return true;
}
const NetworkClientInfo *ci = NetworkFindClientInfoFromClientID((ClientID)atoi(argv[1]));
const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID((ClientID)atoi(argv[1]));
CompanyID company_id = (CompanyID)(atoi(argv[2]) <= MAX_COMPANIES ? atoi(argv[2]) - 1 : atoi(argv[2]));
/* check the client exists */
@@ -824,7 +829,7 @@ DEF_CONSOLE_CMD(ConResetCompany)
IConsoleError("Cannot remove company: a client is connected to that company.");
return false;
}
const NetworkClientInfo *ci = NetworkFindClientInfoFromClientID(CLIENT_ID_SERVER);
const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER);
if (ci->client_playas == index) {
IConsoleError("Cannot remove company: the server is connected to that company.");
return true;
@@ -1264,7 +1269,7 @@ DEF_CONSOLE_CMD(ConRescanNewGRF)
TarScanner::DoScan();
ScanNewGRFFiles();
InvalidateWindowData(WC_GAME_OPTIONS, 0, 1);
InvalidateWindowData(WC_GAME_OPTIONS, 0, GOID_NEWGRF_RESCANNED);
return true;
}
@@ -1635,7 +1640,7 @@ DEF_CONSOLE_CMD(ConCompanyPassword)
return false;
}
password = NetworkChangeCompanyPassword(company_id, password, false);
password = NetworkChangeCompanyPassword(company_id, password);
if (StrEmpty(password)) {
IConsolePrintF(CC_WARNING, "Company password cleared");

View File

@@ -22,6 +22,29 @@
void NORETURN MallocError(size_t size);
void NORETURN ReallocError(size_t size);
/**
* Checks whether allocating memory would overflow size_t.
*
* @param element_size Size of the structure to allocate.
* @param num_elements Number of elements to allocate.
*/
static inline void CheckAllocationConstraints(size_t element_size, size_t num_elements)
{
if (num_elements > SIZE_MAX / element_size) MallocError(SIZE_MAX);
}
/**
* Checks whether allocating memory would overflow size_t.
*
* @tparam T Structure to allocate.
* @param num_elements Number of elements to allocate.
*/
template <typename T>
static inline void CheckAllocationConstraints(size_t num_elements)
{
CheckAllocationConstraints(sizeof(T), num_elements);
}
/**
* Simplified allocation function that allocates the specified number of
* elements of the given type. It also explicitly casts it to the requested
@@ -42,6 +65,9 @@ static FORCEINLINE T *MallocT(size_t num_elements)
*/
if (num_elements == 0) return NULL;
/* Ensure the size does not overflow. */
CheckAllocationConstraints<T>(num_elements);
T *t_ptr = (T*)malloc(num_elements * sizeof(T));
if (t_ptr == NULL) MallocError(num_elements * sizeof(T));
return t_ptr;
@@ -96,12 +122,17 @@ static FORCEINLINE T *ReallocT(T *t_ptr, size_t num_elements)
return NULL;
}
/* Ensure the size does not overflow. */
CheckAllocationConstraints<T>(num_elements);
t_ptr = (T*)realloc(t_ptr, num_elements * sizeof(T));
if (t_ptr == NULL) ReallocError(num_elements * sizeof(T));
return t_ptr;
}
/** alloca() has to be called in the parent function, so define AllocaM() as a macro */
#define AllocaM(T, num_elements) ((T*)alloca((num_elements) * sizeof(T)))
#define AllocaM(T, num_elements) \
(CheckAllocationConstraints<T>(num_elements), \
(T*)alloca((num_elements) * sizeof(T)))
#endif /* ALLOC_FUNC_HPP */

View File

@@ -123,10 +123,6 @@ DEFINE_POOL_METHOD(void *)::GetNew(size_t size)
{
size_t index = this->FindFirstFree();
#ifdef OTTD_ASSERT
assert(this->checked != 0);
this->checked--;
#endif /* OTTD_ASSERT */
if (index == NO_FREE_ITEM) {
error("%s: no more free items", this->name);
}

View File

@@ -32,9 +32,6 @@ struct Pool {
size_t first_free; ///< No item with index lower than this is free (doesn't say anything about this one!)
size_t first_unused; ///< This and all higher indexes are free (doesn't say anything about first_unused-1 !)
size_t items; ///< Number of used indexes (non-NULL)
#ifdef OTTD_ASSERT
size_t checked; ///< Number of items we checked for
#endif /* OTTD_ASSERT */
bool cleaning; ///< True if cleaning pool (deleting all items)
Titem **data; ///< Pointer to array of pointers to Titem
@@ -71,11 +68,7 @@ struct Pool {
*/
FORCEINLINE bool CanAllocate(size_t n = 1)
{
bool ret = this->items <= Tmax_size - n;
#ifdef OTTD_ASSERT
this->checked = ret ? n : 0;
#endif /* OTTD_ASSERT */
return ret;
return this->items <= Tmax_size - n;
}
/**

View File

@@ -285,9 +285,10 @@ struct DepotWindow : Window {
DrawTrainImage(u, image_left + (rtl ? 0 : x_space), image_right - (rtl ? x_space : 0), sprite_y - 1,
this->sel, free_wagon ? 0 : this->hscroll->GetPosition(), this->vehicle_over);
/* Length of consist in tiles (rounded up) */
SetDParam(0, CeilDiv(u->gcache.cached_total_length, TILE_SIZE));
DrawString(rtl ? left + WD_FRAMERECT_LEFT : right - this->count_width, rtl ? left + this->count_width : right - WD_FRAMERECT_RIGHT, y + (this->resize.step_height - FONT_HEIGHT_SMALL) / 2, STR_TINY_BLACK_COMA, TC_FROMSTRING, SA_RIGHT); // Draw the counter
/* Length of consist in tiles with 1 fractional digit (rounded up) */
SetDParam(0, CeilDiv(u->gcache.cached_total_length * 10, TILE_SIZE));
SetDParam(1, 1);
DrawString(rtl ? left + WD_FRAMERECT_LEFT : right - this->count_width, rtl ? left + this->count_width : right - WD_FRAMERECT_RIGHT, y + (this->resize.step_height - FONT_HEIGHT_SMALL) / 2, STR_TINY_BLACK_DECIMAL, TC_FROMSTRING, SA_RIGHT); // Draw the counter
break;
}
@@ -598,8 +599,9 @@ struct DepotWindow : Window {
uint min_height = 0;
if (this->type == VEH_TRAIN) {
SetDParam(0, 100);
this->count_width = GetStringBoundingBox(STR_TINY_BLACK_COMA).width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
SetDParam(0, 1000);
SetDParam(1, 1);
this->count_width = GetStringBoundingBox(STR_TINY_BLACK_DECIMAL).width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
} else {
this->count_width = 0;
}
@@ -635,7 +637,12 @@ struct DepotWindow : Window {
}
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
this->generate_list = true;
}

View File

@@ -119,8 +119,14 @@ struct BuildDocksToolbarWindow : Window {
if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false);
}
void OnInvalidateData(int data = 0)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
this->SetWidgetsDisabledState(!CanBuildVehicleInfrastructure(VEH_SHIP),
DTW_DEPOT,
DTW_STATION,
@@ -130,7 +136,6 @@ struct BuildDocksToolbarWindow : Window {
virtual void OnClick(Point pt, int widget, int click_count)
{
this->last_clicked_widget = (DockToolbarWidgets)widget;
switch (widget) {
case DTW_CANAL: // Build canal button
HandlePlacePushButton(this, DTW_CANAL, SPR_CURSOR_CANAL, HT_RECT);
@@ -168,8 +173,9 @@ struct BuildDocksToolbarWindow : Window {
HandlePlacePushButton(this, DTW_BUILD_AQUEDUCT, SPR_CURSOR_AQUEDUCT, HT_SPECIAL);
break;
default: break;
default: return;
}
this->last_clicked_widget = (DockToolbarWidgets)widget;
}
virtual EventState OnKeyPress(uint16 key, uint16 keycode)

View File

@@ -292,6 +292,21 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
/* In all cases, make spectators of clients connected to that company */
if (_networking) NetworkClientsToSpectators(old_owner);
#endif /* ENABLE_NETWORK */
if (old_owner == _local_company) {
/* Single player cheated to AI company.
* There are no specatators in single player, so we must pick some other company. */
assert(!_networking);
Backup<CompanyByte> cur_company(_current_company, FILE_LINE);
Company *c;
FOR_ALL_COMPANIES(c) {
if (c->index != old_owner) {
SetLocalCompany(c->index);
break;
}
}
cur_company.Restore();
assert(old_owner != _local_company);
}
Town *t;
@@ -306,7 +321,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
for (i = 0; i < 4; i++) {
if (c->share_owners[i] == old_owner) {
/* Sell his shares */
CommandCost res = DoCommand(0, c->index, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
CommandCost res = DoCommand(0, c->index, 0, DC_EXEC | DC_BANKRUPT, CMD_SELL_SHARE_IN_COMPANY);
/* Because we are in a DoCommand, we can't just execute another one and
* expect the money to be removed. We need to do it ourself! */
SubtractMoneyFromCompany(res);
@@ -321,7 +336,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
cur_company2.Change(c->share_owners[i]);
if (_current_company != INVALID_OWNER) {
/* Sell the shares */
CommandCost res = DoCommand(0, old_owner, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
CommandCost res = DoCommand(0, old_owner, 0, DC_EXEC | DC_BANKRUPT, CMD_SELL_SHARE_IN_COMPANY);
/* Because we are in a DoCommand, we can't just execute another one and
* expect the money to be removed. We need to do it ourself! */
SubtractMoneyFromCompany(res);
@@ -1500,16 +1515,6 @@ static void DoAcquireCompany(Company *c)
owner->current_loan += c->current_loan;
}
Money value = CalculateCompanyValue(c) >> 2;
Backup<CompanyByte> cur_company(_current_company, FILE_LINE);
for (int i = 0; i != 4; i++) {
if (c->share_owners[i] != COMPANY_SPECTATOR) {
cur_company.Change(c->share_owners[i]);
SubtractMoneyFromCompany(CommandCost(EXPENSES_OTHER, -value));
}
}
cur_company.Restore();
if (c->is_ai) AI::Stop(c->index);
DeleteCompanyWindows(ci);
@@ -1589,9 +1594,12 @@ CommandCost CmdSellShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1
CompanyID target_company = (CompanyID)p1;
Company *c = Company::GetIfValid(target_company);
/* Check if selling shares is allowed (protection against modified clients)
* Cannot sell own shares */
if (c == NULL || !_settings_game.economy.allow_shares || _current_company == target_company) return CMD_ERROR;
/* Cannot sell own shares */
if (c == NULL || _current_company == target_company) return CMD_ERROR;
/* Check if selling shares is allowed (protection against modified clients).
* However, we must sell shares of companies being closed down. */
if (!_settings_game.economy.allow_shares && !(flags & DC_BANKRUPT)) return CMD_ERROR;
/* Those lines are here for network-protection (clients can be slow) */
if (GetAmountOwnedBy(c, _current_company) == 0) return CommandCost();

View File

@@ -310,7 +310,6 @@ static void DrawCatenaryRailway(const TileInfo *ti)
};
SpriteID pylon_base = (halftile_corner != CORNER_INVALID && HasBit(edge_corners[i], halftile_corner)) ? pylon_halftile : pylon_normal;
TileIndex neighbour = ti->tile + TileOffsByDiagDir(i);
Foundation foundation = FOUNDATION_NONE;
byte elevation = GetPCPElevation(ti->tile, i);
/* Here's one of the main headaches. GetTileSlope does not correct for possibly
@@ -361,8 +360,10 @@ static void DrawCatenaryRailway(const TileInfo *ti)
PPPallowed[i] = 0;
}
/* A station is always "flat", so adjust the tileh accordingly */
if (IsTileType(neighbour, MP_STATION)) tileh[TS_NEIGHBOUR] = SLOPE_FLAT;
Foundation foundation = FOUNDATION_NONE;
/* Station and road crossings are always "flat", so adjust the tileh accordingly */
if (IsTileType(neighbour, MP_STATION) || IsTileType(neighbour, MP_ROAD)) tileh[TS_NEIGHBOUR] = SLOPE_FLAT;
/* Read the foundataions if they are present, and adjust the tileh */
if (trackconfig[TS_NEIGHBOUR] != TRACK_BIT_NONE && IsTileType(neighbour, MP_RAILWAY) && HasCatenary(GetRailType(neighbour))) foundation = GetRailFoundation(tileh[TS_NEIGHBOUR], trackconfig[TS_NEIGHBOUR]);

View File

@@ -91,6 +91,8 @@ Engine::Engine(VehicleType type, EngineID base)
this->info.base_life = 0xFF;
/* Set road vehicle tractive effort to the default value */
if (type == VEH_ROAD) this->u.road.tractive_effort = 0x4C;
/* Aircraft must have CT_INVALID as default, as there is no property */
if (type == VEH_AIRCRAFT) this->info.cargo_type = CT_INVALID;
/* Set visual effect to the default value */
switch (type) {
case VEH_TRAIN: this->u.rail.visual_effect = VE_DEFAULT; break;

View File

@@ -21,9 +21,7 @@
#include <Path.h>
#include <storage/FindDirectory.h>
#else
#if defined(OPENBSD) || defined(DOS)
#include <unistd.h>
#endif
#include <pwd.h>
#endif
#include <sys/stat.h>
@@ -860,8 +858,9 @@ extern void DetermineBasePaths(const char *exe);
* in the same way we remove the name from the executable name.
* @param exe the path to the executable
*/
void ChangeWorkingDirectory(const char *exe)
static bool ChangeWorkingDirectoryToExecutable(const char *exe)
{
bool success = false;
#ifdef WITH_COCOA
char *app_bundle = strchr(exe, '.');
while (app_bundle != NULL && strncasecmp(app_bundle, ".app", 4) != 0) app_bundle = strchr(&app_bundle[1], '.');
@@ -875,12 +874,17 @@ void ChangeWorkingDirectory(const char *exe)
/* If we want to go to the root, we can't use cd C:, but we must use '/' */
if (s[-1] == ':') chdir("/");
#endif
if (chdir(exe) != 0) DEBUG(misc, 0, "Directory with the binary does not exist?");
if (chdir(exe) != 0) {
DEBUG(misc, 0, "Directory with the binary does not exist?");
} else {
success = true;
}
*s = PATHSEPCHAR;
}
#ifdef WITH_COCOA
if (app_bundle != NULL) app_bundle[0] = '.';
#endif /* WITH_COCOA */
return success;
}
/**
@@ -958,14 +962,19 @@ void DetermineBasePaths(const char *exe)
_do_scan_working_directory = DoScanWorkingDirectory();
/* Change the working directory to that one of the executable */
ChangeWorkingDirectory(exe);
if (getcwd(tmp, MAX_PATH) == NULL) *tmp = '\0';
AppendPathSeparator(tmp, MAX_PATH);
_searchpaths[SP_BINARY_DIR] = strdup(tmp);
if (ChangeWorkingDirectoryToExecutable(exe)) {
if (getcwd(tmp, MAX_PATH) == NULL) *tmp = '\0';
AppendPathSeparator(tmp, MAX_PATH);
_searchpaths[SP_BINARY_DIR] = strdup(tmp);
} else {
_searchpaths[SP_BINARY_DIR] = NULL;
}
if (_searchpaths[SP_WORKING_DIR] != NULL) {
/* Go back to the current working directory. */
ChangeWorkingDirectory(_searchpaths[SP_WORKING_DIR]);
if (chdir(_searchpaths[SP_WORKING_DIR]) != 0) {
DEBUG(misc, 0, "Failed to return to working directory!");
}
}
#if defined(__MORPHOS__) || defined(__AMIGA__) || defined(DOS) || defined(OS2)

View File

@@ -211,6 +211,9 @@ void BuildFileList()
default: FiosGetSavegameList(_saveload_mode); break;
}
/* Invalidate saveload window */
InvalidateWindowData(WC_SAVELOAD, 0, 2, true);
}
static void MakeSortedSaveGameList()
@@ -659,17 +662,24 @@ public:
this->vscroll->SetCapacityFromWidget(this, SLWW_DRIVES_DIRECTORIES_LIST);
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
switch (data) {
case 0:
/* Rescan files */
this->selected = NULL;
_load_check_data.Clear();
if (!gui_scope) break;
BuildFileList();
/* FALL THROUGH */
case 1:
/* Selection changes */
if (!gui_scope) break;
if (_saveload_mode == SLD_LOAD_GAME || _saveload_mode == SLD_LOAD_SCENARIO) {
this->SetWidgetDisabledState(SLWW_LOAD_BUTTON,
this->selected == NULL || _load_check_data.HasErrors() || !(_load_check_data.grf_compatibility != GLC_NOT_FOUND || _settings_client.gui.UserIsAllowedToChangeNewGRFs()));
@@ -677,6 +687,12 @@ public:
!_load_check_data.HasNewGrfs());
}
break;
case 2:
/* _fios_items changed */
this->vscroll->SetCount(_fios_items.Length());
this->selected = NULL;
_load_check_data.Clear();
break;
}
}
};

View File

@@ -1034,6 +1034,9 @@ const Sprite *GetGlyph(FontSize size, WChar key)
width = max(1, slot->bitmap.width + (size == FS_NORMAL));
height = max(1, slot->bitmap.rows + (size == FS_NORMAL));
/* Limit glyph size to prevent overflows later on. */
if (width > 256 || height > 256) usererror("Font glyph is too large");
/* FreeType has rendered the glyph, now we allocate a sprite and copy the image into it */
sprite.AllocateData(width * height);
sprite.width = width;

View File

@@ -425,8 +425,14 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
}
}
virtual void OnInvalidateData(int data = 0)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
/* Update the climate buttons */
this->SetWidgetLoweredState(GLAND_TEMPERATE, _settings_newgame.game_creation.landscape == LT_TEMPERATE);
this->SetWidgetLoweredState(GLAND_ARCTIC, _settings_newgame.game_creation.landscape == LT_ARCTIC);
@@ -596,14 +602,22 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
this->SetDirty();
break;
case GLAND_GENERATE_BUTTON: // Generate
MakeNewgameSettingsLive();
case GLAND_GENERATE_BUTTON: { // Generate
/* Get rotated map size. */
uint map_x;
uint map_y;
if (_settings_newgame.game_creation.heightmap_rotation == HM_CLOCKWISE) {
map_x = this->y;
map_y = this->x;
} else {
map_x = this->x;
map_y = this->y;
}
if (mode == GLWM_HEIGHTMAP &&
(this->x * 2 < (1U << _settings_newgame.game_creation.map_x) ||
this->x / 2 > (1U << _settings_newgame.game_creation.map_x) ||
this->y * 2 < (1U << _settings_newgame.game_creation.map_y) ||
this->y / 2 > (1U << _settings_newgame.game_creation.map_y))) {
(map_x * 2 < (1U << _settings_newgame.game_creation.map_x) ||
map_x / 2 > (1U << _settings_newgame.game_creation.map_x) ||
map_y * 2 < (1U << _settings_newgame.game_creation.map_y) ||
map_y / 2 > (1U << _settings_newgame.game_creation.map_y))) {
ShowQuery(
STR_WARNING_HEIGHTMAP_SCALE_CAPTION,
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE,
@@ -613,6 +627,7 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
StartGeneratingLandscape(mode);
}
break;
}
case GLAND_START_DATE_DOWN:
case GLAND_START_DATE_UP: // Year buttons

View File

@@ -1114,13 +1114,19 @@ skip_cont:;
/**
* Get the size of a sprite.
* @param sprid Sprite to examine.
* @param [out] offset Optionally returns the sprite position offset.
* @return Sprite size in pixels.
* @note The size assumes (0, 0) as top-left coordinate and ignores any part of the sprite drawn at the left or above that position.
*/
Dimension GetSpriteSize(SpriteID sprid)
Dimension GetSpriteSize(SpriteID sprid, Point *offset)
{
const Sprite *sprite = GetSprite(sprid, ST_NORMAL);
if (offset != NULL) {
offset->x = sprite->x_offs;
offset->y = sprite->y_offs;
}
Dimension d;
d.width = max<int>(0, sprite->x_offs + sprite->width);
d.height = max<int>(0, sprite->y_offs + sprite->height);

View File

@@ -88,7 +88,7 @@ static const int DRAW_STRING_BUFFER = 2048;
void RedrawScreenRect(int left, int top, int right, int bottom);
void GfxScroll(int left, int top, int width, int height, int xo, int yo);
Dimension GetSpriteSize(SpriteID sprid);
Dimension GetSpriteSize(SpriteID sprid, Point *offset = NULL);
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = NULL);
/** How to align the to-be drawn text. */

View File

@@ -91,8 +91,14 @@ struct GraphLegendWindow : Window {
InvalidateWindowData(WC_COMPANY_VALUE, 0);
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
if (Company::IsValidID(data)) return;
SetBit(_legend_excluded_companies, data);
@@ -543,8 +549,14 @@ public:
this->UpdateStatistics(false);
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
this->UpdateStatistics(true);
}
@@ -1013,8 +1025,14 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
/* Override default OnTick */
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
this->OnHundredthTick();
}
@@ -1247,9 +1265,15 @@ public:
}
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (data == 0) {
/* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */
this->companies.ForceRebuild();
} else {
this->companies.ForceResort();
@@ -1488,11 +1512,13 @@ struct PerformanceRatingDetailWindow : Window {
}
/**
* Invalidate the data of this window.
* Some data on this window has become invalid.
* @param data the company ID of the company that is going to be removed
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data)
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
/* Disable the companies who are not active */
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
this->SetWidgetDisabledState(i + PRW_COMPANY_FIRST, !Company::IsValidID(i));

View File

@@ -42,7 +42,7 @@ struct GroundVehicleCache {
/* Cached NewGRF values, recalculated on load and each time a vehicle is added to/removed from the consist. */
uint16 cached_total_length; ///< Length of the whole vehicle (valid only for the first engine).
EngineID first_engine; ///< Cached EngineID of the front vehicle. INVALID_ENGINE for the front vehicle itself.
uint8 cached_veh_length; ///< Length of this vehicle in units of 1/8 of normal length. It is cached because this can be set by a callback.
uint8 cached_veh_length; ///< Length of this vehicle in units of 1/VEHICLE_LENGTH of normal length. It is cached because this can be set by a callback.
/* Cached UI information. */
uint16 last_speed; ///< The last speed we did display, so we only have to redraw when this changes.
@@ -50,8 +50,9 @@ struct GroundVehicleCache {
/** Ground vehicle flags. */
enum GroundVehicleFlags {
GVF_GOINGUP_BIT = 0,
GVF_GOINGDOWN_BIT = 1,
GVF_GOINGUP_BIT = 0, ///< Vehicle is currently going uphill. (Cached track information for acceleration)
GVF_GOINGDOWN_BIT = 1, ///< Vehicle is currently going downhill. (Cached track information for acceleration)
GVF_SUPPRESS_IMPLICIT_ORDERS = 2, ///< Disable insertion and removal of automatic orders until the vehicle completes the real order.
};
/**

View File

@@ -15,6 +15,7 @@
#include "vehicle_gui.h"
#include "vehicle_base.h"
#include "group.h"
#include "string_func.h"
#include "strings_func.h"
#include "window_func.h"
#include "vehicle_func.h"
@@ -253,9 +254,15 @@ public:
}
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (data == 0) {
/* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */
this->vehicles.ForceRebuild();
this->groups.ForceRebuild();
} else {
@@ -263,6 +270,7 @@ public:
this->groups.ForceResort();
}
/* Process ID-invalidation in command-scope as well */
if (this->group_rename != INVALID_GROUP && !Group::IsValidID(this->group_rename)) {
DeleteWindowByClass(WC_QUERY_STRING);
this->group_rename = INVALID_GROUP;

View File

@@ -63,7 +63,7 @@ enum WarningLevel {
WL_CRITICAL, ///< Critical errors, the MessageBox is shown in all cases
};
void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x = 0, int y = 0);
void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x = 0, int y = 0, uint textref_stack_size = 0, const uint32 *textref_stack = NULL);
void ShowExtraViewPortWindow(TileIndex tile = INVALID_TILE);
void ShowExtraViewPortWindowForTileUnderCursor();

View File

@@ -142,13 +142,24 @@ static bool ReadHeightmapPNG(char *filename, uint *x, uint *y, byte **map)
return false;
}
uint width = png_get_image_width(png_ptr, info_ptr);
uint height = png_get_image_height(png_ptr, info_ptr);
/* Check if image dimensions don't overflow a size_t to avoid memory corruption. */
if ((uint64)width * height >= (size_t)-1) {
ShowErrorMessage(STR_ERROR_PNGMAP, STR_ERROR_HEIGHTMAP_TOO_LARGE, WL_ERROR);
fclose(fp);
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
return false;
}
if (map != NULL) {
*map = MallocT<byte>(png_get_image_width(png_ptr, info_ptr) * png_get_image_height(png_ptr, info_ptr));
*map = MallocT<byte>(width * height);
ReadHeightmapPNGImageData(*map, png_ptr, info_ptr);
}
*x = png_get_image_width(png_ptr, info_ptr);
*y = png_get_image_height(png_ptr, info_ptr);
*x = width;
*y = height;
fclose(fp);
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
@@ -243,6 +254,14 @@ static bool ReadHeightmapBMP(char *filename, uint *x, uint *y, byte **map)
return false;
}
/* Check if image dimensions don't overflow a size_t to avoid memory corruption. */
if ((uint64)info.width * info.height >= (size_t)-1 / (info.bpp == 24 ? 3 : 1)) {
ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_HEIGHTMAP_TOO_LARGE, WL_ERROR);
fclose(f);
BmpDestroyData(&data);
return false;
}
if (map != NULL) {
if (!BmpReadBitmap(&buffer, &info, &data)) {
ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR);

View File

@@ -74,7 +74,8 @@ static uint16 ParseCode(const char *start, const char *end)
}
if (end - start == 1) {
if (*start >= 'a' && *start <= 'z') return *start - ('a'-'A');
return *start;
/* Ignore invalid keycodes */
if (*(uint8*)start < 128) return *start;
}
return 0;
}
@@ -95,6 +96,8 @@ static uint16 ParseKeycode(const char *start, const char *end)
uint16 code = ParseCode(start, cur);
if (code == 0) return 0;
if (code & WKC_SPECIAL_KEYS) {
/* Some completely wrong keycode we don't support. */
if (code & ~WKC_SPECIAL_KEYS) return 0;
keycode |= code;
} else {
/* Ignore the code if it has more then 1 letter. */

View File

@@ -74,7 +74,7 @@ static void GetCargoSuffix(uint cargo, CargoSuffixType cst, const Industry *ind,
if (HasBit(indspec->callback_mask, CBM_IND_CARGO_SUFFIX)) {
uint16 callback = GetIndustryCallback(CBID_INDUSTRY_CARGO_SUFFIX, 0, (cst << 8) | cargo, const_cast<Industry *>(ind), ind_type, (cst != CST_FUND) ? ind->location.tile : INVALID_TILE);
if (GB(callback, 0, 8) != 0xFF) {
PrepareTextRefStackUsage(6);
StartTextRefStackUsage(6);
GetString(suffix, GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 + callback), suffix_last);
StopTextRefStackUsage();
}
@@ -458,8 +458,8 @@ public:
if (callback_res != CALLBACK_FAILED) { // Did it fail?
str = GetGRFStringID(indsp->grf_prop.grffile->grfid, 0xD000 + callback_res); // No. here's the new string
if (str != STR_UNDEFINED) {
PrepareTextRefStackUsage(6);
DrawStringMultiLine(left, right, y, bottom, str);
StartTextRefStackUsage(6);
DrawStringMultiLine(left, right, y, bottom, str, TC_YELLOW);
StopTextRefStackUsage();
}
}
@@ -597,8 +597,14 @@ public:
this->RaiseButtons();
}
virtual void OnInvalidateData(int data = 0)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
this->SetupArrays();
const IndustrySpec *indsp = (this->selected_type == INVALID_INDUSTRYTYPE) ? NULL : GetIndustrySpec(this->selected_type);
@@ -782,11 +788,11 @@ public:
if (message != STR_NULL && message != STR_UNDEFINED) {
y += WD_PAR_VSEP_WIDE;
PrepareTextRefStackUsage(6);
StartTextRefStackUsage(6);
/* Use all the available space left from where we stand up to the
* end of the window. We ALSO enlarge the window if needed, so we
* can 'go' wild with the bottom of the window. */
y = DrawStringMultiLine(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, y, UINT16_MAX, message);
y = DrawStringMultiLine(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, y, UINT16_MAX, message, TC_BLACK);
StopTextRefStackUsage();
}
}
@@ -947,8 +953,14 @@ public:
this->SetDirty();
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
const Industry *i = Industry::Get(this->window_number);
if (IsProductionAlterable(i)) {
const IndustrySpec *ind = GetIndustrySpec(i->type);
@@ -1334,20 +1346,31 @@ public:
this->vscroll->SetCapacityFromWidget(this, IDW_INDUSTRY_LIST);
}
virtual void OnPaint()
{
if (this->industries.NeedRebuild()) this->BuildSortIndustriesList();
this->DrawWidgets();
}
virtual void OnHundredthTick()
{
this->industries.ForceResort();
this->BuildSortIndustriesList();
}
virtual void OnInvalidateData(int data)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (data == 0) {
/* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */
this->industries.ForceRebuild();
} else {
this->industries.ForceResort();
}
this->BuildSortIndustriesList();
}
};
@@ -2386,13 +2409,15 @@ struct IndustryCargoesWindow : public Window {
}
/**
* Notify the window about external events.
* Some data on this window has become invalid.
* @param data Information about the changed data.
* - data = 0 .. NUM_INDUSTRYTYPES - 1: Display the chain around the given industry.
* - data = NUM_INDUSTRYTYPES: Stop sending updates to the smallmap window.
* @param data The event.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data)
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
if (data == NUM_INDUSTRYTYPES) {
if (this->IsWidgetLowered(ICW_NOTIFY)) {
this->RaiseWidget(ICW_NOTIFY);

View File

@@ -55,8 +55,14 @@ struct SelectGameWindow : public Window {
this->OnInvalidateData();
}
virtual void OnInvalidateData(int data = 0)
/**
* Some data on this window has become invalid.
* @param data Information about the changed data.
* @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details.
*/
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
this->SetWidgetLoweredState(SGI_TEMPERATE_LANDSCAPE, _settings_newgame.game_creation.landscape == LT_TEMPERATE);
this->SetWidgetLoweredState(SGI_ARCTIC_LANDSCAPE, _settings_newgame.game_creation.landscape == LT_ARCTIC);
this->SetWidgetLoweredState(SGI_TROPIC_LANDSCAPE, _settings_newgame.game_creation.landscape == LT_TROPIC);

View File

@@ -214,6 +214,8 @@ STR_UNITS_VOLUME_LONG_SI :{COMMA} m³
STR_UNITS_FORCE_SI :{COMMA} kN
STR_UNITS_HEIGHT_IMPERIAL :{COMMA} ft
STR_UNITS_HEIGHT_SI :{COMMA} m
# Common window strings
STR_LIST_FILTER_OSKTITLE :{BLACK}Sleutel 'n filter string
@@ -229,6 +231,7 @@ STR_BUTTON_RENAME :{BLACK}Hernoem
STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Maak venster toe
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Venster titel - sleep om venster te beweeg
STR_TOOLTIP_SHADE :{BLACK}Skerm venster - Slegs die titelstaaf sal vertoon word
STR_TOOLTIP_DEBUG :{BLACK}Toon NewGRF debug informasie
STR_TOOLTIP_STICKY :{BLACK}Merk die venster as ontoemaakbaar met die"Sluit Alle Vensters" sleutel
STR_TOOLTIP_RESIZE :{BLACK}Kliek en sleep om venster te vergroot
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Tokkel groot/klein venster groote
@@ -281,6 +284,7 @@ STR_SORT_BY_RATING_MIN :Laagte vrag gra
STR_SORT_BY_ENGINE_ID :EngineID (klassieke sorteer)
STR_SORT_BY_COST :Koste
STR_SORT_BY_POWER :Krag
STR_SORT_BY_TRACTIVE_EFFORT :Trekker inspanning
STR_SORT_BY_INTRO_DATE :Inleiding Datum
STR_SORT_BY_RUNNING_COST :Loopkoste
STR_SORT_BY_POWER_VS_RUNNING_COST :Krag/Loopkoste
@@ -330,6 +334,7 @@ STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Nywerhei
STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Pad konstruksie
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant bome
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Plaas teken
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Plaas voorwerp. Shift skakel tussen bou/aanduiding koste beraming
############ range for SE file menu starts
STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Stoor draaiboek
@@ -344,6 +349,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Verlaat
STR_SETTINGS_MENU_GAME_OPTIONS :Spel opsies
STR_SETTINGS_MENU_DIFFICULTY_SETTINGS :Moelikheid stellings
STR_SETTINGS_MENU_CONFIG_SETTINGS :Gevorderde stellings
STR_SETTINGS_MENU_AI_SETTINGS :AI instellings
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF stellings
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Deursigtigheid opsies
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Dorp name vertoon
@@ -438,8 +444,10 @@ STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_TOGGLE_CONSOLE :Tokkel terminaal
STR_ABOUT_MENU_AI_DEBUG :AI ontfout
STR_ABOUT_MENU_SCREENSHOT :Skermskoot (Ctrl-S)
STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Vergrote skermskoot
STR_ABOUT_MENU_GIANT_SCREENSHOT :Groot Skermskoot (Ctrl+G)
STR_ABOUT_MENU_ABOUT_OPENTTD :Oor 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :"Sprite" rigter
############ range ends here
############ range for days starts (also used for the place in the highscore window)
@@ -521,6 +529,9 @@ STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Maatskap
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Vrag Betaalings Grade
STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINYFONT}{BLACK}Dae in deurtog
STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINYFONT}{BLACK}Betaaling vir aflewering van 10 eenhuide (of 10,000 liters) van vrag 'n afstand van 20 blokkies
STR_GRAPH_CARGO_ENABLE_ALL :{TINYFONT}{BLACK}Skakel alles aan
STR_GRAPH_CARGO_DISABLE_ALL :{TINYFONT}{BLACK}Skakel alles af
STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Toon alle vragte op die vrag betalingskostes grafiek
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Skakel grafiek vir vrag tipe aan/af
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINYFONT}{BLACK}{STRING}
@@ -549,6 +560,7 @@ STR_PERFORMANCE_DETAIL_KEY :{BLACK}Aanwyse
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRCOMPACT}/{CURRCOMPACT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}%
STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Kyk besonderhede van hierdie maatskappy
############ Those following lines need to be in this order!!
STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Voertuie:
STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Stasies:
@@ -685,6 +697,7 @@ STR_SMALLMAP_LEGENDA_SNOW :{TINYFONT}{BLAC
STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Tokkel dorp name aan/af op kaart
STR_SMALLMAP_CENTER :{BLACK}Senter die kleinkaart op die huidige posisie
STR_SMALLMAP_INDUSTRY :{TINYFONT}{STRING} ({NUM})
STR_SMALLMAP_COMPANY :{TINYFONT}{COMPANY}
STR_SMALLMAP_TOWN :{TINYFONT}{WHITE}{TOWN}
STR_SMALLMAP_DISABLE_ALL :{BLACK}Sper alle
STR_SMALLMAP_ENABLE_ALL :{BLACK}Ontsper alle
@@ -692,6 +705,8 @@ STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Vertoon
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Moet nie enige nywerheide op die kaart vertoon
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Vertoon alle nywerheide op die kaart
STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Tokkel vertooning van hoogtekaart
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Vertoon geen maatskappy eiendom op die kaart
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Vertoon alle maatskappy eiendom op die kaart
# Status bar messages
STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Wys laaste boodskap of nuus verslag
@@ -1010,6 +1025,8 @@ STR_DIFFICULTY_LEVEL_SETTING_CITY_APPROVAL :{LTBLUE}Stad ra
############ range for difficulty settings ends
STR_NONE :Geen
STR_FUNDING_ONLY :Befondsing alleen
STR_MINIMAL :Minimale
STR_NUM_VERY_LOW :Baie laag
STR_NUM_LOW :Laag
STR_NUM_NORMAL :Normaal
@@ -1056,7 +1073,6 @@ STR_REVERSE_AT_END_OF_LINE_ONLY :Slegs op die en
STR_DISASTERS_OFF :Af
STR_DISASTERS_ON :Aan
STR_CITY_APPROVAL_PERMISSIVE :Permissief
STR_CITY_APPROVAL_TOLERANT :Toelaatbaar
STR_CITY_APPROVAL_HOSTILE :Vyandelik
@@ -1070,10 +1086,17 @@ STR_CONFIG_SETTING_CAPTION :{WHITE}Gevorder
STR_CONFIG_SETTING_OFF :Af
STR_CONFIG_SETTING_ON :Aan
STR_CONFIG_SETTING_DISABLED :gestrem
STR_CONFIG_SETTING_BUILDONSLOPES :{LTBLUE}Laat bou op skuinstes en kusse toe: {ORANGE}{STRING}
STR_CONFIG_SETTING_AUTOSLOPE :{LTBLUE}Laat terraforming toe onder geboue, spoore, ens. (autoslope): {ORANGE}{STRING}
STR_CONFIG_SETTING_CATCHMENT :{LTBLUE}Laat meer realisties grootte opvangsgebied toe: {ORANGE}{STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE :{LTBLUE}Laat verwydering van meer stad-besite paaie, bruge, ens toe: {ORANGE}{STRING}
STR_CONFIG_SETTING_SMOKE_AMOUNT_NONE :Geen
STR_CONFIG_SETTING_SMOKE_AMOUNT_ORIGINAL :Oorspronlik
STR_CONFIG_SETTING_SMOKE_AMOUNT_REALISTIC :Realisties
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :{LTBLUE}Trein versnelling model: {ORANGE}{STRING}
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_ORIGINAL :Oorspronklik
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_REALISTIC :Realisties
@@ -1104,6 +1127,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_QUEUEING :{LTBLUE}Pad voe
STR_CONFIG_SETTING_AUTOSCROLL :{LTBLUE}Was skerm as muis by die kant is: {ORANGE}{STRING}
STR_CONFIG_SETTING_BRIBE :{LTBLUE}Laat omkooping van die plaaslike raad toe: {ORANGE}{STRING}
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :{LTBLUE}Laat die koop van eksklusief vervoer regte toe: {ORANGE}{STRING}
STR_CONFIG_SETTING_ALLOW_FUND_ROAD :{LTBLUE}Laat befondsing toe van plaaslike pad heropbou: {ORANGE}{STRING}
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :{LTBLUE}Laat die stuur van geld na ander maatskappye toe: {ORANGE}{STRING}
STR_CONFIG_SETTING_FREIGHT_TRAINS :{LTBLUE}Gewig vermenivoud vir vrag om swaar treine te simuleer: {ORANGE}{STRING}
STR_CONFIG_SETTING_PLANE_SPEED :{LTBLUE}Vliegtuig spoed faktor: {ORANGE}1 / {STRING}
@@ -1119,6 +1143,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Die vera
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :{LTBLUE}Lughawes verval nooit nie: {ORANGE}{STRING}
STR_CONFIG_SETTING_WARN_LOST_VEHICLE :{LTBLUE}Waarsku indien voertuig verloor: {ORANGE}{STRING}
STR_CONFIG_SETTING_ORDER_REVIEW :{LTBLUE}Bespreek voertuig se opdrae: {ORANGE}{STRING}
STR_CONFIG_SETTING_ORDER_REVIEW_OFF :nee
STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :ja, maar sluit uit gestop voertuie
@@ -1187,6 +1212,8 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :kort (31-12-200
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31)
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :{LTBLUE}Outomaties pouse wanneer om te begin 'n nuwe speletjie: {ORANGE}{STRING}
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :geen aksies
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :alle aksies
STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :{LTBLUE}Gebruik die voorloopende voertuiglys: {ORANGE}{STRING}
STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_OFF :Af
STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_OWN :Eie maatskappy
@@ -1206,6 +1233,7 @@ STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :{LTBLUE}Wys ger
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :{LTBLUE}Hou bou gereedskap aktief na gebruik: {ORANGE}{STRING}
STR_CONFIG_SETTING_EXPENSES_LAYOUT :{LTBLUE}Groep uitgawes in maatskappy finansies venster: {ORANGE}{STRING}
STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :{LTBLUE}Versper infrastruktuur gebou as geen geskikte voertuie beskikbaar is nie: {ORANGE}{STRING}
STR_CONFIG_SETTING_MAX_TRAINS :{LTBLUE}Max treine per speler: {ORANGE}{STRING}
STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :{LTBLUE}Max pad voertuie per speler: {ORANGE}{STRING}
STR_CONFIG_SETTING_MAX_AIRCRAFT :{LTBLUE}Max vliegtuie per speler: {ORANGE}{STRING}
@@ -1271,6 +1299,9 @@ STR_CONFIG_SETTING_TOOLBAR_POS :{LTBLUE}Posisie
STR_CONFIG_SETTING_TOOLBAR_POS_LEFT :Links
STR_CONFIG_SETTING_TOOLBAR_POS_CENTER :Senter
STR_CONFIG_SETTING_TOOLBAR_POS_RIGHT :Regs
STR_CONFIG_SETTING_STATUSBAR_POS_LEFT :Links
STR_CONFIG_SETTING_STATUSBAR_POS_CENTER :Middel
STR_CONFIG_SETTING_STATUSBAR_POS_RIGHT :Regs
STR_CONFIG_SETTING_SNAP_RADIUS :{LTBLUE}Venster slag straal: {ORANGE}{STRING} px
STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :{LTBLUE}Venster slag straal: {ORANGE}strem
STR_CONFIG_SETTING_SOFT_LIMIT :{LTBLUE}Venster sagte beperking (nie taai): {ORANGE}{STRING}
@@ -1304,6 +1335,7 @@ STR_CONFIG_SETTING_VEHICLES_TRAINS :{ORANGE}Treine
STR_CONFIG_SETTING_ECONOMY_TOWNS :{ORANGE}Dorpe
STR_CONFIG_SETTING_ECONOMY_INDUSTRIES :{ORANGE}Nywerhede
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :{LTBLUE}Padvinder vir treine: {ORANGE}{STRING}
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_NPF :NPF
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_YAPF :YAPF {BLUE}(Aanbevole)
@@ -1314,6 +1346,7 @@ STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :{LTBLUE}Padvind
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_OPF :Oorspronklike {BLUE}(Aanbevole)
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_NPF :NPF
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_YAPF :YAPF {RED}(Nie aanbevole nie)
STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :{LTBLUE}Outomatiese omkeer op seine: {ORANGE}{STRING}
STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Verander stel waarde
@@ -1393,6 +1426,7 @@ STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :Sub-artiese lan
STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :Sub-tropiese landskap
STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Speelgoedland landskap
STR_CHEAT_CHANGE_DATE :{LTBLUE}Verander datum: {ORANGE} {DATE_SHORT}
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Verander huidige jaar
STR_CHEAT_SETUP_PROD :{LTBLUE}Ontsper modifisering van produksie waardes: {ORANGE}{STRING}
# Livery window
@@ -1648,6 +1682,7 @@ STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Haal spe
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Haal maatskappy informasie...
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} Klient{P "" e} voor jou
STR_NETWORK_CONNECTING_DOWNLOADING_1 :{BLACK}{BYTES} afgelaai tot dusver
STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} / {BYTES} afgelaai dusver
STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Loskoppel
@@ -1919,6 +1954,7 @@ STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Kies Spo
STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selekteer Pad Brug
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brug seleksie - kliek op jou verkose brug om dit te bou
STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY}
STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspensie, Staal
STR_BRIDGE_NAME_GIRDER_STEEL :Balk, Staal
STR_BRIDGE_NAME_CANTILEVER_STEEL :Vrydraer, Staal
@@ -1993,6 +2029,7 @@ STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Bou lugh
STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Lughawe Keuse
STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Kies groote/tipe van lughawe
STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Lughawe klas
STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Uitleg {NUM}
STR_AIRPORT_SMALL :Klein
STR_AIRPORT_CITY :Dorp
@@ -2019,7 +2056,10 @@ STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Maak lan
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Koop land vir gebruk in die toekoms
# Object construction window
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Kies klas van die voorwerp te bou
STR_OBJECT_BUILD_SIZE :{BLACK}Grootte: {GOLD}{NUM} x {NUM} teels
STR_OBJECT_CLASS_LTHS :Vuurtorings
# Tree planting window (last two for SE only)
STR_PLANT_TREE_CAPTION :{WHITE}Boome
@@ -2086,6 +2126,8 @@ STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Bou
STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Fonds
# Industry cargoes window
STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Aanvaar nywerhede
STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Huise
# Land area window
STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Land gebied informasie
@@ -2103,6 +2145,8 @@ STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koördin
STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Gebou: {LTBLUE}{DATE_LONG}
STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stasie klas: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stasie tiepe: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Lughawe klas: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Lughawe naam: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Lughawe teel naam: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NuweGRF: {LTBLUE}{STRING}
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Vrag aangeneem: {LTBLUE}
@@ -2220,6 +2264,11 @@ STR_SAVELOAD_DELETE_BUTTON :{BLACK}Uitvee
STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Vee uit die huidige verkieste spaar-speletjie
STR_SAVELOAD_SAVE_BUTTON :{BLACK}Spaar
STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Spaar die huidige speletjie, met die verkieste naame
STR_SAVELOAD_LOAD_BUTTON :{BLACK}Laai
STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spel Besonderhede
STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Geen inligting beskikbaar
STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING}
STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING}
STR_SAVELOAD_OSKTITLE :{BLACK}Tik 'n naam in vir die stoor-speeletjie
@@ -2294,6 +2343,8 @@ STR_GENERATION_PREPARING_GAME :{BLACK}Voorbere
# NewGRF settings
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}NewGRF stellings
STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Gedetaileerde NewGRF inligting
STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Aktiewe NewGRF lêers
STR_NEWGRF_FILTER_TITLE :{ORANGE}Filter string:
STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Laai die gekose voorafstel
STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Stoor voorafstel
@@ -2323,6 +2374,7 @@ STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Kyk of d
STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Lêer naam: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}GRF ID: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_VERSION :{BLACK}Weergawe: {SILVER}{NUM}
STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Pallet: {SILVER}{STRING}
STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameters: {SILVER}{STRING}
@@ -2330,13 +2382,19 @@ STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paramete
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Geen informasie beskikbaar
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Gelyke lêer nie gevind nie
STR_NEWGRF_SETTINGS_DISABLED :{RED}Gestrem
STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Onversoenbaar met hierdie weergawe van OpenTTD
STR_NEWGRF_SETTINGS_PARAMETER_QUERY :{BLACK}Invoer NewGRF parameters
# NewGRF parameters window
STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Verander NewGRF parameters
STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING}
# NewGRF inspect window
STR_NEWGRF_INSPECT_CAPTION :{WHITE}Inspekteer - {STRING}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} by {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Spoor tipe
# Sprite aligner window
@@ -2378,6 +2436,8 @@ STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Vermis
STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Unpausing kan veroorsaak dat OpenTTD bots. Moet nie daaropeenvolgende botsings verslae rapporteer nie. {}Will jy rêrig unpause?
# NewGRF status
STR_NEWGRF_LIST_NONE :Geen
STR_NEWGRF_LIST_MISSING :{RED}Vermis leêrs
# NewGRF 'it's broken' warnings
STR_NEWGRF_BROKEN :{WHITE}Die gedrag van NewGRF '{0:STRING}' kan moontlik desinkroniesasies en/of program botsings veroorsaak.
@@ -2389,6 +2449,7 @@ STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Vrag/her
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' het 'n eindelose herhaling in die produksie callback veroorsaak.
# 'User removed essential NewGRFs'-placeholders for stuff without specs
STR_NEWGRF_INVALID_CARGO_ABBREV :??
# Sign list window
STR_SIGN_LIST_CAPTION :{WHITE}Teken Lys - {COMMA} Teken{P "" s}
@@ -2605,6 +2666,7 @@ STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTR
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produksie verlede maand:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO}{STRING}{BLACK} ({COMMA}% uitgevoer)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Senter skerm op nywerheid
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksie vlak: {YELLOW}{COMMA}%
############ range for requires starts
STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Vereis: {YELLOW}{STRING}{STRING}
@@ -2620,6 +2682,7 @@ STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produsee
############ range for produces ends
STR_CONFIG_GAME_PRODUCTION :{WHITE}Verander produksie
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Verander produksie vlakke (persentasie, tot 800%)
# Vehicle lists
STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Trein{P "" e}
@@ -2737,7 +2800,10 @@ STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Hernoem
STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Hernoem vliegtuig tipe
# Depot window
STR_DEPOT_CAPTION :{WHITE}{DEPOT}
STR_DEPOT_RENAME_TOOLTIP :{BLACK}Verander naam van depot
STR_DEPOT_RENAME_DEPOT_CAPTION :Hernoem depot
STR_DEPOT_NO_ENGINE :{BLACK}-
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
@@ -2877,7 +2943,7 @@ STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forseer
STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Herstel trein om 'n ander vrag tipe te ontvoer
STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Herpas pad voertuig om 'n ander vrag tipe te ontvoer
STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Herstel vrag skip om 'n ander vrag tipe te ontvoer
STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Herstel vragskip om 'n ander vrag tipe te vervoer
STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Hestel vliegtuig om 'n ander vrag tipe te ontvoer
STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Omkeer rigting van trein
@@ -2911,8 +2977,14 @@ STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Wag vir
STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Op pad na {STATION}, {VELOCITY}
STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Geen opdrae, {VELOCITY}
STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Op pad na {WAYPOINT}, {VELOCITY}
STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Op pad na {DEPOT}, {VELOCITY}
STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Diens by {DEPOT}, {VELOCITY}
# Vehicle stopped/started animations
STR_VEHICLE_COMMAND_STOPPED_SMALL :{TINYFONT}{RED}Gestop
STR_VEHICLE_COMMAND_STOPPED :{RED}Gestop
STR_VEHICLE_COMMAND_STARTED_SMALL :{TINYFONT}{GREEN}Begin
STR_VEHICLE_COMMAND_STARTED :{GREEN}Begin
# Vehicle details
STR_VEHICLE_DETAILS_CAPTION :{WHITE}{VEHICLE} (Aanwyse)
@@ -3065,11 +3137,13 @@ STR_ORDERS_SKIP_TOOLTIP :{BLACK}Sprong d
STR_ORDERS_DELETE_BUTTON :{BLACK}Uit vee
STR_ORDERS_DELETE_TOOLTIP :{BLACK}Vee uit die verlig opdrag
STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Verwyder alle opdragte
STR_ORDERS_GO_TO_BUTTON :{BLACK}Gaan Na
STR_ORDER_GO_TO_NEAREST_DEPOT :Gaan na naaste diensstasie
STR_ORDER_GO_TO_NEAREST_HANGAR :Gaan na naaste vliegtuigloods
STR_ORDER_CONDITIONAL :Konditioneele bevel oor sien
STR_ORDER_SHARE :Deel opdragte
STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Invoeg 'n nuwe opdrag voor die verlig opdrag, of byvoeg na einde van lys
STR_ORDERS_GO_TO_DROPDOWN_TOOLTIP :{BLACK}Sit 'n bevorderde bevel in
@@ -3088,6 +3162,7 @@ STR_ORDER_TRAIN_DEPOT :Trein Diensstas
STR_ORDER_ROAD_VEHICLE_DEPOT :Pad Voertuig Diensstasie
STR_ORDER_SHIP_DEPOT :Sleep Diensstasie
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING}
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
STR_ORDER_REFIT_ORDER :(Herpas na {STRING})
STR_ORDER_REFIT_STOP_ORDER :(Herpas na {STRING} en stop)
@@ -3108,8 +3183,9 @@ STR_ORDER_TRANSFER_FULL_LOAD :(Verplaas en wa
STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Verplaas en wag vir eenigge vol vrag)
STR_ORDER_TRANSFER_NO_LOAD :(Verplaas en verlaat leeg)
STR_ORDER_NO_UNLOAD :(Geen aflaai en vat vrag)
STR_ORDER_NO_UNLOAD_FULL_LOAD :(Geen aflaai en wag vir vol vra)
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Geen aflaay en wag vir eenigge vol vrag)
STR_ORDER_NO_UNLOAD_FULL_LOAD :(Geen aflaai en wag vir vol vrag
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Geen aflaai en wag vir enige vol vrag)
STR_ORDER_NO_UNLOAD_NO_LOAD :(Geen aflaai en geen laai)
STR_ORDER_STOP_LOCATION_NEAR_END :[naby einde]
STR_ORDER_STOP_LOCATION_MIDDLE :[middle]
@@ -3136,7 +3212,7 @@ STR_TIMETABLE_AND_TRAVEL_FOR :en reis vir {ST
STR_TIMETABLE_DAYS :{COMMA} da{P g e}
STR_TIMETABLE_TICKS :{COMMA} tick{P "" e}
STR_TIMETABLE_TOTAL_TIME :{BLACK}Die rooster sal {STRING} vat om te verklaar
STR_TIMETABLE_TOTAL_TIME :{BLACK}Die rooster sal {STRING} neem om te voltooi
STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Die rooster sal te minste {STRING} vat om te verklaar (nie alles gerooster nie)
STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Die voertuig loop tans op tyd
@@ -3155,7 +3231,7 @@ STR_TIMETABLE_CLEAR_TIME :{BLACK}Reinig T
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Vee uit die totaal van tyd vir die gespesiveerde opdrag
STR_TIMETABLE_RESET_LATENESS :{BLACK}Herstel Laat Teller
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Herstel die laat teller, so dat die voertuig op tyd is
STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Herstel die laat teller, so dat die voertuig op tyd is
STR_TIMETABLE_AUTOFILL :{BLACK}Outovul
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Vul die rooster outomaties in met die waardes van die volgende reis (CTRL-Kliek om die wagtyd te probeer hou)
@@ -3185,6 +3261,7 @@ STR_AI_DEBUG_SETTINGS :{BLACK}KI stell
STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Verander die stellings van die KI
STR_AI_DEBUG_RELOAD :{BLACK}Herlaai AI
STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Maak die AI dood, herlaai die skrif en herlaai die AI
STR_AI_DEBUG_CONTINUE :{BLACK}Gaan voort
STR_ERROR_NO_AI :{WHITE}OpenTTD is gebou sonder KI ondersteuning...
STR_ERROR_NO_AI_SUB :{WHITE}... geen KI's is beskikbaar!
@@ -3195,7 +3272,7 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Die AI
# AI configuration window
STR_AI_CONFIG_CAPTION :{WHITE}AI Konfigurasie
STR_AI_CONFIG_LIST_TOOLTIP :{BLACK}Alle AIs wat in die volgende spel gelaai gaan word
STR_AI_CONFIG_LIST_TOOLTIP :{BLACK}Alle AIs wat in die volgende spel gelaai gaan word
STR_AI_CONFIG_HUMAN_PLAYER :Mens Speler
STR_AI_CONFIG_RANDOM_AI :Lukraak AI
@@ -3226,6 +3303,7 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Moenie A
STR_AI_SETTINGS_CAPTION :{WHITE}AI Parameters
STR_AI_SETTINGS_CLOSE :{BLACK}Maak toe
STR_AI_SETTINGS_RESET :{BLACK}Herstel
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
# Vehicle loading indicators
STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
@@ -3258,6 +3336,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spaarspeletjie
STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Lêer nie leesbare
STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Lêer nie skryfbaar
STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Data integriteit het misluk
STR_GAME_SAVELOAD_NOT_AVAILABLE :<nie beskikbaar>
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Speeletjie was gesoor in 'n weergawe sonder trem toelaating. Alle tremme was verwyder.
# Map generation messages
@@ -3265,7 +3344,7 @@ STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kaart ge
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... daar is geen dorp in die draaiboek
STR_ERROR_PNGMAP :{WHITE}Kan nie landskap van PNG laai nie...
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... lêer nie gevind nie.
STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... leêr nie gevind nie
STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... kan nie prent tipe verdoel. 8 of 24-bit PNG prent vereis.
STR_ERROR_PNGMAP_MISC :{WHITE}... iets het verkeerd gegaan. Jammer. (moontlik korrup lêer)
@@ -3299,6 +3378,7 @@ STR_ERROR_SITE_UNSUITABLE :{WHITE}... ligg
STR_ERROR_ALREADY_BUILT :{WHITE}... alreeds gebou
STR_ERROR_OWNED_BY :{WHITE}... besit deur {STRING}
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... gebied is besit deur 'n ander maatskappy
STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... teël skoonmaak limiet bereik
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Naam moet unike wees
STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} in die pad
@@ -3325,7 +3405,7 @@ STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Bestuurd
STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... maksimum toegelaate lening groote is {CURRENCY}
STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan nie meer geld leen nie...
STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... geen lening om terug te betaal
STR_ERROR_CURRENCY_REQUIRED :{WHITE}...{CURRENCY} vereis
STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY} vereis
STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Kan nie lening terugbetaal nie...
STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Kan nie geld wat van die bank geleen is weggee nie...
STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Maatskappy kan nie aangekoop word nie...
@@ -3338,6 +3418,7 @@ STR_ERROR_PROTECTED :{WHITE}Die maat
STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kan nie enige stede bou nie
STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kan nie dorp hernoem nie...
STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Dorp kan nie hier gebou word nie...
STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kan nie dorp uitbrei...
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... te naby aan rand van kaart
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... te naby aan 'n ander dorp
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... te veel dorpe
@@ -3393,6 +3474,7 @@ STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Kan nie
STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Kan nie passasier stasie verwyder nie...
STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Kan nie vrag stasie verwyder nie...
STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Moet eers pad stop verwyder
STR_ERROR_THERE_IS_NO_STATION :{WHITE}... daar is geen stasie hier nie
STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Moet eers spoorweg stasie afbreek
STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Moet eers bus stasie afbreek
@@ -3421,6 +3503,7 @@ STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Kan nie
STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Kan nie trem voertuig depot hier bou nie...
STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Skip depot kan nie hier gebou word nie...
STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Kan nie depot hernoem nie...
STR_ERROR_TRAIN_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}Trein moet binne in 'n depot gestop word
STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... moet gestop binne 'n pad voertuig depot wees
@@ -3456,6 +3539,8 @@ STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan nie
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan nie spoore vanaf hier verwyder nie...
STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Kan nie seinligte vanaf hier verwyder nie...
STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Kan nie seine hier verander nie...
STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}... daar is geen trein spoor
STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... daar is geen seine
STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Kan nie spoor tipe hier verdoel nie...
@@ -3466,6 +3551,7 @@ STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Kan nie
STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kan nie tremweg hier bou nie...
STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan nie pad vanaf hier verwyder nie...
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kan nie tremweg van hier af verwyder nie...
STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... daar is geen tremweg nie
# Waterway construction errors
STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Kan nie kanaale hier bou nie...
@@ -3478,6 +3564,7 @@ STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Kan nie
# Tree related errors
STR_ERROR_TREE_ALREADY_HERE :{WHITE}... boom reeds daar
STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE :{WHITE}... verkeerde terrein vir boom tipe
STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Kan nie boom hier beplant nie...
# Bridge related errors
@@ -3488,6 +3575,7 @@ STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Brug hoo
STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Brug is te laag vie die daal
STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Begin en einde moet in lyn wees
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... albei brug eindes moet op land wees
STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... brug te lank
# Tunnel related errors
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Tonnel kan nie daar gebou word nie...
@@ -3496,8 +3584,10 @@ STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Moet eer
STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Ander tonnel in die pad
STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}Tonnel so op die einde van die kaart eindig
STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Kan nie daal vir ander einde van tonnel te uitgrawe nie
STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... tonnel te lank
# Object related errors
STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... te veel voorwerpe
STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Voorwerp in die pad
STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... maatskappy hoofkwartier in die pad
STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Die land area kan nie aangekoop word nie...
@@ -3560,6 +3650,7 @@ STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Vliegtui
STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Te veel voertuie in spel
STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Kan nie diens interval verander nie...
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... voertuig is vernietig
# Specific vehicle errors
STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan nie trein forseer om sein te vermy op gevaar...
@@ -3990,6 +4081,12 @@ STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING}
STR_FORMAT_WAYPOINT_NAME :Wegpunt {TOWN}
STR_FORMAT_WAYPOINT_NAME_SERIAL :Wegpunt {TOWN} #{COMMA}
STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Trein Depot
STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Trein Depot #{COMMA}
STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} Pad Voertuig Depot
STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} Pad Voertuig Depot #{COMMA}
STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Skip Depot
STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Skip Depot #{COMMA}
STR_UNKNOWN_STATION :onbekende stasie
STR_DEFAULT_SIGN_NAME :Teken
@@ -4016,6 +4113,7 @@ STR_VIEWPORT_WAYPOINT_TINY :{TINYFONT}{WAYP
# Simple strings to get specific types of data
STR_COMPANY_NAME :{COMPANY}
STR_COMPANY_NAME_COMPANY_NUM :{COMPANY} {COMPANYNUM}
STR_DEPOT_NAME :{DEPOT}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
STR_INDUSTRY_NAME :{INDUSTRY}
@@ -4061,8 +4159,10 @@ STR_TINY_BLACK_STATION :{TINYFONT}{BLAC
STR_BLACK_STRING :{BLACK}{STRING}
STR_BLACK_RAW_STRING :{BLACK}{STRING}
STR_GREEN_STRING :{GREEN}{STRING}
STR_ORANGE_STRING :{ORANGE}{STRING}
STR_RED_STRING :{RED}{STRING}
STR_WHITE_STRING :{WHITE}{STRING}
STR_TINY_BLACK_HEIGHT :{TINYFONT}{BLACK}{HEIGHT}
STR_TINY_BLACK_VEHICLE :{TINYFONT}{BLACK}{VEHICLE}
STR_TINY_RIGHT_ARROW :{TINYFONT}{RIGHTARROW}

View File

@@ -236,7 +236,7 @@ STR_TOOLTIP_RESIZE :{BLACK}اضغط
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}تبديل حجم الاطار كبير / صغير
STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}شريط العرض- فوق /تحت
STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}عمود التحريك - يمين/يسار
STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}هدم المباني و غيرها
STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}هدم المباني و غيرها في مربع من الأرض.
# Query window
STR_BUTTON_DEFAULT :{BLACK}افتراضي
@@ -297,22 +297,22 @@ STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK} حفظ
STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}عرض الخريطة, لقطات اضافية , العلامات
STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}عرض دليل المدن
STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}اظهار العروض
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}عرض محطات الشركة
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}عرض قائمة محطات الشركة.
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}عرض السجل المالي للشركة
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}عرض معلومات الشركة
STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}عرض المخططات
STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}عرض جدول ترتيب الشركات
STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}موّل انشاء مصنع / عرض كل المصانع
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}عرض قطارات الشركة
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}عرض عربات الشركة
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}عرض سفن الشركة
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}عرض طائرات الشركة
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}عرض قائمة قطارات الشركة.
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}عرض قائمة عربات الشركة.
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}عرض قائمة سفن الشركة.
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}عرض قائمة طائرات الشركة.
STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}تكبير الصورة
STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}تصغير الصورة
STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}ادوات بناء سكة حديد
STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}ادوات بناء الطرق
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}ادوات السفن
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}ادوات المطار
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}بناء مطارات
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}افتح مدير تحرير التضاريس لرفع / خفض الارض, زراعة الاشجار, الخ.
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}عرض اطار الصوت/الموسيقى
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}اظهار الرسالة الأخيرة/التقرير الأخير, خيارات الرسائل
@@ -664,6 +664,8 @@ STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}عرض
STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}عرض الطرق على الخريطة
STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}عرض الشجر على الخريطة
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}عرض ملاك الاراضي على الخريطة
STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}اضغط على مصنع لعرضة. اضغط + مفتاح كنترول لاخفاء جميع المصانع ماعدا المختارة. اضغط + كنترول لاظهار المصانع مجددا.
STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}اضغط على الشركة لعرض ممتلكاتها. اضغط + مفتاح كنترول لاخفاء كل الشركات ماعدا المختارة. اضغط + مفتاح كنترول لعرضها ثانية.
STR_SMALLMAP_LEGENDA_ROADS :{TINYFONT}{BLACK}شوارع
STR_SMALLMAP_LEGENDA_RAILROADS :{TINYFONT}{BLACK} سكة القطار
@@ -705,6 +707,8 @@ STR_SMALLMAP_SHOW_HEIGHT :{BLACK}عرض
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}عدم عرض اي مصنع في الخريطة
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}عرض جميع المصانع في الخريطة
STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}بدل عرض خريطة التضاريس
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}عدم عرض ممتلكات اي شركة على الخارطة
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}عرض جميع املاك الشركة على الخريطة
# Status bar messages
STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}اظهر اخر رسالة / تقرير
@@ -842,9 +846,9 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIGFONT}{BLACK
STR_NEWS_ROAD_REBUILDING :{BIGFONT}{BLACK} فوضى طرق عارمة في مدينة {TOWN}!{}{}اعادة ترميم الطرق مولت من قبل شركة {STRING}{} تجلي ستة أشهر من الشقاء لعربات الطريق.
# Extra view window
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}شاشة عرض{COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}شاشة العرض {COMMA}
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}انسخ لشاشة العرض
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}انسخ الشاشة الرئيسية لشاشة العرض هذه
STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}انسخ موقع الشاشة الرئيسية لشاشة العرض هذه
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}لصق من شاشة العرض
STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}لصق شاشة العرض هذة للشاشة الرئيسية
@@ -1024,6 +1028,7 @@ STR_DIFFICULTY_LEVEL_SETTING_CITY_APPROVAL :{LTBLUE}موق
STR_NONE :بدون
STR_FUNDING_ONLY :التمويل فقط
STR_MINIMAL :الادنى
STR_NUM_VERY_LOW :منخفض جدا
STR_NUM_LOW :قليل
STR_NUM_NORMAL :طبيعي
@@ -1073,7 +1078,6 @@ STR_REVERSE_AT_END_OF_LINE_ONLY :نهاية ال
STR_DISASTERS_OFF :بدون
STR_DISASTERS_ON :السماح
STR_CITY_APPROVAL_PERMISSIVE :متساهل
STR_CITY_APPROVAL_TOLERANT :متقبل
STR_CITY_APPROVAL_HOSTILE :معاد
@@ -1087,10 +1091,15 @@ STR_CONFIG_SETTING_CAPTION :{WHITE}الاع
STR_CONFIG_SETTING_OFF :قفل
STR_CONFIG_SETTING_ON :فتح
STR_CONFIG_SETTING_DISABLED :غير مفعل
STR_CONFIG_SETTING_BUILDONSLOPES :{LTBLUE}السماح بالبناء على المنحدرات و السواحل: {ORANGE}{STRING}
STR_CONFIG_SETTING_AUTOSLOPE :{LTBLUE}السماح باعادة بناء التلال تحت المباني, الطرق, الخ .-الانحدار الذاتي- {ORANGE}{STRING}
STR_CONFIG_SETTING_CATCHMENT :{LTBLUE}السماح بحدود اكثر واقعية للمحطات بحسب الحجم: {ORANGE}{STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE :{LTBLUE}السماح بحذف اكثر من الطرق المملوكة للمدينة و الجسور و غيرها: {ORANGE}{STRING}
STR_CONFIG_SETTING_TRAIN_LENGTH :{LTBLUE}اقصى طول لعربات القطار: {ORANGE}{STRING}مربع
STR_CONFIG_SETTING_SMOKE_AMOUNT :{LTBLUE}كمية دخان/شرار القطارات:{ORANGE}{STRING}
STR_CONFIG_SETTING_SMOKE_AMOUNT_NONE :بدون
STR_CONFIG_SETTING_SMOKE_AMOUNT_ORIGINAL :اصلي
@@ -1109,6 +1118,8 @@ STR_CONFIG_SETTING_IMPROVEDLOAD :{LTBLUE}أست
STR_CONFIG_SETTING_GRADUAL_LOADING :{LTBLUE}تحميل القطارات بالتدريج: {ORANGE}{STRING}
STR_CONFIG_SETTING_INFLATION :{LTBLUE}التضخم: {ORANGE}{STRING}
STR_CONFIG_SETTING_SELECTGOODS :{LTBLUE}أوصل الحموله للمحطه إذا كان هناك حاجة فقط: {ORANGE}{STRING}
STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :{LTBLUE}اقصى طول للجسور: {ORANGE}{STRING}مربع
STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :{LTBLUE}اقصى طول للانفاق: {ORANGE}{STRING}مربع
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :{LTBLUE}طريقة بناء المصانع الأولية يدوية : {ORANGE}{STRING}
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :بدون
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :ككل المصانع الأخرى
@@ -1154,7 +1165,7 @@ STR_CONFIG_SETTING_AUTORENEW_MONTHS :{LTBLUE}الت
STR_CONFIG_SETTING_AUTORENEW_MONEY :{LTBLUE}التجديد التلقائي عند توفر السيولة الدنيا للتجديد: {ORANGE}{STRING}
STR_CONFIG_SETTING_ERRMSG_DURATION :{LTBLUE}زمن عرض الرسالة: {ORANGE}{STRING}
STR_CONFIG_SETTING_HOVER_DELAY :{LTBLUE}تاخير احداث الهوفر: {ORANGE}{STRING}
STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :{LTBLUE}تاخير احداث الهوفر: {ORANGE}معطلة
STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :{LTBLUE}عرض التلميحات: {ORANGE}اضغط يمين
STR_CONFIG_SETTING_POPULATION_IN_LABEL :{LTBLUE}أعرض عدد السكان مع الاسم على العلامة: {ORANGE}{STRING}
STR_CONFIG_SETTING_LAND_GENERATOR :{LTBLUE}مولد الأرض: {ORANGE}{STRING}
@@ -1175,7 +1186,7 @@ STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :{LTBLUE}اتج
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :عكس عقارب الساعة
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :مع عقارب الساعة
STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :{LTBLUE}الأرتفاع الأعلى في محرر الخريطة لسطح المستوي: {ORANGE}{STRING}
STR_CONFIG_SETTING_ENABLE_FREEFORM_EDGES :{LTBLUE} السماح بالحدود الحرة للخريطة: {ORANGE} {STRING}
STR_CONFIG_SETTING_ENABLE_FREEFORM_EDGES :{LTBLUE} السماح بتعديل الحدود الحرة للخريطة: {ORANGE} {STRING}
STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}مربع او اكثر غير فارغ في الحدود الشمالية
STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}مربع او اكثر من حدود الخريطة لا يكون بحر
@@ -1215,6 +1226,8 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ايزو 31-12-
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :{LTBLUE}إيقاف اللعبة تلقائيا عند بدأ لعبة جديدة: {ORANGE}{STRING}
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :{LTBLUE}عندمل توقف أسمح: {ORANGE}{STRING}
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :لا تصرف
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :الكل ما عدا عمليات البناء
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :الكل ما عدا خيارات تعديل الخريطة
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :كل تصرف
STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :{LTBLUE}استخدام قائمة العربات المطورة: {ORANGE}{STRING}
STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_OFF :بدون
@@ -1235,15 +1248,16 @@ STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :{LTBLUE}اظه
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :{LTBLUE} ابقاء ادوات البناء فعالة بعد استخدامها: {ORANGE}{STRING}
STR_CONFIG_SETTING_EXPENSES_LAYOUT :{LTBLUE} النفقات للمجموعة في النافذة المالية: {ORANGE}{STRING}
STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :{LTBLUE}عطل ادوات البناء عند عدم وجود عربات متاحة لها: {ORANGE}{STRING}
STR_CONFIG_SETTING_MAX_TRAINS :{LTBLUE}الحد الأعلى لعدد القطارات لكل لاعب: {ORANGE}{STRING}
STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :{LTBLUE}الحد الأعلى لعدد العربات لكل لاعب: {ORANGE}{STRING}
STR_CONFIG_SETTING_MAX_AIRCRAFT :{LTBLUE}الحد الأعلى لعدد الطائرات لكل لاعب: {ORANGE}{STRING}
STR_CONFIG_SETTING_MAX_SHIPS :{LTBLUE}الحد الأعلى لعدد السفن لكل لاعب: {ORANGE}{STRING}
STR_CONFIG_SETTING_AI_BUILDS_TRAINS :{LTBLUE}حظر القطارات على الكمبيوتر: {ORANGE}{STRING}
STR_CONFIG_SETTING_AI_BUILDS_TRAINS :{LTBLUE}حظر القطارات على الحاسوب: {ORANGE}{STRING}
STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :{LTBLUE}حظر العربات على الكمبيوتر: {ORANGE}{STRING}
STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :{LTBLUE}حظر الطائرات على الكمبيوتر: {ORANGE}{STRING}
STR_CONFIG_SETTING_AI_BUILDS_SHIPS :{LTBLUE}حظر السفن على الكمبيوتر: {ORANGE}{STRING}
STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :{LTBLUE}حظر الطائرات على الحاسوب: {ORANGE}{STRING}
STR_CONFIG_SETTING_AI_BUILDS_SHIPS :{LTBLUE}حظر السفن على الحاسوب: {ORANGE}{STRING}
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :{LTBLUE} السماح بالذكاء الصناعي في اللعب الجماعي : {ORANGE}{STRING}
STR_CONFIG_SETTING_AI_MAX_OPCODES :{LTBLUE} #opcodes قبل تعليق الذكاء الصناعي : {ORANGE}{STRING}
@@ -1271,7 +1285,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}اتا
STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :{LTBLUE}السماح باستخدام اشارات واجهة المستخدم الرسومية: {ORANGE}{STRING}
STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :{LTBLUE}نوع الاشارة الذي يبنى قياسيا: {ORANGE}{STRING}
STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :اشارات التوقف
STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :اشارات الطريق
STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :إشارات الطريق
STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :إشارة طريق اتجاه واحد
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :{LTBLUE}الدوران خلال الاشارات: {ORANGE}{STRING}
STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :اشارات التوقف فقط
@@ -1326,11 +1340,11 @@ STR_CONFIG_SETTING_VEHICLES :{ORANGE}الم
STR_CONFIG_SETTING_STATIONS :{ORANGE}المحطات
STR_CONFIG_SETTING_ECONOMY :{ORANGE}الأقتصاد
STR_CONFIG_SETTING_AI :{ORANGE}المتنافسين
STR_CONFIG_SETTING_DISPLAY_OPTIONS :{ORANGE} عرض الخيارات
STR_CONFIG_SETTING_DISPLAY_OPTIONS :{ORANGE}عرض الخيارات
STR_CONFIG_SETTING_INTERACTION :{ORANGE} التفاعل
STR_CONFIG_SETTING_CONSTRUCTION_SIGNALS :{ORANGE} الاشارات
STR_CONFIG_SETTING_CONSTRUCTION_SIGNALS :{ORANGE}الإشارات
STR_CONFIG_SETTING_STATIONS_CARGOHANDLING :{ORANGE} طريقة التحميل
STR_CONFIG_SETTING_AI_NPC :{ORANGE} لاعبين الكمبيوتر
STR_CONFIG_SETTING_AI_NPC :{ORANGE} لاعبين الحاسوب
STR_CONFIG_SETTING_VEHICLES_AUTORENEW :{ORANGE} التجديد التلقائي
STR_CONFIG_SETTING_VEHICLES_SERVICING :{ORANGE} الصيانة
STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE} المسارات
@@ -1338,6 +1352,7 @@ STR_CONFIG_SETTING_VEHICLES_TRAINS :{ORANGE} قطا
STR_CONFIG_SETTING_ECONOMY_TOWNS :{ORANGE} مدن
STR_CONFIG_SETTING_ECONOMY_INDUSTRIES :{ORANGE} مصانع
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :{LTBLUE}موجد الطريق- قصاص الطريق - للقطارات:{ORANGE}{STRING}
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_NPF :NPF
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_YAPF :YAPF {BLUE}(مفضل)
@@ -1684,6 +1699,7 @@ STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}جلب
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}جلب معلومات الشركة..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM}انتظار اللاعبين السابقين
STR_NETWORK_CONNECTING_DOWNLOADING_1 :{BLACK}{BYTES}تم تحميل حتى الان
STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} / {BYTES} حمل حتى الان
STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}فصل
@@ -1715,7 +1731,7 @@ STR_COMPANY_PASSWORD_CANCEL :{BLACK}لا ت
STR_COMPANY_PASSWORD_OK :{BLACK}اعط الشركة كلمة المرور الجديدة
STR_COMPANY_PASSWORD_CAPTION :{WHITE}كلمة مرور الشركة
STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}كلمة مرور الشركة القياسية
STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}استخدم هذه الكلمة كقياسية لكل الشركات الجديدة
STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}استخدم كلمة مرور هذه الشركة كافتراضية للشركات الجديدة
# Network company info join/password
STR_COMPANY_VIEW_JOIN :{BLACK} انضم
@@ -1777,6 +1793,7 @@ STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :كان يرسل
############ End of leave-in-this-order
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}احتمال فقد الاتصال
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}اخر {NUM} ثواني لم تصل بيانات من السيرفر
# Network related errors
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
@@ -1825,23 +1842,23 @@ STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED :{SILVER} لم
STR_CONTENT_DETAIL_SUBTITLE_SELECTED :{SILVER} لقد اخترت هذا المحتوى ليتم تحميله
STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER} هذا الدعم قد اختير للتحميل
STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER} هذا المحتوى موجود لديك مسبقا
STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER} المحتوى غير معروف و لن يتم تحميلة على النسخة المفتوحة
STR_CONTENT_DETAIL_UPDATE :{SILVER} هذا استبدال للملف الموجود {STRING}
STR_CONTENT_DETAIL_NAME :{SILVER} الاسم: {WHITE}{STRING}
STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}هذا المحتوى غير معروف و لا يمكت تحميله في OpenTTD
STR_CONTENT_DETAIL_UPDATE :{SILVER}هذا استبدال للملف الموجود {STRING}
STR_CONTENT_DETAIL_NAME :{SILVER}الاسم: {WHITE}{STRING}
STR_CONTENT_DETAIL_VERSION :{SILVER} النسخة: {WHITE}{STRING}
STR_CONTENT_DETAIL_DESCRIPTION :{SILVER} الوصف : {WHITE}{STRING}
STR_CONTENT_DETAIL_URL :{SILVER} عنوان النت: {WHITE}{STRING}
STR_CONTENT_DETAIL_TYPE :{SILVER} النوع: {WHITE}{STRING}
STR_CONTENT_DETAIL_FILESIZE :{SILVER} حجم التحميل: {WHITE}{BYTES}
STR_CONTENT_DETAIL_DESCRIPTION :{SILVER}الوصف: {WHITE}{STRING}
STR_CONTENT_DETAIL_URL :{SILVER}عنوان الموقع: {WHITE}{STRING}
STR_CONTENT_DETAIL_TYPE :{SILVER}النوع: {WHITE}{STRING}
STR_CONTENT_DETAIL_FILESIZE :{SILVER}حجم التحميل: {WHITE}{BYTES}
STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER} اختير بسبب: {WHITE}{STRING}
STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER} الاعتمادية: {WHITE}{STRING}
STR_CONTENT_DETAIL_TAGS :{SILVER} الاسم الرمزي: {WHITE}{STRING}
STR_CONTENT_NO_ZLIB :{WHITE}النسخة المفتوحة بنيت بدون دعم zlib ...
STR_CONTENT_NO_ZLIB :{WHITE}بنيت OpenTTD بدون دعم "zlib"...
STR_CONTENT_NO_ZLIB_SUB :{WHITE}تحميل محتويات zlib غير ممكن
# Order of these is important!
STR_CONTENT_TYPE_BASE_GRAPHICS :الرسوميات الاساسية
STR_CONTENT_TYPE_NEWGRF :NewGRF رسوميات
STR_CONTENT_TYPE_NEWGRF :GRF جديدة
STR_CONTENT_TYPE_AI :الذكاء الصناعي
STR_CONTENT_TYPE_AI_LIBRARY :مكتبة الذكاء الصناعي
STR_CONTENT_TYPE_SCENARIO :سناريو
@@ -1850,7 +1867,7 @@ STR_CONTENT_TYPE_BASE_SOUNDS :الاصوات
STR_CONTENT_TYPE_BASE_MUSIC :الموسيقى الاساسية
# Content downloading progress window
STR_CONTENT_DOWNLOAD_TITLE :{WHITE}يتم التحميل الان ...
STR_CONTENT_DOWNLOAD_TITLE :{WHITE}يتم تحميل المحتوى...
STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}يتم طلب الملفات ...
STR_CONTENT_DOWNLOAD_FILE :{WHITE}يتم تحميل {STRING} - {NUM} من {NUM}
STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}انتهى التحميل
@@ -1859,9 +1876,9 @@ STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES}
# Content downloading error messages
STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}لم يتم الربط مع خادم المحتوى
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}فشل التحميل...
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_CONNECTION_LOST :{WHITE}... فقد الربط بالخادم
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_CONNECTION_LOST :{WHITE}... فقد الاتصال
STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... لا يمكن الكتابة على الملف
STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}لم يتمكن من فك الضغط للملف المحمل
STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}لم يتمكن من فك ضغط الملف المحمل
# Transparency settings window
STR_TRANSPARENCY_CAPTION :{WHITE}خيارات الشفافية
@@ -1976,22 +1993,22 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}وحدة
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}بناء سكة ترام
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}بناء الطرق باستخدام النظام الآلي
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}بناء سكة القطار باستخدام النظام الآلي
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}بناء ورشة صيانة للعربات - لشراء/ بيع/ صيانة العربات.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}بناء ورشة صيانة للترام - لشراء / بيع /صيانة عربات الترام
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}بناء ورشة صيانة لعربات الطرق (لشراء و صيانة العربات).
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}بناء ورشة لصيانة عربات الترام (لشراء و صيانة عربات الترام).
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}بناء محطة باصات
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}بناء محطة ركاب ترام
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}بناء محطة تحميل عربات
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}بناء محطة ترام
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}فعل / عطل الطرق موحدة الاتجاة
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}بناء جسر للعربات
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}بناء جسر ترام
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}بناء نفق للعربات
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}بناء محطة ركاب ترام.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}بناء محطة تحميل عربات. مفتاح كنترول يسمح بمجاورة المحطات.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}بناء محطة ترام. كنترول يسمح بمجاورة المحطات.
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}فعل / عطل الطرق موحدة الاتجاه
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}بناء جسر لعربات الطريق.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}بناء جسر ترام.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}بناء نفق لعربات الطريق.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}بناء نفق ترام
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}تناوب بناء/ ازالة الطرق
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}بدل بناء/إزالة الطرق
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}بدل بناء / ازالة طرق الترام
# Road depot construction window
STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}اتجاة ورشة الصيانة
STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}اتجاه ورشة الصيانة
STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}اختر اتجاة ورشة صيانة العربات
STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}اتجاة مستودع الصيانة لترام
STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}اختر اتجاة مستودع الترام
@@ -2019,8 +2036,8 @@ STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}عرف
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}انشاء انهار
# Ship depot construction window
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}اتجاة حوض الصيانة
STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK} اختر اتجاة حوض الصيانة
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}اتجاه حوض الصيانة
STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK}اختر اتجاه حوض صيانة السفن
# Dock construction window
STR_STATION_BUILD_DOCK_CAPTION :{WHITE}مرفء
@@ -2520,7 +2537,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}ادخل
STR_TOWN_DIRECTORY_CAPTION :{WHITE}مدن/ بلدات
STR_TOWN_DIRECTORY_NONE :{ORANGE}-بدون-
STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ) {COMMA})
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}اسم المدينة - اضغط على الاسم لتوسيط الشاشة عليها
STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}اسم المدينة - اضغط على الاسم لتوسيط الشاشة عليها. اضغط + كنترول لفتح شاشة عرض جديدة للضاحية.
STR_TOWN_POPULATION :{BLACK}سكان العالم: {COMMA}
# Town view window
@@ -2580,10 +2597,10 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING
STR_SUBSIDIES_NONE :{ORANGE}بدون
STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}العروض المأخوذة
STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} من {STRING} الى {STRING}{YELLOW} - {COMPANY}{YELLOW}, حتى {DATE_SHORT}-
STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}اضغط على الخدمة لتوسيط الخريطة على المصنع/المدينة
STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}اضغط على الخدمة لتوسيط الخريطة على المصنع/المدينة. اضغط + كنترول لفتح شاشة عرض جديدة للمدينة.
# Station list window
STR_STATION_LIST_TOOLTIP :{BLACK}اسم المحطة - اضغط على اسم المحطة لتوسيطها في الشاشة
STR_STATION_LIST_TOOLTIP :{BLACK}اسم المحطة - اضغط على اسم المحطة لتوسيطها في الشاشة. اضغط + كنترول لفتح شاشة عرض جديدة بمنطقة المحطة.
STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}اضغط بشكل متواصل على مفتاح كنترول لاختيار اكثر من وحدة
STR_STATION_LIST_CAPTION :{WHITE}محطات شركة {COMPANY} - {COMMA} محطة
STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATIONFEATURES}
@@ -2714,7 +2731,7 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}-بدو
STR_INDUSTRY_DIRECTORY_ITEM :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}{STRING}){YELLOW}({COMMA}% صدرت)
STR_INDUSTRY_DIRECTORY_ITEM_TWO :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}{STRING}/{CARGO}{STRING}){YELLOW}({COMMA}%/{COMMA}% صدرت)
STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY}
STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}اسماء المصانع - اضغط على اسم لتوسيط الشاشة علية
STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}اسماء المصانع - اضغط على اسم المصنع لتوسيط الشاشة عليه. اضغط + كنترول لفتح شاشة عرض جديدة لمنطقة المصنع.
# Industry view
STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY}
@@ -2986,6 +3003,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}وضع
STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK} ارسل القطار للورشة - مفتاح التحكم (كنترول) + الضغط سيرسله لصيانة فقط
STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}ارسل العربة الى الورشة. مفتاح التحكم (كنترول) + الضغط ترسل للصيانة فقط
STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}ارسل السفينة لحوض السفن. اضغط + كنترول سوف يرسلها للصيانة فقط.
STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}ارسل الطائرة الى حظيرة الصيانة - مفتاح التحكم (كنترول) + الضغط يرسلها للصيانة فقط
STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}هذا سوف يشتري نسخة عن قطار بكل عرباته. مفتاح التحكم + الضغط سوف يشارك الاوامر.
@@ -3107,6 +3125,7 @@ STR_REFIT_CAPTION :{WHITE}{VEHICLE
STR_REFIT_TITLE :{GOLD}اختر نوع الحمولة ...
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO}{}{BLACK}تكلفة التغيير: {GOLD}{CURRENCY}
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO}, {GOLD}{CARGO}{}{BLACK}تكلفة اعادة التهيئة: {GOLD}{CURRENCY}
STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}اختر العربة لاعادة تهيئتها. اسحب بالفارة لاختيار عدة عربات. اضغط على مساحة خالية لاختيار كل العربات. اضغط + كنترول لاختيار العربة الحالية وما بعدها.
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}أختر نوع البضاعة لينقلها القطار
STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK} اختر نوع حمولة العربة
@@ -3194,6 +3213,7 @@ STR_ORDERS_DELETE_BUTTON :{BLACK}حذف
STR_ORDERS_DELETE_TOOLTIP :{BLACK}حذف الامر المختار
STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}حذف كل الأوامر
STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}أوقف المشاركة
STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}اوقف مشاركة الاوامر. اضغط + كنترول لحذف جميع الاوامر من هذه العربة.
STR_ORDERS_GO_TO_BUTTON :{BLACK}اذهب الى
STR_ORDER_GO_TO_NEAREST_DEPOT :اذهب الى اقرب مستودع صيانة
@@ -3226,7 +3246,7 @@ STR_ORDER_STOP_ORDER :توقف
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
STR_ORDER_AUTOMATIC :(تلقائى)
STR_ORDER_IMPLICIT :(تلقائى)
STR_ORDER_FULL_LOAD :-تحميل بالكامل-
STR_ORDER_FULL_LOAD_ANY :-حمل اي بضاعة بالكامل-
@@ -3262,6 +3282,7 @@ STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}حول
STR_TIMETABLE_TOOLTIP :{BLACK}جدولة الأوامر - اضغط على الامر لاظهارة
STR_TIMETABLE_NO_TRAVEL :لا رحيل
STR_TIMETABLE_NOT_TIMETABLEABLE :المغادرة (ذاتي: بواسطة الامر اليدوي التالي)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :مسافر (ليس هناك جدولة)
STR_TIMETABLE_TRAVEL_FOR :مسافر لـ {STRING}
STR_TIMETABLE_STAY_FOR :ويبقى لـ {STRING}
@@ -3443,6 +3464,8 @@ STR_ERROR_SITE_UNSUITABLE :{WHITE}... ال
STR_ERROR_ALREADY_BUILT :{WHITE}... تم بنائة
STR_ERROR_OWNED_BY :{WHITE}مملوكة من قبل ... {STRING}
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... المنطقة مملوكة لشركة منافسة
STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... تم الوصول لاقصى حدود للتضاريس
STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... تم الوصول لاقصى عدد ازالة
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}السم يجب ان يكون فريدا - غير مستخدم
STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} على الطريق
STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}غير مسموح في حين توقفت
@@ -3581,7 +3604,7 @@ STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}يجب
STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}يمكن تعديل القطارعندما يكون متوقف في ورشة الصيانة
STR_ERROR_TRAIN_TOO_LONG :{WHITE}القطار طويل جدا
STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}لا يمكن تغيير اتجاة العربة ...
STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}لا يمكن انعطاف العربات المكونة من اكثر من وحدة.
STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}تتكون من اكثر من وحدة ...
STR_ERROR_INCOMPATIBLE_RAIL_TYPES :نوع سكة حديد متعارض
STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}لا يمكن تحريك العربة ...
@@ -3747,6 +3770,7 @@ STR_ERROR_CAN_T_ADD_ORDER :{WHITE}العر
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}العربة المشتركة لا تستطيع الوصول للمحطة
STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}لا يمكن مشاركة قائمة الأوامر
STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}لايمكن ايقاف امر المشاركة بالاوامر ...
STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}لا يمكن نسخ قائمة الأوامر
STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}بعيد جدا من محطة/علامة الوصول السابقة

View File

@@ -152,7 +152,7 @@ STR_CARGO_PLURAL_WHEAT.abl :пшаніца
STR_CARGO_PLURAL_WHEAT.pre :пшаніцы
STR_CARGO_PLURAL_RUBBER :{G=m}Каўчук
STR_CARGO_PLURAL_RUBBER.gen :каўчуку
STR_CARGO_PLURAL_RUBBER.dat :каўкучу
STR_CARGO_PLURAL_RUBBER.dat :каўчуку
STR_CARGO_PLURAL_RUBBER.acc :каўчук
STR_CARGO_PLURAL_RUBBER.abl :каўчукам
STR_CARGO_PLURAL_RUBBER.pre :каўчуку
@@ -760,6 +760,7 @@ STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Здымак э
STR_ABOUT_MENU_GIANT_SCREENSHOT :Здымак усёй мапы (Ctrl+G)
STR_ABOUT_MENU_ABOUT_OPENTTD :Аб гульні OpenTTD
STR_ABOUT_MENU_SPRITE_ALIGNER :Выраўноўваньне спрайтаў
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Пераключыць абмяжоўвальныя рамкі
############ range ends here
############ range for days starts (also used for the place in the highscore window)
@@ -1183,7 +1184,7 @@ STR_GAME_OPTIONS_CURRENCY_DEM :Нямецка
STR_GAME_OPTIONS_CURRENCY_DKK :Дацкая крона (DKK)
STR_GAME_OPTIONS_CURRENCY_ESP :Гішпанская пэсэта (ESP)
STR_GAME_OPTIONS_CURRENCY_FIM :Фінская марка (FIM)
STR_GAME_OPTIONS_CURRENCY_FRF :Францускі франк (FRF)
STR_GAME_OPTIONS_CURRENCY_FRF :Французскі франк (FRF)
STR_GAME_OPTIONS_CURRENCY_GRD :Грэцкая драхма (GRD)
STR_GAME_OPTIONS_CURRENCY_HUF :Вугорскі форынт (HUF)
STR_GAME_OPTIONS_CURRENCY_ISK :Ісьляндзкая крона (ISK)
@@ -1373,6 +1374,7 @@ STR_SEA_LEVEL_HIGH :Вялiкая
STR_SEA_LEVEL_CUSTOM :Зададзены
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Зададзены ({NUM}%)
STR_DISASTER_NONE :Выключаны
STR_DISASTER_REDUCED :Зьніжаныя
STR_DISASTER_NORMAL :Звычайныя
@@ -1395,7 +1397,6 @@ STR_REVERSE_AT_END_OF_LINE_ONLY :Толькi ў
STR_DISASTERS_OFF :Выключаны
STR_DISASTERS_ON :Уключаны
STR_CITY_APPROVAL_PERMISSIVE :Дазваляючае
STR_CITY_APPROVAL_TOLERANT :Памяркоўнае
STR_CITY_APPROVAL_HOSTILE :Варожае
@@ -1409,6 +1410,10 @@ STR_CONFIG_SETTING_CAPTION :{WHITE}Пашы
STR_CONFIG_SETTING_OFF :не
STR_CONFIG_SETTING_ON :так
STR_CONFIG_SETTING_DISABLED :адключана
STR_CONFIG_SETTING_BUILDONSLOPES :{LTBLUE}Дазволіць будаўніцтва на сьхілах і на беразе: {ORANGE}{STRING}
STR_CONFIG_SETTING_AUTOSLOPE :{LTBLUE}Дазволіць зьмену ляндшафту пад будынкамі, дарогамі й г. д. (аўтаспускі): {ORANGE}{STRING}
STR_CONFIG_SETTING_CATCHMENT :{LTBLUE}Зона пакрыцьця залежыць ад тыпу станцыі: {ORANGE}{STRING}
@@ -1438,7 +1443,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :{LTBLUE}Мэт
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :не ствараць
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :як i iншыя
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :геолагаразьведка
STR_CONFIG_SETTING_INDUSTRY_PLATFORM :{LTBLUE}Плоскi рэльеф вакол прадпрыемстваў: {ORANGE}{STRING} клет{P ка кi ак}
STR_CONFIG_SETTING_INDUSTRY_PLATFORM :{LTBLUE}Плоскi рэльеф вакол прадпрыемстваў: {ORANGE}{STRING} клет{P 0:1 ка кi ак}
STR_CONFIG_SETTING_MULTIPINDTOWN :{LTBLUE}Дазволіць некалькі прадпрыемстваў аднаго тыпу на горад: {ORANGE}{STRING}
STR_CONFIG_SETTING_SIGNALSIDE :{LTBLUE}Паказваць сыгналы на баку руху: {ORANGE}{STRING}
STR_CONFIG_SETTING_SHOWFINANCES :{LTBLUE}Паказваць фінансавую статыстыку напрыканцы года: {ORANGE}{STRING}
@@ -1537,6 +1542,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :доўгі (31-
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :кароткі (31-01-2008)
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-01-31)
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :{LTBLUE}Аўтаматычнае ўключэньне паўзы напачатку гульні: {ORANGE}{STRING}
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :{LTBLUE}Падчас паўзы дазволiць: {ORANGE}{STRING}
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :нiчога
@@ -1666,6 +1672,7 @@ STR_CONFIG_SETTING_VEHICLES_TRAINS :{ORANGE}Цяг
STR_CONFIG_SETTING_ECONOMY_TOWNS :{ORANGE}Населеныя пункты
STR_CONFIG_SETTING_ECONOMY_INDUSTRIES :{ORANGE}Прамысловасць
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :{LTBLUE}Альгарытм пошуку шляху для цягнікоў: {ORANGE}{STRING}
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_NPF :NPF
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_YAPF :YAPF {BLUE}(рэкамэндуецца)
@@ -1718,6 +1725,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Прав
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Паказаць наладкi ШI/АІ
STR_INTRO_TOOLTIP_QUIT :{BLACK}Выйсьці з OpenTTD
# Quit window
STR_QUIT_CAPTION :{WHITE}Выхад
STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Вы ўпэўнены, што жадаеце перапыніць гульню й вярнуцца ў {STRING}?
@@ -2816,6 +2824,8 @@ STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING
STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Змяшчае некалькі Action 8 дзеяньняў.
STR_NEWGRF_ERROR_READ_BOUNDS :Дадзеныя раптоўна скончыліся.
STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}У бягучым наборы базавай графікі адсутнічаюць выявы некаторых аб'ектаў.{}Калі ласка, абнавіце модуль базавай графікі.
STR_NEWGRF_ERROR_GRM_FAILED :Запрошаныя рэсурсы GRF недаступныя
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING} быў адключаны з-за {4:STRING}
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Асцярожна!
@@ -2852,6 +2862,8 @@ STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} <нев
STR_NEWGRF_INVALID_ENGINE :<няправільная мадэль>
STR_NEWGRF_INVALID_INDUSTRYTYPE :<невядомае прадпрыемства>
# NewGRF scanning window
# Sign list window
STR_SIGN_LIST_CAPTION :{WHITE}Сьпіс таблічак - {COMMA} табліч{P ка кi ак}
STR_SIGN_LIST_MATCH_CASE :{BLACK}Рэгiстр
@@ -3599,7 +3611,7 @@ STR_ORDER_STOP_ORDER :(Стоп)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
STR_ORDER_AUTOMATIC :(Аўтаматычна)
STR_ORDER_IMPLICIT :(Аўтаматычна)
STR_ORDER_FULL_LOAD :(Поўная загрузка)
STR_ORDER_FULL_LOAD_ANY :(Поўная загрузка любым грузам)
@@ -3883,7 +3895,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... мо
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... можна будаваць толькі ў гарадах
STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... можна будаваць толькі ў нізінах
STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... можа знаходзіцца толькі ля краю мапы
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... лес можна саджаць толькі вышэй за лінію сьнегу
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... лес можна саджаць толькі вышэй за сьнегавую лiнiю
# Station construction related errors
STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Тут немагчыма пабудаваць чыгуначную станцыю...
@@ -4715,6 +4727,7 @@ STR_TINY_BLACK_COMA :{TINYFONT}{BLAC
STR_TINY_COMMA :{TINYFONT}{COMMA}
STR_BLUE_COMMA :{BLUE}{COMMA}
STR_RED_COMMA :{RED}{COMMA}
STR_TINY_BLACK_DECIMAL :{TINYFONT}{BLACK}{DECIMAL}
STR_COMPANY_MONEY :{WHITE}{CURRENCY}
STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG}
STR_BLACK_CROSS :{BLACK}{CROSS}

File diff suppressed because it is too large Load Diff

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