1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-16 02:59:10 +00:00

Compare commits

...

53 Commits

Author SHA1 Message Date
rubidium
40ee9278f1 (svn r23281) -Release: 1.1.4-RC1 2011-11-20 12:35:39 +00:00
rubidium
45e119deeb (svn r23280) [1.1] -Prepare: 1.1.4-RC1 2011-11-20 12:30:55 +00:00
rubidium
fd48f42a07 (svn r23259) [1.1] -Backport from trunk:
- Fix: 3-column view of NewGRF GUI had too much space for certain font sizes (r23251)
- Fix: Ignore special characters, such as the train "character", when determining a fallback font (r23237)
- Fix: [NewGRF] Make train var 0xF3 consistent with TTDPatch (r23231)
- Fix: Invalidate build vehicle window when changing the setting for wagon speed limits (r23211)
2011-11-18 21:19:18 +00:00
rubidium
111fcafa2f (svn r23258) [1.1] -Backport from trunk: language updates 2011-11-18 21:17:11 +00:00
rubidium
47e7a98207 (svn r23257) [1.1] -Backport from trunk:
- Fix: [NoAI] Hide AIObject from the documentation as it cannot be used (r23204, r23201)
- Fix: [Network] Unstable sorting in the network list when two servers had the exact same name [FS#4829] (r23202)
- Fix: Oil rigs that "expired" did not get removed from the station list [FS#4822] (r23199)
2011-11-18 21:15:09 +00:00
rubidium
83062be4e0 (svn r23256) [1.1] -Backport from trunk:
- Fix: [Squirrel] replace custom qsort by std::sort to fix stack overflow [FS#4830] (r23190, r23187, r23186)
- Fix: Do not display railway fences between track and waypoints [FS#4627] (r23163)
- Fix: [NoAI] AIOrder didn't handle implicit orders correctly in all cases [FS#4823] (r23133)
2011-11-18 21:10:44 +00:00
rubidium
a04aad0df3 (svn r23255) [1.1] -Backport from trunk:
- Fix: When any keys on the on-screen keyboard were pressed the text cursor disappeared (r23132)
- Fix: [NoAI] AIOrder::IsCurrentOrderPartOfOrderList return false for valid vehicles and crashed for invalid ones (r23131)
- Fix: [NoAI] calling require() to include a file gave you 100.000 opcodes for free (r23117)
- Fix: Allow accessing the server's client info as well in the admin network [FS#4813] (r23115)
2011-11-18 21:04:08 +00:00
rubidium
5d9975cad1 (svn r23254) [1.1] -Backport from trunk:
- Fix: [NewGRF] Run StartupEngines() if NewGRFs changed during loading a savegame, just like it's running when NewGRFs are changed during a game (r23083)
- Fix: Account for snow line table when determining the snow line for building houses (r23082)
- Fix: [NewGRF] If a NewGRF overrides a default house the minimum start year for that house was set to 1930 [FS#4794] (r23059)
- Fix: [NoAI] AIOrder::GetOrderCount() did not hide implicit orders (r23057)
2011-11-18 20:52:13 +00:00
rubidium
68afdc6312 (svn r23054) [1.1] -Backport from trunk: language updates 2011-10-22 21:15:17 +00:00
rubidium
e706131e16 (svn r23053) [1.1] -Backport from trunk:
- Fix: [NewGRF] When vehicles break down, update the image cache after changing the vehicle state to make fish happy (r23050)
- Fix: Use the same forest-check for the vegetation-map colour as for nearby station names [FS#4810] (r23049)
- Fix: Check that the selected font size is valid the font face in use and choose the nearest size to that selected if not. Font metrics should then just work (r23038)
- Fix: The last custom playlist items went lost when the files in the .obm are not contiguous [FS#4776] (r23035, r23034, r23033)
2011-10-22 21:06:58 +00:00
rubidium
bf3c75c34c (svn r23052) [1.1] -Backport from trunk:
- Fix: Palette conversion windows to DOS for light house / stadium animated colour was mixed up (r23032)
- Fix: For the admin 'bots' there was no distinction between bankruptcy and manual removal of companies even though the API suggested that [FS#4804] (r23031)
- Fix: Always show a chat message and send an admin packet when a new company is made [FS#4796] (r23030)
- Fix: Pass bottom of dropdown item rather than bottom of dropdown window, so the dropdown gets drawn better with different font sizes (r23018)
2011-10-22 20:54:23 +00:00
rubidium
83d41e122c (svn r23051) [1.1] -Backport from trunk:
- Fix: AI backlog was to short to fully display the backtrace of some AI crashes [FS#4798] (r23012)
- Fix: When the last used server is deleted from the list also clear the last used server if it is the same [FS#4791] (r23011)
- Fix: [NewGRF] Make sure temporary storage is cleared before test and exec runs for DoCommands so NewGRF callbacks cannot change the result between the runs (r22996)
- Fix: [NewGRF] Tile was cleared before the object-placement callback was run, resulting in possible differences in test and exec run [FS#4775] (r22994)
2011-10-22 20:45:19 +00:00
rubidium
c1359d6d8a (svn r22995) [1.1] -Backport from trunk:
- Fix: [NoAI] Do not return ERR_UNKNOWN when the vehicle would become too long (r22988)
- Fix: Draw buoy sprite without outline on the map, fix minor issues with original graphics (r22974, r22973, r22971, r22962)
- Fix: [NewGRF] Strip newlines from NewGRF strings that should not have newlines, e.g. the NewGRF's name [FS#4769] (r22970)
2011-10-04 20:22:46 +00:00
rubidium
3daf4d012b (svn r22993) [1.1] -Backport from trunk:
- Fix: The savegame description and loading of savegames would crash with savegames from a patched stable (which did not bump the savegame version) [FS#4778] (r22958, r22957)
- Fix: Guard from reading outside the silly name list (r22955)
- Fix: [NewGRF] Properly limit the length of strings in a choice list (r22952)
- Fix: [NewGRF] Do not call CB 32 for disaster, effect vehicles or aircraft shadows/rotors (r22947)
2011-10-04 20:15:50 +00:00
rubidium
997a4aee46 (svn r22992) [1.1] -Backport from trunk:
- Fix: [NewGRF] Crash when accessing vehicle var 44 for a non-front aircraft [FS#4781] (r22946)
- Fix: Calculate the size of the start/stop vehicle button correctly (r22941)
- Fix: [OSX] Various MacOSX 10.7 issues causing OpenTTD to not work [FS#4751] (r22921, r22895, r22893, r22889)
- Fix: [NewGRF] Properties for feature 0x05 were not zeroed for each NewGRF, thus waterfeatures could glitch when the properties were set by a previous NewGRF and the NewGRF assumed the properties to be unmodified (r22918)
2011-10-04 20:12:02 +00:00
rubidium
4284b8abb3 (svn r22991) [1.1] -Backport from trunk:
- Fix: Old TTO/TTD savegames could get non-stop via orders upon savegame loading, even when those orders did not exist back then. This 'conversion' feature is something for TTDPatch and old OpenTTD savegames [FS#4716] (r22914)
- Fix: The icon would (almost) never be shown for SDL builds [FS#4617] (r22910)
- Fix: The name of the heightmap glitches in the 'play heightmap' window (r22902)
- Fix: Locks would be incorrectly assembled (r22108)
2011-10-04 20:06:23 +00:00
rubidium
526e7294a3 (svn r22937) [1.1] -Prepare 1.1.3 2011-09-15 19:03:33 +00:00
rubidium
9338e1a38f (svn r22936) [1.1] -Backport from trunk: language updates 2011-09-15 18:59:23 +00:00
rubidium
c42d060a44 (svn r22935) [1.1] -Backport from trunk:
- Fix: Prevent authentication bypass for the admin port when a new game is started [FS#4771] (r22934)
- Fix: TTO savegames with any aircraft not in an hangar caused crashes during load (r22915)
- Fix: Windows 2000 and XP without service pack 3 must use the win9x binary/installer; the newer MSVC compiler of the compile farm does not support those versions of Windows anymore [FS#4749] (r22909)
2011-09-15 18:56:43 +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
269 changed files with 7714 additions and 4175 deletions

View File

@@ -60,6 +60,9 @@ ifdef OSXAPP
$(Q)cp "$(ROOT_DIR)/os/macosx/openttd.icns" "$(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/openttd.icns"
$(Q)$(ROOT_DIR)/os/macosx/plistgen.sh "$(BUNDLE_DIR)/$(OSXAPP)" "$(REV)"
$(Q)cp "$(ROOT_DIR)/os/macosx/splash.png" "$(DATA_DIR)"
endif
ifeq ($(OS),UNIX)
$(Q)cp "$(ROOT_DIR)/media/openttd.32.bmp" "$(DATA_DIR)/"
endif
$(Q)cp "$(BIN_DIR)/$(TTD)" "$(TTD_DIR)/"
$(Q)cp "$(BIN_DIR)/ai/"compat_*.nut "$(AI_DIR)/"

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

@@ -248,7 +248,10 @@ $(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP)
$(Q)$(WINDRES) -o $@ -I `basename $<` $<
$(BIN_DIR)/$(TTD): $(TTD)
$(Q)cp $< $@
$(Q)cp $(TTD) $(BIN_DIR)/$(TTD)
ifeq ($(OS), UNIX)
$(Q)cp $(MEDIA_DIR)/openttd.32.bmp $(BIN_DIR)/data/
endif
$(TTD): $(OBJS) $(CONFIG_CACHE_LINKER)
$(E) '$(STAGE) Linking $@'

View File

@@ -8456,7 +8456,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetNumWagons(): 3
GetLength(): 24
GetWagonEngineType(): 9
GetWagonAge(): 0
GetWagonAge(): 1
GetWagonEngineType(): 27
GetWagonAge(): 0
GetWagonEngineType(): 27
@@ -8492,11 +8492,11 @@ ERROR: IsEnd() is invalid as Begin() is never called
14 => 1
12 => 1
Age ListDump:
17 => 1
16 => 1
14 => 1
13 => 1
12 => 1
17 => 0
16 => 0
MaxAge ListDump:
16 => 10980
14 => 10980
@@ -8504,9 +8504,9 @@ ERROR: IsEnd() is invalid as Begin() is never called
13 => 5490
12 => 5490
AgeLeft ListDump:
16 => 10980
16 => 10979
14 => 10979
17 => 7320
17 => 7319
13 => 5489
12 => 5489
CurrentSpeed ListDump:

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.

View File

@@ -55,7 +55,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
TRGC.GRF = ed446637e034104c5559b32c18afe78d
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
OPENTTD.GRF = 066f0ce5500e0e8f5332aee42e2451a2
OPENTTD.GRF = 245e2125cecfe7e0b6c5e85d32459f86
[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 = 066f0ce5500e0e8f5332aee42e2451a2
OPENTTD.GRF = 245e2125cecfe7e0b6c5e85d32459f86
[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 = 066f0ce5500e0e8f5332aee42e2451a2
OPENTTD.GRF = 245e2125cecfe7e0b6c5e85d32459f86
[origin]
default = You can find it on your Transport Tycoon Deluxe CD-ROM.

View File

@@ -1,3 +1,159 @@
1.1.4-RC1 (2011-11-20)
------------------------------------------------------------------------
- Fix: 3-column view of NewGRF GUI had too much space for certain font sizes (r23251)
- Fix: Ignore special characters, such as the train 'character', when determining a fallback font (r23237)
- Fix: [NewGRF] Make train var 0xF3 consistent with TTDPatch (r23231)
- Fix: Invalidate build vehicle window when changing the setting for wagon speed limits (r23211)
- Fix: [NoAI] Hide AIObject from the documentation as it cannot be used (r23204, r23201)
- Fix: [Network] Unstable sorting in the network list when two servers had the exact same name [FS#4829] (r23202)
- Fix: Oil rigs that 'expired' did not get removed from the station list [FS#4822] (r23199)
- Fix: [Squirrel] replace custom qsort by std::sort to fix stack overflow [FS#4830] (r23190, r23187, r23186)
- Fix: Do not display railway fences between track and waypoints [FS#4627] (r23163)
- Fix: [NoAI] AIOrder did not handle implicit orders correctly in all cases [FS#4823] (r23135, r23133)
- Fix: When any keys on the on-screen keyboard were pressed the text cursor disappeared (r23132)
- Fix: [NoAI] AIOrder::IsCurrentOrderPartOfOrderList return false for valid vehicles and crashed for invalid ones (r23131)
- Fix: [NoAI] calling require() to include a file gave you 100.000 opcodes for free (r23117)
- Fix: Allow accessing the server's client info as well in the admin network [FS#4813] (r23115)
- Fix: [NewGRF] Run StartupEngines() if NewGRFs changed during loading a savegame, just like it is running when NewGRFs are changed during a game (r23083)
- Fix: Account for snow line table when determining the snow line for building houses (r23082)
- Fix: [NewGRF] If a NewGRF overrides a default house the minimum start year for that house was set to 1930 [FS#4794] (r23059)
- Fix: [NoAI] AIOrder::GetOrderCount() did not hide implicit orders (r23057)
- Fix: [NewGRF] When vehicles break down, update the image cache after changing the vehicle state (r23050)
- Fix: Use the same forest-check for the vegetation-map colour as for nearby station names [FS#4810] (r23049)
- Fix: Check that the selected font size is valid the font face in use and choose the nearest size to that selected if not. Font metrics should then just work (r23038)
- Fix: [NewGRF] Strip newlines from NewGRF strings that should not have newlines, e.g. the NewGRF's name [FS#4769] (r23036, r22970)
- Fix: The last custom playlist items went lost when the files in the .obm are not contiguous [FS#4776] (r23035, r23034, r23033)
- Fix: Palette conversion windows to DOS for light house / stadium animated colour was mixed up (r23032)
- Fix: For the admin 'bots' there was no distinction between bankruptcy and manual removal of companies even though the API suggested that [FS#4804] (r23031)
- Fix: Always show a chat message and send an admin packet when a new company is made [FS#4796] (r23030)
- Fix: Pass bottom of dropdown item rather than bottom of dropdown window, so the dropdown gets drawn better with different font sizes (r23018)
- Fix: AI backlog was to short to fully display the backtrace of some AI crashes [FS#4798] (r23012)
- Fix: When the last used server is deleted from the list also clear the last used server if it is the same [FS#4791] (r23011)
- Fix: [NewGRF] Make sure temporary storage is cleared before test and exec runs for DoCommands so NewGRF callbacks cannot change the result between the runs (r22996)
- Fix: [NewGRF] Tile was cleared before the object-placement callback was run, resulting in possible differences in test and exec run [FS#4775] (r22994)
- Fix: [NoAI] Do not return ERR_UNKNOWN when the vehicle would become too long (r22988)
- Fix: Draw buoy sprite without outline on the map, fix minor issues with original graphics (r22974, r22973, r22971, r22962)
- Fix: The savegame description and loading of savegames would crash with savegames from a patched stable (which did not bump the savegame version) [FS#4778] (r22958, r22957)
- Fix: Guard from reading outside the silly name list (r22955)
- Fix: [NewGRF] Properly limit the length of strings in a choice list (r22952)
- Fix: [NewGRF] Do not call CB 32 for disaster, effect vehicles or aircraft shadows/rotors (r22947)
- Fix: [NewGRF] Crash when accessing vehicle var 44 for a non-front aircraft [FS#4781] (r22946)
- Fix: Calculate the size of the start/stop vehicle button correctly (r22941)
- Fix: [OSX] Various MacOSX 10.7 issues causing OpenTTD to not work [FS#4751] (r22921, r22895, r22893, r22889)
- Fix: [NewGRF] Properties for feature 0x05 were not zeroed for each NewGRF, thus waterfeatures could glitch when the properties were set by a previous NewGRF and the NewGRF assumed the properties to be unmodified (r22918)
- Fix: Old TTO/TTD savegames could get non-stop via orders upon savegame loading, even when those orders did not exist back then. This 'conversion' feature is something for TTDPatch and old OpenTTD savegames [FS#4716] (r22914)
- Fix: The icon would (almost) never be shown for SDL builds [FS#4617] (r22910)
- Fix: The name of the heightmap glitches in the 'play heightmap' window (r22902)
- Fix: Locks would be incorrectly assembled (r22108)
1.1.3 (2011-09-15)
------------------------------------------------------------------------
- Fix: Prevent authentication bypass for the admin port when a new game is started [FS#4771] (r22934)
- Fix: TTO savegames with any aircraft not in an hangar caused crashes during load (r22915)
- Fix: Windows 2000 and XP without service pack 3 must use the win9x binary/installer; the newer MSVC compiler of the compile farm does not support those versions of Windows anymore [FS#4749] (r22909)
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 [CVE-2011-3343] [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 [CVE-2011-3343] [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 [CVE-2011-3341] [FS#4745] (r22845)
- Fix: Harden savegame load against too many AI config settings [CVE-2011-3342] [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 [CVE-2011-3342] [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)
@@ -21,7 +177,6 @@
- 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: No client error packet was sent to the admin bots [FS#4585] (r22384)
- 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)

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,6 +1,6 @@
OpenTTD's known bugs
Last updated: 2011-05-15
Release version: 1.1.1-RC1
Last updated: 2011-11-20
Release version: 1.1.4-RC1
------------------------------------------------------------------------
@@ -39,6 +39,8 @@ 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.
- 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
@@ -265,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.
@@ -301,3 +303,38 @@ Can't run OpenTTD with the -d option from a MSYS console [FS#4587]
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

@@ -6,13 +6,26 @@
// 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 "Aqueduct graphics by Jonathan G. Rennison"
-1 * 0 0C "Aqueduct graphics by Jonathan G. Rennison / PaulC"
// temperate aqueduct
-1 * 6 07 83 01 \7! 00 09
-1 * 3 05 12 08
-1 sprites/aqueduct.png 34 8 09 33 64 -34 -10
-1 sprites/aqueduct.png 114 8 09 33 66 -37 -9
-1 sprites/aqueduct.png 194 8 09 33 64 -34 -10
-1 sprites/aqueduct.png 274 8 09 33 66 -37 -9
-1 sprites/aqueduct.png 354 8 09 33 64 -34 -5
-1 sprites/aqueduct.png 434 8 09 33 66 -37 -4
-1 sprites/aqueduct.png 514 8 09 23 33 -31 0
-1 sprites/aqueduct.png 562 8 09 23 33 0 1
-1 sprites/aqueduct.png 34 8 09 32 61 -30 -9
-1 sprites/aqueduct.png 114 8 09 31 62 -29 -9
-1 sprites/aqueduct.png 194 8 09 32 61 -30 -9
-1 sprites/aqueduct.png 274 8 09 31 62 -29 -9
-1 sprites/aqueduct.png 354 8 09 32 61 -30 -4
-1 sprites/aqueduct.png 434 8 09 31 62 -29 -4
-1 sprites/aqueduct.png 514 8 09 23 33 -31 0
-1 sprites/aqueduct.png 562 8 09 23 33 0 1
// non-temperate aqueduct
-1 * 6 07 83 01 \7= 00 09
-1 * 3 05 12 08
-1 sprites/aqueduct.png 34 48 09 32 61 -30 -9
-1 sprites/aqueduct.png 114 48 09 31 62 -29 -9
-1 sprites/aqueduct.png 194 48 09 32 61 -30 -9
-1 sprites/aqueduct.png 274 48 09 31 62 -29 -9
-1 sprites/aqueduct.png 354 48 09 32 61 -30 -4
-1 sprites/aqueduct.png 434 48 09 31 62 -29 -4
-1 sprites/aqueduct.png 514 48 09 23 33 -31 0
-1 sprites/aqueduct.png 562 48 09 23 33 0 1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -6,70 +6,166 @@
// 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 "Canal graphics by George"
-1 * 0 0C "Canal graphics by George / PaulC"
-1 * 3 05 08 41
-1 sprites/canals.png 66 8 09 23 64 -31 0
-1 sprites/canals.png 146 8 09 39 64 -31 -8
-1 sprites/canals.png 226 8 09 23 64 -31 0
-1 sprites/canals.png 306 8 09 39 64 -31 -8
-1 sprites/canals.png 386 8 09 59 64 -31 -36
-1 sprites/canals.png 466 8 09 65 64 -31 -34
-1 sprites/canals.png 546 8 09 59 64 -31 -36
-1 sprites/canals.png 626 8 09 59 64 -31 -28
-1 sprites/canals.png 706 8 09 62 64 -1 -51
-1 sprites/canals.png 2 88 09 62 64 -61 -43
-1 sprites/canals.png 82 88 09 62 64 -61 -51
-1 sprites/canals.png 162 88 09 62 64 -1 -43
-1 sprites/canals.png 242 88 09 59 64 -31 -28
-1 sprites/canals.png 322 88 09 65 66 -33 -34
-1 sprites/canals.png 402 88 09 59 64 -31 -28
-1 sprites/canals.png 482 88 09 59 64 -31 -28
-1 sprites/canals.png 562 88 09 62 64 -1 -43
-1 sprites/canals.png 642 88 09 60 64 -61 -43
-1 sprites/canals.png 722 88 09 62 66 -61 -43
-1 sprites/canals.png 2 168 09 60 64 -1 -43
-1 sprites/canals.png 82 168 09 59 64 -31 -28
-1 sprites/canals.png 162 168 09 59 64 -31 -28
-1 sprites/canals.png 242 168 09 59 64 -31 -28
-1 sprites/canals.png 322 168 09 59 64 -31 -28
-1 sprites/canals.png 402 168 09 60 64 -1 -43
-1 sprites/canals.png 482 168 09 62 68 -61 -43
-1 sprites/canals.png 562 168 09 60 64 -61 -43
-1 sprites/canals.png 642 168 09 62 64 -1 -43
-1 sprites/canals.png 722 168 09 59 64 -31 -36
-1 sprites/canals.png 2 248 09 65 64 -31 -34
-1 sprites/canals.png 82 248 09 59 64 -31 -36
-1 sprites/canals.png 162 248 09 59 64 -31 -28
-1 sprites/canals.png 242 248 09 62 64 -1 -51
-1 sprites/canals.png 322 248 09 62 64 -61 -43
-1 sprites/canals.png 402 248 09 62 64 -61 -51
-1 sprites/canals.png 482 248 09 62 64 -1 -43
-1 sprites/canals.png 562 248 09 59 64 -31 -28
-1 sprites/canals.png 642 248 09 65 66 -33 -34
-1 sprites/canals.png 722 248 09 59 64 -31 -28
-1 sprites/canals.png 2 328 09 59 64 -31 -28
-1 sprites/canals.png 82 328 09 62 64 -1 -43
-1 sprites/canals.png 162 328 09 60 64 -61 -43
-1 sprites/canals.png 242 328 09 62 66 -61 -43
-1 sprites/canals.png 322 328 09 60 64 -1 -43
-1 sprites/canals.png 402 328 09 59 64 -31 -28
-1 sprites/canals.png 482 328 09 59 64 -31 -28
-1 sprites/canals.png 562 328 09 59 64 -31 -28
-1 sprites/canals.png 642 328 09 59 64 -31 -28
-1 sprites/canals.png 722 328 09 60 64 -1 -43
-1 sprites/canals.png 2 408 09 62 68 -61 -43
-1 sprites/canals.png 82 408 09 60 64 -61 -43
-1 sprites/canals.png 162 408 09 62 64 -1 -43
-1 sprites/canals.png 242 408 09 37 70 -31 -6
-1 sprites/canals.png 322 408 09 37 70 -31 0
-1 sprites/canals.png 402 408 09 37 70 -37 0
-1 sprites/canals.png 482 408 09 37 70 -37 -6
-1 sprites/canals.png 562 408 09 31 64 -31 0
-1 sprites/canals.png 642 408 09 31 64 -31 0
-1 sprites/canals.png 722 408 09 31 64 -31 0
-1 sprites/canals.png 2 488 09 37 64 -31 -6
-1 sprites/canals.png 82 488 09 31 64 -31 0
-1 sprites/canals.png 162 488 09 31 64 -31 0
-1 sprites/canals.png 242 488 09 31 64 -31 0
-1 sprites/canals.png 322 488 09 37 64 -31 -6
-1 sprites/canals.png 402 488 09 20 20 0 0
// Canal slopes
-1 sprites/canal_locks.png 66 8 09 23 64 -31 0
-1 sprites/canal_locks.png 146 8 09 39 64 -31 -8
-1 sprites/canal_locks.png 226 8 09 23 64 -31 0
-1 sprites/canal_locks.png 306 8 09 39 64 -31 -8
// Lock sides
-1 sprites/canal_locks.png 386 8 09 59 64 -31 -36
-1 sprites/canal_locks.png 466 8 09 65 64 -31 -34
-1 sprites/canal_locks.png 546 8 09 59 64 -31 -36
-1 sprites/canal_locks.png 626 8 09 59 64 -31 -28
-1 sprites/canal_locks.png 706 8 09 62 64 -1 -51
-1 sprites/canal_locks.png 2 88 09 62 64 -61 -43
-1 sprites/canal_locks.png 82 88 09 62 64 -61 -51
-1 sprites/canal_locks.png 162 88 09 62 64 -1 -43
-1 sprites/canal_locks.png 242 88 09 59 64 -31 -28
-1 sprites/canal_locks.png 322 88 09 65 66 -33 -34
-1 sprites/canal_locks.png 402 88 09 59 64 -31 -28
-1 sprites/canal_locks.png 482 88 09 59 64 -31 -28
-1 sprites/canal_locks.png 562 88 09 62 64 -1 -43
-1 sprites/canal_locks.png 642 88 09 60 64 -61 -43
-1 sprites/canal_locks.png 722 88 09 62 66 -61 -43
-1 sprites/canal_locks.png 2 168 09 60 64 -1 -43
-1 sprites/canal_locks.png 82 168 09 59 64 -31 -28
-1 sprites/canal_locks.png 162 168 09 59 64 -31 -28
-1 sprites/canal_locks.png 242 168 09 59 64 -31 -28
-1 sprites/canal_locks.png 322 168 09 59 64 -31 -28
-1 sprites/canal_locks.png 402 168 09 60 64 -1 -43
-1 sprites/canal_locks.png 482 168 09 62 68 -61 -43
-1 sprites/canal_locks.png 562 168 09 60 64 -61 -43
-1 sprites/canal_locks.png 642 168 09 62 64 -1 -43
-1 sprites/canal_locks.png 722 168 09 59 64 -31 -36
-1 sprites/canal_locks.png 2 248 09 65 64 -31 -34
-1 sprites/canal_locks.png 82 248 09 59 64 -31 -36
-1 sprites/canal_locks.png 162 248 09 59 64 -31 -28
-1 sprites/canal_locks.png 242 248 09 62 64 -1 -51
-1 sprites/canal_locks.png 322 248 09 62 64 -61 -43
-1 sprites/canal_locks.png 402 248 09 62 64 -61 -51
-1 sprites/canal_locks.png 482 248 09 62 64 -1 -43
-1 sprites/canal_locks.png 562 248 09 59 64 -31 -28
-1 sprites/canal_locks.png 642 248 09 65 66 -33 -34
-1 sprites/canal_locks.png 722 248 09 59 64 -31 -28
-1 sprites/canal_locks.png 2 328 09 59 64 -31 -28
-1 sprites/canal_locks.png 82 328 09 62 64 -1 -43
-1 sprites/canal_locks.png 162 328 09 60 64 -61 -43
-1 sprites/canal_locks.png 242 328 09 62 66 -61 -43
-1 sprites/canal_locks.png 322 328 09 60 64 -1 -43
-1 sprites/canal_locks.png 402 328 09 59 64 -31 -28
-1 sprites/canal_locks.png 482 328 09 59 64 -31 -28
-1 sprites/canal_locks.png 562 328 09 59 64 -31 -28
-1 sprites/canal_locks.png 642 328 09 59 64 -31 -28
-1 sprites/canal_locks.png 722 328 09 60 64 -1 -43
-1 sprites/canal_locks.png 2 408 09 62 68 -61 -43
-1 sprites/canal_locks.png 82 408 09 60 64 -61 -43
-1 sprites/canal_locks.png 162 408 09 62 64 -1 -43
// Canal edges (temperate)
-1 sprites/canals.png 30 10 09 22 45 -11 -1
-1 sprites/canals.png 94 10 09 21 41 -8 10
-1 sprites/canals.png 142 10 09 21 42 -31 10
-1 sprites/canals.png 190 10 09 22 43 -31 -1
-1 sprites/canals.png 238 10 09 22 22 11 4
-1 sprites/canals.png 270 10 09 16 24 -11 15
-1 sprites/canals.png 302 10 09 23 23 -31 4
-1 sprites/canals.png 334 10 09 18 24 -11 -1
-1 sprites/canals.png 366 10 09 11 12 21 10
-1 sprites/canals.png 398 10 09 10 19 -8 21
-1 sprites/canals.png 430 10 09 10 11 -31 10
-1 sprites/canals.png 446 10 09 16 24 -11 -6
// Canal icon
-1 sprites/canal_locks.png 242 408 09 20 20 0 0
// Differentiation for the climates starts here
// Canal edges (arctic snowy)
-1 * 4 01 05 01 \b12
-1 sprites/canals.png 30 40 09 22 45 -11 -1
-1 sprites/canals.png 94 40 09 21 41 -8 10
-1 sprites/canals.png 142 40 09 21 42 -31 10
-1 sprites/canals.png 190 40 09 22 43 -31 -1
-1 sprites/canals.png 238 40 09 22 22 11 4
-1 sprites/canals.png 270 40 09 16 24 -11 15
-1 sprites/canals.png 302 40 09 23 23 -31 4
-1 sprites/canals.png 334 40 09 18 24 -11 -1
-1 sprites/canals.png 366 40 09 11 12 21 10
-1 sprites/canals.png 398 40 09 10 19 -8 21
-1 sprites/canals.png 430 40 09 10 11 -31 10
-1 sprites/canals.png 446 40 09 16 24 -11 -6
-1 * 7 02 05 10 01 00 00 00
// Canal edges (arctic normal)
-1 * 4 01 05 01 \b12
-1 sprites/canals.png 30 70 09 22 45 -11 -1
-1 sprites/canals.png 94 70 09 21 41 -8 10
-1 sprites/canals.png 142 70 09 21 42 -31 10
-1 sprites/canals.png 190 70 09 22 43 -31 -1
-1 sprites/canals.png 238 70 09 22 22 11 4
-1 sprites/canals.png 270 70 09 16 24 -11 15
-1 sprites/canals.png 302 70 09 23 23 -31 4
-1 sprites/canals.png 334 70 09 18 24 -11 -1
-1 sprites/canals.png 366 70 09 11 12 21 10
-1 sprites/canals.png 398 70 09 10 19 -8 21
-1 sprites/canals.png 430 70 09 10 11 -31 10
-1 sprites/canals.png 446 70 09 16 24 -11 -6
-1 * 7 02 05 11 01 00 00 00
// Choose the right arctic canal edges
-1 * 14 02 05 12 81 81 00 FF 01 10 00 04 04 11 00
-1 * 6 07 83 01 \7! 01 01
-1 * 7 03 05 01 02 00 12 00
// Canal edges (tropic desert)
-1 * 4 01 05 01 \b12
-1 sprites/canals.png 30 100 09 22 45 -11 -1
-1 sprites/canals.png 94 100 09 21 41 -8 10
-1 sprites/canals.png 142 100 09 21 42 -31 10
-1 sprites/canals.png 190 100 09 22 43 -31 -1
-1 sprites/canals.png 238 100 09 22 22 11 4
-1 sprites/canals.png 270 100 09 16 24 -11 15
-1 sprites/canals.png 302 100 09 23 23 -31 4
-1 sprites/canals.png 334 100 09 18 24 -11 -1
-1 sprites/canals.png 366 100 09 11 12 21 10
-1 sprites/canals.png 398 100 09 10 19 -8 21
-1 sprites/canals.png 430 100 09 10 11 -31 10
-1 sprites/canals.png 446 100 09 16 24 -11 -6
-1 * 7 02 05 13 01 00 00 00
// Canal edges (tropic rainforest)
-1 * 4 01 05 01 \b12
-1 sprites/canals.png 30 130 09 22 45 -11 -1
-1 sprites/canals.png 94 130 09 21 41 -8 10
-1 sprites/canals.png 142 130 09 21 42 -31 10
-1 sprites/canals.png 190 130 09 22 43 -31 -1
-1 sprites/canals.png 238 130 09 22 22 11 4
-1 sprites/canals.png 270 130 09 16 24 -11 15
-1 sprites/canals.png 302 130 09 23 23 -31 4
-1 sprites/canals.png 334 130 09 18 24 -11 -1
-1 sprites/canals.png 366 130 09 11 12 21 10
-1 sprites/canals.png 398 130 09 10 19 -8 21
-1 sprites/canals.png 430 130 09 10 11 -31 10
-1 sprites/canals.png 446 130 09 16 24 -11 -6
-1 * 7 02 05 14 01 00 00 00
// Choose the right tropic canal edges
-1 * 14 02 05 15 81 81 00 FF 01 13 00 01 01 14 00
-1 * 6 07 83 01 \7! 02 01
-1 * 7 03 05 01 02 00 15 00
// Canal edges (toyland)
-1 * 4 01 05 01 \b12
-1 sprites/canals.png 30 160 09 22 45 -11 -1
-1 sprites/canals.png 94 160 09 21 41 -8 10
-1 sprites/canals.png 142 160 09 21 42 -31 10
-1 sprites/canals.png 190 160 09 22 43 -31 -1
-1 sprites/canals.png 238 160 09 22 22 11 4
-1 sprites/canals.png 270 160 09 16 24 -11 15
-1 sprites/canals.png 302 160 09 23 23 -31 4
-1 sprites/canals.png 334 160 09 18 24 -11 -1
-1 sprites/canals.png 366 160 09 11 12 21 10
-1 sprites/canals.png 398 160 09 10 19 -8 21
-1 sprites/canals.png 430 160 09 10 11 -31 10
-1 sprites/canals.png 446 160 09 16 24 -11 -6
-1 * 7 02 05 16 01 00 00 00
-1 * 6 07 83 01 \7! 03 01
-1 * 7 03 05 01 02 00 16 00

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -6,8 +6,8 @@
// 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 "Fixing (alignment) bugs in the orignal graphics. By Addi."
-1 * 6 07 83 01 \7= 03 69
-1 * 0 0C "Fixing (alignment) bugs in the original graphics. By Addi and PaulC."
-1 * 6 07 83 01 \7= 03 7D
// 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
@@ -79,6 +79,11 @@
-1 sprites/fix_graphics.png 370 72 09 35 48 -23 -7
-1 sprites/fix_graphics.png 434 72 09 35 48 -23 -7
-1 sprites/fix_graphics.png 498 72 09 21 49 -24 3
// Misaligned maglev bridge heads
-1 * 8 0A 02 01 12 11 02 14 11
-1 sprites/fix_graphics.png 322 486 09 35 48 -23 -7
-1 sprites/fix_graphics.png 386 486 09 35 48 -23 -7
-1 sprites/fix_graphics.png 450 486 09 21 49 -24 3
// Improperly cut cinema
-1 * 5 0A 01 02 34 11
-1 sprites/fix_graphics.png 578 72 09 31 64 -31 0
@@ -198,3 +203,132 @@
// GUI sprite
-1 * 5 0A 01 01 \w2600
-1 sprites/fix_graphics.png 433 298 09 15 40 0 5
// Make level crossings in tropical climate look normal
-1 * 6 07 83 01 \7! 02 19
-1 * 14 0A 04 04 5A 05 08 62 05 08 6E 05 04 7A 05
-1 sprites/fix_graphics.png 2 390 09 31 64 -31 0
-1 sprites/fix_graphics.png 82 390 09 31 64 -31 0
-1 sprites/fix_graphics.png 162 390 09 31 64 -31 0
-1 sprites/fix_graphics.png 242 390 09 31 64 -31 0
-1 sprites/fix_graphics.png 322 390 09 31 64 -31 0
-1 sprites/fix_graphics.png 402 390 09 31 64 -31 0
-1 sprites/fix_graphics.png 482 390 09 31 64 -31 0
-1 sprites/fix_graphics.png 562 390 09 31 64 -31 0
-1 sprites/fix_graphics.png 642 390 09 31 64 -31 0
-1 sprites/fix_graphics.png 722 390 09 31 64 -31 0
-1 sprites/fix_graphics.png 2 438 09 31 64 -31 0
-1 sprites/fix_graphics.png 82 438 09 31 64 -31 0
-1 sprites/fix_graphics.png 162 438 09 31 64 -31 0
-1 sprites/fix_graphics.png 242 438 09 31 64 -31 0
-1 sprites/fix_graphics.png 322 438 09 31 64 -31 0
-1 sprites/fix_graphics.png 402 438 09 31 64 -31 0
-1 sprites/fix_graphics.png 482 438 09 31 64 -31 0
-1 sprites/fix_graphics.png 562 438 09 31 64 -31 0
-1 sprites/fix_graphics.png 642 438 09 31 64 -31 0
-1 sprites/fix_graphics.png 722 438 09 31 64 -31 0
-1 sprites/fix_graphics.png 2 486 09 31 64 -31 0
-1 sprites/fix_graphics.png 82 486 09 31 64 -31 0
-1 sprites/fix_graphics.png 162 486 09 31 64 -31 0
-1 sprites/fix_graphics.png 242 486 09 31 64 -31 0
// Fix transparency of steel mill
-1 * 6 07 83 01 \7! 00 0A
-1 * 5 0A 01 04 4D 08
-1 sprites/fix_graphics.png 610 486 09 31 64 -31 0
-1 sprites/fix_graphics.png 690 486 09 61 59 -31 -33
-1 sprites/fix_graphics.png 2 566 09 31 64 -31 0
-1 sprites/fix_graphics.png 82 566 09 50 51 -25 -21
-1 * 5 0A 01 04 58 08
-1 sprites/fix_graphics.png 162 566 09 31 64 -31 0
-1 sprites/fix_graphics.png 242 566 09 52 59 -31 -24
-1 sprites/fix_graphics.png 306 566 09 31 64 -31 0
-1 sprites/fix_graphics.png 386 566 09 44 51 -25 -15
// Fix transparency of oil well
-1 * 6 07 83 01 \7= 03 10
-1 * 5 0A 01 06 7E 08
-1 sprites/fix_graphics.png 482 566 09 50 31 -11 -28
-1 sprites/fix_graphics.png 530 566 09 47 31 -11 -25
-1 sprites/fix_graphics.png 578 566 09 47 31 -11 -25
-1 sprites/fix_graphics.png 626 566 09 47 31 -11 -25
-1 sprites/fix_graphics.png 674 566 09 49 31 -11 -27
-1 sprites/fix_graphics.png 722 566 09 52 31 -11 -30
-1 * 6 07 83 01 \7! 00 02
-1 * 5 0A 01 01 7D 08
-1 sprites/fix_graphics.png 2 630 09 31 64 -31 0
-1 * 6 07 83 01 \7! 01 02
-1 * 5 0A 01 01 7D 08
-1 sprites/fix_graphics.png 114 630 09 31 64 -31 0
-1 * 6 07 83 01 \7! 02 02
-1 * 5 0A 01 01 7D 08
-1 sprites/fix_graphics.png 226 630 09 31 64 -31 0
-1 * 6 07 83 01 \7! 03 0F
-1 * 5 0A 01 06 91 04
// Fix toyland overlay for PBS on maglev
-1 sprites/fix_graphics.png 338 630 09 16 30 -14 8
-1 sprites/fix_graphics.png 386 630 09 16 30 -14 8
-1 sprites/fix_graphics.png 434 630 01 7 40 -19 4
-1 sprites/fix_graphics.png 482 630 01 7 40 -19 20
-1 sprites/fix_graphics.png 530 630 01 19 12 11 6
-1 sprites/fix_graphics.png 562 630 01 19 12 -21 6
// Fix toyland monorail bridge alignment
-1 * 8 0A 02 01 EA 10 02 EC 10
-1 sprites/fix_graphics.png 610 630 09 35 48 -23 -7
-1 sprites/fix_graphics.png 674 630 09 35 48 -23 -7
-1 sprites/fix_graphics.png 738 630 09 21 49 -24 3
// Fix toyland maglev bridge alignment
-1 * 8 0A 02 01 12 11 02 14 11
-1 sprites/fix_graphics.png 18 678 09 35 48 -23 -7
-1 sprites/fix_graphics.png 82 678 09 35 48 -23 -7
-1 sprites/fix_graphics.png 146 678 09 21 49 -24 3
// Fix city airport's grass for temperate
-1 * 6 07 83 01 \7! 00 0A
-1 * 5 0A 01 09 4C 0A
-1 sprites/fix_graphics.png 242 678 09 31 64 -31 0
-1 sprites/fix_graphics.png 322 678 09 31 64 -31 0
-1 sprites/fix_graphics.png 402 678 09 31 64 -31 0
-1 sprites/fix_graphics.png 482 678 09 31 64 -31 0
-1 sprites/fix_graphics.png 562 678 09 31 64 -31 0
-1 sprites/fix_graphics.png 642 678 09 31 64 -31 0
-1 sprites/fix_graphics.png 722 678 09 31 64 -31 0
-1 sprites/fix_graphics.png 2 726 09 31 64 -31 0
-1 sprites/fix_graphics.png 82 726 09 31 64 -31 0
// Fix city airport's grass for arctic
-1 * 6 07 83 01 \7! 01 0A
-1 * 5 0A 01 09 4C 0A
-1 sprites/fix_graphics.png 194 726 09 31 64 -31 0
-1 sprites/fix_graphics.png 274 726 09 31 64 -31 0
-1 sprites/fix_graphics.png 354 726 09 31 64 -31 0
-1 sprites/fix_graphics.png 434 726 09 31 64 -31 0
-1 sprites/fix_graphics.png 514 726 09 31 64 -31 0
-1 sprites/fix_graphics.png 594 726 09 31 64 -31 0
-1 sprites/fix_graphics.png 674 726 09 31 64 -31 0
-1 sprites/fix_graphics.png 2 774 09 31 64 -31 0
-1 sprites/fix_graphics.png 82 774 09 31 64 -31 0
// Fix city airport's grass for tropical
-1 * 6 07 83 01 \7! 02 0A
-1 * 5 0A 01 09 4C 0A
-1 sprites/fix_graphics.png 194 774 09 31 64 -31 0
-1 sprites/fix_graphics.png 274 774 09 31 64 -31 0
-1 sprites/fix_graphics.png 354 774 09 31 64 -31 0
-1 sprites/fix_graphics.png 434 774 09 31 64 -31 0
-1 sprites/fix_graphics.png 514 774 09 31 64 -31 0
-1 sprites/fix_graphics.png 594 774 09 31 64 -31 0
-1 sprites/fix_graphics.png 674 774 09 31 64 -31 0
-1 sprites/fix_graphics.png 2 822 09 31 64 -31 0
-1 sprites/fix_graphics.png 82 822 09 31 64 -31 0
// Fix city airport's grass for toyland
-1 * 6 07 83 01 \7! 03 0A
-1 * 5 0A 01 09 4C 0A
-1 sprites/fix_graphics.png 194 822 09 31 64 -31 0
-1 sprites/fix_graphics.png 274 822 09 31 64 -31 0
-1 sprites/fix_graphics.png 354 822 09 31 64 -31 0
-1 sprites/fix_graphics.png 434 822 09 31 64 -31 0
-1 sprites/fix_graphics.png 514 822 09 31 64 -31 0
-1 sprites/fix_graphics.png 594 822 09 31 64 -31 0
-1 sprites/fix_graphics.png 674 822 09 31 64 -31 0
-1 sprites/fix_graphics.png 2 870 09 31 64 -31 0
-1 sprites/fix_graphics.png 82 870 09 31 64 -31 0
// Fix buoy in-game; don't show black outline
-1 * 4 01 05 01 \b1
-1 sprites/fix_graphics.png 575 490 09 11 7 7 4
-1 * 7 02 05 17 01 00 00 00
-1 * 7 03 05 01 08 00 17 00

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 63 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,45 @@
openttd (1.1.4-RC1) unstable; urgency=low
* New upstream release 1.1.4-RC1
-- Matthijs Kooijman <matthijs@stdin.nl> Sun, 20 Nov 2011 17:00:00 +0100
openttd (1.1.3) unstable; urgency=low
* New upstream release 1.1.3
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 15 Sep 2011 21:00:00 +0200
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

View File

@@ -1,6 +1,6 @@
@echo off
set OPENTTD_VERSION=1.1.1-RC1
set OPENTTD_VERSION=1.1.4-RC1
set OPENSFX_VERSION=0.8.0
set NOSOUND_VERSION=0.8.0
set OPENGFX_VERSION=0.7.0

View File

@@ -2,7 +2,7 @@
%define binname openttd
%define srcver 1.1.1
%define srcver 1.1.4
%if %{dedicated}
Name: %{binname}-dedicated

View File

@@ -1,7 +1,7 @@
# Version numbers to update
!define APPV_MAJOR 1
!define APPV_MINOR 1
!define APPV_MAINT 1
!define APPV_MAINT 4
!define APPV_BUILD 0
!define APPV_EXTRA "-RC1"
@@ -57,6 +57,7 @@ Var CDDRIVE
; Modern interface settings
!include "MUI2.nsh"
!include "InstallOptions.nsh"
!include "WinVer.nsh"
!define MUI_ABORTWARNING
!define MUI_WELCOMEPAGE_TITLE_3LINES
@@ -518,17 +519,17 @@ hasCD:
FunctionEnd
;-------------------------------------------------------------------------------
; Determine windows version, returns "win9x" if Win9x/Me or "winnt" on the stack
; Determine windows version, returns "win9x" if Win9x/Me/2000/XP SP2- or "winnt" for the rest on the stack
Function GetWindowsVersion
ClearErrors
StrCpy $R0 "winnt"
GetVersion::WindowsPlatformId
Pop $R0
IntCmp $R0 2 WinNT 0
StrCpy $R0 "win9x"
WinNT:
ClearErrors
${If} ${IsNT}
${If} ${IsWinXP}
${AndIf} ${AtLeastServicePack} 3
${OrIf} ${AtLeastWin2003}
StrCpy $R0 "winnt"
${EndIf}
${EndIf}
Push $R0
FunctionEnd
@@ -540,12 +541,12 @@ Function CheckProcessorArchitecture
IntCmp $R0 64 Win64 0
ClearErrors
IntCmp ${APPBITS} 64 0 Done
MessageBox MB_OKCANCEL|MB_ICONSTOP "You are trying to install the 64-bit OpenTTD on a 32-bit operating system. This is not going to work. Please download the correct version. Do you really want to continue?" IDOK Done IDCANCEL Abort
MessageBox MB_YESNO|MB_ICONSTOP "You are trying to install the 64-bit OpenTTD on a 32-bit operating system. This is not going to work. Please download the correct version. Do you really want to continue?" IDYES Done IDNO Abort
GoTo Done
Win64:
ClearErrors
IntCmp ${APPBITS} 64 Done 0
MessageBox MB_OKCANCEL|MB_ICONINFORMATION "You are trying to install the 32-bit OpenTTD on a 64-bit operating system. 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_YESNO|MB_ICONINFORMATION "You are trying to install the 32-bit OpenTTD on a 64-bit operating system. This is not advised, but will work with reduced capabilities. We suggest that you download the correct version. Do you really want to continue?" IDYES Done IDNO Abort
GoTo Done
Abort:
Quit
@@ -560,12 +561,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_YESNO|MB_ICONSTOP "You are trying to install the Windows XP SP3, Vista and 7 version on Windows 95, 98, ME, 2000 and XP without SP3. This is will not work. Please download the correct version. Do you really want to continue?" IDYES Done IDNO 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_YESNO|MB_ICONEXCLAMATION "You are trying to install the Windows 95, 98, 2000 and XP without SP3 version on Windows XP SP3, 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?" IDYES Done IDNO Abort
Abort:
Quit
Done:
@@ -674,8 +675,7 @@ WelcomeToSetup:
ReadRegStr $OLDVERSION HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayVersion"
; Gets the older version then displays it in a message box
MessageBox MB_OK|MB_ICONINFORMATION \
"Welcome to ${APPNAMEANDVERSION} Setup.$\n \
This will allow you to upgrade from version $OLDVERSION."
"Welcome to ${APPNAMEANDVERSION} Setup.$\nThis will allow you to upgrade from version $OLDVERSION."
SectionSetFlags ${Section2} 0x80 ; set bit 7
SectionSetFlags ${Section3} 0x80 ; set bit 7
SectionSetFlags ${Section4} 0x80 ; set bit 7
@@ -686,8 +686,7 @@ VersionsAreEqual:
ReadRegStr $UninstallString HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "UninstallString"
IfFileExists "$UninstallString" "" FinishCallback
MessageBox MB_YESNO|MB_ICONQUESTION \
"Setup detected ${APPNAMEANDVERSION} on your system. This is the same version that this program will install.$\n \
Are you trying to uninstall it?" \
"Setup detected ${APPNAMEANDVERSION} on your system. This is the same version that this program will install.$\nAre you trying to uninstall it?" \
IDYES DoUninstall IDNO FinishCallback
DoUninstall: ; You have the same version as this installer. This allows you to uninstall.
Exec "$UninstallString"
@@ -695,8 +694,7 @@ DoUninstall: ; You have the same version as this installer. This allows you to
InstallerIsOlder:
MessageBox MB_OK|MB_ICONSTOP \
"You have a newer version of ${APPNAME}.$\n \
Setup will now exit."
"You have a newer version of ${APPNAME}.$\nSetup will now exit."
Quit
FinishCallback:

View File

@@ -1,5 +1,5 @@
!define APPBITS 32 ; Define number of bits for the architecture
!define EXTRA_VERSION "2000, XP, Vista and 7"
!define EXTRA_VERSION "XP SP3, Vista and 7"
!define APPARCH "win32" ; Define the application architecture
!define BINARY_DIR "${PATH_ROOT}objs\win32\Release"
InstallDir "$PROGRAMFILES32\OpenTTD\"

View File

@@ -1,5 +1,5 @@
!define APPBITS 32 ; Define number of bits for the architecture
!define EXTRA_VERSION "95, 98 and ME"
!define EXTRA_VERSION "95, 98, ME, 2000 and XP without SP3"
!define APPARCH "win9x" ; Define the application architecture
!define BINARY_DIR "${PATH_ROOT}bin"
InstallDir "$PROGRAMFILES32\OpenTTD\"

View File

@@ -1,6 +1,6 @@
OpenTTD readme
Last updated: 2011-05-15
Release version: 1.1.1-RC1
Last updated: 2011-11-20
Release version: 1.1.4-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
@@ -447,7 +470,8 @@ The following compilers are known to compile OpenTTD:
Version 2005 gives bogus warnings about scoping issues.
- 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 non-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

@@ -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

@@ -1,6 +1,9 @@
/*
see copyright notice in squirrel.h
*/
/* Needs to be first due to a squirrel header defining type() and type()
* being used in some versions of the headers included by algorithm. */
#include <algorithm>
#include "sqpcheader.h"
#include "sqvm.h"
#include "sqstring.h"
@@ -484,7 +487,7 @@ static SQInteger array_resize(HSQUIRRELVM v)
//QSORT ala Sedgewick
bool _qsort_compare(HSQUIRRELVM v,SQObjectPtr &arr,SQObjectPtr &a,SQObjectPtr &b,SQInteger func,SQInteger &ret)
bool _qsort_compare(HSQUIRRELVM v,SQObjectPtr &arr,const SQObjectPtr &a,const SQObjectPtr &b,SQInteger func,SQInteger &ret)
{
if(func < 0) {
if(!v->ObjCmp(a,b,ret)) return false;
@@ -506,40 +509,26 @@ bool _qsort_compare(HSQUIRRELVM v,SQObjectPtr &arr,SQObjectPtr &a,SQObjectPtr &b
}
return true;
}
//QSORT ala Sedgewick
bool _qsort(HSQUIRRELVM v,SQObjectPtr &arr, SQInteger l, SQInteger r,SQInteger func)
struct qsort_cmp
{
SQInteger i, j;
SQArray *a=_array(arr);
SQObjectPtr pivot,t;
if( l < r ){
pivot = a->_values[l];
i = l; j = r+1;
while(1){
SQInteger ret;
do {
++i;
if(i > r) break;
if(!_qsort_compare(v,arr,a->_values[i],pivot,func,ret))
return false;
} while( ret <= 0);
do {
--j;
if ( j < 0 ) {
v->Raise_Error( _SC("Invalid qsort, probably compare function defect") );
return false;
}
if(!_qsort_compare(v,arr,a->_values[j],pivot,func,ret))
return false;
}
while( ret > 0 );
if( i >= j ) break;
t = a->_values[i]; a->_values[i] = a->_values[j]; a->_values[j] = t;
}
t = a->_values[l]; a->_values[l] = a->_values[j]; a->_values[j] = t;
if(!_qsort( v, arr, l, j-1,func)) return false;
if(!_qsort( v, arr, j+1, r,func)) return false;
HSQUIRRELVM v;
SQInteger func;
bool operator() (const SQObjectPtr &a, const SQObjectPtr &b) const
{
SQInteger res;
SQObjectPtr dummy;
if (!_qsort_compare(v, dummy, a, b, func, res)) return false;
return res < 0;
}
};
bool _qsort(HSQUIRRELVM v,SQObjectPtr &arr, SQInteger func)
{
SQArray *a=_array(arr);
qsort_cmp cur_cmp;
cur_cmp.v = v;
cur_cmp.func = func;
std::sort(a->_values._vals, a->_values._vals + a->Size(), cur_cmp);
return true;
}
@@ -550,7 +539,7 @@ static SQInteger array_sort(HSQUIRRELVM v)
SQObject &funcobj = stack_get(v,2);
if(_array(o)->Size() > 1) {
if(type(funcobj) == OT_CLOSURE || type(funcobj) == OT_NATIVECLOSURE) func = 2;
if(!_qsort(v, o, 0, _array(o)->Size()-1, func))
if(!_qsort(v, o, func))
return SQ_ERROR;
}

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

@@ -374,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) {
@@ -388,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;
}
@@ -1000,7 +1002,7 @@ struct AIDebugWindow : public QueryStringBaseWindow {
switch (widget) {
case AID_WIDGET_RELOAD_TOGGLE:
/* First kill the company of the AI, then start a new one. This should start the current AI again */
DoCommandP(0, 2 | ai_debug_company << 16, 0, CMD_COMPANY_CTRL);
DoCommandP(0, 2 | ai_debug_company << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
DoCommandP(0, 1 | ai_debug_company << 16, 0, CMD_COMPANY_CTRL);
break;

View File

@@ -206,7 +206,7 @@ EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED = DOXYGEN_SKIP
PREDEFINED = DOXYGEN_AI_DOCS
EXPAND_AS_DEFINED = DEF_COMMAND
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------

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

@@ -109,7 +109,7 @@ public:
*/
static int32 GetMinLength(BridgeID bridge_id);
#ifndef DOXYGEN_SKIP
#ifndef DOXYGEN_AI_DOCS
/**
* Internal function to help BuildBridge in case of road.
*/

View File

@@ -15,6 +15,19 @@
* functions may still be available if you return an older API version
* in GetAPIVersion() in info.nut.
*
* \b 1.1.4
*
* API additions:
* \li AIVehicle::ERR_VEHICLE_TOO_LONG in case vehicle length limit is reached.
*
* \b 1.1.3
*
* No changes
*
* \b 1.1.2
*
* No changes
*
* \b 1.1.1
*
* No changes

View File

@@ -278,7 +278,7 @@ public:
*/
Money GetRunningCost();
#ifdef DOXYGEN_SKIP
#ifdef DOXYGEN_AI_DOCS
/**
* Get the type of the offered engine.
* @return The type the engine has.

View File

@@ -10,7 +10,7 @@
/** @file ai_info_docs.hpp Description of the functions an AI can/must provide in AIInfo. */
/* This file exists purely for doxygen purposes. */
#ifdef DOXYGEN_SKIP
#ifdef DOXYGEN_AI_DOCS
/**
* 'Abstract' class of the class AIs/AI libraries use to register themselves.
*

View File

@@ -239,7 +239,7 @@ public:
*/
void KeepList(AIList *list);
#ifndef DOXYGEN_SKIP
#ifndef DOXYGEN_AI_DOCS
/**
* Used for 'foreach()' and [] get from Squirrel.
*/
@@ -280,7 +280,7 @@ public:
* list.Valuate(MyVal, 12);
*/
void Valuate(void *valuator_function, int params, ...);
#endif /* DOXYGEN_SKIP */
#endif /* DOXYGEN_AI_DOCS */
};
#endif /* AI_LIST_HPP */

View File

@@ -37,9 +37,9 @@
AIObject::GetLogPointer() = new LogData();
LogData *log = (LogData *)AIObject::GetLogPointer();
log->lines = CallocT<char *>(80);
log->type = CallocT<AILog::AILogType>(80);
log->count = 80;
log->lines = CallocT<char *>(400);
log->type = CallocT<AILog::AILogType>(400);
log->count = 400;
log->pos = log->count - 1;
log->used = 0;
}

View File

@@ -37,6 +37,8 @@ typedef bool (AIModeProc)();
class AIObject : public SimpleCountedObject {
friend void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2);
friend class AIInstance;
friend class AIController;
#ifndef DOXYGEN_AI_DOCS
protected:
/**
* Executes a raw DoCommand for the AI.
@@ -179,51 +181,45 @@ protected:
public:
/**
* Store the latest result of a DoCommand per company.
* @note NEVER use this yourself in your AI!
* @param res The result of the last command.
*/
static void SetLastCommandRes(bool res);
/**
* Store a new_vehicle_id per company.
* @note NEVER use this yourself in your AI!
* @param vehicle_id The new VehicleID.
*/
static void SetNewVehicleID(VehicleID vehicle_id);
/**
* Store a new_sign_id per company.
* @note NEVER use this yourself in your AI!
* @param sign_id The new SignID.
*/
static void SetNewSignID(SignID sign_id);
/**
* Store a new_tunnel_endtile per company.
* @note NEVER use this yourself in your AI!
* @param tile The new TileIndex.
*/
static void SetNewTunnelEndtile(TileIndex tile);
/**
* Store a new_group_id per company.
* @note NEVER use this yourself in your AI!
* @param group_id The new GroupID.
*/
static void SetNewGroupID(GroupID group_id);
/**
* Store a allow_do_command per company.
* @note NEVER use this yourself in your AI!
* @param allow The new allow.
*/
static void SetAllowDoCommand(bool allow);
/**
* Get the pointer to store log message in.
* @note NEVER use this yourself in your AI!
*/
static void *&GetLogPointer();
#endif /* DOXYGEN_AI_DOCS */
};
#endif /* AI_OBJECT_HPP */

View File

@@ -66,15 +66,40 @@ 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;
}
/**
* Convert an AIOrder::OrderPosition (which is the manual order index) to an order index
* as expected by the OpenTTD commands.
* @param order_position The OrderPosition to convert.
* @return An OpenTTD-internal index for the same order.
*/
static int AIOrderPositionToRealOrderPosition(VehicleID vehicle_id, AIOrder::OrderPosition order_position)
{
const Vehicle *v = ::Vehicle::Get(vehicle_id);
if (order_position == v->GetNumManualOrders()) return v->GetNumOrders();
assert(AIOrder::IsValidVehicleOrder(vehicle_id, order_position));
int res = (int)order_position;
const Order *order = v->orders.list->GetFirstOrder();
for (; order->GetType() == OT_IMPLICIT; order = order->next) res++;
while (order_position > 0) {
order_position = (AIOrder::OrderPosition)(order_position - 1);
order = order->next;
for (; order->GetType() == OT_IMPLICIT; order = order->next) res++;
}
return res;
}
/* static */ bool AIOrder::IsGotoStationOrder(VehicleID vehicle_id, OrderPosition order_position)
{
if (!IsValidVehicleOrder(vehicle_id, order_position)) return false;
@@ -104,7 +129,7 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
if (order_position == ORDER_CURRENT) return false;
if (!IsValidVehicleOrder(vehicle_id, order_position)) return false;
const Order *order = Vehicle::Get(vehicle_id)->GetOrder(order_position);
const Order *order = ::Vehicle::Get(vehicle_id)->GetOrder(AIOrderPositionToRealOrderPosition(vehicle_id, order_position));
return order->GetType() == OT_CONDITIONAL;
}
@@ -113,13 +138,13 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
if (order_position == ORDER_CURRENT) return false;
if (!IsValidVehicleOrder(vehicle_id, order_position)) return false;
const Order *order = Vehicle::Get(vehicle_id)->GetOrder(order_position);
const Order *order = ::ResolveOrder(vehicle_id, order_position);
return order->GetType() == OT_DUMMY;
}
/* static */ bool AIOrder::IsCurrentOrderPartOfOrderList(VehicleID vehicle_id)
{
if (AIVehicle::IsValidVehicle(vehicle_id)) return false;
if (!AIVehicle::IsValidVehicle(vehicle_id)) return false;
if (GetOrderCount(vehicle_id) == 0) return false;
const Order *order = &::Vehicle::Get(vehicle_id)->current_order;
@@ -135,12 +160,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;
}
@@ -190,7 +215,7 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
/* static */ int32 AIOrder::GetOrderCount(VehicleID vehicle_id)
{
return AIVehicle::IsValidVehicle(vehicle_id) ? ::Vehicle::Get(vehicle_id)->GetNumOrders() : -1;
return AIVehicle::IsValidVehicle(vehicle_id) ? ::Vehicle::Get(vehicle_id)->GetNumManualOrders() : -1;
}
/* static */ TileIndex AIOrder::GetOrderDestination(VehicleID vehicle_id, OrderPosition order_position)
@@ -337,7 +362,8 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
EnforcePrecondition(false, order_position != ORDER_CURRENT && IsConditionalOrder(vehicle_id, order_position));
EnforcePrecondition(false, condition >= OC_LOAD_PERCENTAGE && condition <= OC_UNCONDITIONALLY);
return AIObject::DoCommand(0, vehicle_id | (order_position << 20), MOF_COND_VARIABLE | (condition << 4), CMD_MODIFY_ORDER);
int order_pos = AIOrderPositionToRealOrderPosition(vehicle_id, order_position);
return AIObject::DoCommand(0, vehicle_id | (order_pos << 20), MOF_COND_VARIABLE | (condition << 4), CMD_MODIFY_ORDER);
}
/* static */ bool AIOrder::SetOrderCompareFunction(VehicleID vehicle_id, OrderPosition order_position, CompareFunction compare)
@@ -346,7 +372,8 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
EnforcePrecondition(false, order_position != ORDER_CURRENT && IsConditionalOrder(vehicle_id, order_position));
EnforcePrecondition(false, compare >= CF_EQUALS && compare <= CF_IS_FALSE);
return AIObject::DoCommand(0, vehicle_id | (order_position << 20), MOF_COND_COMPARATOR | (compare << 4), CMD_MODIFY_ORDER);
int order_pos = AIOrderPositionToRealOrderPosition(vehicle_id, order_position);
return AIObject::DoCommand(0, vehicle_id | (order_pos << 20), MOF_COND_COMPARATOR | (compare << 4), CMD_MODIFY_ORDER);
}
/* static */ bool AIOrder::SetOrderCompareValue(VehicleID vehicle_id, OrderPosition order_position, int32 value)
@@ -356,7 +383,8 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
EnforcePrecondition(false, value >= 0 && value < 2048);
if (GetOrderCondition(vehicle_id, order_position) == OC_MAX_SPEED) value = value * 10 / 16;
return AIObject::DoCommand(0, vehicle_id | (order_position << 20), MOF_COND_VALUE | (value << 4), CMD_MODIFY_ORDER);
int order_pos = AIOrderPositionToRealOrderPosition(vehicle_id, order_position);
return AIObject::DoCommand(0, vehicle_id | (order_pos << 20), MOF_COND_VALUE | (value << 4), CMD_MODIFY_ORDER);
}
/* static */ bool AIOrder::SetStopLocation(VehicleID vehicle_id, OrderPosition order_position, StopLocation stop_location)
@@ -366,7 +394,10 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
EnforcePrecondition(false, IsGotoStationOrder(vehicle_id, order_position));
EnforcePrecondition(false, stop_location >= STOPLOCATION_NEAR && stop_location <= STOPLOCATION_FAR);
uint32 p1 = vehicle_id | (order_position << 20);
order_position = AIOrder::ResolveOrderPosition(vehicle_id, order_position);
int order_pos = AIOrderPositionToRealOrderPosition(vehicle_id, order_position);
uint32 p1 = vehicle_id | (order_pos << 20);
uint32 p2 = MOF_STOP_LOCATION | (stop_location << 4);
return AIObject::DoCommand(0, p1, p2, CMD_MODIFY_ORDER);
}
@@ -376,7 +407,7 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
EnforcePrecondition(false, AIVehicle::IsValidVehicle(vehicle_id));
EnforcePrecondition(false, AreOrderFlagsValid(destination, order_flags));
return InsertOrder(vehicle_id, (AIOrder::OrderPosition)::Vehicle::Get(vehicle_id)->GetNumOrders(), destination, order_flags);
return InsertOrder(vehicle_id, (AIOrder::OrderPosition)::Vehicle::Get(vehicle_id)->GetNumManualOrders(), destination, order_flags);
}
/* static */ bool AIOrder::AppendConditionalOrder(VehicleID vehicle_id, OrderPosition jump_to)
@@ -384,7 +415,7 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
EnforcePrecondition(false, AIVehicle::IsValidVehicle(vehicle_id));
EnforcePrecondition(false, IsValidVehicleOrder(vehicle_id, jump_to));
return InsertConditionalOrder(vehicle_id, (AIOrder::OrderPosition)::Vehicle::Get(vehicle_id)->GetNumOrders(), jump_to);
return InsertConditionalOrder(vehicle_id, (AIOrder::OrderPosition)::Vehicle::Get(vehicle_id)->GetNumManualOrders(), jump_to);
}
/* static */ bool AIOrder::InsertOrder(VehicleID vehicle_id, OrderPosition order_position, TileIndex destination, AIOrder::AIOrderFlags order_flags)
@@ -393,7 +424,7 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
if (order_position == ORDER_CURRENT) order_position = AIOrder::ResolveOrderPosition(vehicle_id, order_position);
EnforcePrecondition(false, AIVehicle::IsValidVehicle(vehicle_id));
EnforcePrecondition(false, order_position >= 0 && order_position <= ::Vehicle::Get(vehicle_id)->GetNumOrders());
EnforcePrecondition(false, order_position >= 0 && order_position <= ::Vehicle::Get(vehicle_id)->GetNumManualOrders());
EnforcePrecondition(false, AreOrderFlagsValid(destination, order_flags));
Order order;
@@ -437,7 +468,8 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
order.SetNonStopType((OrderNonStopFlags)GB(order_flags, 0, 2));
return AIObject::DoCommand(0, vehicle_id | (order_position << 20), order.Pack(), CMD_INSERT_ORDER);
int order_pos = AIOrderPositionToRealOrderPosition(vehicle_id, order_position);
return AIObject::DoCommand(0, vehicle_id | (order_pos << 20), order.Pack(), CMD_INSERT_ORDER);
}
/* static */ bool AIOrder::InsertConditionalOrder(VehicleID vehicle_id, OrderPosition order_position, OrderPosition jump_to)
@@ -446,12 +478,14 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
if (order_position == ORDER_CURRENT) order_position = AIOrder::ResolveOrderPosition(vehicle_id, order_position);
EnforcePrecondition(false, AIVehicle::IsValidVehicle(vehicle_id));
EnforcePrecondition(false, IsValidVehicleOrder(vehicle_id, jump_to));
EnforcePrecondition(false, order_position >= 0 && order_position <= ::Vehicle::Get(vehicle_id)->GetNumManualOrders());
EnforcePrecondition(false, IsValidVehicleOrder(vehicle_id, jump_to) && jump_to != ORDER_CURRENT);
Order order;
order.MakeConditional(jump_to);
return AIObject::DoCommand(0, vehicle_id | (order_position << 20), order.Pack(), CMD_INSERT_ORDER);
int order_pos = AIOrderPositionToRealOrderPosition(vehicle_id, order_position);
return AIObject::DoCommand(0, vehicle_id | (order_pos << 20), order.Pack(), CMD_INSERT_ORDER);
}
/* static */ bool AIOrder::RemoveOrder(VehicleID vehicle_id, OrderPosition order_position)
@@ -460,7 +494,8 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
EnforcePrecondition(false, IsValidVehicleOrder(vehicle_id, order_position));
return AIObject::DoCommand(0, vehicle_id, order_position, CMD_DELETE_ORDER);
int order_pos = AIOrderPositionToRealOrderPosition(vehicle_id, order_position);
return AIObject::DoCommand(0, vehicle_id, order_pos, CMD_DELETE_ORDER);
}
/* static */ bool AIOrder::SkipToOrder(VehicleID vehicle_id, OrderPosition next_order)
@@ -469,7 +504,8 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
EnforcePrecondition(false, IsValidVehicleOrder(vehicle_id, next_order));
return AIObject::DoCommand(0, vehicle_id, next_order, CMD_SKIP_TO_ORDER);
int order_pos = AIOrderPositionToRealOrderPosition(vehicle_id, next_order);
return AIObject::DoCommand(0, vehicle_id, order_pos, CMD_SKIP_TO_ORDER);
}
/**
@@ -506,13 +542,14 @@ static void _DoCommandReturnSetOrderFlags(class AIInstance *instance)
EnforcePrecondition(false, AreOrderFlagsValid(GetOrderDestination(vehicle_id, order_position), order_flags));
const Order *order = ::ResolveOrder(vehicle_id, order_position);
int order_pos = AIOrderPositionToRealOrderPosition(vehicle_id, order_position);
AIOrderFlags current = GetOrderFlags(vehicle_id, order_position);
EnforcePrecondition(false, (order_flags & AIOF_GOTO_NEAREST_DEPOT) == (current & AIOF_GOTO_NEAREST_DEPOT));
if ((current & AIOF_NON_STOP_FLAGS) != (order_flags & AIOF_NON_STOP_FLAGS)) {
return AIObject::DoCommand(0, vehicle_id | (order_position << 20), (order_flags & AIOF_NON_STOP_FLAGS) << 4 | MOF_NON_STOP, CMD_MODIFY_ORDER, NULL, &_DoCommandReturnSetOrderFlags);
return AIObject::DoCommand(0, vehicle_id | (order_pos << 20), (order_flags & AIOF_NON_STOP_FLAGS) << 4 | MOF_NON_STOP, CMD_MODIFY_ORDER, NULL, &::_DoCommandReturnSetOrderFlags);
}
switch (order->GetType()) {
@@ -521,16 +558,16 @@ static void _DoCommandReturnSetOrderFlags(class AIInstance *instance)
uint data = DA_ALWAYS_GO;
if (order_flags & AIOF_SERVICE_IF_NEEDED) data = DA_SERVICE;
if (order_flags & AIOF_STOP_IN_DEPOT) data = DA_STOP;
return AIObject::DoCommand(0, vehicle_id | (order_position << 20), (data << 4) | MOF_DEPOT_ACTION, CMD_MODIFY_ORDER, NULL, &_DoCommandReturnSetOrderFlags);
return AIObject::DoCommand(0, vehicle_id | (order_pos << 20), (data << 4) | MOF_DEPOT_ACTION, CMD_MODIFY_ORDER, NULL, &::_DoCommandReturnSetOrderFlags);
}
break;
case OT_GOTO_STATION:
if ((current & AIOF_UNLOAD_FLAGS) != (order_flags & AIOF_UNLOAD_FLAGS)) {
return AIObject::DoCommand(0, vehicle_id | (order_position << 20), (order_flags & AIOF_UNLOAD_FLAGS) << 2 | MOF_UNLOAD, CMD_MODIFY_ORDER, NULL, &_DoCommandReturnSetOrderFlags);
return AIObject::DoCommand(0, vehicle_id | (order_pos << 20), (order_flags & AIOF_UNLOAD_FLAGS) << 2 | MOF_UNLOAD, CMD_MODIFY_ORDER, NULL, &::_DoCommandReturnSetOrderFlags);
}
if ((current & AIOF_LOAD_FLAGS) != (order_flags & AIOF_LOAD_FLAGS)) {
return AIObject::DoCommand(0, vehicle_id | (order_position << 20), (order_flags & AIOF_LOAD_FLAGS) >> 1 | MOF_LOAD, CMD_MODIFY_ORDER, NULL, &_DoCommandReturnSetOrderFlags);
return AIObject::DoCommand(0, vehicle_id | (order_pos << 20), (order_flags & AIOF_LOAD_FLAGS) >> 1 | MOF_LOAD, CMD_MODIFY_ORDER, NULL, &::_DoCommandReturnSetOrderFlags);
}
break;
@@ -561,7 +598,9 @@ static void _DoCommandReturnSetOrderFlags(class AIInstance *instance)
EnforcePrecondition(false, IsValidVehicleOrder(vehicle_id, order_position_move));
EnforcePrecondition(false, IsValidVehicleOrder(vehicle_id, order_position_target));
return AIObject::DoCommand(0, vehicle_id, order_position_move | (order_position_target << 16), CMD_MOVE_ORDER);
int order_pos_move = AIOrderPositionToRealOrderPosition(vehicle_id, order_position_move);
int order_pos_target = AIOrderPositionToRealOrderPosition(vehicle_id, order_position_target);
return AIObject::DoCommand(0, vehicle_id, order_pos_move | (order_pos_target << 16), CMD_MOVE_ORDER);
}
/* static */ bool AIOrder::CopyOrders(VehicleID vehicle_id, VehicleID main_vehicle_id)

View File

@@ -443,12 +443,12 @@ public:
*/
static bool RemoveOrder(VehicleID vehicle_id, OrderPosition order_position);
#ifndef DOXYGEN_SKIP
#ifndef DOXYGEN_AI_DOCS
/**
* Internal function to help SetOrderFlags.
*/
static bool _SetOrderFlags();
#endif /* DOXYGEN_SKIP */
#endif /* DOXYGEN_AI_DOCS */
/**
* Changes the order flags of the given order.

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

@@ -65,7 +65,7 @@ public:
*/
static TileIndex GetOtherTunnelEnd(TileIndex tile);
#ifndef DOXYGEN_SKIP
#ifndef DOXYGEN_AI_DOCS
/**
* Internal function to help BuildTunnel in case of road.
*/
@@ -75,7 +75,7 @@ public:
* Internal function to help BuildTunnel in case of road.
*/
static bool _BuildTunnelRoad2();
#endif /* DOXYGEN_SKIP */
#endif /* DOXYGEN_AI_DOCS */
/**
* Builds a tunnel starting at start. The direction of the tunnel depends

View File

@@ -65,6 +65,8 @@ public:
/** Vehicle is without power */
ERR_VEHICLE_NO_POWER, // [STR_ERROR_TRAIN_START_NO_CATENARY]
/** Vehicle would get too long during construction. */
ERR_VEHICLE_TOO_LONG, // [STR_ERROR_TRAIN_TOO_LONG]
};
/**

View File

@@ -47,6 +47,7 @@ void SQAIVehicle_Register(Squirrel *engine)
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT, "ERR_VEHICLE_NOT_IN_DEPOT");
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT");
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_NO_POWER, "ERR_VEHICLE_NO_POWER");
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_TOO_LONG, "ERR_VEHICLE_TOO_LONG");
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_RAIL, "VT_RAIL");
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_ROAD, "VT_ROAD");
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_WATER, "VT_WATER");
@@ -95,6 +96,7 @@ void SQAIVehicle_Register(Squirrel *engine)
AIError::RegisterErrorMap(STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT);
AIError::RegisterErrorMap(STR_ERROR_AIRCRAFT_IS_IN_FLIGHT, AIVehicle::ERR_VEHICLE_IN_FLIGHT);
AIError::RegisterErrorMap(STR_ERROR_TRAIN_START_NO_CATENARY, AIVehicle::ERR_VEHICLE_NO_POWER);
AIError::RegisterErrorMap(STR_ERROR_TRAIN_TOO_LONG, AIVehicle::ERR_VEHICLE_TOO_LONG);
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_TOO_MANY, "ERR_VEHICLE_TOO_MANY");
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_NOT_AVAILABLE, "ERR_VEHICLE_NOT_AVAILABLE");
@@ -108,6 +110,7 @@ void SQAIVehicle_Register(Squirrel *engine)
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT, "ERR_VEHICLE_NOT_IN_DEPOT");
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT");
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_NO_POWER, "ERR_VEHICLE_NO_POWER");
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_TOO_LONG, "ERR_VEHICLE_TOO_LONG");
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsValidVehicle, "IsValidVehicle", 2, ".i");
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetNumWagons, "GetNumWagons", 2, ".i");

View File

@@ -102,9 +102,9 @@ BEGIN {
/^( *)private/ { if (cls_level == 1) public = "false"; next; }
# Ignore special doxygen blocks
/^#ifndef DOXYGEN_SKIP/ { doxygen_skip = "next"; next; }
/^#ifdef DOXYGEN_SKIP/ { doxygen_skip = "true"; next; }
/^#endif \/\* DOXYGEN_SKIP \*\// { doxygen_skip = "false"; next; }
/^#ifndef DOXYGEN_AI_DOCS/ { doxygen_skip = "next"; next; }
/^#ifdef DOXYGEN_AI_DOCS/ { doxygen_skip = "true"; next; }
/^#endif \/\* DOXYGEN_AI_DOCS \*\// { doxygen_skip = "false"; next; }
/^#else/ {
if (doxygen_skip == "next") {
doxygen_skip = "true";

View File

@@ -31,7 +31,7 @@ void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height);
void UpdateAirplanesOnNewStation(const Station *st);
void UpdateAircraftCache(Aircraft *v);
void AircraftLeaveHangar(Aircraft *v);
void AircraftLeaveHangar(Aircraft *v, Direction exit_dir);
void AircraftNextAirportPos_and_Order(Aircraft *v);
void SetAircraftPosition(Aircraft *v, int x, int y, int z);
byte GetAircraftFlyingAltitude(const Aircraft *v);

View File

@@ -1243,12 +1243,20 @@ void AircraftNextAirportPos_and_Order(Aircraft *v)
v->pos = v->previous_pos = AircraftGetEntryPoint(v, apc, rotation);
}
void AircraftLeaveHangar(Aircraft *v)
/**
* Aircraft is about to leave the hangar.
* @param v Aircraft leaving.
* @param exit_dir The direction the vehicle leaves the hangar.
* @note This function is called in AfterLoadGame for old savegames, so don't rely
* on any data to be valid, especially don't rely on the fact that the vehicle
* is actually on the ground inside a depot.
*/
void AircraftLeaveHangar(Aircraft *v, Direction exit_dir)
{
v->cur_speed = 0;
v->subspeed = 0;
v->progress = 0;
v->direction = DIR_SE;
v->direction = exit_dir;
v->vehstatus &= ~VS_HIDDEN;
{
Vehicle *u = v->Next();
@@ -1333,7 +1341,8 @@ static void AircraftEventHandler_InHangar(Aircraft *v, const AirportFTAClass *ap
/* airplane goto state takeoff, helicopter to helitakeoff */
v->state = (v->subtype == AIR_HELICOPTER) ? HELITAKEOFF : TAKEOFF;
}
AircraftLeaveHangar(v);
const Station *st = Station::GetByTile(v->tile);
AircraftLeaveHangar(v, st->airport.GetHangarExitDirection(v->tile));
AirportMove(v, apc);
}

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

@@ -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

@@ -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

@@ -740,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;

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

@@ -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);
@@ -633,6 +633,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd,
/* Test the command. */
_cleared_object_areas.Clear();
SetTownRatingTestMode(true);
ClearStorageChanges(false);
res = proc(tile, flags, p1, p2, text);
SetTownRatingTestMode(false);
@@ -672,6 +673,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd,
/* Actually try and execute the command. If no cost-type is given
* use the construction one */
_cleared_object_areas.Clear();
ClearStorageChanges(false);
CommandCost res2 = proc(tile, flags | DC_EXEC, p1, p2, text);
if (cmd_id == CMD_COMPANY_CTRL) {
@@ -735,3 +737,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

@@ -349,7 +349,7 @@ static void GenerateCompanyName(Company *c)
StringID str;
uint32 strp;
if (t->name == NULL && IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1)) {
str = t->townnametype - SPECSTR_TOWNNAME_START + SPECSTR_PLAYERNAME_START;
str = t->townnametype - SPECSTR_TOWNNAME_START + SPECSTR_COMPANY_NAME_START;
strp = t->townnameparts;
verify_name:;
@@ -773,13 +773,14 @@ void CompanyAdminUpdate(const Company *company)
}
/**
* Called whenever a company goes bankrupt in order to notify admins.
* @param company_id The company that went bankrupt.
* Called whenever a company is removed in order to notify admins.
* @param company_id The company that was removed.
* @param reason The reason the company was removed.
*/
void CompanyAdminBankrupt(CompanyID company_id)
void CompanyAdminRemove(CompanyID company_id, CompanyRemoveReason reason)
{
#ifdef ENABLE_NETWORK
if (_network_server) NetworkAdminCompanyRemove(company_id, ADMIN_CRR_BANKRUPT);
if (_network_server) NetworkAdminCompanyRemove(company_id, (AdminCompanyRemoveReason)reason);
#endif /* ENABLE_NETWORK */
}
@@ -846,7 +847,6 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
}
if (_network_server) {
CompanyID old_playas = ci->client_playas;
ci->client_playas = c->index;
NetworkUpdateClientInfo(ci->client_id);
@@ -869,11 +869,9 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
NetworkSendCommand(0, 0, 0, CMD_RENAME_PRESIDENT, NULL, ci->client_name, ci->client_playas);
}
/* Announce new company on network, if the client was a SPECTATOR before */
if (old_playas == COMPANY_SPECTATOR) {
NetworkAdminCompanyInfo(c, true);
NetworkServerSendChat(NETWORK_ACTION_COMPANY_NEW, DESTTYPE_BROADCAST, 0, "", ci->client_id, ci->client_playas + 1);
}
/* Announce new company on network. */
NetworkAdminCompanyInfo(c, true);
NetworkServerSendChat(NETWORK_ACTION_COMPANY_NEW, DESTTYPE_BROADCAST, 0, "", ci->client_id, ci->client_playas + 1);
}
#endif /* ENABLE_NETWORK */
break;
@@ -887,6 +885,9 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
break;
case 2: { // Delete a company
CompanyRemoveReason reason = (CompanyRemoveReason)GB(p2, 0, 2);
if (reason >= CRR_END) return CMD_ERROR;
Company *c = Company::GetIfValid(company_id);
if (c == NULL) return CMD_ERROR;
@@ -910,7 +911,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
CompanyID c_index = c->index;
delete c;
AI::BroadcastNewEvent(new AIEventCompanyBankrupt(c_index));
CompanyAdminBankrupt(c_index);
CompanyAdminRemove(c_index, (CompanyRemoveReason)reason);
break;
}

View File

@@ -1824,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;
@@ -1869,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

@@ -56,4 +56,13 @@ typedef uint16 CompanyMask;
struct Company;
typedef uint32 CompanyManagerFace; ///< Company manager face bits, info see in company_manager_face.h
/** The reason why the company was removed. */
enum CompanyRemoveReason {
CRR_MANUAL, ///< The company is manually removed.
CRR_AUTOCLEAN, ///< The company is removed due to autoclean.
CRR_BANKRUPT, ///< The company went belly-up.
CRR_END ///< Sentinel for end.
};
#endif /* COMPANY_TYPE_H */

View File

@@ -836,7 +836,7 @@ DEF_CONSOLE_CMD(ConResetCompany)
}
/* It is safe to remove this company */
DoCommandP(0, 2 | index << 16, 0, CMD_COMPANY_CTRL);
DoCommandP(0, 2 | index << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
IConsolePrint(CC_DEFAULT, "Company deleted.");
return true;
@@ -1196,7 +1196,7 @@ DEF_CONSOLE_CMD(ConReloadAI)
}
/* First kill the company of the AI, then start a new one. This should start the current AI again */
DoCommandP(0, 2 | company_id << 16, 0, CMD_COMPANY_CTRL);
DoCommandP(0, 2 | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
DoCommandP(0, 1 | company_id << 16, 0, CMD_COMPANY_CTRL);
IConsolePrint(CC_DEFAULT, "AI reloaded.");
@@ -1233,7 +1233,7 @@ DEF_CONSOLE_CMD(ConStopAI)
}
/* Now kill the company of the AI. */
DoCommandP(0, 2 | company_id << 16, 0, CMD_COMPANY_CTRL);
DoCommandP(0, 2 | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL);
IConsolePrint(CC_DEFAULT, "AI stopped, company deleted.");
return true;
@@ -1269,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;
}
@@ -1640,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

@@ -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);
@@ -531,7 +546,7 @@ static void CompanyCheckBankrupt(Company *c)
* that changing the current company is okay. In case of single
* player we are sure (the above check) that we are not the local
* company and thus we won't be moved. */
if (!_networking || _network_server) DoCommandP(0, 2 | (c->index << 16), 0, CMD_COMPANY_CTRL);
if (!_networking || _network_server) DoCommandP(0, 2 | (c->index << 16), CRR_BANKRUPT, CMD_COMPANY_CTRL);
break;
}
}
@@ -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

@@ -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;
@@ -648,6 +650,10 @@ void StartupOneEngine(Engine *e, Date aging_date)
}
}
/**
* Start/initialise all our engines. Must be called whenever there are changes
* to the NewGRF config.
*/
void StartupEngines()
{
Engine *e;

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>

View File

@@ -746,18 +746,25 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
static void SetFontGeometry(FT_Face face, FontSize size, int pixels)
{
FT_Set_Pixel_Sizes(face, 0, pixels);
FT_Error err = FT_Set_Pixel_Sizes(face, 0, pixels);
if (err == FT_Err_Invalid_Pixel_Size) {
if (FT_IS_SCALABLE(face)) {
int asc = face->ascender * pixels / face->units_per_EM;
int dec = face->descender * pixels / face->units_per_EM;
/* Find nearest size to that requested */
FT_Bitmap_Size *bs = face->available_sizes;
int i = face->num_fixed_sizes;
int n = bs->height;
for (; --i; bs++) {
if (abs(pixels - bs->height) < abs(pixels - n)) n = bs->height;
}
_ascender[size] = asc;
_font_height[size] = asc - dec;
} else {
_ascender[size] = pixels;
_font_height[size] = pixels;
FT_Set_Pixel_Sizes(face, 0, n);
}
int asc = face->size->metrics.ascender >> 6;
int dec = face->size->metrics.descender >> 6;
_ascender[size] = asc;
_font_height[size] = asc - dec;
}
/**
@@ -1034,6 +1041,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

@@ -86,7 +86,6 @@ enum GenerateLandscapeWindowWidgets {
GLAND_LANDSCAPE_PULLDOWN, ///< Dropdown 'Land generator'
GLAND_HEIGHTMAP_NAME_TEXT, ///< Heightmap name
GLAND_HEIGHTMAP_NAME_SPACER, ///< Spacer used for aligning items in the second column nicely
GLAND_HEIGHTMAP_SIZE_TEXT, ///< Size of heightmap
GLAND_HEIGHTMAP_ROTATION_PULLDOWN, ///< Dropdown 'Heightmap rotation'
@@ -249,45 +248,47 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = {
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_ROTATION, STR_NULL), SetFill(1, 1),
EndContainer(),
/* Widgets at the right of the labels. */
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0),
NWidget(WWT_EMPTY, COLOUR_ORANGE, GLAND_HEIGHTMAP_NAME_TEXT), SetFill(1, 0),
/* Mapsize X * Y. */
NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_MAPSIZE_X_PULLDOWN), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 0),
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_BY, STR_NULL), SetPadding(1, 0, 0, 0), SetFill(1, 1),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_MAPSIZE_Y_PULLDOWN), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 0),
EndContainer(),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0),
NWidget(WWT_EDITBOX, COLOUR_WHITE, GLAND_RANDOM_EDITBOX), SetDataTip(STR_MAPGEN_RANDOM_SEED_OSKTITLE, STR_MAPGEN_RANDOM_SEED_HELP), SetFill(1, 1),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_TREE_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_HEIGHTMAP_ROTATION_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0),
EndContainer(),
NWidget(NWID_VERTICAL), SetPIP(0, 4, 0),
NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0),
NWidget(WWT_EMPTY, COLOUR_ORANGE, GLAND_HEIGHTMAP_NAME_TEXT), SetFill(1, 0),
NWidget(NWID_HORIZONTAL), SetPIP(0, 5, 0),
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0),
NWidget(WWT_EMPTY, INVALID_COLOUR, GLAND_HEIGHTMAP_NAME_SPACER), SetFill(1, 0),
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE_LABEL, STR_NULL), SetFill(1, 1),
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_NULL), SetFill(1, 1),
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_LINE_HEIGHT, STR_NULL), SetFill(1, 1),
/* Mapsize X * Y. */
NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_MAPSIZE_X_PULLDOWN), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 0),
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_BY, STR_NULL), SetPadding(1, 0, 0, 0), SetFill(1, 1),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_MAPSIZE_Y_PULLDOWN), SetDataTip(STR_JUST_INT, STR_NULL), SetFill(1, 0),
EndContainer(),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0),
NWidget(WWT_EDITBOX, COLOUR_WHITE, GLAND_RANDOM_EDITBOX), SetDataTip(STR_MAPGEN_RANDOM_SEED_OSKTITLE, STR_MAPGEN_RANDOM_SEED_HELP), SetFill(1, 1),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_TREE_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0),
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, GLAND_HEIGHTMAP_ROTATION_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0),
EndContainer(),
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0),
NWidget(WWT_EMPTY, INVALID_COLOUR, GLAND_HEIGHTMAP_NAME_SPACER), SetFill(1, 0),
NWidget(WWT_TEXT, COLOUR_ORANGE, GLAND_HEIGHTMAP_SIZE_TEXT), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE, STR_NULL), SetFill(1, 0),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, GLAND_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, GLAND_START_DATE_TEXT), SetDataTip(STR_BLACK_DATE_LONG, STR_NULL), SetFill(1, 0),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, GLAND_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1),
EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, GLAND_SNOW_LEVEL_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_LINE_DOWN), SetFill(0, 1),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, GLAND_SNOW_LEVEL_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, GLAND_SNOW_LEVEL_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_LINE_UP), SetFill(0, 1),
NWidget(NWID_VERTICAL), SetPIP(0, 4, 0),
NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0),
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0),
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE_LABEL, STR_NULL), SetFill(1, 1),
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_NULL), SetFill(1, 1),
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_LINE_HEIGHT, STR_NULL), SetFill(1, 1),
EndContainer(),
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0),
NWidget(WWT_TEXT, COLOUR_ORANGE, GLAND_HEIGHTMAP_SIZE_TEXT), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE, STR_NULL), SetFill(1, 0),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, GLAND_START_DATE_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD), SetFill(0, 1),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, GLAND_START_DATE_TEXT), SetDataTip(STR_BLACK_DATE_LONG, STR_NULL), SetFill(1, 0),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, GLAND_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1),
EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, GLAND_SNOW_LEVEL_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_LINE_DOWN), SetFill(0, 1),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, GLAND_SNOW_LEVEL_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0),
NWidget(WWT_IMGBTN, COLOUR_ORANGE, GLAND_SNOW_LEVEL_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_LINE_UP), SetFill(0, 1),
EndContainer(),
EndContainer(),
EndContainer(),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, GLAND_RANDOM_BUTTON), SetDataTip(STR_MAPGEN_RANDOM, STR_MAPGEN_RANDOM_HELP), SetFill(1, 0),
NWidget(WWT_TEXTBTN, COLOUR_GREEN, GLAND_GENERATE_BUTTON), SetDataTip(STR_MAPGEN_GENERATE, STR_NULL), SetFill(1, 1),
EndContainer(),
EndContainer(),
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, GLAND_RANDOM_BUTTON), SetDataTip(STR_MAPGEN_RANDOM, STR_MAPGEN_RANDOM_HELP), SetFill(1, 0),
NWidget(WWT_TEXTBTN, COLOUR_GREEN, GLAND_GENERATE_BUTTON), SetDataTip(STR_MAPGEN_GENERATE, STR_NULL), SetFill(1, 1),
EndContainer(),
EndContainer(),
NWidget(NWID_SPACER), SetMinimalSize(0, 9), SetFill(1, 1),
@@ -531,7 +532,6 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
*size = maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_RANDOM), maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_WATER), GetStringBoundingBox(STR_MAPGEN_BORDER_FREEFORM)));
break;
case GLAND_HEIGHTMAP_NAME_SPACER:
case GLAND_HEIGHTMAP_NAME_TEXT:
size->width = 0;
break;
@@ -552,12 +552,7 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
{
switch (widget) {
case GLAND_HEIGHTMAP_NAME_TEXT: {
/* Little bit of a hack going on here; just to get the widgets
* spaced without doing much magic. The space we can draw on is
* covered by both the spacer and text widgets, so take their
* outer most boundaries (left and right) as draw locations. */
const NWidgetBase *nwi_spacer = this->GetWidget<NWidgetBase>(GLAND_HEIGHTMAP_NAME_SPACER);
DrawString(min(r.left, nwi_spacer->pos_x), max<int>(r.right, nwi_spacer->pos_x + nwi_spacer->current_x), r.top, this->name, TC_ORANGE);
DrawString(r.left, r.right, r.top, this->name, TC_ORANGE);
break;
}
}
@@ -602,12 +597,22 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
this->SetDirty();
break;
case GLAND_GENERATE_BUTTON: // Generate
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,
@@ -617,6 +622,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

@@ -52,7 +52,7 @@ struct GroundVehicleCache {
enum GroundVehicleFlags {
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_AUTOMATIC_ORDERS = 2, ///< Disable insertion and removal of automatic orders until the vehicle completes the real order.
GVF_SUPPRESS_IMPLICIT_ORDERS = 2, ///< Disable insertion and removal of automatic orders until the vehicle completes the real order.
};
/**

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

@@ -140,6 +140,8 @@ void PlantRandomFarmField(const Industry *i);
void ReleaseDisastersTargetingIndustry(IndustryID);
bool IsTileForestIndustry(TileIndex tile);
#define FOR_ALL_INDUSTRIES_FROM(var, start) FOR_ALL_ITEMS_FROM(Industry, industry_index, var, start)
#define FOR_ALL_INDUSTRIES(var) FOR_ALL_INDUSTRIES_FROM(var, 0)

View File

@@ -908,6 +908,30 @@ static void ChangeTileOwner_Industry(TileIndex tile, Owner old_owner, Owner new_
if (i->founder == old_owner) i->founder = (new_owner == INVALID_OWNER) ? OWNER_NONE : new_owner;
}
/**
* Check whether the tile is a forest.
* @param tile the tile to investigate.
* @return true if and only if the tile is a forest
*/
bool IsTileForestIndustry(TileIndex tile)
{
/* Check for industry tile */
if (!IsTileType(tile, MP_INDUSTRY)) return false;
const Industry *ind = Industry::GetByTile(tile);
/* Check for organic industry (i.e. not processing or extractive) */
if ((GetIndustrySpec(ind->type)->life_type & INDUSTRYLIFE_ORGANIC) == 0) return false;
/* Check for wood production */
for (uint i = 0; i < lengthof(ind->produced_cargo); i++) {
/* The industry produces wood. */
if (ind->produced_cargo[i] != CT_INVALID && CargoSpec::Get(ind->produced_cargo[i])->label == 'WOOD') return true;
}
return false;
}
static const byte _plantfarmfield_type[] = {1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6};
static bool IsBadFarmFieldTile(TileIndex tile)

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();
}
}
@@ -788,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();
}
}

View File

@@ -99,7 +99,7 @@ STR_QUANTITY_PASSENGERS :{COMMA}راكب
STR_QUANTITY_COAL :{WEIGHT} من الفحم
STR_QUANTITY_MAIL :{COMMA} صندوق من البريد
STR_QUANTITY_OIL :{VOLUME} من النفط
STR_QUANTITY_LIVESTOCK :{COMMA}رأس من الماشية
STR_QUANTITY_LIVESTOCK :{COMMA}راس من الماشية
STR_QUANTITY_GOODS :{COMMA} قفص من البضائع
STR_QUANTITY_GRAIN :{WEIGHT} من الحبوب
STR_QUANTITY_WOOD :{WEIGHT} من الخشب
@@ -117,7 +117,7 @@ STR_QUANTITY_WATER :{VOLUME} من
STR_QUANTITY_WHEAT :{WEIGHT} من القمح
STR_QUANTITY_RUBBER :{VOLUME} من المطاط
STR_QUANTITY_SUGAR :{WEIGHT} من السكر
STR_QUANTITY_TOYS :{COMMA}الألعاب
STR_QUANTITY_TOYS :{COMMA}الالعاب
STR_QUANTITY_SWEETS :{COMMA} كيس من الحلويات
STR_QUANTITY_COLA :{VOLUME} من الكولا
STR_QUANTITY_CANDYFLOSS :{WEIGHT} من الحلاوة القطنية
@@ -447,6 +447,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)
@@ -1056,6 +1057,7 @@ STR_SEA_LEVEL_HIGH :عالي
STR_SEA_LEVEL_CUSTOM :مخصص
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :مخصص ({NUM}%)
STR_DISASTER_NONE :بدون
STR_DISASTER_REDUCED :قليل
STR_DISASTER_NORMAL :طبيعي
@@ -1223,6 +1225,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :طويل - 31
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :قصير - 31 - 12 - 2008
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ايزو 31-12-2008
STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :{LTBLUE}إيقاف اللعبة تلقائيا عند بدأ لعبة جديدة: {ORANGE}{STRING}
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :{LTBLUE}عندمل توقف أسمح: {ORANGE}{STRING}
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :لا تصرف
@@ -1405,6 +1408,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK} ابح
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK} عرض اعدادات الذكاء الصناعي
STR_INTRO_TOOLTIP_QUIT :{BLACK}اغلاق'OpenTTD'
# Quit window
STR_QUIT_CAPTION :{WHITE}انهاء
STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}هل تود اغلاق النسخة المفتوحة و العودة لـ {STRING}?
@@ -1416,11 +1420,11 @@ STR_OSNAME_WINDOWS :ويندوز
STR_OSNAME_DOS :دوس
STR_OSNAME_UNIX :يونكس
STR_OSNAME_OSX :OS{NBSP}X
STR_OSNAME_BEOS :بي أو أس
STR_OSNAME_BEOS :بي او اس
STR_OSNAME_HAIKU :هايكو
STR_OSNAME_MORPHOS :مورف أو أس
STR_OSNAME_AMIGAOS :أميقا
STR_OSNAME_OS2 :أو أس/2
STR_OSNAME_MORPHOS :مورف او اس
STR_OSNAME_AMIGAOS :اميقا
STR_OSNAME_OS2 :او اس/2
STR_OSNAME_SUNOS :صن
# Abandon game
@@ -2280,7 +2284,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :ارض مملو
# About OpenTTD window
STR_ABOUT_OPENTTD :{WHITE}حول النسخة المفتوحة
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}الحقوق الأصلية {COPYRIGHT} كريس سوير 1995 , جميع الحقوق محفوظة
STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}الحقوق الاصلية {COPYRIGHT} كريس سوير 1995 , جميع الحقوق محفوظة
STR_ABOUT_VERSION :{BLACK}النسخة المفتوحة رقم {REV}
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-2011 فريق النسخة المفتوحة
@@ -2483,6 +2487,8 @@ STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING
STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :يحتوي على اوامر متعددة - 8 مدخلات
STR_NEWGRF_ERROR_READ_BOUNDS :خطأ في قرائة البرمجة
STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}ملف الرسوم المستخدم حاليا يفتقد لبعض الرسوم الاساسية.{}الرجاء حدث ملف الرسوم.
STR_NEWGRF_ERROR_GRM_FAILED :معلومات الاضافة غير متاحة
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING}تم تعطيلة بواسطة{4:STRING}
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}تحذير!
@@ -2519,6 +2525,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} علامة
STR_SIGN_LIST_MATCH_CASE :{BLACK}طابق الحالة
@@ -3127,7 +3135,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}السع
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_TRAIN_LIST_TOOLTIP :{BLACK}اختر نوع البضاعة لينقلها القطار
STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK} اختر نوع حمولة العربة
STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}اختر نوع الحمولة للسفينة
STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}اختر نوع الحمولة للطائرة
@@ -3186,6 +3194,8 @@ STR_ORDER_DROP_HALT_DEPOT :توقف
STR_ORDER_SERVICE_TOOLTIP :{BLACK}تجاوز هذا الامر الا اذا لم تكن الصيانة مطلوبة
STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}بيانات العربة لتعريف التجاوز الى
# Conditional order variables, must follow order of OrderConditionVariable enum
STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :نسبة التحميل
STR_ORDER_CONDITIONAL_RELIABILITY :الصلاحية
STR_ORDER_CONDITIONAL_MAX_SPEED :السرعة القصوى
@@ -3246,7 +3256,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 :-حمل اي بضاعة بالكامل-
@@ -3437,6 +3447,8 @@ STR_ERROR_PNGMAP_MISC :{WHITE}حدث
STR_ERROR_BMPMAP :{WHITE}لا يمكن تحميل الخريطة من BMP ...
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}لايمكن تحويل نوع الصورة...
STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}الصورة ضخمة جدا ...
STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}تحذير
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}اعادة تحجيم الخريطة المصدر كثيرا غير مستحسن. هل تريد اكمال توليد الخريطة؟
@@ -4242,6 +4254,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}

View File

@@ -545,11 +545,11 @@ STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Зага
STR_TOOLTIP_SHADE :{BLACK}Згарнуць вакно, пакінуўшы загаловак
STR_TOOLTIP_DEBUG :{BLACK}Паказаць наладачную iнфармацыю NewGRF
STR_TOOLTIP_STICKY :{BLACK}Ігнараваць націск клявішы «Закрыць усе вокны»
STR_TOOLTIP_RESIZE :{BLACK}Націсьніце ды цягнiце для змяненьня памеру вакна
STR_TOOLTIP_RESIZE :{BLACK}Націсьніце ды цягнiце для зьмяненьня памеру вакна
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}Поўная ачыстка прамавугольнага ўчастку зямлі. Ctrl - выбар вобласці па дыяганалі. Пры націснутым Shift - ацэнка кошту ачысткі.
STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Поўная ачыстка прамавугольнага ўчастку зямлі. Ctrl - выбар вобласьці па дыяганалі. Пры націснутым Shift - ацэнка кошту ачысткі.
# Query window
STR_BUTTON_DEFAULT :{BLACK}Па змоўчаньнi
@@ -564,7 +564,7 @@ STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|Q
STR_MEASURE_LENGTH :{BLACK}Даўжыня: {NUM}
STR_MEASURE_AREA :{BLACK}Плошча: {NUM} x {NUM}
STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Даўжыня: {NUM}{}Розніца вышыняў: {HEIGHT}
STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Плошча: {NUM} x {NUM}{}Рознiца вышыняў: {HEIGHT}
STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Плошча: {NUM} x {NUM}{}Розьнiца вышыняў: {HEIGHT}
# These are used in buttons
@@ -581,13 +581,13 @@ STR_SORT_BY_NUMBER :Нумар
STR_SORT_BY_PROFIT_LAST_YEAR :Прыбытак летась
STR_SORT_BY_PROFIT_THIS_YEAR :Прыбытак у бягучым годзе
STR_SORT_BY_AGE :Узрост
STR_SORT_BY_RELIABILITY :Надзейнасць
STR_SORT_BY_RELIABILITY :Надзейнасьць
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Умяшчальнасьць грузу
STR_SORT_BY_MAX_SPEED :Максымальная хуткасць
STR_SORT_BY_MAX_SPEED :Максымальная хуткасьць
STR_SORT_BY_MODEL :Мадэль
STR_SORT_BY_VALUE :Кошт
STR_SORT_BY_LENGTH :Даўжыня
STR_SORT_BY_LIFE_TIME :Астатні тэрмін службы
STR_SORT_BY_LIFE_TIME :Рэшткавы тэрмін службы
STR_SORT_BY_TIMETABLE_DELAY :Адставаньне ад графіку
STR_SORT_BY_FACILITY :Тып станцыі
STR_SORT_BY_WAITING :Коль-ць грузу на станцыі
@@ -599,7 +599,7 @@ STR_SORT_BY_POWER :Магутна
STR_SORT_BY_TRACTIVE_EFFORT :Цягавае намаганьне
STR_SORT_BY_INTRO_DATE :Пачатак вытворчасьцi
STR_SORT_BY_RUNNING_COST :Кошт абслугоўваньня
STR_SORT_BY_POWER_VS_RUNNING_COST :Магутнасць/кошт абслуг.
STR_SORT_BY_POWER_VS_RUNNING_COST :Магутнасьць/кошт абслуг.
STR_SORT_BY_CARGO_CAPACITY :Ёмiстасьць
# Tooltips for the main toolbar
@@ -626,7 +626,7 @@ 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_LANDSCAPING :{BLACK}Адкрыць панэль ляндшафту для змяненьня рэльефу, пасадкi дрэваў i г.д.
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Адкрыць панэль ляндшафту для зьмяненьня рэльефу, пасадкi дрэваў i г.д.
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Наладка гуку й музыкі
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Паказаць апошнiя паведамленьнi/навiны, паказаць наладкi паведамленьняў
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Iнфармацыя аб зямлi; кансоль; наладка штучнага інтэлекту (AI/ШI); здымкi экрана; аб гульні
@@ -659,7 +659,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Выхад
############ range for settings menu starts
STR_SETTINGS_MENU_GAME_OPTIONS :Наладкі гульні
STR_SETTINGS_MENU_DIFFICULTY_SETTINGS :Наладкі складанасцi
STR_SETTINGS_MENU_DIFFICULTY_SETTINGS :Наладкі складанасьцi
STR_SETTINGS_MENU_CONFIG_SETTINGS :Пашыраныя наладкі
STR_SETTINGS_MENU_AI_SETTINGS :Наладки ШI (AI)
STR_SETTINGS_MENU_NEWGRF_SETTINGS :Наладкі NewGRF
@@ -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)
@@ -1308,7 +1309,7 @@ STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 б
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Зьмяніць парамэтр уласнай валюты
# Difficulty level window
STR_DIFFICULTY_LEVEL_CAPTION :{WHITE}Узровень складанасцi
STR_DIFFICULTY_LEVEL_CAPTION :{WHITE}Узровень складанасьцi
############ range for difficulty levels starts
STR_DIFFICULTY_LEVEL_EASY :{BLACK}Лёгкі
@@ -1350,7 +1351,7 @@ STR_NUM_VERY_LOW :Вельмі м
STR_NUM_LOW :Мала
STR_NUM_NORMAL :Звычайна
STR_NUM_HIGH :Шмат
STR_NUM_CUSTOM :Уласная
STR_NUM_CUSTOM :Уласны
STR_NUM_CUSTOM_NUMBER :Зададзены ({NUM})
STR_VARIETY_NONE :Няма
@@ -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 :Звычайныя
@@ -1417,7 +1419,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :{LTBLUE}Даз
STR_CONFIG_SETTING_CATCHMENT :{LTBLUE}Зона пакрыцьця залежыць ад тыпу станцыі: {ORANGE}{STRING}
STR_CONFIG_SETTING_EXTRADYNAMITE :{LTBLUE}Дазволіць знос амаль усіх гарадзкіх аб'ектаў: {ORANGE}{STRING}
STR_CONFIG_SETTING_TRAIN_LENGTH :{LTBLUE}Макс. даўжыня цягнiкоў: {ORANGE}{STRING} клет{P 0:1 ка кi ак}
STR_CONFIG_SETTING_SMOKE_AMOUNT :{LTBLUE}Колькасць дыму/іскраў у лакаматываў: {ORANGE}{STRING}
STR_CONFIG_SETTING_SMOKE_AMOUNT :{LTBLUE}Колькасьць дыму/іскраў у лакаматываў: {ORANGE}{STRING}
STR_CONFIG_SETTING_SMOKE_AMOUNT_NONE :няма
STR_CONFIG_SETTING_SMOKE_AMOUNT_ORIGINAL :арыгальная
STR_CONFIG_SETTING_SMOKE_AMOUNT_REALISTIC :рэалістычная
@@ -1440,8 +1442,8 @@ STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :{LTBLUE}Мак
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 :як i iншыя
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :геолагаразьведка
STR_CONFIG_SETTING_INDUSTRY_PLATFORM :{LTBLUE}Плоскi рэльеф вакол прадпрыемстваў: {ORANGE}{STRING} клет{P 0:1 ка кi ак}
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :геалягiчная разьведка
STR_CONFIG_SETTING_INDUSTRY_PLATFORM :{LTBLUE}Пляскаты рэльеф вакол прадпрыемстваў: {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}
@@ -1466,7 +1468,7 @@ STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :{LTBLUE}Даз
STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :{LTBLUE}Дазволіць будаўніцтва прыпынкаў Ro-Ro на дарогах канкурэнтаў: {ORANGE}{STRING}
STR_CONFIG_SETTING_ADJACENT_STATIONS :{LTBLUE}Дазволіць будаўніцтва сумежных станцыяў: {ORANGE}{STRING}
STR_CONFIG_SETTING_DYNAMIC_ENGINES :{LTBLUE}Уключыць падтрымку некалькіх транспартных набораў NewGRF: {ORANGE}{STRING}
STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Зьмена гэтага парамэтру немагчыма, калі ў гульні ёсць транспартныя сродкі.
STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Зьмена гэтага парамэтру немагчыма, калі ў гульні ёсьць транспартныя сродкі.
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :{LTBLUE}Малыя аэрапорты ніколі не састарэюць: {ORANGE}{STRING}
@@ -1633,7 +1635,7 @@ STR_CONFIG_SETTING_TOOLBAR_POS :{LTBLUE}Раз
STR_CONFIG_SETTING_TOOLBAR_POS_LEFT :леваруч
STR_CONFIG_SETTING_TOOLBAR_POS_CENTER :ў цэнтры
STR_CONFIG_SETTING_TOOLBAR_POS_RIGHT :праваруч
STR_CONFIG_SETTING_STATUSBAR_POS :{LTBLUE}Размяшчэньне радка стану: {ORANGE}{STRING}
STR_CONFIG_SETTING_STATUSBAR_POS :{LTBLUE}Разьмяшчэньне радка стану: {ORANGE}{STRING}
STR_CONFIG_SETTING_STATUSBAR_POS_LEFT :Зьлева
STR_CONFIG_SETTING_STATUSBAR_POS_CENTER :Пасярэдзiне
STR_CONFIG_SETTING_STATUSBAR_POS_RIGHT :Зправа
@@ -1668,7 +1670,7 @@ STR_CONFIG_SETTING_VEHICLES_SERVICING :{ORANGE}Абс
STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Маршруты
STR_CONFIG_SETTING_VEHICLES_TRAINS :{ORANGE}Цягнікі
STR_CONFIG_SETTING_ECONOMY_TOWNS :{ORANGE}Населеныя пункты
STR_CONFIG_SETTING_ECONOMY_INDUSTRIES :{ORANGE}Прамысловасць
STR_CONFIG_SETTING_ECONOMY_INDUSTRIES :{ORANGE}Прамысловасьць
STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :{LTBLUE}Альгарытм пошуку шляху для цягнікоў: {ORANGE}{STRING}
@@ -1723,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}?
@@ -1761,7 +1764,7 @@ STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :субаркт
STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :субтрапічны ляндшафт
STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :цацачны ляндшафт
STR_CHEAT_CHANGE_DATE :{LTBLUE}Зьмяненьне даты: {ORANGE}{DATE_SHORT}
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Змянiць бягучы год
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Зьмянiць бягучы год
STR_CHEAT_SETUP_PROD :{LTBLUE}Дазволіць зьмяненьне прадукцыйнасьці: {ORANGE}{STRING}
# Livery window
@@ -1922,7 +1925,7 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Уста
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Абараніце вашу гульню паролем, калі ня хочаце рабіць яе публічна даступнай
STR_NETWORK_START_SERVER_LAN_INTERNET :Лакальная сетка / Інтэрнэт
STR_NETWORK_START_SERVER_INTERNET_ADVERTISE :Інтэрнэт (зьмясціць у агульны сьпіс)
STR_NETWORK_START_SERVER_INTERNET_ADVERTISE :Інтэрнэт (зьмясьціць у агульны сьпіс)
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клiент{P "" ы аў}
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. клiентаў:
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Выбар максымальнай колькасьці кліентаў. Ня ўсе месцы павінны быць занятыя
@@ -1952,7 +1955,7 @@ STR_NETWORK_LANG_DUTCH :Нідэрля
STR_NETWORK_LANG_ESPERANTO :Эспэранта
STR_NETWORK_LANG_FINNISH :Фінская
STR_NETWORK_LANG_HUNGARIAN :Вугорская
STR_NETWORK_LANG_ICELANDIC :Ісляндзкая
STR_NETWORK_LANG_ICELANDIC :Ісьляндзкая
STR_NETWORK_LANG_ITALIAN :Італьянская
STR_NETWORK_LANG_JAPANESE :Японская
STR_NETWORK_LANG_KOREAN :Карэйская
@@ -2260,6 +2263,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Буда
STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Пераключэньне паміж будаўніцтвам і выдаленьнем чыгуначных рэйкаў, сыгналаў, станцыяў. Пры націснутым Ctrl станцыі ліквідуюцца разам з рэйкамі.
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Канвэртаваць/мадэрнізаваць тып каляінаў. Пры націснутым Shift - ацэнка кошту будаўніцтва.
# Rail depot construction window
STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Кірунак дэпо
STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Выберыце кірунак дэпо
@@ -2291,14 +2295,14 @@ STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Звыч
STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Уваходны сэмафор (прэсыгнал).{}Адкрыты, калі хаця б адзін з выхадных сыгналаў на наступнай сэкцыі каляіны адкрыты. У астатніх выпадках закрыты.
STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Выхадны сэмафор (прэсыгнал).{}Працуе як звычайны сэмафор, але яго стан улічваецца ў працы ўваходных і камбінаваных сыгналаў.
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Камбінаваны сэмафор (прэсыгнал).{}Працуе адначасова як уваходны і выхадны сэмафор. Гэта дазваляе будаваць вялікія «дрэвы» каляінаў з прэсыгналамі.
STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Маршрутны сэмафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны з іх можа зарэзэрваваць сабе бясьпечны шлях. Дазваляе праходжаньне цягнікоў у абодва бакі.
STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Аднабаковы маршрутны сэмафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны з іх можа зарэзэрваваць сабе бясьпечны шлях. Не дазваляе цягнікам праходзіць з адваротнага боку.
STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Маршрутны сэмафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны зь іх можа зарэзэрваваць сабе бясьпечны шлях. Дазваляе праходжаньне цягнікоў у абодва бакі.
STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Аднабаковы маршрутны сэмафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны зь іх можа зарэзэрваваць сабе бясьпечны шлях. Не дазваляе цягнікам праходзіць з адваротнага боку.
STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Звычайны сьветлафор.{}Не дазваляе некалькім цягнікам адначасова знаходзіцца на адным блёк-участку.
STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Уваходны сьветлафор (прэсыгнал).{}Адкрыты, калі хаця б адзін з выхадных сыгналаў на наступнай сэкцыі каляіны адкрыты. У астатніх выпадках закрыты.
STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Выхадны сьветлафор (прэсыгнал).{}Працуе як звычайны сьветлафор, але яго стан улічваецца ў працы ўваходных і камбінаваных сыгналаў.
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Камбінаваны сьветлафор (прэсыгнал).{}Працуе адначасова як уваходны і выхадны сьветлафор. Гэта дазваляе будаваць вялікія «дрэвы» каляінаў з прэсыгналамі.
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Маршрутны сьветлафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны з іх можа зарэзэрваваць сабе бясьпечны шлях. Дазваляе праходжаньне цягнікоў у абодва бакі.
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Аднабаковы маршрутны сьветлафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны з іх можа зарэзэрваваць сабе бясьпечны шлях. Не дазваляе цягнікам праходзіць з адваротнага боку.
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Маршрутны сьветлафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны зь іх можа зарэзэрваваць сабе бясьпечны шлях. Дазваляе праходжаньне цягнікоў у абодва бакі.
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Аднабаковы маршрутны сьветлафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны зь іх можа зарэзэрваваць сабе бясьпечны шлях. Не дазваляе цягнікам праходзіць з адваротнага боку.
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Зьмяненьне тыпаў сыгналаў.{}Калі кнопка націснута, пстрыкніце для пераўтварэньня існуючага сыгнала ў сыгнал выбранага тыпу й віду, або пстрыкніце з націснутым Ctrl для перабіраньня існуючых варыянтаў. Shift+пстрычка - ацэнка кошту пераўтварэньня.
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Шчыльнасьць аўтаматычнай расстаноўкі сыгналаў пры цягненьні
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Паменшыць шчыльнасьць расстаноўкі сыгналаў
@@ -2367,7 +2371,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Буда
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Разьмясьціць буй, які можа быць выкарыстаны як пункт шляху. Пры націснутым Shift - ацэнка кошту будаўніцтва.
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Будаўніцтва аквэдукаў Пры націснутым Shift - ацэнка кошту будаўніцтва.
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Пазначыць, дзе будзе вада.{}Пабудаваць канал, а пры націснутым Ctrl клетка на ўзроўні мора запаўняецца вадой.
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Разьмясціць рэкі
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Разьмясьціць рэкі
# Ship depot construction window
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Кірунак дока
@@ -2409,7 +2413,7 @@ STR_STATION_BUILD_NOISE :{BLACK}Узро
# Landscaping toolbar
STR_LANDSCAPING_TOOLBAR :{WHITE}Земляныя работы
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Апусціць кут зямлі. Перацягваньне апускае першы абраны кут і выраўноўвае выбраную вобласьць да новай вышыні кута. Ctrl выбірае вобласьць па дыяганалі. Пры націснутым Shift - ацэнка кошту будаўніцтва.
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Апусьціць кут зямлі. Перацягваньне апускае першы абраны кут і выраўноўвае выбраную вобласьць да новай вышыні кута. Ctrl выбірае вобласьць па дыяганалі. Пры націснутым Shift - ацэнка кошту будаўніцтва.
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Падняць кут зямлі. Перацягваньне падымае першы абраны кут і выраўноўвае выбраную вобласьць да новай вышыні кута. Ctrl выбірае вобласьць па дыяганалі. Пры націснутым Shift - ацэнка кошту будаўніцтва.
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Выраўнаваць зямлю да вышыні першага абранага кута. Ctrl выбірае вобласьць па дыяганалі. Пры націснутым Shift - ацэнка кошту выраўноўваньня.
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Набыцьцё зямлі. Пры націснутым Shift - ацэнка кошту набыцьця.
@@ -2417,7 +2421,7 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Набы
# Object construction window
STR_OBJECT_BUILD_CAPTION :{WHITE}Выбар аб'екта
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Абярыце ствараны аб'ект. Пры націснутым Shift - ацэнка кошту пабудовы.
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Абярыце клас аб'екта для будаўніцтва
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Абярыце клясу аб'екта для будаўніцтва
STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Прагляд аб'екта
STR_OBJECT_BUILD_SIZE :{BLACK}Памер: {GOLD}{NUM} x {NUM} клетак
@@ -2434,10 +2438,10 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Паса
# Land generation window (SE)
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Стварэньне ляндшафту
STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Разьмясціць камяні па мапе
STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Разьмясціць пустэльню.{}Націсьніце Ctrl, каб выдаліць яе.
STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Павялічыць плошчу змяненьня рэльефу
STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Паменшыць плошчу змяненьня рэльефу
STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Разьмясьціць камяні па мапе
STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Разьмясьціць пустэльню.{}Націсьніце Ctrl, каб выдаліць яе.
STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Павялічыць плошчу зьмяненьня рэльефу
STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Паменшыць плошчу зьмяненьня рэльефу
STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Стварыць выпадковую мапу
STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Стварыць новы сцэнар
STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Ачысьціць ляндшафт
@@ -2695,7 +2699,7 @@ STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Ства
STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Выпадковы рэльеф
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Вышыня над узроўнем мора:
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Падняць ўзровень роўнай зямлі на 1
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Апусціць ўзровень роўнай зямлі на 1
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Апусьціць ўзровень роўнай зямлі на 1
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Зьмяніць вышыню роўнай зямлі
@@ -2738,7 +2742,6 @@ STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Пера
STR_NEWGRF_SETTINGS_MOVEDOWN :{BLACK}Унiз
STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Перамясьціць выбраны файл NewGRF ніжэй
STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Сьпіс устаноўленых файлаў NewGRF. Выберыце файл для зьмяненьня парамэтраў
STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Усталяваць парамэтры
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Пераключыць палітру
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Пераключыць палітру для выбраных NewGRF файлаў.{}Выкарыстоўвайце пераключэньне, калі графіка ў гульні малюецца ружовым колерам.
@@ -2758,7 +2761,7 @@ STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Пара
STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Няма даступнай інфармацыі
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Файл ня знойдзены
STR_NEWGRF_SETTINGS_DISABLED :{RED}Адключана
STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Несумяшчальна з дадзенай версіяй OpenTTD
STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Несумяшчальна з дадзенай вэрсіяй OpenTTD
STR_NEWGRF_SETTINGS_PARAMETER_QUERY :{BLACK}Увядзіце парамэтры файла NewGRF
@@ -2769,12 +2772,14 @@ STR_NEWGRF_PARAMETERS_RESET :{BLACK}Ськi
STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Ськінуць значэньнi ўсіх парамэтраў
STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Парамэтр {NUM}
STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING}
STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Колькасць параметраў: {ORANGE}{NUM}
STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Колькасьць парамэтраў: {ORANGE}{NUM}
# NewGRF readme window
# NewGRF inspect window
STR_NEWGRF_INSPECT_CAPTION :{WHITE}Прагляд - {STRING}
STR_NEWGRF_INSPECT_PARENT_BUTTON :{BLACK}Бацька (parent)
STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Прагляд аб'екта ў кантэксце бацькі
STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Прагляд аб'екта ў кантэксьце бацькі
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} у {HEX}
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Аб'ект
@@ -2785,7 +2790,7 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Пара
# Sprite aligner window
STR_SPRITE_ALIGNER_CAPTION :{WHITE}Выраўноўваньне спрайта {COMMA} ({STRING})
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Наступны спрайт
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Перайсьці да наступнага нармальнага спрайта, прапускаючы псэўдаспрайты, а таксама змяненьнi колеру/шрыфтавыя.
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Перайсьці да наступнага нармальнага спрайта, прапускаючы псэўдаспрайты, а таксама зьмяненьнi колеру/шрыфтавыя.
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Перайсьці да спрайта
STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Перайсьці да зададзеных спрайту. Калі спрайт не нармальны, пераход адбудзецца да наступнага нармальнага.
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Папярэдні спрайт
@@ -2818,7 +2823,7 @@ STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Нечакан
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Невядомая ўласьцівасьць для Action 0.
STR_NEWGRF_ERROR_INVALID_ID :Выкарыстоўваецца няправільны ID.
STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} утрымлiвае пашкоджаны спрайт. Усе пашкоджаныя спрайты будуць паказаны чырвоным знакам пытаньня (?).
STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Змяшчае некалькі Action 8 дзеяньняў.
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 недаступныя
@@ -2849,7 +2854,7 @@ STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Мяня
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Цягнік «{VEHICLE}», які належыць «{COMPANY}», мае няправільную даўжыню. Верагодна, гэта выклікана праблемамі ў файле новай графікі. Гульня можа рассынхранізавацца або «выляцець».
STR_NEWGRF_BUGGY :{WHITE}NewGRF «{0:STRING}» падае няправільную інфармацыю.
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Інфармацыя аб умяшчальнасьці/пераабсталяваньнi для лякаматыва «{1:ENGINE}» пасля пабудовы адрозніваецца ад зьвестак у сьпісе пакупкі, што можа перашкодзіць функцыі аўтаабнаўленьня/аўтазамены карэктна зрабіць пераабсталяваньне.
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Інфармацыя аб умяшчальнасьці/пераабсталяваньнi для лякаматыва «{1:ENGINE}» пасьля пабудовы адрозніваецца ад зьвестак у сьпісе пакупкі, што можа перашкодзіць функцыі аўтаабнаўленьня/аўтазамены карэктна зрабіць пераабсталяваньне.
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}«{1:STRING}» выклікаў бясконцы цыкл.
# 'User removed essential NewGRFs'-placeholders for stuff without specs
@@ -2859,12 +2864,14 @@ 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стр
STR_SIGN_LIST_CLEAR :{BLACK}Ачысціць фільтр
STR_SIGN_LIST_CLEAR :{BLACK}Ачысьціць фільтр
STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Пераключыць праверку рэгістра пры параўнанні назваў таблiчак з фільтрам
STR_SIGN_LIST_CLEAR_TOOLTIP :{BLACK}Ачысціць фільтр
STR_SIGN_LIST_CLEAR_TOOLTIP :{BLACK}Ачысьціць фільтр
# Sign window
STR_EDIT_SIGN_CAPTION :{WHITE}Зьмяніць надпіс на таблічцы
@@ -2979,10 +2986,10 @@ STR_CARGO_RATING_OUTSTANDING :Цудоўны
STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Паказаць станцыю ў асноўным вакне. Ctrl+клік - паказаць у дадатковым вакне.
STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Перайменаваць станцыю
STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Паказаць усе цягнiкi, у раскладзе якіх ёсць гэтая станцыя
STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Паказаць усе аўтамабiлi, у раскладзе якіх ёсць гэты тэрмiнал/прыпынак
STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Паказаць увесь авiятранспарт, у раскладзе якога ёсць гэты аэрапорт
STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Паказаць усе караблі, у раскладзе якіх ёсць гэтая прыстань
STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Паказаць усе цягнiкi, у раскладзе якіх ёсьць гэтая станцыя
STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Паказаць усе аўтамабiлi, у раскладзе якіх ёсьць гэты тэрмiнал/прыпынак
STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Паказаць увесь авiятранспарт, у раскладзе якога ёсьць гэты аэрапорт
STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Паказаць усе караблі, у раскладзе якіх ёсьць гэтая прыстань
STR_STATION_VIEW_RENAME_STATION_CAPTION :Перайменаваць станцыю
@@ -3022,7 +3029,7 @@ STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENC
STR_FINANCES_BORROW_BUTTON :{BLACK}Пазычыць {CURRENCY}
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Павелічыць памер пазыкі. Ctrl+клiк - пазычыць да максымальнай сумы.
STR_FINANCES_REPAY_BUTTON :{BLACK}Аддаць {CURRENCY}
STR_FINANCES_REPAY_TOOLTIP :{BLACK}Вярнуць частку пазыкі. Ctrl+клiк - вярнуць усё, па магчымасці.
STR_FINANCES_REPAY_TOOLTIP :{BLACK}Вярнуць частку пазыкі. Ctrl+клiк - вярнуць усё, па магчымасьці.
# Company view
STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
@@ -3046,8 +3053,8 @@ STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Агле
STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Перамясьціць
STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Перамясьціць штаб-кватэру кампаніі ў іншае месца за 1% ацэнкавага кошту капіталу кампаніі. Shift+пстрычка - ацэнка кошту пераносу.
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Знешнасьць
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Зьмяніць знешнасьць дырэктара
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Зьнешнасьць
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Зьмяніць зьнешнасьць дырэктара
STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Колер
STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Зьмяніць колер транспартных сродкаў кампаніі
STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Назва кампаніі
@@ -3484,7 +3491,7 @@ STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Ёміс
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_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Новая ёмістасьць: {GOLD}{CARGO}, {GOLD}{CARGO}{}{BLACK}Кошт пераабсталяваньня: {GOLD}{CURRENCY}
STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Абярыце вагоны для пераабсталяваньня. Можна абвесьці мышшу некалькі вагонаў. Пстрычка па-за межамі састава абярэ ўвесь састаў. Ctrl+пстрычка абярэ вагоны да канца састава.
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Выберыце тып грузу для перавозкі
@@ -3543,9 +3550,11 @@ STR_ORDER_SERVICE :{BLACK}Абсл
STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ісьці заўсёды
STR_ORDER_DROP_SERVICE_DEPOT :Абслужыць, калі неабходна
STR_ORDER_DROP_HALT_DEPOT :Стоп
STR_ORDER_SERVICE_TOOLTIP :{BLACK}Прапусціць гэтае заданьне, калі абслугоўваньне не патрабуецца
STR_ORDER_SERVICE_TOOLTIP :{BLACK}Прапусьціць гэтае заданьне, калі абслугоўваньне не патрабуецца
STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Парамэтр транспарту для параўнаньня
# Conditional order variables, must follow order of OrderConditionVariable enum
STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Працэнт пагрузкі
STR_ORDER_CONDITIONAL_RELIABILITY :Надзейнасьць
STR_ORDER_CONDITIONAL_MAX_SPEED :Макс. хуткасьць
@@ -3606,7 +3615,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 :(Поўная загрузка любым грузам)
@@ -3624,6 +3633,8 @@ STR_ORDER_NO_UNLOAD_FULL_LOAD :(Не разг
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Не разгружацца й чакаць поўнай загрузкі любым грузам)
STR_ORDER_NO_UNLOAD_NO_LOAD :(Не разгружацца й не грузiцца)
STR_ORDER_STOP_LOCATION_NEAR_END :[пачатак станцыi]
STR_ORDER_STOP_LOCATION_MIDDLE :[сярэдзiна станцыi]
STR_ORDER_STOP_LOCATION_FAR_END :[канец станцыі]
@@ -3786,7 +3797,7 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE :<недасту
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Гульня была захавана ў вэрсіі без падтрымкі трамваяў. Усе трамваі былі адключаны.
# Map generation messages
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Генэрацыя карты спынена...{}... няма прыдатных месцаў для разьмяшчэньня гарадоў
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Генэрацыя мапы спынена...{}... няма прыдатных месцаў для разьмяшчэньня гарадоў
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... у гэтым сцэнары няма гарадоў
STR_ERROR_PNGMAP :{WHITE}Не атрымалася загрузіць ляндшафт з PNG...
@@ -3797,8 +3808,10 @@ STR_ERROR_PNGMAP_MISC :{WHITE}... не
STR_ERROR_BMPMAP :{WHITE}Не атрымалася загрузіць ляндшафт з BMP...
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... немагчыма пераўтварыць тып вiдарысу.
STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}... выява занадта вялiкая
STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Выхад за межы даступных значэньняў
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Змяненьне памераў зыходнай карты да такіх значэньняў не рэкамендуецца. Працягваць?
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Зьмяненьне памераў зыходнай мапы да такіх значэньняў не рэкамэндуецца. Працягваць?
# Soundset messages
STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Бягучая гукавая схэма абрана сістэмай аўтаматычна. Дадатковыя наборы гукаў можна загрузіць праз сістэму анлайн-кантэнту.
@@ -3825,7 +3838,7 @@ 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}... дасягнуты лiмiт ляндшафтных зьменаў
STR_ERROR_CLEARING_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}Забаронена падчас паўзы
@@ -3835,7 +3848,7 @@ STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}... ад
STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}Адміністрацыя г. {NBSP}{TOWN} забараняе пабудову яшчэ аднаго аэрапорта ў горадзе
STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}Адміністрацыя г. {NBSP}{TOWN} не дазваляе будаўніцтва аэрапорта з-за высокага ўзроўню шуму.
STR_ERROR_BRIBE_FAILED :{WHITE}Ваша спроба даць хабар была
STR_ERROR_BRIBE_FAILED_2 :{WHITE}выяўлена рэгіянальным следчым
STR_ERROR_BRIBE_FAILED_2 :{WHITE}выяўлена рэгіянальным сьледчым
# Levelling errors
STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Тут немагчыма падвысіць узровень зямлі...
@@ -3867,7 +3880,7 @@ STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Нема
STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Немагчыма перайменаваць горад...
STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Тут немагчыма пабудаваць горад...
STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Немагчыма пашырыць горад...
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... занадта блізка да краю карты
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... занадта блізка да краю мапы
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... занадта блізка да іншага горада
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... занадта шмат гарадоў
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... няма месца на мапе
@@ -3890,7 +3903,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}Тут немагчыма пабудаваць чыгуначную станцыю...

View File

@@ -38,12 +38,12 @@ STR_CARGO_PLURAL_GRAIN :{G=m}Cereais
STR_CARGO_PLURAL_WOOD :{G=f}Madeira
STR_CARGO_PLURAL_IRON_ORE :{G=m}Minério de Ferro
STR_CARGO_PLURAL_STEEL :{G=m}Aço
STR_CARGO_PLURAL_VALUABLES :{G=f}Objetos de Valor
STR_CARGO_PLURAL_VALUABLES :{G=f}Preciosidades
STR_CARGO_PLURAL_COPPER_ORE :{G=m}Minério de Cobre
STR_CARGO_PLURAL_MAIZE :{G=m}Milho
STR_CARGO_PLURAL_FRUIT :{G=f}Fruta
STR_CARGO_PLURAL_DIAMONDS :{G=m}Diamantes
STR_CARGO_PLURAL_FOOD :{G=m}Alimentos
STR_CARGO_PLURAL_FOOD :{G=m}Alimento
STR_CARGO_PLURAL_PAPER :{G=m}Papel
STR_CARGO_PLURAL_GOLD :{G=m}Ouro
STR_CARGO_PLURAL_WATER :{G=f}Água
@@ -448,6 +448,7 @@ STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ampliado em cap
STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de tela do mapa inteiro
STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre 'OpenTTD'
STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de "sprites"
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Alternar caixas limítrofes
############ range ends here
############ range for days starts (also used for the place in the highscore window)
@@ -540,7 +541,7 @@ STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Exibir a
# Graph key window
STR_GRAPH_KEY_CAPTION :{WHITE}Chave para gráficos da empresa
STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Clique aqui para alternar a entrada da empresa no gráfico em ligado/desligado
STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Clique aqui para alternar a entrada da empresa no gráfico
# Company league window
STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Tabela da Liga das Empresas
@@ -707,7 +708,7 @@ STR_SMALLMAP_ENABLE_ALL :{BLACK}Habilita
STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Mostrar altitude
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Não exibir indústrias no mapa
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Exibir todas as indústrias no mapa
STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Alternar a exibição de mapa de elevação
STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Alternar a exibição de mapa topográfico
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Não exibir propriedade da empresa no mapa
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Exibir todas as propriedades da empresa no mapa
@@ -840,9 +841,9 @@ STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIGFONT}{BLACK
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIGFONT}{BLACK}Subsídio removido:{}{} Serviço de {STRING} de {STRING} para {STRING} não é mais subsidiado
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIGFONT}{BLACK}Subsídio de serviço oferecido:{}{} Primeiro serviço de {STRING} de {STRING} para {STRING} atrairá subsídio de um ano da autoridade local!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIGFONT}{BLACK}Subsídio de serviço concedido á {STRING}!{}{}{STRING} serviço de {STRING} para {STRING} pagará 50% extra durante o próximo ano ano!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIGFONT}{BLACK}Subsídio de serviço concedido á {STRING}!{}{}{STRING} serviço de {STRING} para {STRING} pagará o dobro de impostos durante o próximo ano!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIGFONT}{BLACK}Subsídio de serviço concedido á {STRING}!{}{}{STRING} serviço de {STRING} para {STRING} pagará o triplo de impostos durante o próximo ano!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIGFONT}{BLACK}Subsídio de serviço concedido á {STRING}!{}{}{STRING} serviço de {STRING} para {STRING} pagará o quadruplo de impostos durante o próximo ano!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIGFONT}{BLACK}Subsídio de serviço concedido á {STRING}!{}{}{STRING} serviço de {STRING} para {STRING} pagará o dobro de tarifas durante o próximo ano!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIGFONT}{BLACK}Subsídio de serviço concedido á {STRING}!{}{}{STRING} serviço de {STRING} para {STRING} pagará o triplo de tarifas durante o próximo ano!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIGFONT}{BLACK}Subsídio de serviço concedido á {STRING}!{}{}{STRING} serviço de {STRING} para {STRING} pagará o quadruplo de tarifas durante o próximo ano!
STR_NEWS_ROAD_REBUILDING :{BIGFONT}{BLACK}Tráfego caótico em {TOWN}!{}{} Programa de reconstrução rodoviária financiado por {STRING} provoca 6 meses de miséria aos condutores!
@@ -1057,6 +1058,7 @@ STR_SEA_LEVEL_HIGH :Alto
STR_SEA_LEVEL_CUSTOM :Personalizado
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Personalizado ({NUM}%)
STR_DISASTER_NONE :Nenhum
STR_DISASTER_REDUCED :Reduzido
STR_DISASTER_NORMAL :Normal
@@ -1183,7 +1185,7 @@ STR_CONFIG_SETTING_TREE_PLACER :{LTBLUE}Algorí
STR_CONFIG_SETTING_TREE_PLACER_NONE :Nenhum
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Melhorado
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :{LTBLUE}Rotação do mapa em relevo: {ORANGE}{STRING}
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :{LTBLUE}Rotação do mapa topográfico: {ORANGE}{STRING}
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Sentido Anti-Horário
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Sentido Horário
STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :{LTBLUE}A altitude de um mapa regular é de: {ORANGE}{STRING}
@@ -1375,7 +1377,7 @@ STR_INTRO_CAPTION :{WHITE}OpenTTD
STR_INTRO_NEW_GAME :{BLACK}Novo Jogo
STR_INTRO_LOAD_GAME :{BLACK}Abrir Jogo
STR_INTRO_PLAY_SCENARIO :{BLACK}Jogar Cenário
STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Jogar num mapa de relevo
STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Jogar num mapa topográfico
STR_INTRO_SCENARIO_EDITOR :{BLACK}Editor de Cenário
STR_INTRO_MULTIPLAYER :{BLACK}Multi-jogador
@@ -1389,7 +1391,7 @@ STR_INTRO_QUIT :{BLACK}Sair
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Iniciar um novo jogo. Ctrl+Clique para pular a configuração do mapa
STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Carregar um jogo salvado
STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Inica um novo jogo, a partir de um mapa de relevo
STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Inica um novo jogo, a partir de um mapa topográfico
STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Iniciar um novo jogo, usando um cenário personalizado
STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Criar um cenário de jogo personalizado
STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Iniciar um jogo de vários jogadores
@@ -1407,6 +1409,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Checar p
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Exibir configs. da IA
STR_INTRO_TOOLTIP_QUIT :{BLACK}Sair de 'OpenTTD'
# Quit window
STR_QUIT_CAPTION :{WHITE}Sair
STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Tem a certeza que deseja abandonar este jogo e voltar ao {STRING}?
@@ -1864,7 +1867,7 @@ STR_CONTENT_TYPE_NEWGRF :NewGRF
STR_CONTENT_TYPE_AI :IA
STR_CONTENT_TYPE_AI_LIBRARY :IA's disponíveis
STR_CONTENT_TYPE_SCENARIO :Cenário
STR_CONTENT_TYPE_HEIGHTMAP :Mapa de altitudes
STR_CONTENT_TYPE_HEIGHTMAP :Mapa topográfico
STR_CONTENT_TYPE_BASE_SOUNDS :Sons padrão
STR_CONTENT_TYPE_BASE_MUSIC :Músicsas padrão
@@ -1922,7 +1925,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construi
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito (para compra e manutenção de trens). Shift altera construção/estimação de custo
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Converter linha em ponto de controle. Ctrl permite a união de pontos de controle. Shift altera construção/estimação de custo
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estação ferroviária. Ctrl permite a união de estações. Shift altera construção/estimação de custo
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinais ferroviários. Ctrl liga/desliga a constução de semáforos/sinais{}Clicar e arrastar constroi sinais até a próxima junção{}Ctrl+Clique liga/desliga a janela de seleção de sinais. Shift altera construção/estimação de custo
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinais ferroviários. Ctrl alterna a construção de semáforos/sinais{}Clicar e arrastar constroi sinais até a próxima junção{}Ctrl+Clique alterna a janela de seleção de sinais. Shift altera construção/estimação de custo
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir ponte ferroviária. Shift altera construção/estimação de custo
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel ferroviário. Shift altera construção/estimação de custo
STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Alternar construir/remover ferrovias, sinais, pontos de controle e estações. Segure ctrl para remover os trilhos de estações e pontos de controle.
@@ -2291,7 +2294,7 @@ STR_SAVELOAD_SAVE_CAPTION :{WHITE}Salvar J
STR_SAVELOAD_LOAD_CAPTION :{WHITE}Abrir Jogo
STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Salvar Cenário
STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Abrir Cenário
STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Carregar Relevo
STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Carregar mapa topográfico
STR_SAVELOAD_HOME_BUTTON :{BLACK}Clique aqui para selecionar o diretório padrão de jogos salvos
STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} livres
STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de unidades, diretórios e arquivos de jogos gravados
@@ -2343,8 +2346,8 @@ STR_MAPGEN_BORDER_RANDOM :{BLACK}Randômi
STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Randômico
STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotação do mapa em relevo:
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa em relevo:
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotação do mapa topográfico:
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa topográfico:
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho:
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
@@ -2404,8 +2407,8 @@ STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Move o N
STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Lista dos NewGRF instalados. Clique em um deles para mudar seus parâmetros
STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Definir parâmetros
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Liga/Desliga paleta
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Liga/desliga a paleta do NewGRF selecionado.{}Faça isso quando os gráficos deste ficarem rosa durante o jogo
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Alterna paleta
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Alterna a paleta do NewGRF selecionado.{}Faça isso quando os gráficos deste ficarem rosa durante o jogo
STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Aplicar alterações
STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Procurar o conteúdo on-line
@@ -2485,6 +2488,8 @@ STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING
STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém entradas múltiplas de Ação 8
STR_NEWGRF_ERROR_READ_BOUNDS :Continuar lendo após o fim do pseudo-sprite
STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}Estão faltando alguns sprites na base de gráficos em uso.{}Por favor atualize a base de gráficos
STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF requisitados não estão dispon.
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING} foi desativado por {4:STRING}
# NewGRF related 'general' warnings
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Cuidado!
@@ -2521,6 +2526,8 @@ STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} de <car
STR_NEWGRF_INVALID_ENGINE :<modelo de veíc. inválido>
STR_NEWGRF_INVALID_INDUSTRYTYPE :<indústria inválida>
# NewGRF scanning window
# Sign list window
STR_SIGN_LIST_CAPTION :{WHITE}Lista de Placas - {COMMA} Placa{P "" s}
STR_SIGN_LIST_MATCH_CASE :{BLACK}Diferenciar caixa alta
@@ -3188,6 +3195,8 @@ STR_ORDER_DROP_HALT_DEPOT :Parar
STR_ORDER_SERVICE_TOOLTIP :{BLACK}Pular esta ordem a menos que necessite de manutenção
STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Dados do veículo no qual se basear para pular ordem
# Conditional order variables, must follow order of OrderConditionVariable enum
STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Percentual carregado
STR_ORDER_CONDITIONAL_RELIABILITY :Confiabilidade
STR_ORDER_CONDITIONAL_MAX_SPEED :Velocidade máxima
@@ -3248,7 +3257,7 @@ STR_ORDER_STOP_ORDER :(Parar)
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
STR_ORDER_AUTOMATIC :(Automatico)
STR_ORDER_IMPLICIT :(Implícito)
STR_ORDER_FULL_LOAD :(Carregar completamente)
STR_ORDER_FULL_LOAD_ANY :(Carregar completamente qualquer carga)
@@ -3404,8 +3413,8 @@ STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{U
# Income 'floats'
STR_INCOME_FLOAT_COST_SMALL :{TINYFONT}{RED}Custo: {CURRENCY}
STR_INCOME_FLOAT_COST :{RED}Custo: {CURRENCY}
STR_INCOME_FLOAT_INCOME_SMALL :{TINYFONT}{GREEN}Renda: {CURRENCY}
STR_INCOME_FLOAT_INCOME :{GREEN}Renda: {CURRENCY}
STR_INCOME_FLOAT_INCOME_SMALL :{TINYFONT}{GREEN}Lucro: {CURRENCY}
STR_INCOME_FLOAT_INCOME :{GREEN}Lucro: {CURRENCY}
STR_FEEDER_TINY :{TINYFONT}{YELLOW}Transferir: {CURRENCY}
STR_FEEDER :{YELLOW}Transferir: {CURRENCY}
STR_MESSAGE_ESTIMATED_COST :{WHITE}Custo Estimado: {CURRENCY}
@@ -3439,6 +3448,7 @@ STR_ERROR_PNGMAP_MISC :{WHITE}... algu
STR_ERROR_BMPMAP :{WHITE}Impossível carregar terreno a partir de BMP...
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... não foi possível converter o tipo de imagem
STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Aviso de Escala
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Alterar muito o tamanho do mapa original não é recomendado. Continuar com a geração?

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