Compare commits
53 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
40ee9278f1 | ||
|
45e119deeb | ||
|
fd48f42a07 | ||
|
111fcafa2f | ||
|
47e7a98207 | ||
|
83062be4e0 | ||
|
a04aad0df3 | ||
|
5d9975cad1 | ||
|
68afdc6312 | ||
|
e706131e16 | ||
|
bf3c75c34c | ||
|
83d41e122c | ||
|
c1359d6d8a | ||
|
3daf4d012b | ||
|
997a4aee46 | ||
|
4284b8abb3 | ||
|
526e7294a3 | ||
|
9338e1a38f | ||
|
c42d060a44 | ||
|
c33d1fc60b | ||
|
41f777b0ec | ||
|
daa89c982e | ||
|
0ca913841d | ||
|
7d984241f3 | ||
|
a95c366f58 | ||
|
d233a561a1 | ||
|
0ded8c0cb8 | ||
|
15d5df9496 | ||
|
85ee1737e4 | ||
|
c5387508eb | ||
|
a8c7707fe0 | ||
|
eb7bceb240 | ||
|
6f8248c36d | ||
|
41db186ea7 | ||
|
310d9e4ee3 | ||
|
be65972895 | ||
|
a51531e410 | ||
|
4b800313f4 | ||
|
e1841b5d68 | ||
|
4f8053e559 | ||
|
3a39cea23b | ||
|
a873aa3337 | ||
|
a1826a043e | ||
|
a6750a145e | ||
|
b5bad6aa19 | ||
|
725d00630f | ||
|
0b02b285a8 | ||
|
5cb560d4bd | ||
|
4ba397c285 | ||
|
863d0e08e3 | ||
|
041714e538 | ||
|
7bbfbcddb7 | ||
|
c224791f7f |
@@ -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)/"
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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 $@'
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
|
157
changelog.txt
@@ -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)
|
||||
|
@@ -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'`
|
||||
|
@@ -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.
|
||||
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
@@ -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
|
||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 3.5 KiB |
BIN
media/extra_grf/canal_locks.png
Normal file
After Width: | Height: | Size: 20 KiB |
@@ -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
|
||||
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 6.1 KiB |
@@ -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
|
||||
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 63 KiB |
@@ -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"
|
||||
|
282
media/extra_grf/rivers/arctic.nfo
Normal 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
|
BIN
media/extra_grf/rivers/arctic_brown.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
media/extra_grf/rivers/arctic_snowy.png
Normal file
After Width: | Height: | Size: 14 KiB |
139
media/extra_grf/rivers/rapids.nfo
Normal 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
|
BIN
media/extra_grf/rivers/rapids.png
Normal file
After Width: | Height: | Size: 17 KiB |
146
media/extra_grf/rivers/temperate.nfo
Normal 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
|
BIN
media/extra_grf/rivers/temperate.png
Normal file
After Width: | Height: | Size: 16 KiB |
146
media/extra_grf/rivers/toyland.nfo
Normal 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
|
BIN
media/extra_grf/rivers/toyland.png
Normal file
After Width: | Height: | Size: 16 KiB |
282
media/extra_grf/rivers/tropic.nfo
Normal 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
|
BIN
media/extra_grf/rivers/tropic_desert.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
media/extra_grf/rivers/tropic_forest.png
Normal file
After Width: | Height: | Size: 15 KiB |
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
%define binname openttd
|
||||
|
||||
%define srcver 1.1.1
|
||||
%define srcver 1.1.4
|
||||
|
||||
%if %{dedicated}
|
||||
Name: %{binname}-dedicated
|
||||
|
@@ -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:
|
||||
|
@@ -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\"
|
||||
|
@@ -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\"
|
||||
|
153
readme.txt
@@ -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!
|
||||
|
6
src/3rdparty/squirrel/include/squirrel.h
vendored
@@ -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
|
||||
|
57
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
@@ -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;
|
||||
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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.
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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
|
||||
#---------------------------------------------------------------------------
|
||||
|
@@ -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);
|
||||
|
@@ -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).
|
||||
*/
|
||||
|
@@ -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.
|
||||
*/
|
||||
|
@@ -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
|
||||
|
@@ -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.
|
||||
|
@@ -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.
|
||||
*
|
||||
|
@@ -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 */
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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 */
|
||||
|
@@ -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)
|
||||
|
@@ -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.
|
||||
|
@@ -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));
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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.
|
||||
|
@@ -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];
|
||||
|
@@ -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.
|
||||
|
@@ -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).
|
||||
|
@@ -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
|
||||
|
@@ -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]
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -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");
|
||||
|
@@ -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";
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
154
src/bmp.cpp
@@ -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'
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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:
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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];
|
||||
|
@@ -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 */
|
||||
|
@@ -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");
|
||||
|
@@ -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 */
|
||||
|
@@ -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();
|
||||
|
@@ -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;
|
||||
|
@@ -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>
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
@@ -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. */
|
||||
|
@@ -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.
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -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();
|
||||
|
@@ -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);
|
||||
|
@@ -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)
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
@@ -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}
|
||||
|
@@ -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 :арыгiнальная
|
||||
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}Тут немагчыма пабудаваць чыгуначную станцыю...
|
||||
|
@@ -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?
|
||||
|
||||
|