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)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)$(ROOT_DIR)/os/macosx/plistgen.sh "$(BUNDLE_DIR)/$(OSXAPP)" "$(REV)"
|
||||||
$(Q)cp "$(ROOT_DIR)/os/macosx/splash.png" "$(DATA_DIR)"
|
$(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
|
endif
|
||||||
$(Q)cp "$(BIN_DIR)/$(TTD)" "$(TTD_DIR)/"
|
$(Q)cp "$(BIN_DIR)/$(TTD)" "$(TTD_DIR)/"
|
||||||
$(Q)cp "$(BIN_DIR)/ai/"compat_*.nut "$(AI_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")
|
MD5SUM := $(shell [ "$(OS)" = "OSX" ] && echo "md5 -r" || echo "md5sum")
|
||||||
|
|
||||||
# Some "should not be changed" settings.
|
# Some "should not be changed" settings.
|
||||||
NFO_FILES := $(GRF_DIR)/*.nfo
|
NFO_FILES := $(GRF_DIR)/*.nfo $(GRF_DIR)/rivers/*.nfo
|
||||||
PNG_FILES := $(GRF_DIR)/*.png
|
PNG_FILES := $(GRF_DIR)/*.png $(GRF_DIR)/rivers/*.png
|
||||||
|
|
||||||
# Build the GRF.
|
# Build the GRF.
|
||||||
all: $(BIN_DIR)/openttd.grf
|
all: $(BIN_DIR)/openttd.grf
|
||||||
|
@@ -27,9 +27,21 @@ SRC_DIR = "$(ROOT_DIR)/src"
|
|||||||
BUNDLE_DIR = "$(ROOT_DIR)/bundle"
|
BUNDLE_DIR = "$(ROOT_DIR)/bundle"
|
||||||
BUNDLES_DIR = "$(ROOT_DIR)/bundles"
|
BUNDLES_DIR = "$(ROOT_DIR)/bundles"
|
||||||
TTD = openttd.exe
|
TTD = openttd.exe
|
||||||
|
PDB = openttd.pdb
|
||||||
|
MODE = Release
|
||||||
TARGET := $(shell echo $(PLATFORM) | sed "s@win64@x64@;s@win32@Win32@")
|
TARGET := $(shell echo $(PLATFORM) | sed "s@win64@x64@;s@win32@Win32@")
|
||||||
|
|
||||||
all:
|
all:
|
||||||
$(Q)cp objs/$(TARGET)/Release/$(TTD) $(BIN_DIR)/$(TTD)
|
$(Q)cp objs/$(TARGET)/$(MODE)/$(TTD) $(BIN_DIR)/$(TTD)
|
||||||
|
|
||||||
include Makefile.bundle.in
|
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 $<` $<
|
$(Q)$(WINDRES) -o $@ -I `basename $<` $<
|
||||||
|
|
||||||
$(BIN_DIR)/$(TTD): $(TTD)
|
$(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)
|
$(TTD): $(OBJS) $(CONFIG_CACHE_LINKER)
|
||||||
$(E) '$(STAGE) Linking $@'
|
$(E) '$(STAGE) Linking $@'
|
||||||
|
@@ -8456,7 +8456,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
|||||||
GetNumWagons(): 3
|
GetNumWagons(): 3
|
||||||
GetLength(): 24
|
GetLength(): 24
|
||||||
GetWagonEngineType(): 9
|
GetWagonEngineType(): 9
|
||||||
GetWagonAge(): 0
|
GetWagonAge(): 1
|
||||||
GetWagonEngineType(): 27
|
GetWagonEngineType(): 27
|
||||||
GetWagonAge(): 0
|
GetWagonAge(): 0
|
||||||
GetWagonEngineType(): 27
|
GetWagonEngineType(): 27
|
||||||
@@ -8492,11 +8492,11 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
|||||||
14 => 1
|
14 => 1
|
||||||
12 => 1
|
12 => 1
|
||||||
Age ListDump:
|
Age ListDump:
|
||||||
|
17 => 1
|
||||||
|
16 => 1
|
||||||
14 => 1
|
14 => 1
|
||||||
13 => 1
|
13 => 1
|
||||||
12 => 1
|
12 => 1
|
||||||
17 => 0
|
|
||||||
16 => 0
|
|
||||||
MaxAge ListDump:
|
MaxAge ListDump:
|
||||||
16 => 10980
|
16 => 10980
|
||||||
14 => 10980
|
14 => 10980
|
||||||
@@ -8504,9 +8504,9 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
|||||||
13 => 5490
|
13 => 5490
|
||||||
12 => 5490
|
12 => 5490
|
||||||
AgeLeft ListDump:
|
AgeLeft ListDump:
|
||||||
16 => 10980
|
16 => 10979
|
||||||
14 => 10979
|
14 => 10979
|
||||||
17 => 7320
|
17 => 7319
|
||||||
13 => 5489
|
13 => 5489
|
||||||
12 => 5489
|
12 => 5489
|
||||||
CurrentSpeed ListDump:
|
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
|
./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
|
fi
|
||||||
|
|
||||||
|
ret=0
|
||||||
if [ -z "$gdb" ]; then
|
if [ -z "$gdb" ]; then
|
||||||
res="`diff -ub ai/regression/regression.txt tmp.regression`"
|
res="`diff -ub ai/regression/regression.txt tmp.regression`"
|
||||||
if [ -z "$res" ]; then
|
if [ -z "$res" ]; then
|
||||||
@@ -35,6 +36,7 @@ if [ -z "$gdb" ]; then
|
|||||||
else
|
else
|
||||||
echo "Regression test failed! Difference:"
|
echo "Regression test failed! Difference:"
|
||||||
echo "$res"
|
echo "$res"
|
||||||
|
ret=1
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
echo "Regression test done"
|
echo "Regression test done"
|
||||||
@@ -49,3 +51,5 @@ fi
|
|||||||
if [ "$1" != "-k" ]; then
|
if [ "$1" != "-k" ]; then
|
||||||
rm -f tmp.regression
|
rm -f tmp.regression
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
exit $ret
|
||||||
|
@@ -55,7 +55,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
|
|||||||
TRGC.GRF = ed446637e034104c5559b32c18afe78d
|
TRGC.GRF = ed446637e034104c5559b32c18afe78d
|
||||||
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
|
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
|
||||||
TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
|
TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6
|
||||||
OPENTTD.GRF = 066f0ce5500e0e8f5332aee42e2451a2
|
OPENTTD.GRF = 245e2125cecfe7e0b6c5e85d32459f86
|
||||||
|
|
||||||
[origin]
|
[origin]
|
||||||
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
||||||
|
@@ -55,7 +55,7 @@ TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8
|
|||||||
TRGC.GRF = ed446637e034104c5559b32c18afe78d
|
TRGC.GRF = ed446637e034104c5559b32c18afe78d
|
||||||
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
|
TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9
|
||||||
TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
|
TRGT.GRF = fcde1d7e8a74197d72a62695884b909e
|
||||||
OPENTTD.GRF = 066f0ce5500e0e8f5332aee42e2451a2
|
OPENTTD.GRF = 245e2125cecfe7e0b6c5e85d32459f86
|
||||||
|
|
||||||
[origin]
|
[origin]
|
||||||
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
||||||
|
@@ -55,7 +55,7 @@ TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32
|
|||||||
TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
|
TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b
|
||||||
TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
|
TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1
|
||||||
TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
|
TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8
|
||||||
OPENTTD.GRF = 066f0ce5500e0e8f5332aee42e2451a2
|
OPENTTD.GRF = 245e2125cecfe7e0b6c5e85d32459f86
|
||||||
|
|
||||||
[origin]
|
[origin]
|
||||||
default = You can find it on your Transport Tycoon Deluxe CD-ROM.
|
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)
|
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)
|
- 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: 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: 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: 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: 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: Crash when clicking a removed company in the vehicle list dropdowns [FS#4592] (r22373)
|
||||||
- Fix: Keep better accounting of the order in which clients joined; client cannot be starved from joining and they get shown the amount of clients waiting in front of them (r22372, r22370, r22369, r22368, r22367, r22366, r22365, r22364, r22363, r22362, r22361)
|
- Fix: 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"
|
cxxflags="$cxxflags -std=gnu++0x"
|
||||||
fi
|
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
|
if [ "$enable_lto" != "0" ]; then
|
||||||
# GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}'
|
# GCC 4.5 outputs '%{flto}', GCC 4.6 outputs '%{flto*}'
|
||||||
has_lto=`$1 -dumpspecs | grep '\%{flto'`
|
has_lto=`$1 -dumpspecs | grep '\%{flto'`
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
OpenTTD's known bugs
|
OpenTTD's known bugs
|
||||||
Last updated: 2011-05-15
|
Last updated: 2011-11-20
|
||||||
Release version: 1.1.1-RC1
|
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
|
we only apply bug fixes provided by the community but we are unable to fix
|
||||||
these bugs ourselves.
|
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
|
- 4594 [Windows] Minimizing the windows when a modal error message is
|
||||||
shown makes it difficult to exit the game
|
shown makes it difficult to exit the game
|
||||||
- 4420 [OSX] OS' mouse pointer still shows
|
- 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'
|
default we are not able to detect this failure, except when Windows'
|
||||||
music initialisation function returns after several hours and then
|
music initialisation function returns after several hours and then
|
||||||
there is no point in switching the music driver anymore.
|
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
|
described in the "Long delay between switching music/song" section
|
||||||
of this document.
|
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
|
debugging output. Compiling OpenTTD with the --enable-console
|
||||||
configure option prevents this issue and allows the -d option to use
|
configure option prevents this issue and allows the -d option to use
|
||||||
the MSYS console for its output.
|
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.
|
// 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/>.
|
// 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 * 3 05 12 08
|
||||||
-1 sprites/aqueduct.png 34 8 09 33 64 -34 -10
|
-1 sprites/aqueduct.png 34 8 09 32 61 -30 -9
|
||||||
-1 sprites/aqueduct.png 114 8 09 33 66 -37 -9
|
-1 sprites/aqueduct.png 114 8 09 31 62 -29 -9
|
||||||
-1 sprites/aqueduct.png 194 8 09 33 64 -34 -10
|
-1 sprites/aqueduct.png 194 8 09 32 61 -30 -9
|
||||||
-1 sprites/aqueduct.png 274 8 09 33 66 -37 -9
|
-1 sprites/aqueduct.png 274 8 09 31 62 -29 -9
|
||||||
-1 sprites/aqueduct.png 354 8 09 33 64 -34 -5
|
-1 sprites/aqueduct.png 354 8 09 32 61 -30 -4
|
||||||
-1 sprites/aqueduct.png 434 8 09 33 66 -37 -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 514 8 09 23 33 -31 0
|
||||||
-1 sprites/aqueduct.png 562 8 09 23 33 0 1
|
-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.
|
// 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/>.
|
// 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 * 3 05 08 41
|
||||||
-1 sprites/canals.png 66 8 09 23 64 -31 0
|
// Canal slopes
|
||||||
-1 sprites/canals.png 146 8 09 39 64 -31 -8
|
-1 sprites/canal_locks.png 66 8 09 23 64 -31 0
|
||||||
-1 sprites/canals.png 226 8 09 23 64 -31 0
|
-1 sprites/canal_locks.png 146 8 09 39 64 -31 -8
|
||||||
-1 sprites/canals.png 306 8 09 39 64 -31 -8
|
-1 sprites/canal_locks.png 226 8 09 23 64 -31 0
|
||||||
-1 sprites/canals.png 386 8 09 59 64 -31 -36
|
-1 sprites/canal_locks.png 306 8 09 39 64 -31 -8
|
||||||
-1 sprites/canals.png 466 8 09 65 64 -31 -34
|
// Lock sides
|
||||||
-1 sprites/canals.png 546 8 09 59 64 -31 -36
|
-1 sprites/canal_locks.png 386 8 09 59 64 -31 -36
|
||||||
-1 sprites/canals.png 626 8 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 466 8 09 65 64 -31 -34
|
||||||
-1 sprites/canals.png 706 8 09 62 64 -1 -51
|
-1 sprites/canal_locks.png 546 8 09 59 64 -31 -36
|
||||||
-1 sprites/canals.png 2 88 09 62 64 -61 -43
|
-1 sprites/canal_locks.png 626 8 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 82 88 09 62 64 -61 -51
|
-1 sprites/canal_locks.png 706 8 09 62 64 -1 -51
|
||||||
-1 sprites/canals.png 162 88 09 62 64 -1 -43
|
-1 sprites/canal_locks.png 2 88 09 62 64 -61 -43
|
||||||
-1 sprites/canals.png 242 88 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 82 88 09 62 64 -61 -51
|
||||||
-1 sprites/canals.png 322 88 09 65 66 -33 -34
|
-1 sprites/canal_locks.png 162 88 09 62 64 -1 -43
|
||||||
-1 sprites/canals.png 402 88 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 242 88 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 482 88 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 322 88 09 65 66 -33 -34
|
||||||
-1 sprites/canals.png 562 88 09 62 64 -1 -43
|
-1 sprites/canal_locks.png 402 88 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 642 88 09 60 64 -61 -43
|
-1 sprites/canal_locks.png 482 88 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 722 88 09 62 66 -61 -43
|
-1 sprites/canal_locks.png 562 88 09 62 64 -1 -43
|
||||||
-1 sprites/canals.png 2 168 09 60 64 -1 -43
|
-1 sprites/canal_locks.png 642 88 09 60 64 -61 -43
|
||||||
-1 sprites/canals.png 82 168 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 722 88 09 62 66 -61 -43
|
||||||
-1 sprites/canals.png 162 168 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 2 168 09 60 64 -1 -43
|
||||||
-1 sprites/canals.png 242 168 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 82 168 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 322 168 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 162 168 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 402 168 09 60 64 -1 -43
|
-1 sprites/canal_locks.png 242 168 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 482 168 09 62 68 -61 -43
|
-1 sprites/canal_locks.png 322 168 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 562 168 09 60 64 -61 -43
|
-1 sprites/canal_locks.png 402 168 09 60 64 -1 -43
|
||||||
-1 sprites/canals.png 642 168 09 62 64 -1 -43
|
-1 sprites/canal_locks.png 482 168 09 62 68 -61 -43
|
||||||
-1 sprites/canals.png 722 168 09 59 64 -31 -36
|
-1 sprites/canal_locks.png 562 168 09 60 64 -61 -43
|
||||||
-1 sprites/canals.png 2 248 09 65 64 -31 -34
|
-1 sprites/canal_locks.png 642 168 09 62 64 -1 -43
|
||||||
-1 sprites/canals.png 82 248 09 59 64 -31 -36
|
-1 sprites/canal_locks.png 722 168 09 59 64 -31 -36
|
||||||
-1 sprites/canals.png 162 248 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 2 248 09 65 64 -31 -34
|
||||||
-1 sprites/canals.png 242 248 09 62 64 -1 -51
|
-1 sprites/canal_locks.png 82 248 09 59 64 -31 -36
|
||||||
-1 sprites/canals.png 322 248 09 62 64 -61 -43
|
-1 sprites/canal_locks.png 162 248 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 402 248 09 62 64 -61 -51
|
-1 sprites/canal_locks.png 242 248 09 62 64 -1 -51
|
||||||
-1 sprites/canals.png 482 248 09 62 64 -1 -43
|
-1 sprites/canal_locks.png 322 248 09 62 64 -61 -43
|
||||||
-1 sprites/canals.png 562 248 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 402 248 09 62 64 -61 -51
|
||||||
-1 sprites/canals.png 642 248 09 65 66 -33 -34
|
-1 sprites/canal_locks.png 482 248 09 62 64 -1 -43
|
||||||
-1 sprites/canals.png 722 248 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 562 248 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 2 328 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 642 248 09 65 66 -33 -34
|
||||||
-1 sprites/canals.png 82 328 09 62 64 -1 -43
|
-1 sprites/canal_locks.png 722 248 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 162 328 09 60 64 -61 -43
|
-1 sprites/canal_locks.png 2 328 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 242 328 09 62 66 -61 -43
|
-1 sprites/canal_locks.png 82 328 09 62 64 -1 -43
|
||||||
-1 sprites/canals.png 322 328 09 60 64 -1 -43
|
-1 sprites/canal_locks.png 162 328 09 60 64 -61 -43
|
||||||
-1 sprites/canals.png 402 328 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 242 328 09 62 66 -61 -43
|
||||||
-1 sprites/canals.png 482 328 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 322 328 09 60 64 -1 -43
|
||||||
-1 sprites/canals.png 562 328 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 402 328 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 642 328 09 59 64 -31 -28
|
-1 sprites/canal_locks.png 482 328 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 722 328 09 60 64 -1 -43
|
-1 sprites/canal_locks.png 562 328 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 2 408 09 62 68 -61 -43
|
-1 sprites/canal_locks.png 642 328 09 59 64 -31 -28
|
||||||
-1 sprites/canals.png 82 408 09 60 64 -61 -43
|
-1 sprites/canal_locks.png 722 328 09 60 64 -1 -43
|
||||||
-1 sprites/canals.png 162 408 09 62 64 -1 -43
|
-1 sprites/canal_locks.png 2 408 09 62 68 -61 -43
|
||||||
-1 sprites/canals.png 242 408 09 37 70 -31 -6
|
-1 sprites/canal_locks.png 82 408 09 60 64 -61 -43
|
||||||
-1 sprites/canals.png 322 408 09 37 70 -31 0
|
-1 sprites/canal_locks.png 162 408 09 62 64 -1 -43
|
||||||
-1 sprites/canals.png 402 408 09 37 70 -37 0
|
// Canal edges (temperate)
|
||||||
-1 sprites/canals.png 482 408 09 37 70 -37 -6
|
-1 sprites/canals.png 30 10 09 22 45 -11 -1
|
||||||
-1 sprites/canals.png 562 408 09 31 64 -31 0
|
-1 sprites/canals.png 94 10 09 21 41 -8 10
|
||||||
-1 sprites/canals.png 642 408 09 31 64 -31 0
|
-1 sprites/canals.png 142 10 09 21 42 -31 10
|
||||||
-1 sprites/canals.png 722 408 09 31 64 -31 0
|
-1 sprites/canals.png 190 10 09 22 43 -31 -1
|
||||||
-1 sprites/canals.png 2 488 09 37 64 -31 -6
|
-1 sprites/canals.png 238 10 09 22 22 11 4
|
||||||
-1 sprites/canals.png 82 488 09 31 64 -31 0
|
-1 sprites/canals.png 270 10 09 16 24 -11 15
|
||||||
-1 sprites/canals.png 162 488 09 31 64 -31 0
|
-1 sprites/canals.png 302 10 09 23 23 -31 4
|
||||||
-1 sprites/canals.png 242 488 09 31 64 -31 0
|
-1 sprites/canals.png 334 10 09 18 24 -11 -1
|
||||||
-1 sprites/canals.png 322 488 09 37 64 -31 -6
|
-1 sprites/canals.png 366 10 09 11 12 21 10
|
||||||
-1 sprites/canals.png 402 488 09 20 20 0 0
|
-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.
|
// 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/>.
|
// 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 * 0 0C "Fixing (alignment) bugs in the original graphics. By Addi and PaulC."
|
||||||
-1 * 6 07 83 01 \7= 03 69
|
-1 * 6 07 83 01 \7= 03 7D
|
||||||
// Different graphics for same wood truck
|
// Different graphics for same wood truck
|
||||||
-1 * 14 0A 04 01 87 0C 01 89 0C 01 07 0E 01 09 0E
|
-1 * 14 0A 04 01 87 0C 01 89 0C 01 07 0E 01 09 0E
|
||||||
-1 sprites/fix_graphics.png 82 8 09 16 22 -6 -7
|
-1 sprites/fix_graphics.png 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 370 72 09 35 48 -23 -7
|
||||||
-1 sprites/fix_graphics.png 434 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
|
-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
|
// Improperly cut cinema
|
||||||
-1 * 5 0A 01 02 34 11
|
-1 * 5 0A 01 02 34 11
|
||||||
-1 sprites/fix_graphics.png 578 72 09 31 64 -31 0
|
-1 sprites/fix_graphics.png 578 72 09 31 64 -31 0
|
||||||
@@ -198,3 +203,132 @@
|
|||||||
// GUI sprite
|
// GUI sprite
|
||||||
-1 * 5 0A 01 01 \w2600
|
-1 * 5 0A 01 01 \w2600
|
||||||
-1 sprites/fix_graphics.png 433 298 09 15 40 0 5
|
-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
|
"David Dallaston: tram tracks" 0D
|
||||||
"Jonathan G. Rennison: aqueducts" 0D
|
"Jonathan G. Rennison: aqueducts" 0D
|
||||||
"Bilbo, Jasper Vries: font" 0D
|
"Bilbo, Jasper Vries: font" 0D
|
||||||
|
"Andrew Parkhouse: rivers" 0D
|
||||||
"OpenTTD developers: other graphics" 00
|
"OpenTTD developers: other graphics" 00
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -104,3 +105,8 @@
|
|||||||
#include "chars.nfo"
|
#include "chars.nfo"
|
||||||
#include "overrides.nfo"
|
#include "overrides.nfo"
|
||||||
#include "fix_graphics.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
|
openttd (1.1.1~RC1) unstable; urgency=low
|
||||||
|
|
||||||
* New upstream release 1.1.1-RC1
|
* New upstream release 1.1.1-RC1
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
set OPENTTD_VERSION=1.1.1-RC1
|
set OPENTTD_VERSION=1.1.4-RC1
|
||||||
set OPENSFX_VERSION=0.8.0
|
set OPENSFX_VERSION=0.8.0
|
||||||
set NOSOUND_VERSION=0.8.0
|
set NOSOUND_VERSION=0.8.0
|
||||||
set OPENGFX_VERSION=0.7.0
|
set OPENGFX_VERSION=0.7.0
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
%define binname openttd
|
%define binname openttd
|
||||||
|
|
||||||
%define srcver 1.1.1
|
%define srcver 1.1.4
|
||||||
|
|
||||||
%if %{dedicated}
|
%if %{dedicated}
|
||||||
Name: %{binname}-dedicated
|
Name: %{binname}-dedicated
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
# Version numbers to update
|
# Version numbers to update
|
||||||
!define APPV_MAJOR 1
|
!define APPV_MAJOR 1
|
||||||
!define APPV_MINOR 1
|
!define APPV_MINOR 1
|
||||||
!define APPV_MAINT 1
|
!define APPV_MAINT 4
|
||||||
!define APPV_BUILD 0
|
!define APPV_BUILD 0
|
||||||
!define APPV_EXTRA "-RC1"
|
!define APPV_EXTRA "-RC1"
|
||||||
|
|
||||||
@@ -57,6 +57,7 @@ Var CDDRIVE
|
|||||||
; Modern interface settings
|
; Modern interface settings
|
||||||
!include "MUI2.nsh"
|
!include "MUI2.nsh"
|
||||||
!include "InstallOptions.nsh"
|
!include "InstallOptions.nsh"
|
||||||
|
!include "WinVer.nsh"
|
||||||
|
|
||||||
!define MUI_ABORTWARNING
|
!define MUI_ABORTWARNING
|
||||||
!define MUI_WELCOMEPAGE_TITLE_3LINES
|
!define MUI_WELCOMEPAGE_TITLE_3LINES
|
||||||
@@ -518,17 +519,17 @@ hasCD:
|
|||||||
FunctionEnd
|
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
|
Function GetWindowsVersion
|
||||||
ClearErrors
|
ClearErrors
|
||||||
StrCpy $R0 "winnt"
|
|
||||||
|
|
||||||
GetVersion::WindowsPlatformId
|
|
||||||
Pop $R0
|
|
||||||
IntCmp $R0 2 WinNT 0
|
|
||||||
StrCpy $R0 "win9x"
|
StrCpy $R0 "win9x"
|
||||||
WinNT:
|
${If} ${IsNT}
|
||||||
ClearErrors
|
${If} ${IsWinXP}
|
||||||
|
${AndIf} ${AtLeastServicePack} 3
|
||||||
|
${OrIf} ${AtLeastWin2003}
|
||||||
|
StrCpy $R0 "winnt"
|
||||||
|
${EndIf}
|
||||||
|
${EndIf}
|
||||||
Push $R0
|
Push $R0
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
@@ -540,12 +541,12 @@ Function CheckProcessorArchitecture
|
|||||||
IntCmp $R0 64 Win64 0
|
IntCmp $R0 64 Win64 0
|
||||||
ClearErrors
|
ClearErrors
|
||||||
IntCmp ${APPBITS} 64 0 Done
|
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
|
GoTo Done
|
||||||
Win64:
|
Win64:
|
||||||
ClearErrors
|
ClearErrors
|
||||||
IntCmp ${APPBITS} 64 Done 0
|
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
|
GoTo Done
|
||||||
Abort:
|
Abort:
|
||||||
Quit
|
Quit
|
||||||
@@ -560,12 +561,12 @@ Function CheckWindowsVersion
|
|||||||
StrCmp $R0 "win9x" 0 WinNT
|
StrCmp $R0 "win9x" 0 WinNT
|
||||||
ClearErrors
|
ClearErrors
|
||||||
StrCmp ${APPARCH} "win9x" Done 0
|
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
|
GoTo Done
|
||||||
WinNT:
|
WinNT:
|
||||||
ClearErrors
|
ClearErrors
|
||||||
StrCmp ${APPARCH} "win9x" 0 Done
|
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:
|
Abort:
|
||||||
Quit
|
Quit
|
||||||
Done:
|
Done:
|
||||||
@@ -674,8 +675,7 @@ WelcomeToSetup:
|
|||||||
ReadRegStr $OLDVERSION HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayVersion"
|
ReadRegStr $OLDVERSION HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "DisplayVersion"
|
||||||
; Gets the older version then displays it in a message box
|
; Gets the older version then displays it in a message box
|
||||||
MessageBox MB_OK|MB_ICONINFORMATION \
|
MessageBox MB_OK|MB_ICONINFORMATION \
|
||||||
"Welcome to ${APPNAMEANDVERSION} Setup.$\n \
|
"Welcome to ${APPNAMEANDVERSION} Setup.$\nThis will allow you to upgrade from version $OLDVERSION."
|
||||||
This will allow you to upgrade from version $OLDVERSION."
|
|
||||||
SectionSetFlags ${Section2} 0x80 ; set bit 7
|
SectionSetFlags ${Section2} 0x80 ; set bit 7
|
||||||
SectionSetFlags ${Section3} 0x80 ; set bit 7
|
SectionSetFlags ${Section3} 0x80 ; set bit 7
|
||||||
SectionSetFlags ${Section4} 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"
|
ReadRegStr $UninstallString HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenTTD" "UninstallString"
|
||||||
IfFileExists "$UninstallString" "" FinishCallback
|
IfFileExists "$UninstallString" "" FinishCallback
|
||||||
MessageBox MB_YESNO|MB_ICONQUESTION \
|
MessageBox MB_YESNO|MB_ICONQUESTION \
|
||||||
"Setup detected ${APPNAMEANDVERSION} on your system. This is the same version that this program will install.$\n \
|
"Setup detected ${APPNAMEANDVERSION} on your system. This is the same version that this program will install.$\nAre you trying to uninstall it?" \
|
||||||
Are you trying to uninstall it?" \
|
|
||||||
IDYES DoUninstall IDNO FinishCallback
|
IDYES DoUninstall IDNO FinishCallback
|
||||||
DoUninstall: ; You have the same version as this installer. This allows you to uninstall.
|
DoUninstall: ; You have the same version as this installer. This allows you to uninstall.
|
||||||
Exec "$UninstallString"
|
Exec "$UninstallString"
|
||||||
@@ -695,8 +694,7 @@ DoUninstall: ; You have the same version as this installer. This allows you to
|
|||||||
|
|
||||||
InstallerIsOlder:
|
InstallerIsOlder:
|
||||||
MessageBox MB_OK|MB_ICONSTOP \
|
MessageBox MB_OK|MB_ICONSTOP \
|
||||||
"You have a newer version of ${APPNAME}.$\n \
|
"You have a newer version of ${APPNAME}.$\nSetup will now exit."
|
||||||
Setup will now exit."
|
|
||||||
Quit
|
Quit
|
||||||
|
|
||||||
FinishCallback:
|
FinishCallback:
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
!define APPBITS 32 ; Define number of bits for the architecture
|
!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 APPARCH "win32" ; Define the application architecture
|
||||||
!define BINARY_DIR "${PATH_ROOT}objs\win32\Release"
|
!define BINARY_DIR "${PATH_ROOT}objs\win32\Release"
|
||||||
InstallDir "$PROGRAMFILES32\OpenTTD\"
|
InstallDir "$PROGRAMFILES32\OpenTTD\"
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
!define APPBITS 32 ; Define number of bits for the architecture
|
!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 APPARCH "win9x" ; Define the application architecture
|
||||||
!define BINARY_DIR "${PATH_ROOT}bin"
|
!define BINARY_DIR "${PATH_ROOT}bin"
|
||||||
InstallDir "$PROGRAMFILES32\OpenTTD\"
|
InstallDir "$PROGRAMFILES32\OpenTTD\"
|
||||||
|
153
readme.txt
@@ -1,6 +1,6 @@
|
|||||||
OpenTTD readme
|
OpenTTD readme
|
||||||
Last updated: 2011-05-15
|
Last updated: 2011-11-20
|
||||||
Release version: 1.1.1-RC1
|
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
|
4.2) OpenTTD directories
|
||||||
---- -------------------
|
---- -------------------
|
||||||
The required 3rd party files listed in the section 4.1 "(Required) 3rd party files"
|
OpenTTD uses its own directory to store its required 3rd party base set files (see section
|
||||||
as well as other non-compulsory extensions (NewGRFs, AI, heightmaps, scenarios) can be
|
4.1 "Required 3rd party files") and non-compulsory extension and configuration files. See
|
||||||
placed in a few different locations:
|
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)
|
1. The current working directory (from where you started OpenTTD)
|
||||||
For non-Windows operating systems OpenTTD will not scan for files in this
|
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
|
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)
|
5. The installation directory (Linux only)
|
||||||
Linux: /usr/share/games/openttd
|
Linux: /usr/share/games/openttd
|
||||||
6. The application bundle (Mac OSX only)
|
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:
|
Notes:
|
||||||
- Linux in the previous list means .deb, but most paths should be similar for others.
|
- 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
|
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
|
.INI format. It's mostly undocumented. Almost all settings can be changed
|
||||||
ingame by using the 'Advanced Settings' window.
|
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
|
described in section 4.2. If you do not have an openttd.cfg OpenTTD will
|
||||||
create one after closing.
|
create one after closing.
|
||||||
|
|
||||||
@@ -419,7 +441,8 @@ DOS:
|
|||||||
---- ---------------------------
|
---- ---------------------------
|
||||||
The following libraries are used by OpenTTD for:
|
The following libraries are used by OpenTTD for:
|
||||||
- libSDL/liballegro: hardware access (video, sound, mouse)
|
- 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
|
- liblzo2: (de)compressing of old (pre 0.3.0) savegames
|
||||||
- liblzma: (de)compressing of savegames (1.1.0 and later)
|
- liblzma: (de)compressing of savegames (1.1.0 and later)
|
||||||
- libpng: making screenshots and loading heightmaps
|
- 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.
|
Version 2005 gives bogus warnings about scoping issues.
|
||||||
- GNU Compiler Collection (GCC) 3.3 - 4.7.
|
- GNU Compiler Collection (GCC) 3.3 - 4.7.
|
||||||
Versions 4.1 and earlier give bogus warnings about uninitialised variables.
|
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.
|
- Intel C++ Compiler (ICC) 12.0.
|
||||||
|
|
||||||
The following compilers are known not to compile OpenTTD:
|
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.
|
- GNU Compiler Collection (GCC) 3.2 and earlier.
|
||||||
These old versions fail due to OpenTTD's template usage.
|
These old versions fail due to OpenTTD's template usage.
|
||||||
- Intel C++ Compiler (ICC) 11.1 and earlier.
|
- 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 10.1 fails to compile station_gui.cpp.
|
||||||
Version 11.1 fails with internal error when compiling network.cpp.
|
Version 11.1 fails with internal error when compiling network.cpp.
|
||||||
- Clang/LLVM 2.8 and earlier.
|
- 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
|
fail to start. Perhaps this is for the better because those OSes are not known
|
||||||
for their stability.
|
for their stability.
|
||||||
|
|
||||||
With the added support for font-based text selecting a non-latin language will
|
With the added support for font-based text selecting a non-latin language can
|
||||||
result in garbage (lots of '?') shown on screen. Please open your configuration
|
result in lots of question marks ('?') being shown on screen. Please open your
|
||||||
file and add a desired font for small/medium/-and large_font. This can be a font
|
configuration file (openttd.cfg - see Section 4.2 for where to find it)
|
||||||
name like "Tahoma" or a path to a font.
|
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
|
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
|
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)
|
can be viewed in the NewGRF window accessible from the file load dialogue window.
|
||||||
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.
|
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
|
X.X) Credits
|
||||||
---- -------
|
---- -------
|
||||||
The OpenTTD team (in alphabetical order):
|
The OpenTTD team (in alphabetical order):
|
||||||
Albert Hofkamp (Alberth) - GUI expert
|
Albert Hofkamp (Alberth) - GUI expert
|
||||||
Jean-François Claeys (Belugas) - GUI, newindustries and more
|
Jean-François Claeys (Belugas) - GUI, newindustries and more
|
||||||
Matthijs Kooijman (blathijs) - Pathfinder-guru, pool rework
|
Matthijs Kooijman (blathijs) - Pathfinder-guru, pool rework
|
||||||
Christoph Elsenhans (frosch) - General coding
|
Christoph Elsenhans (frosch) - General coding
|
||||||
Loïc Guilloux (glx) - Windows Expert
|
Loïc Guilloux (glx) - Windows Expert
|
||||||
Michael Lutz (michi_cc) - Path based signals
|
Michael Lutz (michi_cc) - Path based signals
|
||||||
Owen Rudge (orudge) - Forum host, OS/2 port
|
Owen Rudge (orudge) - Forum host, OS/2 port
|
||||||
Peter Nelson (peter1138) - Spiritual descendant from newGRF gods
|
Peter Nelson (peter1138) - Spiritual descendant from newGRF gods
|
||||||
Ingo von Borstel (planetmaker) - Support
|
Ingo von Borstel (planetmaker) - Support
|
||||||
Remko Bijker (Rubidium) - Lead coder and way more
|
Remko Bijker (Rubidium) - Lead coder and way more
|
||||||
Zdeněk Sojka (SmatZ) - Bug finder and fixer
|
Zdeněk Sojka (SmatZ) - Bug finder and fixer
|
||||||
José Soler (Terkhen) - General coding
|
José Soler (Terkhen) - General coding
|
||||||
Thijs Marinussen (Yexo) - AI Framework
|
Thijs Marinussen (Yexo) - AI Framework
|
||||||
|
|
||||||
Inactive Developers:
|
Inactive Developers:
|
||||||
Bjarni Corfitzen (Bjarni) - MacOSX port, coder and vehicles
|
Bjarni Corfitzen (Bjarni) - MacOSX port, coder and vehicles
|
||||||
Victor Fischer (Celestar) - Programming everywhere you need him to
|
Victor Fischer (Celestar) - Programming everywhere you need him to
|
||||||
Tamás Faragó (Darkvater) - Ex-Lead coder
|
Tamás Faragó (Darkvater) - Ex-Lead coder
|
||||||
Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;)
|
Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;)
|
||||||
Jonathan Coome (Maedhros) - High priest of the NewGRF Temple
|
Jonathan Coome (Maedhros) - High priest of the NewGRF Temple
|
||||||
Attila Bán (MiHaMiX) - WebTranslator 1 and 2
|
Attila Bán (MiHaMiX) - WebTranslator 1 and 2
|
||||||
Christoph Mallon (Tron) - Programmer, code correctness police
|
Christoph Mallon (Tron) - Programmer, code correctness police
|
||||||
|
|
||||||
Retired Developers:
|
Retired Developers:
|
||||||
Ludvig Strigeus (ludde) - OpenTTD author, main coder (0.1 - 0.3.3)
|
Ludvig Strigeus (ludde) - OpenTTD author, main coder (0.1 - 0.3.3)
|
||||||
Serge Paquet (vurlix) - Assistant project manager, 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)
|
Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3.0 - 0.3.6)
|
||||||
Benedikt Brüggemeier (skidd13) - Bug fixer and code reworker
|
Benedikt Brüggemeier (skidd13) - Bug fixer and code reworker
|
||||||
Patric Stout (TrueLight) - Programmer (0.3 - pre0.7), sys op (active)
|
Patric Stout (TrueLight) - Programmer (0.3 - pre0.7), sys op (active)
|
||||||
|
|
||||||
Thanks to:
|
Thanks to:
|
||||||
Josef Drexler - For his great work on TTDPatch.
|
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)
|
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.
|
Petr Baudiš (pasky) - Many patches, newgrf support, etc.
|
||||||
Simon Sasburg (HackyKid) - For the many bugfixes he has blessed us with
|
Simon Sasburg (HackyKid) - For the many bugfixes he has blessed us with
|
||||||
Stefan Meißner (sign_de) - For his work on the console
|
Stefan Meißner (sign_de) - For his work on the console
|
||||||
Mike Ragsdale - OpenTTD installer
|
Mike Ragsdale - OpenTTD installer
|
||||||
Cian Duffy (MYOB) - BeOS port / manual writing
|
Cian Duffy (MYOB) - BeOS port / manual writing
|
||||||
Christian Rosentreter (tokai) - MorphOS / AmigaOS port
|
Christian Rosentreter (tokai) - MorphOS / AmigaOS port
|
||||||
Richard Kempton (RichK67) - Additional airports, initial TGP implementation
|
Richard Kempton (RichK67) - Additional airports, initial TGP implementation
|
||||||
Alberto Demichelis - Squirrel scripting language
|
Alberto Demichelis - Squirrel scripting language
|
||||||
L. Peter Deutsch - MD5 implementation
|
L. Peter Deutsch - MD5 implementation
|
||||||
Michael Blunck - For revolutionizing TTD with awesome graphics
|
Michael Blunck - For revolutionizing TTD with awesome graphics
|
||||||
George - Canal graphics
|
George - Canal graphics
|
||||||
David Dallaston (Pikka) - Tram tracks
|
Andrew Parkhouse (andythenorth) - River graphics
|
||||||
All Translators - For their support to make OpenTTD a truly international game
|
David Dallaston (Pikka) - Tram tracks
|
||||||
Bug Reporters - Thanks for all bug reports
|
All Translators - For their support to make OpenTTD a truly international game
|
||||||
Chris Sawyer - For an amazing 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 __int64 SQInteger;
|
||||||
typedef unsigned __int64 SQUnsignedInteger;
|
typedef unsigned __int64 SQUnsignedInteger;
|
||||||
typedef unsigned __int64 SQHash; /*should be the same size of a pointer*/
|
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
|
#else
|
||||||
typedef long SQInteger;
|
typedef long SQInteger;
|
||||||
typedef unsigned long SQUnsignedInteger;
|
typedef unsigned long SQUnsignedInteger;
|
||||||
@@ -77,6 +81,8 @@ typedef float SQFloat;
|
|||||||
#if defined(SQUSEDOUBLE) && !defined(_SQ64)
|
#if defined(SQUSEDOUBLE) && !defined(_SQ64)
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
typedef __int64 SQRawObjectVal; //must be 64bits
|
typedef __int64 SQRawObjectVal; //must be 64bits
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
typedef long long SQRawObjectVal; //must be 64bits
|
||||||
#else
|
#else
|
||||||
typedef long SQRawObjectVal; //must be 64bits
|
typedef long SQRawObjectVal; //must be 64bits
|
||||||
#endif
|
#endif
|
||||||
|
57
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
@@ -1,6 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
see copyright notice in squirrel.h
|
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 "sqpcheader.h"
|
||||||
#include "sqvm.h"
|
#include "sqvm.h"
|
||||||
#include "sqstring.h"
|
#include "sqstring.h"
|
||||||
@@ -484,7 +487,7 @@ static SQInteger array_resize(HSQUIRRELVM v)
|
|||||||
|
|
||||||
|
|
||||||
//QSORT ala Sedgewick
|
//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(func < 0) {
|
||||||
if(!v->ObjCmp(a,b,ret)) return false;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
//QSORT ala Sedgewick
|
struct qsort_cmp
|
||||||
bool _qsort(HSQUIRRELVM v,SQObjectPtr &arr, SQInteger l, SQInteger r,SQInteger func)
|
|
||||||
{
|
{
|
||||||
SQInteger i, j;
|
HSQUIRRELVM v;
|
||||||
SQArray *a=_array(arr);
|
SQInteger func;
|
||||||
SQObjectPtr pivot,t;
|
bool operator() (const SQObjectPtr &a, const SQObjectPtr &b) const
|
||||||
if( l < r ){
|
{
|
||||||
pivot = a->_values[l];
|
SQInteger res;
|
||||||
i = l; j = r+1;
|
SQObjectPtr dummy;
|
||||||
while(1){
|
if (!_qsort_compare(v, dummy, a, b, func, res)) return false;
|
||||||
SQInteger ret;
|
return res < 0;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -550,7 +539,7 @@ static SQInteger array_sort(HSQUIRRELVM v)
|
|||||||
SQObject &funcobj = stack_get(v,2);
|
SQObject &funcobj = stack_get(v,2);
|
||||||
if(_array(o)->Size() > 1) {
|
if(_array(o)->Size() > 1) {
|
||||||
if(type(funcobj) == OT_CLOSURE || type(funcobj) == OT_NATIVECLOSURE) func = 2;
|
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;
|
return SQ_ERROR;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -75,9 +75,9 @@ AIInfo *AIConfig::GetInfo() const
|
|||||||
return this->info;
|
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;
|
return this->info != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -57,10 +57,12 @@ public:
|
|||||||
/**
|
/**
|
||||||
* When ever the AI Scanner is reloaded, all infos become invalid. This
|
* When ever the AI Scanner is reloaded, all infos become invalid. This
|
||||||
* function tells AIConfig about 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
|
* @return \c true if the reset was successful, \c false if the AI was no longer
|
||||||
* found.
|
* found.
|
||||||
*/
|
*/
|
||||||
bool ResetInfo();
|
bool ResetInfo(bool force_exact_match);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the AIInfo linked to this AIConfig.
|
* Get the AIInfo linked to this AIConfig.
|
||||||
|
@@ -170,13 +170,24 @@
|
|||||||
* a random new AI on reload). */
|
* a random new AI on reload). */
|
||||||
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
|
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] != 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());
|
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);
|
_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] != 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());
|
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);
|
_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) */
|
/* One of the arrows is clicked (or green/red rect in case of bool value) */
|
||||||
if (IsInsideMM(x, 0, 21)) {
|
if (IsInsideMM(x, 0, 21)) {
|
||||||
int new_val = this->ai_config->GetSetting(config_item.name);
|
int new_val = this->ai_config->GetSetting(config_item.name);
|
||||||
|
int old_val = new_val;
|
||||||
if (bool_item) {
|
if (bool_item) {
|
||||||
new_val = !new_val;
|
new_val = !new_val;
|
||||||
} else if (x >= 10) {
|
} else if (x >= 10) {
|
||||||
@@ -388,18 +389,19 @@ struct AISettingsWindow : public Window {
|
|||||||
this->clicked_increase = false;
|
this->clicked_increase = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->ai_config->SetSetting(config_item.name, new_val);
|
if (new_val != old_val) {
|
||||||
this->clicked_button = num;
|
this->ai_config->SetSetting(config_item.name, new_val);
|
||||||
this->timeout = 5;
|
this->clicked_button = num;
|
||||||
|
this->timeout = 5;
|
||||||
|
|
||||||
this->CheckDifficultyLevel();
|
this->CheckDifficultyLevel();
|
||||||
|
}
|
||||||
} else if (!bool_item) {
|
} else if (!bool_item) {
|
||||||
/* Display a query box so users can enter a custom value. */
|
/* Display a query box so users can enter a custom value. */
|
||||||
this->clicked_row = num;
|
this->clicked_row = num;
|
||||||
SetDParam(0, this->ai_config->GetSetting(config_item.name));
|
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);
|
ShowQueryString(STR_JUST_INT, STR_CONFIG_SETTING_QUERY_CAPTION, 10, 100, this, CS_NUMERAL, QSF_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1000,7 +1002,7 @@ struct AIDebugWindow : public QueryStringBaseWindow {
|
|||||||
switch (widget) {
|
switch (widget) {
|
||||||
case AID_WIDGET_RELOAD_TOGGLE:
|
case AID_WIDGET_RELOAD_TOGGLE:
|
||||||
/* First kill the company of the AI, then start a new one. This should start the current AI again */
|
/* 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);
|
DoCommandP(0, 1 | ai_debug_company << 16, 0, CMD_COMPANY_CTRL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@@ -206,7 +206,7 @@ EXPAND_ONLY_PREDEF = YES
|
|||||||
SEARCH_INCLUDES = YES
|
SEARCH_INCLUDES = YES
|
||||||
INCLUDE_PATH =
|
INCLUDE_PATH =
|
||||||
INCLUDE_FILE_PATTERNS =
|
INCLUDE_FILE_PATTERNS =
|
||||||
PREDEFINED = DOXYGEN_SKIP
|
PREDEFINED = DOXYGEN_AI_DOCS
|
||||||
EXPAND_AS_DEFINED = DEF_COMMAND
|
EXPAND_AS_DEFINED = DEF_COMMAND
|
||||||
SKIP_FUNCTION_MACROS = YES
|
SKIP_FUNCTION_MACROS = YES
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
|
@@ -131,7 +131,7 @@
|
|||||||
extern uint8 GetAirportNoiseLevelForTown(const AirportSpec *as, TileIndex town_tile, TileIndex tile);
|
extern uint8 GetAirportNoiseLevelForTown(const AirportSpec *as, TileIndex town_tile, TileIndex tile);
|
||||||
|
|
||||||
if (!::IsValidTile(tile)) return -1;
|
if (!::IsValidTile(tile)) return -1;
|
||||||
if (!IsValidAirportType(type)) return -1;
|
if (!IsAirportInformationAvailable(type)) return -1;
|
||||||
|
|
||||||
if (_settings_game.economy.station_noise_level) {
|
if (_settings_game.economy.station_noise_level) {
|
||||||
const AirportSpec *as = ::AirportSpec::Get(type);
|
const AirportSpec *as = ::AirportSpec::Get(type);
|
||||||
|
@@ -180,6 +180,7 @@ public:
|
|||||||
* built at this tile.
|
* built at this tile.
|
||||||
* @param tile The tile to check.
|
* @param tile The tile to check.
|
||||||
* @param type The AirportType to check.
|
* @param type The AirportType to check.
|
||||||
|
* @pre IsAirportInformationAvailable(type).
|
||||||
* @return The amount of noise added to the nearest town.
|
* @return The amount of noise added to the nearest town.
|
||||||
* @note The noise will be added to the town with TownID GetNearestTown(tile, type).
|
* @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);
|
static int32 GetMinLength(BridgeID bridge_id);
|
||||||
|
|
||||||
#ifndef DOXYGEN_SKIP
|
#ifndef DOXYGEN_AI_DOCS
|
||||||
/**
|
/**
|
||||||
* Internal function to help BuildBridge in case of road.
|
* 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
|
* functions may still be available if you return an older API version
|
||||||
* in GetAPIVersion() in info.nut.
|
* 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
|
* \b 1.1.1
|
||||||
*
|
*
|
||||||
* No changes
|
* No changes
|
||||||
|
@@ -278,7 +278,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
Money GetRunningCost();
|
Money GetRunningCost();
|
||||||
|
|
||||||
#ifdef DOXYGEN_SKIP
|
#ifdef DOXYGEN_AI_DOCS
|
||||||
/**
|
/**
|
||||||
* Get the type of the offered engine.
|
* Get the type of the offered engine.
|
||||||
* @return The type the engine has.
|
* @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. */
|
/** @file ai_info_docs.hpp Description of the functions an AI can/must provide in AIInfo. */
|
||||||
|
|
||||||
/* This file exists purely for doxygen purposes. */
|
/* 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.
|
* 'Abstract' class of the class AIs/AI libraries use to register themselves.
|
||||||
*
|
*
|
||||||
|
@@ -239,7 +239,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
void KeepList(AIList *list);
|
void KeepList(AIList *list);
|
||||||
|
|
||||||
#ifndef DOXYGEN_SKIP
|
#ifndef DOXYGEN_AI_DOCS
|
||||||
/**
|
/**
|
||||||
* Used for 'foreach()' and [] get from Squirrel.
|
* Used for 'foreach()' and [] get from Squirrel.
|
||||||
*/
|
*/
|
||||||
@@ -280,7 +280,7 @@ public:
|
|||||||
* list.Valuate(MyVal, 12);
|
* list.Valuate(MyVal, 12);
|
||||||
*/
|
*/
|
||||||
void Valuate(void *valuator_function, int params, ...);
|
void Valuate(void *valuator_function, int params, ...);
|
||||||
#endif /* DOXYGEN_SKIP */
|
#endif /* DOXYGEN_AI_DOCS */
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* AI_LIST_HPP */
|
#endif /* AI_LIST_HPP */
|
||||||
|
@@ -37,9 +37,9 @@
|
|||||||
AIObject::GetLogPointer() = new LogData();
|
AIObject::GetLogPointer() = new LogData();
|
||||||
LogData *log = (LogData *)AIObject::GetLogPointer();
|
LogData *log = (LogData *)AIObject::GetLogPointer();
|
||||||
|
|
||||||
log->lines = CallocT<char *>(80);
|
log->lines = CallocT<char *>(400);
|
||||||
log->type = CallocT<AILog::AILogType>(80);
|
log->type = CallocT<AILog::AILogType>(400);
|
||||||
log->count = 80;
|
log->count = 400;
|
||||||
log->pos = log->count - 1;
|
log->pos = log->count - 1;
|
||||||
log->used = 0;
|
log->used = 0;
|
||||||
}
|
}
|
||||||
|
@@ -37,6 +37,8 @@ typedef bool (AIModeProc)();
|
|||||||
class AIObject : public SimpleCountedObject {
|
class AIObject : public SimpleCountedObject {
|
||||||
friend void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2);
|
friend void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2);
|
||||||
friend class AIInstance;
|
friend class AIInstance;
|
||||||
|
friend class AIController;
|
||||||
|
#ifndef DOXYGEN_AI_DOCS
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Executes a raw DoCommand for the AI.
|
* Executes a raw DoCommand for the AI.
|
||||||
@@ -179,51 +181,45 @@ protected:
|
|||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Store the latest result of a DoCommand per company.
|
* 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.
|
* @param res The result of the last command.
|
||||||
*/
|
*/
|
||||||
static void SetLastCommandRes(bool res);
|
static void SetLastCommandRes(bool res);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store a new_vehicle_id per company.
|
* Store a new_vehicle_id per company.
|
||||||
* @note NEVER use this yourself in your AI!
|
|
||||||
* @param vehicle_id The new VehicleID.
|
* @param vehicle_id The new VehicleID.
|
||||||
*/
|
*/
|
||||||
static void SetNewVehicleID(VehicleID vehicle_id);
|
static void SetNewVehicleID(VehicleID vehicle_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store a new_sign_id per company.
|
* Store a new_sign_id per company.
|
||||||
* @note NEVER use this yourself in your AI!
|
|
||||||
* @param sign_id The new SignID.
|
* @param sign_id The new SignID.
|
||||||
*/
|
*/
|
||||||
static void SetNewSignID(SignID sign_id);
|
static void SetNewSignID(SignID sign_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store a new_tunnel_endtile per company.
|
* Store a new_tunnel_endtile per company.
|
||||||
* @note NEVER use this yourself in your AI!
|
|
||||||
* @param tile The new TileIndex.
|
* @param tile The new TileIndex.
|
||||||
*/
|
*/
|
||||||
static void SetNewTunnelEndtile(TileIndex tile);
|
static void SetNewTunnelEndtile(TileIndex tile);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store a new_group_id per company.
|
* Store a new_group_id per company.
|
||||||
* @note NEVER use this yourself in your AI!
|
|
||||||
* @param group_id The new GroupID.
|
* @param group_id The new GroupID.
|
||||||
*/
|
*/
|
||||||
static void SetNewGroupID(GroupID group_id);
|
static void SetNewGroupID(GroupID group_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store a allow_do_command per company.
|
* Store a allow_do_command per company.
|
||||||
* @note NEVER use this yourself in your AI!
|
|
||||||
* @param allow The new allow.
|
* @param allow The new allow.
|
||||||
*/
|
*/
|
||||||
static void SetAllowDoCommand(bool allow);
|
static void SetAllowDoCommand(bool allow);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the pointer to store log message in.
|
* Get the pointer to store log message in.
|
||||||
* @note NEVER use this yourself in your AI!
|
|
||||||
*/
|
*/
|
||||||
static void *&GetLogPointer();
|
static void *&GetLogPointer();
|
||||||
|
#endif /* DOXYGEN_AI_DOCS */
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* AI_OBJECT_HPP */
|
#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;
|
if (order_position == AIOrder::ORDER_INVALID) return NULL;
|
||||||
}
|
}
|
||||||
const Order *order = v->orders.list->GetFirstOrder();
|
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) {
|
while (order_position > 0) {
|
||||||
order_position = (AIOrder::OrderPosition)(order_position - 1);
|
order_position = (AIOrder::OrderPosition)(order_position - 1);
|
||||||
order = order->next;
|
order = order->next;
|
||||||
while (order->GetType() == OT_AUTOMATIC) order = order->next;
|
while (order->GetType() == OT_IMPLICIT) order = order->next;
|
||||||
}
|
}
|
||||||
return order;
|
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)
|
/* static */ bool AIOrder::IsGotoStationOrder(VehicleID vehicle_id, OrderPosition order_position)
|
||||||
{
|
{
|
||||||
if (!IsValidVehicleOrder(vehicle_id, order_position)) return false;
|
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 (order_position == ORDER_CURRENT) return false;
|
||||||
if (!IsValidVehicleOrder(vehicle_id, order_position)) 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;
|
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 (order_position == ORDER_CURRENT) return false;
|
||||||
if (!IsValidVehicleOrder(vehicle_id, order_position)) 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;
|
return order->GetType() == OT_DUMMY;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AIOrder::IsCurrentOrderPartOfOrderList(VehicleID vehicle_id)
|
/* 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;
|
if (GetOrderCount(vehicle_id) == 0) return false;
|
||||||
|
|
||||||
const Order *order = &::Vehicle::Get(vehicle_id)->current_order;
|
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;
|
int cur_order_pos = ::Vehicle::Get(vehicle_id)->cur_real_order_index;
|
||||||
const Order *order = ::Vehicle::Get(vehicle_id)->GetOrder(0);
|
const Order *order = ::Vehicle::Get(vehicle_id)->GetOrder(0);
|
||||||
if (order == NULL) return ORDER_INVALID;
|
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++) {
|
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;
|
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;
|
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)
|
/* 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)
|
/* 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, order_position != ORDER_CURRENT && IsConditionalOrder(vehicle_id, order_position));
|
||||||
EnforcePrecondition(false, condition >= OC_LOAD_PERCENTAGE && condition <= OC_UNCONDITIONALLY);
|
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)
|
/* 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, order_position != ORDER_CURRENT && IsConditionalOrder(vehicle_id, order_position));
|
||||||
EnforcePrecondition(false, compare >= CF_EQUALS && compare <= CF_IS_FALSE);
|
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)
|
/* 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);
|
EnforcePrecondition(false, value >= 0 && value < 2048);
|
||||||
if (GetOrderCondition(vehicle_id, order_position) == OC_MAX_SPEED) value = value * 10 / 16;
|
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)
|
/* 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, IsGotoStationOrder(vehicle_id, order_position));
|
||||||
EnforcePrecondition(false, stop_location >= STOPLOCATION_NEAR && stop_location <= STOPLOCATION_FAR);
|
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);
|
uint32 p2 = MOF_STOP_LOCATION | (stop_location << 4);
|
||||||
return AIObject::DoCommand(0, p1, p2, CMD_MODIFY_ORDER);
|
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, AIVehicle::IsValidVehicle(vehicle_id));
|
||||||
EnforcePrecondition(false, AreOrderFlagsValid(destination, order_flags));
|
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)
|
/* 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, AIVehicle::IsValidVehicle(vehicle_id));
|
||||||
EnforcePrecondition(false, IsValidVehicleOrder(vehicle_id, jump_to));
|
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)
|
/* 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);
|
if (order_position == ORDER_CURRENT) order_position = AIOrder::ResolveOrderPosition(vehicle_id, order_position);
|
||||||
|
|
||||||
EnforcePrecondition(false, AIVehicle::IsValidVehicle(vehicle_id));
|
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));
|
EnforcePrecondition(false, AreOrderFlagsValid(destination, order_flags));
|
||||||
|
|
||||||
Order order;
|
Order order;
|
||||||
@@ -437,7 +468,8 @@ static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition or
|
|||||||
|
|
||||||
order.SetNonStopType((OrderNonStopFlags)GB(order_flags, 0, 2));
|
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)
|
/* 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);
|
if (order_position == ORDER_CURRENT) order_position = AIOrder::ResolveOrderPosition(vehicle_id, order_position);
|
||||||
|
|
||||||
EnforcePrecondition(false, AIVehicle::IsValidVehicle(vehicle_id));
|
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 order;
|
||||||
order.MakeConditional(jump_to);
|
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)
|
/* 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));
|
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)
|
/* 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));
|
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));
|
EnforcePrecondition(false, AreOrderFlagsValid(GetOrderDestination(vehicle_id, order_position), order_flags));
|
||||||
|
|
||||||
const Order *order = ::ResolveOrder(vehicle_id, order_position);
|
const Order *order = ::ResolveOrder(vehicle_id, order_position);
|
||||||
|
int order_pos = AIOrderPositionToRealOrderPosition(vehicle_id, order_position);
|
||||||
|
|
||||||
AIOrderFlags current = GetOrderFlags(vehicle_id, order_position);
|
AIOrderFlags current = GetOrderFlags(vehicle_id, order_position);
|
||||||
|
|
||||||
EnforcePrecondition(false, (order_flags & AIOF_GOTO_NEAREST_DEPOT) == (current & AIOF_GOTO_NEAREST_DEPOT));
|
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)) {
|
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()) {
|
switch (order->GetType()) {
|
||||||
@@ -521,16 +558,16 @@ static void _DoCommandReturnSetOrderFlags(class AIInstance *instance)
|
|||||||
uint data = DA_ALWAYS_GO;
|
uint data = DA_ALWAYS_GO;
|
||||||
if (order_flags & AIOF_SERVICE_IF_NEEDED) data = DA_SERVICE;
|
if (order_flags & AIOF_SERVICE_IF_NEEDED) data = DA_SERVICE;
|
||||||
if (order_flags & AIOF_STOP_IN_DEPOT) data = DA_STOP;
|
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;
|
break;
|
||||||
|
|
||||||
case OT_GOTO_STATION:
|
case OT_GOTO_STATION:
|
||||||
if ((current & AIOF_UNLOAD_FLAGS) != (order_flags & AIOF_UNLOAD_FLAGS)) {
|
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)) {
|
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;
|
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_move));
|
||||||
EnforcePrecondition(false, IsValidVehicleOrder(vehicle_id, order_position_target));
|
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)
|
/* 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);
|
static bool RemoveOrder(VehicleID vehicle_id, OrderPosition order_position);
|
||||||
|
|
||||||
#ifndef DOXYGEN_SKIP
|
#ifndef DOXYGEN_AI_DOCS
|
||||||
/**
|
/**
|
||||||
* Internal function to help SetOrderFlags.
|
* Internal function to help SetOrderFlags.
|
||||||
*/
|
*/
|
||||||
static bool _SetOrderFlags();
|
static bool _SetOrderFlags();
|
||||||
#endif /* DOXYGEN_SKIP */
|
#endif /* DOXYGEN_AI_DOCS */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Changes the order flags of the given order.
|
* Changes the order flags of the given order.
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
#include "ai_map.hpp"
|
#include "ai_map.hpp"
|
||||||
#include "ai_station.hpp"
|
#include "ai_station.hpp"
|
||||||
#include "ai_industrytype.hpp"
|
#include "ai_industrytype.hpp"
|
||||||
|
#include "ai_cargo.hpp"
|
||||||
#include "../../debug.h"
|
#include "../../debug.h"
|
||||||
#include "../../station_base.h"
|
#include "../../station_base.h"
|
||||||
#include "../../company_func.h"
|
#include "../../company_func.h"
|
||||||
@@ -170,6 +171,7 @@
|
|||||||
EnforcePrecondition(false, platform_length > 0 && platform_length <= 0xFF);
|
EnforcePrecondition(false, platform_length > 0 && platform_length <= 0xFF);
|
||||||
EnforcePrecondition(false, IsRailTypeAvailable(GetCurrentRailType()));
|
EnforcePrecondition(false, IsRailTypeAvailable(GetCurrentRailType()));
|
||||||
EnforcePrecondition(false, station_id == AIStation::STATION_NEW || station_id == AIStation::STATION_JOIN_ADJACENT || AIStation::IsValidStation(station_id));
|
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, 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));
|
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 num_platforms > 0 && num_platforms <= 255.
|
||||||
* @pre platform_length > 0 && platform_length <= 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 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 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).
|
* @pre goal_industry == AIIndustryType::INDUSTRYTYPE_UNKNOWN || goal_industry == AIIndustryType::INDUSTRYTYPE_TOWN || AIIndustryType::IsValidIndustryType(goal_industry).
|
||||||
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
|
* @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.
|
* 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 station_id The station to check.
|
||||||
* @param town_id The town to check.
|
* @param town_id The town to check.
|
||||||
* @return True if the tile is within the rating influence of the town.
|
* @return True if the tile is within the rating influence of the town.
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
#include "ai_tile.hpp"
|
#include "ai_tile.hpp"
|
||||||
#include "ai_map.hpp"
|
#include "ai_map.hpp"
|
||||||
#include "ai_town.hpp"
|
#include "ai_town.hpp"
|
||||||
|
#include "ai_cargo.hpp"
|
||||||
#include "../../station_func.h"
|
#include "../../station_func.h"
|
||||||
#include "../../company_func.h"
|
#include "../../company_func.h"
|
||||||
#include "../../water_map.h"
|
#include "../../water_map.h"
|
||||||
@@ -192,7 +193,7 @@
|
|||||||
|
|
||||||
/* static */ int32 AITile::GetCargoAcceptance(TileIndex tile, CargoID cargo_type, int width, int height, int radius)
|
/* 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);
|
CargoArray acceptance = ::GetAcceptanceAroundTiles(tile, width, height, _settings_game.station.modified_catchment ? radius : (int)CA_UNMODIFIED);
|
||||||
return acceptance[cargo_type];
|
return acceptance[cargo_type];
|
||||||
@@ -200,7 +201,7 @@
|
|||||||
|
|
||||||
/* static */ int32 AITile::GetCargoProduction(TileIndex tile, CargoID cargo_type, int width, int height, int radius)
|
/* 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);
|
CargoArray produced = ::GetProductionAroundTiles(tile, width, height, _settings_game.station.modified_catchment ? radius : (int)CA_UNMODIFIED);
|
||||||
return produced[cargo_type];
|
return produced[cargo_type];
|
||||||
|
@@ -319,6 +319,7 @@ public:
|
|||||||
* @param height The height of the station.
|
* @param height The height of the station.
|
||||||
* @param radius The radius of the station.
|
* @param radius The radius of the station.
|
||||||
* @pre AIMap::IsValidTile(tile).
|
* @pre AIMap::IsValidTile(tile).
|
||||||
|
* @pre AICargo::IsValidCargo(cargo_type)
|
||||||
* @pre width > 0.
|
* @pre width > 0.
|
||||||
* @pre height > 0.
|
* @pre height > 0.
|
||||||
* @pre radius >= 0.
|
* @pre radius >= 0.
|
||||||
@@ -335,6 +336,7 @@ public:
|
|||||||
* @param height The height of the station.
|
* @param height The height of the station.
|
||||||
* @param radius The radius of the station.
|
* @param radius The radius of the station.
|
||||||
* @pre AIMap::IsValidTile(tile).
|
* @pre AIMap::IsValidTile(tile).
|
||||||
|
* @pre AICargo::IsValidCargo(cargo_type)
|
||||||
* @pre width > 0.
|
* @pre width > 0.
|
||||||
* @pre height > 0.
|
* @pre height > 0.
|
||||||
* @pre radius >= 0.
|
* @pre radius >= 0.
|
||||||
@@ -439,7 +441,8 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Find out if this tile is within the rating influence of a town.
|
* 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 tile The tile to check.
|
||||||
* @param town_id The town to check.
|
* @param town_id The town to check.
|
||||||
* @return True if the tile is within the rating influence of the town.
|
* @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.
|
* 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 town_id The town to check.
|
||||||
* @param tile The tile to check.
|
* @param tile The tile to check.
|
||||||
* @pre IsValidTown(town_id).
|
* @pre IsValidTown(town_id).
|
||||||
|
@@ -65,7 +65,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
static TileIndex GetOtherTunnelEnd(TileIndex tile);
|
static TileIndex GetOtherTunnelEnd(TileIndex tile);
|
||||||
|
|
||||||
#ifndef DOXYGEN_SKIP
|
#ifndef DOXYGEN_AI_DOCS
|
||||||
/**
|
/**
|
||||||
* Internal function to help BuildTunnel in case of road.
|
* Internal function to help BuildTunnel in case of road.
|
||||||
*/
|
*/
|
||||||
@@ -75,7 +75,7 @@ public:
|
|||||||
* Internal function to help BuildTunnel in case of road.
|
* Internal function to help BuildTunnel in case of road.
|
||||||
*/
|
*/
|
||||||
static bool _BuildTunnelRoad2();
|
static bool _BuildTunnelRoad2();
|
||||||
#endif /* DOXYGEN_SKIP */
|
#endif /* DOXYGEN_AI_DOCS */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds a tunnel starting at start. The direction of the tunnel depends
|
* Builds a tunnel starting at start. The direction of the tunnel depends
|
||||||
|
@@ -65,6 +65,8 @@ public:
|
|||||||
/** Vehicle is without power */
|
/** Vehicle is without power */
|
||||||
ERR_VEHICLE_NO_POWER, // [STR_ERROR_TRAIN_START_NO_CATENARY]
|
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_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_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT");
|
||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_NO_POWER, "ERR_VEHICLE_NO_POWER");
|
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_RAIL, "VT_RAIL");
|
||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_ROAD, "VT_ROAD");
|
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_ROAD, "VT_ROAD");
|
||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_WATER, "VT_WATER");
|
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_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_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_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_TOO_MANY, "ERR_VEHICLE_TOO_MANY");
|
||||||
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_NOT_AVAILABLE, "ERR_VEHICLE_NOT_AVAILABLE");
|
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_NOT_IN_DEPOT, "ERR_VEHICLE_NOT_IN_DEPOT");
|
||||||
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT");
|
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_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::IsValidVehicle, "IsValidVehicle", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetNumWagons, "GetNumWagons", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetNumWagons, "GetNumWagons", 2, ".i");
|
||||||
|
@@ -102,9 +102,9 @@ BEGIN {
|
|||||||
/^( *)private/ { if (cls_level == 1) public = "false"; next; }
|
/^( *)private/ { if (cls_level == 1) public = "false"; next; }
|
||||||
|
|
||||||
# Ignore special doxygen blocks
|
# Ignore special doxygen blocks
|
||||||
/^#ifndef DOXYGEN_SKIP/ { doxygen_skip = "next"; next; }
|
/^#ifndef DOXYGEN_AI_DOCS/ { doxygen_skip = "next"; next; }
|
||||||
/^#ifdef DOXYGEN_SKIP/ { doxygen_skip = "true"; next; }
|
/^#ifdef DOXYGEN_AI_DOCS/ { doxygen_skip = "true"; next; }
|
||||||
/^#endif \/\* DOXYGEN_SKIP \*\// { doxygen_skip = "false"; next; }
|
/^#endif \/\* DOXYGEN_AI_DOCS \*\// { doxygen_skip = "false"; next; }
|
||||||
/^#else/ {
|
/^#else/ {
|
||||||
if (doxygen_skip == "next") {
|
if (doxygen_skip == "next") {
|
||||||
doxygen_skip = "true";
|
doxygen_skip = "true";
|
||||||
|
@@ -31,7 +31,7 @@ void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height);
|
|||||||
void UpdateAirplanesOnNewStation(const Station *st);
|
void UpdateAirplanesOnNewStation(const Station *st);
|
||||||
void UpdateAircraftCache(Aircraft *v);
|
void UpdateAircraftCache(Aircraft *v);
|
||||||
|
|
||||||
void AircraftLeaveHangar(Aircraft *v);
|
void AircraftLeaveHangar(Aircraft *v, Direction exit_dir);
|
||||||
void AircraftNextAirportPos_and_Order(Aircraft *v);
|
void AircraftNextAirportPos_and_Order(Aircraft *v);
|
||||||
void SetAircraftPosition(Aircraft *v, int x, int y, int z);
|
void SetAircraftPosition(Aircraft *v, int x, int y, int z);
|
||||||
byte GetAircraftFlyingAltitude(const Aircraft *v);
|
byte GetAircraftFlyingAltitude(const Aircraft *v);
|
||||||
|
@@ -1243,12 +1243,20 @@ void AircraftNextAirportPos_and_Order(Aircraft *v)
|
|||||||
v->pos = v->previous_pos = AircraftGetEntryPoint(v, apc, rotation);
|
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->cur_speed = 0;
|
||||||
v->subspeed = 0;
|
v->subspeed = 0;
|
||||||
v->progress = 0;
|
v->progress = 0;
|
||||||
v->direction = DIR_SE;
|
v->direction = exit_dir;
|
||||||
v->vehstatus &= ~VS_HIDDEN;
|
v->vehstatus &= ~VS_HIDDEN;
|
||||||
{
|
{
|
||||||
Vehicle *u = v->Next();
|
Vehicle *u = v->Next();
|
||||||
@@ -1333,7 +1341,8 @@ static void AircraftEventHandler_InHangar(Aircraft *v, const AirportFTAClass *ap
|
|||||||
/* airplane goto state takeoff, helicopter to helitakeoff */
|
/* airplane goto state takeoff, helicopter to helitakeoff */
|
||||||
v->state = (v->subtype == AIR_HELICOPTER) ? HELITAKEOFF : TAKEOFF;
|
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);
|
AirportMove(v, apc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
#include "widgets/dropdown_type.h"
|
#include "widgets/dropdown_type.h"
|
||||||
#include "core/geometry_func.hpp"
|
#include "core/geometry_func.hpp"
|
||||||
#include "hotkeys.h"
|
#include "hotkeys.h"
|
||||||
|
#include "vehicle_func.h"
|
||||||
#include "sprite.h"
|
#include "sprite.h"
|
||||||
|
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
@@ -195,6 +196,7 @@ Window *ShowBuildAirToolbar()
|
|||||||
|
|
||||||
EventState AirportToolbarGlobalHotkeys(uint16 key, uint16 keycode)
|
EventState AirportToolbarGlobalHotkeys(uint16 key, uint16 keycode)
|
||||||
{
|
{
|
||||||
|
if (!CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) return ES_NOT_HANDLED;
|
||||||
int num = CheckHotkeyMatch<BuildAirToolbarWindow>(_airtoolbar_hotkeys, keycode, NULL, true);
|
int num = CheckHotkeyMatch<BuildAirToolbarWindow>(_airtoolbar_hotkeys, keycode, NULL, true);
|
||||||
if (num == -1) return ES_NOT_HANDLED;
|
if (num == -1) return ES_NOT_HANDLED;
|
||||||
Window *w = ShowBuildAirToolbar();
|
Window *w = ShowBuildAirToolbar();
|
||||||
@@ -422,11 +424,6 @@ public:
|
|||||||
_selected_airport_index = airport_index;
|
_selected_airport_index = airport_index;
|
||||||
_selected_airport_layout = 0;
|
_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->UpdateSelectSize();
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
}
|
}
|
||||||
@@ -445,6 +442,8 @@ public:
|
|||||||
if (rotation == DIR_E || rotation == DIR_W) Swap(w, h);
|
if (rotation == DIR_E || rotation == DIR_W) Swap(w, h);
|
||||||
SetTileSelectSize(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_DECREASE, _selected_airport_layout == 0);
|
||||||
this->SetWidgetDisabledState(BAIRW_LAYOUT_INCREASE, _selected_airport_layout + 1 >= as->num_table);
|
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(
|
static const WindowDesc _build_airport_desc(
|
||||||
WDP_AUTO, 0, 0,
|
WDP_AUTO, 0, 0,
|
||||||
WC_BUILD_STATION, WC_BUILD_TOOLBAR,
|
WC_BUILD_STATION, WC_BUILD_TOOLBAR,
|
||||||
WDF_CONSTRUCTION,
|
WDF_CONSTRUCTION | WDF_UNCLICK_BUTTONS,
|
||||||
_nested_build_airport_widgets, lengthof(_nested_build_airport_widgets)
|
_nested_build_airport_widgets, lengthof(_nested_build_airport_widgets)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -590,4 +589,5 @@ static void ShowBuildAirportPicker(Window *parent)
|
|||||||
void InitializeAirportGui()
|
void InitializeAirportGui()
|
||||||
{
|
{
|
||||||
_selected_airport_class = APC_BEGIN;
|
_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
|
* Get the EngineID of the replacement for a vehicle
|
||||||
* @param v The vehicle to find a replacement for
|
* @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)
|
* @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());
|
assert(v->type != VEH_TRAIN || !v->IsArticulatedPart());
|
||||||
|
|
||||||
|
e = INVALID_ENGINE;
|
||||||
|
|
||||||
if (v->type == VEH_TRAIN && Train::From(v)->IsRearDualheaded()) {
|
if (v->type == VEH_TRAIN && Train::From(v)->IsRearDualheaded()) {
|
||||||
/* we build the rear ends of multiheaded trains with the front ones */
|
/* 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)) {
|
if (e != INVALID_ENGINE && IsEngineBuildable(e, v->type, _current_company)) {
|
||||||
return e;
|
return CommandCost();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v->NeedsAutorenewing(c) && // replace if engine is too old
|
/* Autorenew if needed */
|
||||||
IsEngineBuildable(v->engine_type, v->type, _current_company)) { // engine can still be build
|
if (v->NeedsAutorenewing(c)) e = v->engine_type;
|
||||||
return 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? */
|
/* Shall the vehicle be replaced? */
|
||||||
const Company *c = Company::Get(_current_company);
|
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
|
if (e == INVALID_ENGINE) return CommandCost(); // neither autoreplace is set, nor autorenew is triggered
|
||||||
|
|
||||||
/* Does it need to be refitted */
|
/* 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
|
if (refit_cargo == CT_INVALID) return CommandCost(); // incompatible cargos
|
||||||
|
|
||||||
/* Build the new vehicle */
|
/* 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;
|
if (cost.Failed()) return cost;
|
||||||
|
|
||||||
Vehicle *new_veh = Vehicle::Get(_new_vehicle_id);
|
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 */
|
/* Test whether any replacement is set, before issuing a whole lot of commands that would end in nothing changed */
|
||||||
Vehicle *w = v;
|
Vehicle *w = v;
|
||||||
bool any_replacements = false;
|
bool any_replacements = false;
|
||||||
while (w != NULL && !any_replacements) {
|
while (w != NULL) {
|
||||||
any_replacements = (GetNewEngineType(w, c) != INVALID_ENGINE);
|
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);
|
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);
|
GroupID id_g = GB(p1, 16, 16);
|
||||||
CommandCost cost;
|
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 (!Engine::IsValidID(old_engine_type)) return CMD_ERROR;
|
||||||
|
|
||||||
if (new_engine_type != INVALID_ENGINE) {
|
if (new_engine_type != INVALID_ENGINE) {
|
||||||
|
154
src/bmp.cpp
@@ -13,6 +13,7 @@
|
|||||||
#include "bmp.h"
|
#include "bmp.h"
|
||||||
#include "core/bitmath_func.hpp"
|
#include "core/bitmath_func.hpp"
|
||||||
#include "core/alloc_func.hpp"
|
#include "core/alloc_func.hpp"
|
||||||
|
#include "core/mem_func.hpp"
|
||||||
|
|
||||||
void BmpInitializeBuffer(BmpBuffer *buffer, FILE *file)
|
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)
|
static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
|
||||||
{
|
{
|
||||||
uint i;
|
|
||||||
uint x = 0;
|
uint x = 0;
|
||||||
uint y = info->height - 1;
|
uint y = info->height - 1;
|
||||||
byte n, c, b;
|
|
||||||
byte *pixel = &data->bitmap[y * info->width];
|
byte *pixel = &data->bitmap[y * info->width];
|
||||||
while (y != 0 || x < info->width) {
|
while (y != 0 || x < info->width) {
|
||||||
if (EndOfBuffer(buffer)) return false; // the file is shorter than expected
|
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) {
|
if (n == 0) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 0: // end of line
|
case 0: // end of line
|
||||||
x = 0;
|
x = 0;
|
||||||
pixel = &data->bitmap[--y * info->width];
|
if (y == 0) return false;
|
||||||
break;
|
pixel = &data->bitmap[--y * info->width];
|
||||||
case 1: // end of bitmap
|
break;
|
||||||
x = info->width;
|
|
||||||
y = 0;
|
case 1: // end of bitmap
|
||||||
pixel = NULL;
|
return true;
|
||||||
break;
|
|
||||||
case 2: // delta
|
case 2: { // delta
|
||||||
x += ReadByte(buffer);
|
if (EndOfBuffer(buffer)) return false;
|
||||||
i = ReadByte(buffer);
|
byte dx = ReadByte(buffer);
|
||||||
if (x >= info->width || (y == 0 && i > 0)) return false;
|
byte dy = ReadByte(buffer);
|
||||||
y -= i;
|
|
||||||
pixel = &data->bitmap[y * info->width + x];
|
/* Check for over- and underflow. */
|
||||||
break;
|
if (x + dx >= info->width || x + dx < x || dy > y) return false;
|
||||||
default: // uncompressed
|
|
||||||
i = 0;
|
x += dx;
|
||||||
while (i++ < c) {
|
y -= dy;
|
||||||
if (EndOfBuffer(buffer) || x >= info->width) return false;
|
pixel = &data->bitmap[y * info->width + x];
|
||||||
b = ReadByte(buffer);
|
break;
|
||||||
*pixel++ = GB(b, 4, 4);
|
}
|
||||||
x++;
|
|
||||||
if (x < info->width && i++ < c) {
|
default: { // uncompressed
|
||||||
*pixel++ = GB(b, 0, 4);
|
uint i = 0;
|
||||||
x++;
|
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 {
|
} else {
|
||||||
i = 0;
|
/* Apparently it is common to encounter BMPs where the count of
|
||||||
while (i++ < n) {
|
* pixels to be written is higher than the remaining line width.
|
||||||
if (EndOfBuffer(buffer) || x >= info->width) return false;
|
* Ignore the superfluous pixels instead of reporting an error. */
|
||||||
|
uint i = 0;
|
||||||
|
while (x < info->width && i++ < n) {
|
||||||
*pixel++ = GB(c, 4, 4);
|
*pixel++ = GB(c, 4, 4);
|
||||||
x++;
|
x++;
|
||||||
if (x < info->width && i++ < n) {
|
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)
|
static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
|
||||||
{
|
{
|
||||||
uint i;
|
|
||||||
uint x = 0;
|
uint x = 0;
|
||||||
uint y = info->height - 1;
|
uint y = info->height - 1;
|
||||||
byte n, c;
|
|
||||||
byte *pixel = &data->bitmap[y * info->width];
|
byte *pixel = &data->bitmap[y * info->width];
|
||||||
while (y != 0 || x < info->width) {
|
while (y != 0 || x < info->width) {
|
||||||
if (EndOfBuffer(buffer)) return false; // the file is shorter than expected
|
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) {
|
if (n == 0) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 0: // end of line
|
case 0: // end of line
|
||||||
x = 0;
|
x = 0;
|
||||||
pixel = &data->bitmap[--y * info->width];
|
if (y == 0) return false;
|
||||||
break;
|
pixel = &data->bitmap[--y * info->width];
|
||||||
case 1: // end of bitmap
|
break;
|
||||||
x = info->width;
|
|
||||||
y = 0;
|
case 1: // end of bitmap
|
||||||
pixel = NULL;
|
return true;
|
||||||
break;
|
|
||||||
case 2: // delta
|
case 2: { // delta
|
||||||
x += ReadByte(buffer);
|
if (EndOfBuffer(buffer)) return false;
|
||||||
i = ReadByte(buffer);
|
byte dx = ReadByte(buffer);
|
||||||
if (x >= info->width || (y == 0 && i > 0)) return false;
|
byte dy = ReadByte(buffer);
|
||||||
y -= i;
|
|
||||||
pixel = &data->bitmap[y * info->width + x];
|
/* Check for over- and underflow. */
|
||||||
break;
|
if (x + dx >= info->width || x + dx < x || dy > y) return false;
|
||||||
default: // uncompressed
|
|
||||||
if ((x += c) > info->width) return false;
|
x += dx;
|
||||||
for (i = 0; i < c; i++) *pixel++ = ReadByte(buffer);
|
y -= dy;
|
||||||
/* Padding for 16 bit align */
|
pixel = &data->bitmap[y * info->width + x];
|
||||||
SkipBytes(buffer, c % 2);
|
break;
|
||||||
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 {
|
} else {
|
||||||
for (i = 0; i < n; i++) {
|
/* Apparently it is common to encounter BMPs where the count of
|
||||||
if (x >= info->width) return false;
|
* 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;
|
*pixel++ = c;
|
||||||
x++;
|
x++;
|
||||||
}
|
}
|
||||||
@@ -287,6 +310,7 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
|
|||||||
{
|
{
|
||||||
uint32 header_size;
|
uint32 header_size;
|
||||||
assert(info != NULL);
|
assert(info != NULL);
|
||||||
|
MemSetT(info, 0);
|
||||||
|
|
||||||
/* Reading BMP header */
|
/* Reading BMP header */
|
||||||
if (ReadWord(buffer) != 0x4D42) return false; // signature should be 'BM'
|
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;
|
Money infra_cost = 0;
|
||||||
switch (transport_type) {
|
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;
|
case TRANSPORT_RAIL: infra_cost = (bridge_len + 2) * RailBuildCost((RailType)road_rail_type); break;
|
||||||
default: 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} */
|
/* STR_BLACK_STRING is used to start the string with {BLACK} */
|
||||||
SetDParam(0, GetGRFStringID(GetEngineGRFID(engine), 0xD000 + callback));
|
SetDParam(0, GetGRFStringID(GetEngineGRFID(engine), 0xD000 + callback));
|
||||||
PrepareTextRefStackUsage(0);
|
StartTextRefStackUsage(0);
|
||||||
uint result = DrawStringMultiLine(left, right, y, INT32_MAX, STR_BLACK_STRING);
|
uint result = DrawStringMultiLine(left, right, y, INT32_MAX, STR_BLACK_STRING);
|
||||||
StopTextRefStackUsage();
|
StopTextRefStackUsage();
|
||||||
return result;
|
return result;
|
||||||
|
@@ -216,7 +216,7 @@ void CargoList<Tinst>::Truncate(uint max_remaining)
|
|||||||
CargoPacket *cp = *it;
|
CargoPacket *cp = *it;
|
||||||
if (max_remaining == 0) {
|
if (max_remaining == 0) {
|
||||||
/* Nothing should remain, just remove the packets. */
|
/* Nothing should remain, just remove the packets. */
|
||||||
this->packets.erase(it++);
|
it = this->packets.erase(it);
|
||||||
static_cast<Tinst *>(this)->RemoveFromCache(cp);
|
static_cast<Tinst *>(this)->RemoveFromCache(cp);
|
||||||
delete cp;
|
delete cp;
|
||||||
continue;
|
continue;
|
||||||
@@ -276,7 +276,7 @@ bool CargoList<Tinst>::MoveTo(Tother_inst *dest, uint max_move, MoveToAction mta
|
|||||||
if (cp->count <= max_move) {
|
if (cp->count <= max_move) {
|
||||||
/* Can move the complete packet */
|
/* Can move the complete packet */
|
||||||
max_move -= cp->count;
|
max_move -= cp->count;
|
||||||
this->packets.erase(it++);
|
it = this->packets.erase(it);
|
||||||
static_cast<Tinst *>(this)->RemoveFromCache(cp);
|
static_cast<Tinst *>(this)->RemoveFromCache(cp);
|
||||||
switch (mta) {
|
switch (mta) {
|
||||||
case MTA_FINAL_DELIVERY:
|
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. */
|
/* Only show the error when it's for us. */
|
||||||
StringID error_part1 = GB(cmd, 16, 16);
|
StringID error_part1 = GB(cmd, 16, 16);
|
||||||
if (estimate_only || (IsLocalCompany() && error_part1 != 0 && my_cmd)) {
|
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) {
|
} else if (estimate_only) {
|
||||||
ShowEstimatedCostOrIncome(res.GetCost(), x, y);
|
ShowEstimatedCostOrIncome(res.GetCost(), x, y);
|
||||||
@@ -633,6 +633,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd,
|
|||||||
/* Test the command. */
|
/* Test the command. */
|
||||||
_cleared_object_areas.Clear();
|
_cleared_object_areas.Clear();
|
||||||
SetTownRatingTestMode(true);
|
SetTownRatingTestMode(true);
|
||||||
|
ClearStorageChanges(false);
|
||||||
res = proc(tile, flags, p1, p2, text);
|
res = proc(tile, flags, p1, p2, text);
|
||||||
SetTownRatingTestMode(false);
|
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
|
/* Actually try and execute the command. If no cost-type is given
|
||||||
* use the construction one */
|
* use the construction one */
|
||||||
_cleared_object_areas.Clear();
|
_cleared_object_areas.Clear();
|
||||||
|
ClearStorageChanges(false);
|
||||||
CommandCost res2 = proc(tile, flags | DC_EXEC, p1, p2, text);
|
CommandCost res2 = proc(tile, flags | DC_EXEC, p1, p2, text);
|
||||||
|
|
||||||
if (cmd_id == CMD_COMPANY_CTRL) {
|
if (cmd_id == CMD_COMPANY_CTRL) {
|
||||||
@@ -735,3 +737,25 @@ void CommandCost::AddCost(const CommandCost &ret)
|
|||||||
this->success = false;
|
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
|
Money cost; ///< The cost of this action
|
||||||
StringID message; ///< Warning message for when success is unset
|
StringID message; ///< Warning message for when success is unset
|
||||||
bool success; ///< Whether the comment went fine up to this moment
|
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:
|
public:
|
||||||
/**
|
/**
|
||||||
* Creates a command cost return with no cost and no error
|
* 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
|
* 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
|
* Creates a command cost with given expense type and start cost of 0
|
||||||
* @param ex_t the expense type
|
* @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
|
* Creates a command return value with the given start cost and expense type
|
||||||
* @param ex_t the expense type
|
* @param ex_t the expense type
|
||||||
* @param cst the initial cost of this command
|
* @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;
|
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
|
* Returns the error message of a command
|
||||||
* @return the error message, if succeeded #INVALID_STRING_ID
|
* @return the error message, if succeeded #INVALID_STRING_ID
|
||||||
|
@@ -349,7 +349,7 @@ static void GenerateCompanyName(Company *c)
|
|||||||
StringID str;
|
StringID str;
|
||||||
uint32 strp;
|
uint32 strp;
|
||||||
if (t->name == NULL && IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1)) {
|
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;
|
strp = t->townnameparts;
|
||||||
|
|
||||||
verify_name:;
|
verify_name:;
|
||||||
@@ -773,13 +773,14 @@ void CompanyAdminUpdate(const Company *company)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called whenever a company goes bankrupt in order to notify admins.
|
* Called whenever a company is removed in order to notify admins.
|
||||||
* @param company_id The company that went bankrupt.
|
* @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
|
#ifdef ENABLE_NETWORK
|
||||||
if (_network_server) NetworkAdminCompanyRemove(company_id, ADMIN_CRR_BANKRUPT);
|
if (_network_server) NetworkAdminCompanyRemove(company_id, (AdminCompanyRemoveReason)reason);
|
||||||
#endif /* ENABLE_NETWORK */
|
#endif /* ENABLE_NETWORK */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -846,7 +847,6 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_network_server) {
|
if (_network_server) {
|
||||||
CompanyID old_playas = ci->client_playas;
|
|
||||||
ci->client_playas = c->index;
|
ci->client_playas = c->index;
|
||||||
NetworkUpdateClientInfo(ci->client_id);
|
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);
|
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 */
|
/* Announce new company on network. */
|
||||||
if (old_playas == COMPANY_SPECTATOR) {
|
NetworkAdminCompanyInfo(c, true);
|
||||||
NetworkAdminCompanyInfo(c, true);
|
NetworkServerSendChat(NETWORK_ACTION_COMPANY_NEW, DESTTYPE_BROADCAST, 0, "", ci->client_id, ci->client_playas + 1);
|
||||||
NetworkServerSendChat(NETWORK_ACTION_COMPANY_NEW, DESTTYPE_BROADCAST, 0, "", ci->client_id, ci->client_playas + 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif /* ENABLE_NETWORK */
|
#endif /* ENABLE_NETWORK */
|
||||||
break;
|
break;
|
||||||
@@ -887,6 +885,9 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: { // Delete a company
|
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);
|
Company *c = Company::GetIfValid(company_id);
|
||||||
if (c == NULL) return CMD_ERROR;
|
if (c == NULL) return CMD_ERROR;
|
||||||
|
|
||||||
@@ -910,7 +911,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
|||||||
CompanyID c_index = c->index;
|
CompanyID c_index = c->index;
|
||||||
delete c;
|
delete c;
|
||||||
AI::BroadcastNewEvent(new AIEventCompanyBankrupt(c_index));
|
AI::BroadcastNewEvent(new AIEventCompanyBankrupt(c_index));
|
||||||
CompanyAdminBankrupt(c_index);
|
CompanyAdminRemove(c_index, (CompanyRemoveReason)reason);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1824,6 +1824,15 @@ struct CompanyWindow : Window
|
|||||||
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
||||||
{
|
{
|
||||||
switch (widget) {
|
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:
|
case CW_WIDGET_DESC_COMPANY_VALUE:
|
||||||
SetDParam(0, INT64_MAX); // Arguably the maximum company value
|
SetDParam(0, INT64_MAX); // Arguably the maximum company value
|
||||||
size->width = GetStringBoundingBox(STR_COMPANY_VIEW_COMPANY_VALUE).width;
|
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);
|
DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE, TC_FROMSTRING, SA_CENTER);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CW_WIDGET_DESC_COLOUR_SCHEME_EXAMPLE:
|
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);
|
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;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case CW_WIDGET_DESC_VEHICLE_COUNTS: {
|
case CW_WIDGET_DESC_VEHICLE_COUNTS: {
|
||||||
uint amounts[4];
|
uint amounts[4];
|
||||||
|
@@ -56,4 +56,13 @@ typedef uint16 CompanyMask;
|
|||||||
struct Company;
|
struct Company;
|
||||||
typedef uint32 CompanyManagerFace; ///< Company manager face bits, info see in company_manager_face.h
|
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 */
|
#endif /* COMPANY_TYPE_H */
|
||||||
|
@@ -836,7 +836,7 @@ DEF_CONSOLE_CMD(ConResetCompany)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* It is safe to remove this company */
|
/* 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.");
|
IConsolePrint(CC_DEFAULT, "Company deleted.");
|
||||||
|
|
||||||
return true;
|
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 */
|
/* 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);
|
DoCommandP(0, 1 | company_id << 16, 0, CMD_COMPANY_CTRL);
|
||||||
IConsolePrint(CC_DEFAULT, "AI reloaded.");
|
IConsolePrint(CC_DEFAULT, "AI reloaded.");
|
||||||
|
|
||||||
@@ -1233,7 +1233,7 @@ DEF_CONSOLE_CMD(ConStopAI)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Now kill the company of the AI. */
|
/* 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.");
|
IConsolePrint(CC_DEFAULT, "AI stopped, company deleted.");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -1269,7 +1269,7 @@ DEF_CONSOLE_CMD(ConRescanNewGRF)
|
|||||||
|
|
||||||
TarScanner::DoScan();
|
TarScanner::DoScan();
|
||||||
ScanNewGRFFiles();
|
ScanNewGRFFiles();
|
||||||
InvalidateWindowData(WC_GAME_OPTIONS, 0, 1);
|
InvalidateWindowData(WC_GAME_OPTIONS, 0, GOID_NEWGRF_RESCANNED);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1640,7 +1640,7 @@ DEF_CONSOLE_CMD(ConCompanyPassword)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
password = NetworkChangeCompanyPassword(company_id, password, false);
|
password = NetworkChangeCompanyPassword(company_id, password);
|
||||||
|
|
||||||
if (StrEmpty(password)) {
|
if (StrEmpty(password)) {
|
||||||
IConsolePrintF(CC_WARNING, "Company password cleared");
|
IConsolePrintF(CC_WARNING, "Company password cleared");
|
||||||
|
@@ -22,6 +22,29 @@
|
|||||||
void NORETURN MallocError(size_t size);
|
void NORETURN MallocError(size_t size);
|
||||||
void NORETURN ReallocError(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
|
* Simplified allocation function that allocates the specified number of
|
||||||
* elements of the given type. It also explicitly casts it to the requested
|
* 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;
|
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));
|
T *t_ptr = (T*)malloc(num_elements * sizeof(T));
|
||||||
if (t_ptr == NULL) MallocError(num_elements * sizeof(T));
|
if (t_ptr == NULL) MallocError(num_elements * sizeof(T));
|
||||||
return t_ptr;
|
return t_ptr;
|
||||||
@@ -96,12 +122,17 @@ static FORCEINLINE T *ReallocT(T *t_ptr, size_t num_elements)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Ensure the size does not overflow. */
|
||||||
|
CheckAllocationConstraints<T>(num_elements);
|
||||||
|
|
||||||
t_ptr = (T*)realloc(t_ptr, num_elements * sizeof(T));
|
t_ptr = (T*)realloc(t_ptr, num_elements * sizeof(T));
|
||||||
if (t_ptr == NULL) ReallocError(num_elements * sizeof(T));
|
if (t_ptr == NULL) ReallocError(num_elements * sizeof(T));
|
||||||
return t_ptr;
|
return t_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** alloca() has to be called in the parent function, so define AllocaM() as a macro */
|
/** 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 */
|
#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 */
|
/* In all cases, make spectators of clients connected to that company */
|
||||||
if (_networking) NetworkClientsToSpectators(old_owner);
|
if (_networking) NetworkClientsToSpectators(old_owner);
|
||||||
#endif /* ENABLE_NETWORK */
|
#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;
|
Town *t;
|
||||||
|
|
||||||
@@ -306,7 +321,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
|
|||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
if (c->share_owners[i] == old_owner) {
|
if (c->share_owners[i] == old_owner) {
|
||||||
/* Sell his shares */
|
/* 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
|
/* 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! */
|
* expect the money to be removed. We need to do it ourself! */
|
||||||
SubtractMoneyFromCompany(res);
|
SubtractMoneyFromCompany(res);
|
||||||
@@ -321,7 +336,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
|
|||||||
cur_company2.Change(c->share_owners[i]);
|
cur_company2.Change(c->share_owners[i]);
|
||||||
if (_current_company != INVALID_OWNER) {
|
if (_current_company != INVALID_OWNER) {
|
||||||
/* Sell the shares */
|
/* 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
|
/* 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! */
|
* expect the money to be removed. We need to do it ourself! */
|
||||||
SubtractMoneyFromCompany(res);
|
SubtractMoneyFromCompany(res);
|
||||||
@@ -531,7 +546,7 @@ static void CompanyCheckBankrupt(Company *c)
|
|||||||
* that changing the current company is okay. In case of single
|
* that changing the current company is okay. In case of single
|
||||||
* player we are sure (the above check) that we are not the local
|
* player we are sure (the above check) that we are not the local
|
||||||
* company and thus we won't be moved. */
|
* 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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1500,16 +1515,6 @@ static void DoAcquireCompany(Company *c)
|
|||||||
owner->current_loan += c->current_loan;
|
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);
|
if (c->is_ai) AI::Stop(c->index);
|
||||||
|
|
||||||
DeleteCompanyWindows(ci);
|
DeleteCompanyWindows(ci);
|
||||||
@@ -1589,9 +1594,12 @@ CommandCost CmdSellShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1
|
|||||||
CompanyID target_company = (CompanyID)p1;
|
CompanyID target_company = (CompanyID)p1;
|
||||||
Company *c = Company::GetIfValid(target_company);
|
Company *c = Company::GetIfValid(target_company);
|
||||||
|
|
||||||
/* Check if selling shares is allowed (protection against modified clients)
|
/* Cannot sell own shares */
|
||||||
* Cannot sell own shares */
|
if (c == NULL || _current_company == target_company) return CMD_ERROR;
|
||||||
if (c == NULL || !_settings_game.economy.allow_shares || _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) */
|
/* Those lines are here for network-protection (clients can be slow) */
|
||||||
if (GetAmountOwnedBy(c, _current_company) == 0) return CommandCost();
|
if (GetAmountOwnedBy(c, _current_company) == 0) return CommandCost();
|
||||||
|
@@ -91,6 +91,8 @@ Engine::Engine(VehicleType type, EngineID base)
|
|||||||
this->info.base_life = 0xFF;
|
this->info.base_life = 0xFF;
|
||||||
/* Set road vehicle tractive effort to the default value */
|
/* Set road vehicle tractive effort to the default value */
|
||||||
if (type == VEH_ROAD) this->u.road.tractive_effort = 0x4C;
|
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 */
|
/* Set visual effect to the default value */
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case VEH_TRAIN: this->u.rail.visual_effect = VE_DEFAULT; break;
|
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()
|
void StartupEngines()
|
||||||
{
|
{
|
||||||
Engine *e;
|
Engine *e;
|
||||||
|
@@ -21,9 +21,7 @@
|
|||||||
#include <Path.h>
|
#include <Path.h>
|
||||||
#include <storage/FindDirectory.h>
|
#include <storage/FindDirectory.h>
|
||||||
#else
|
#else
|
||||||
#if defined(OPENBSD) || defined(DOS)
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#endif
|
#endif
|
||||||
#include <sys/stat.h>
|
#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)
|
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)) {
|
/* Find nearest size to that requested */
|
||||||
int asc = face->ascender * pixels / face->units_per_EM;
|
FT_Bitmap_Size *bs = face->available_sizes;
|
||||||
int dec = face->descender * pixels / face->units_per_EM;
|
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;
|
FT_Set_Pixel_Sizes(face, 0, n);
|
||||||
_font_height[size] = asc - dec;
|
|
||||||
} else {
|
|
||||||
_ascender[size] = pixels;
|
|
||||||
_font_height[size] = pixels;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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));
|
width = max(1, slot->bitmap.width + (size == FS_NORMAL));
|
||||||
height = max(1, slot->bitmap.rows + (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 */
|
/* FreeType has rendered the glyph, now we allocate a sprite and copy the image into it */
|
||||||
sprite.AllocateData(width * height);
|
sprite.AllocateData(width * height);
|
||||||
sprite.width = width;
|
sprite.width = width;
|
||||||
|
@@ -86,7 +86,6 @@ enum GenerateLandscapeWindowWidgets {
|
|||||||
GLAND_LANDSCAPE_PULLDOWN, ///< Dropdown 'Land generator'
|
GLAND_LANDSCAPE_PULLDOWN, ///< Dropdown 'Land generator'
|
||||||
|
|
||||||
GLAND_HEIGHTMAP_NAME_TEXT, ///< Heightmap name
|
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_SIZE_TEXT, ///< Size of heightmap
|
||||||
GLAND_HEIGHTMAP_ROTATION_PULLDOWN, ///< Dropdown 'Heightmap rotation'
|
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),
|
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_ROTATION, STR_NULL), SetFill(1, 1),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
/* Widgets at the right of the labels. */
|
/* 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_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(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0),
|
||||||
NWidget(WWT_EMPTY, INVALID_COLOUR, GLAND_HEIGHTMAP_NAME_SPACER), SetFill(1, 0),
|
/* Mapsize X * Y. */
|
||||||
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE_LABEL, STR_NULL), SetFill(1, 1),
|
NWidget(NWID_HORIZONTAL), SetPIP(0, 4, 0),
|
||||||
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_NULL), SetFill(1, 1),
|
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_SNOW_LINE_HEIGHT, STR_NULL), SetFill(1, 1),
|
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(),
|
EndContainer(),
|
||||||
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0),
|
NWidget(NWID_VERTICAL), SetPIP(0, 4, 0),
|
||||||
NWidget(WWT_EMPTY, INVALID_COLOUR, GLAND_HEIGHTMAP_NAME_SPACER), SetFill(1, 0),
|
NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0),
|
||||||
NWidget(WWT_TEXT, COLOUR_ORANGE, GLAND_HEIGHTMAP_SIZE_TEXT), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE, STR_NULL), SetFill(1, 0),
|
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0),
|
||||||
NWidget(NWID_HORIZONTAL),
|
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE_LABEL, STR_NULL), SetFill(1, 1),
|
||||||
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_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_DATE, STR_NULL), SetFill(1, 1),
|
||||||
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, GLAND_START_DATE_TEXT), SetDataTip(STR_BLACK_DATE_LONG, STR_NULL), SetFill(1, 0),
|
NWidget(WWT_TEXT, COLOUR_ORANGE), SetDataTip(STR_MAPGEN_SNOW_LINE_HEIGHT, STR_NULL), SetFill(1, 1),
|
||||||
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(),
|
||||||
EndContainer(),
|
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 4, 0),
|
||||||
NWidget(NWID_HORIZONTAL),
|
NWidget(WWT_TEXT, COLOUR_ORANGE, GLAND_HEIGHTMAP_SIZE_TEXT), SetDataTip(STR_MAPGEN_HEIGHTMAP_SIZE, STR_NULL), SetFill(1, 0),
|
||||||
NWidget(WWT_IMGBTN, COLOUR_ORANGE, GLAND_SNOW_LEVEL_DOWN), SetDataTip(SPR_ARROW_DOWN, STR_MAPGEN_SNOW_LINE_DOWN), SetFill(0, 1),
|
NWidget(NWID_HORIZONTAL),
|
||||||
NWidget(WWT_TEXTBTN, COLOUR_ORANGE, GLAND_SNOW_LEVEL_TEXT), SetDataTip(STR_BLACK_INT, STR_NULL), SetFill(1, 0),
|
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_IMGBTN, COLOUR_ORANGE, GLAND_SNOW_LEVEL_UP), SetDataTip(SPR_ARROW_UP, STR_MAPGEN_SNOW_LINE_UP), 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(),
|
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(),
|
||||||
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(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(NWID_SPACER), SetMinimalSize(0, 9), SetFill(1, 1),
|
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)));
|
*size = maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_RANDOM), maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_WATER), GetStringBoundingBox(STR_MAPGEN_BORDER_FREEFORM)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GLAND_HEIGHTMAP_NAME_SPACER:
|
|
||||||
case GLAND_HEIGHTMAP_NAME_TEXT:
|
case GLAND_HEIGHTMAP_NAME_TEXT:
|
||||||
size->width = 0;
|
size->width = 0;
|
||||||
break;
|
break;
|
||||||
@@ -552,12 +552,7 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
|
|||||||
{
|
{
|
||||||
switch (widget) {
|
switch (widget) {
|
||||||
case GLAND_HEIGHTMAP_NAME_TEXT: {
|
case GLAND_HEIGHTMAP_NAME_TEXT: {
|
||||||
/* Little bit of a hack going on here; just to get the widgets
|
DrawString(r.left, r.right, r.top, this->name, TC_ORANGE);
|
||||||
* 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);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -602,12 +597,22 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
|
|||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
break;
|
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 &&
|
if (mode == GLWM_HEIGHTMAP &&
|
||||||
(this->x * 2 < (1U << _settings_newgame.game_creation.map_x) ||
|
(map_x * 2 < (1U << _settings_newgame.game_creation.map_x) ||
|
||||||
this->x / 2 > (1U << _settings_newgame.game_creation.map_x) ||
|
map_x / 2 > (1U << _settings_newgame.game_creation.map_x) ||
|
||||||
this->y * 2 < (1U << _settings_newgame.game_creation.map_y) ||
|
map_y * 2 < (1U << _settings_newgame.game_creation.map_y) ||
|
||||||
this->y / 2 > (1U << _settings_newgame.game_creation.map_y))) {
|
map_y / 2 > (1U << _settings_newgame.game_creation.map_y))) {
|
||||||
ShowQuery(
|
ShowQuery(
|
||||||
STR_WARNING_HEIGHTMAP_SCALE_CAPTION,
|
STR_WARNING_HEIGHTMAP_SCALE_CAPTION,
|
||||||
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE,
|
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE,
|
||||||
@@ -617,6 +622,7 @@ struct GenerateLandscapeWindow : public QueryStringBaseWindow {
|
|||||||
StartGeneratingLandscape(mode);
|
StartGeneratingLandscape(mode);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case GLAND_START_DATE_DOWN:
|
case GLAND_START_DATE_DOWN:
|
||||||
case GLAND_START_DATE_UP: // Year buttons
|
case GLAND_START_DATE_UP: // Year buttons
|
||||||
|
@@ -1114,13 +1114,19 @@ skip_cont:;
|
|||||||
/**
|
/**
|
||||||
* Get the size of a sprite.
|
* Get the size of a sprite.
|
||||||
* @param sprid Sprite to examine.
|
* @param sprid Sprite to examine.
|
||||||
|
* @param [out] offset Optionally returns the sprite position offset.
|
||||||
* @return Sprite size in pixels.
|
* @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.
|
* @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);
|
const Sprite *sprite = GetSprite(sprid, ST_NORMAL);
|
||||||
|
|
||||||
|
if (offset != NULL) {
|
||||||
|
offset->x = sprite->x_offs;
|
||||||
|
offset->y = sprite->y_offs;
|
||||||
|
}
|
||||||
|
|
||||||
Dimension d;
|
Dimension d;
|
||||||
d.width = max<int>(0, sprite->x_offs + sprite->width);
|
d.width = max<int>(0, sprite->x_offs + sprite->width);
|
||||||
d.height = max<int>(0, sprite->y_offs + sprite->height);
|
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 RedrawScreenRect(int left, int top, int right, int bottom);
|
||||||
void GfxScroll(int left, int top, int width, int height, int xo, int yo);
|
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);
|
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = NULL);
|
||||||
|
|
||||||
/** How to align the to-be drawn text. */
|
/** How to align the to-be drawn text. */
|
||||||
|
@@ -52,7 +52,7 @@ struct GroundVehicleCache {
|
|||||||
enum GroundVehicleFlags {
|
enum GroundVehicleFlags {
|
||||||
GVF_GOINGUP_BIT = 0, ///< Vehicle is currently going uphill. (Cached track information for acceleration)
|
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_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
|
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 ShowExtraViewPortWindow(TileIndex tile = INVALID_TILE);
|
||||||
void ShowExtraViewPortWindowForTileUnderCursor();
|
void ShowExtraViewPortWindowForTileUnderCursor();
|
||||||
|
@@ -142,13 +142,24 @@ static bool ReadHeightmapPNG(char *filename, uint *x, uint *y, byte **map)
|
|||||||
return false;
|
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) {
|
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);
|
ReadHeightmapPNGImageData(*map, png_ptr, info_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
*x = png_get_image_width(png_ptr, info_ptr);
|
*x = width;
|
||||||
*y = png_get_image_height(png_ptr, info_ptr);
|
*y = height;
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
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;
|
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 (map != NULL) {
|
||||||
if (!BmpReadBitmap(&buffer, &info, &data)) {
|
if (!BmpReadBitmap(&buffer, &info, &data)) {
|
||||||
ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR);
|
ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR);
|
||||||
|
@@ -140,6 +140,8 @@ void PlantRandomFarmField(const Industry *i);
|
|||||||
|
|
||||||
void ReleaseDisastersTargetingIndustry(IndustryID);
|
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_FROM(var, start) FOR_ALL_ITEMS_FROM(Industry, industry_index, var, start)
|
||||||
#define FOR_ALL_INDUSTRIES(var) FOR_ALL_INDUSTRIES_FROM(var, 0)
|
#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;
|
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 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)
|
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)) {
|
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);
|
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) {
|
if (GB(callback, 0, 8) != 0xFF) {
|
||||||
PrepareTextRefStackUsage(6);
|
StartTextRefStackUsage(6);
|
||||||
GetString(suffix, GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 + callback), suffix_last);
|
GetString(suffix, GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 + callback), suffix_last);
|
||||||
StopTextRefStackUsage();
|
StopTextRefStackUsage();
|
||||||
}
|
}
|
||||||
@@ -458,8 +458,8 @@ public:
|
|||||||
if (callback_res != CALLBACK_FAILED) { // Did it fail?
|
if (callback_res != CALLBACK_FAILED) { // Did it fail?
|
||||||
str = GetGRFStringID(indsp->grf_prop.grffile->grfid, 0xD000 + callback_res); // No. here's the new string
|
str = GetGRFStringID(indsp->grf_prop.grffile->grfid, 0xD000 + callback_res); // No. here's the new string
|
||||||
if (str != STR_UNDEFINED) {
|
if (str != STR_UNDEFINED) {
|
||||||
PrepareTextRefStackUsage(6);
|
StartTextRefStackUsage(6);
|
||||||
DrawStringMultiLine(left, right, y, bottom, str);
|
DrawStringMultiLine(left, right, y, bottom, str, TC_YELLOW);
|
||||||
StopTextRefStackUsage();
|
StopTextRefStackUsage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -788,11 +788,11 @@ public:
|
|||||||
if (message != STR_NULL && message != STR_UNDEFINED) {
|
if (message != STR_NULL && message != STR_UNDEFINED) {
|
||||||
y += WD_PAR_VSEP_WIDE;
|
y += WD_PAR_VSEP_WIDE;
|
||||||
|
|
||||||
PrepareTextRefStackUsage(6);
|
StartTextRefStackUsage(6);
|
||||||
/* Use all the available space left from where we stand up to the
|
/* 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
|
* end of the window. We ALSO enlarge the window if needed, so we
|
||||||
* can 'go' wild with the bottom of the window. */
|
* 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();
|
StopTextRefStackUsage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -99,7 +99,7 @@ STR_QUANTITY_PASSENGERS :{COMMA}راكب
|
|||||||
STR_QUANTITY_COAL :{WEIGHT} من الفحم
|
STR_QUANTITY_COAL :{WEIGHT} من الفحم
|
||||||
STR_QUANTITY_MAIL :{COMMA} صندوق من البريد
|
STR_QUANTITY_MAIL :{COMMA} صندوق من البريد
|
||||||
STR_QUANTITY_OIL :{VOLUME} من النفط
|
STR_QUANTITY_OIL :{VOLUME} من النفط
|
||||||
STR_QUANTITY_LIVESTOCK :{COMMA}رأس من الماشية
|
STR_QUANTITY_LIVESTOCK :{COMMA}راس من الماشية
|
||||||
STR_QUANTITY_GOODS :{COMMA} قفص من البضائع
|
STR_QUANTITY_GOODS :{COMMA} قفص من البضائع
|
||||||
STR_QUANTITY_GRAIN :{WEIGHT} من الحبوب
|
STR_QUANTITY_GRAIN :{WEIGHT} من الحبوب
|
||||||
STR_QUANTITY_WOOD :{WEIGHT} من الخشب
|
STR_QUANTITY_WOOD :{WEIGHT} من الخشب
|
||||||
@@ -117,7 +117,7 @@ STR_QUANTITY_WATER :{VOLUME} من
|
|||||||
STR_QUANTITY_WHEAT :{WEIGHT} من القمح
|
STR_QUANTITY_WHEAT :{WEIGHT} من القمح
|
||||||
STR_QUANTITY_RUBBER :{VOLUME} من المطاط
|
STR_QUANTITY_RUBBER :{VOLUME} من المطاط
|
||||||
STR_QUANTITY_SUGAR :{WEIGHT} من السكر
|
STR_QUANTITY_SUGAR :{WEIGHT} من السكر
|
||||||
STR_QUANTITY_TOYS :{COMMA}الألعاب
|
STR_QUANTITY_TOYS :{COMMA}الالعاب
|
||||||
STR_QUANTITY_SWEETS :{COMMA} كيس من الحلويات
|
STR_QUANTITY_SWEETS :{COMMA} كيس من الحلويات
|
||||||
STR_QUANTITY_COLA :{VOLUME} من الكولا
|
STR_QUANTITY_COLA :{VOLUME} من الكولا
|
||||||
STR_QUANTITY_CANDYFLOSS :{WEIGHT} من الحلاوة القطنية
|
STR_QUANTITY_CANDYFLOSS :{WEIGHT} من الحلاوة القطنية
|
||||||
@@ -447,6 +447,7 @@ STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :صورة للش
|
|||||||
STR_ABOUT_MENU_GIANT_SCREENSHOT :صورة كبيرة لكامل الخريطة -Ctrl-G -
|
STR_ABOUT_MENU_GIANT_SCREENSHOT :صورة كبيرة لكامل الخريطة -Ctrl-G -
|
||||||
STR_ABOUT_MENU_ABOUT_OPENTTD :حول 'OpenTTD'
|
STR_ABOUT_MENU_ABOUT_OPENTTD :حول 'OpenTTD'
|
||||||
STR_ABOUT_MENU_SPRITE_ALIGNER :موائم العفريتات
|
STR_ABOUT_MENU_SPRITE_ALIGNER :موائم العفريتات
|
||||||
|
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :اضهار /اخفاء مربح الحوارات/الخيارات
|
||||||
############ range ends here
|
############ range ends here
|
||||||
|
|
||||||
############ range for days starts (also used for the place in the highscore window)
|
############ 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 :مخصص
|
||||||
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :مخصص ({NUM}%)
|
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :مخصص ({NUM}%)
|
||||||
|
|
||||||
|
|
||||||
STR_DISASTER_NONE :بدون
|
STR_DISASTER_NONE :بدون
|
||||||
STR_DISASTER_REDUCED :قليل
|
STR_DISASTER_REDUCED :قليل
|
||||||
STR_DISASTER_NORMAL :طبيعي
|
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_SHORT :قصير - 31 - 12 - 2008
|
||||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ايزو 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_PAUSE_ON_NEW_GAME :{LTBLUE}إيقاف اللعبة تلقائيا عند بدأ لعبة جديدة: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :{LTBLUE}عندمل توقف أسمح: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :{LTBLUE}عندمل توقف أسمح: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :لا تصرف
|
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :لا تصرف
|
||||||
@@ -1405,6 +1408,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK} ابح
|
|||||||
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK} عرض اعدادات الذكاء الصناعي
|
STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK} عرض اعدادات الذكاء الصناعي
|
||||||
STR_INTRO_TOOLTIP_QUIT :{BLACK}اغلاق'OpenTTD'
|
STR_INTRO_TOOLTIP_QUIT :{BLACK}اغلاق'OpenTTD'
|
||||||
|
|
||||||
|
|
||||||
# Quit window
|
# Quit window
|
||||||
STR_QUIT_CAPTION :{WHITE}انهاء
|
STR_QUIT_CAPTION :{WHITE}انهاء
|
||||||
STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}هل تود اغلاق النسخة المفتوحة و العودة لـ {STRING}?
|
STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}هل تود اغلاق النسخة المفتوحة و العودة لـ {STRING}?
|
||||||
@@ -1416,11 +1420,11 @@ STR_OSNAME_WINDOWS :ويندوز
|
|||||||
STR_OSNAME_DOS :دوس
|
STR_OSNAME_DOS :دوس
|
||||||
STR_OSNAME_UNIX :يونكس
|
STR_OSNAME_UNIX :يونكس
|
||||||
STR_OSNAME_OSX :OS{NBSP}X
|
STR_OSNAME_OSX :OS{NBSP}X
|
||||||
STR_OSNAME_BEOS :بي أو أس
|
STR_OSNAME_BEOS :بي او اس
|
||||||
STR_OSNAME_HAIKU :هايكو
|
STR_OSNAME_HAIKU :هايكو
|
||||||
STR_OSNAME_MORPHOS :مورف أو أس
|
STR_OSNAME_MORPHOS :مورف او اس
|
||||||
STR_OSNAME_AMIGAOS :أميقا
|
STR_OSNAME_AMIGAOS :اميقا
|
||||||
STR_OSNAME_OS2 :أو أس/2
|
STR_OSNAME_OS2 :او اس/2
|
||||||
STR_OSNAME_SUNOS :صن
|
STR_OSNAME_SUNOS :صن
|
||||||
|
|
||||||
# Abandon game
|
# Abandon game
|
||||||
@@ -2280,7 +2284,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :ارض مملو
|
|||||||
|
|
||||||
# About OpenTTD window
|
# About OpenTTD window
|
||||||
STR_ABOUT_OPENTTD :{WHITE}حول النسخة المفتوحة
|
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_VERSION :{BLACK}النسخة المفتوحة رقم {REV}
|
||||||
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-2011 فريق النسخة المفتوحة
|
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_MULTIPLE_ACTION_8 :يحتوي على اوامر متعددة - 8 مدخلات
|
||||||
STR_NEWGRF_ERROR_READ_BOUNDS :خطأ في قرائة البرمجة
|
STR_NEWGRF_ERROR_READ_BOUNDS :خطأ في قرائة البرمجة
|
||||||
STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}ملف الرسوم المستخدم حاليا يفتقد لبعض الرسوم الاساسية.{}الرجاء حدث ملف الرسوم.
|
STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}ملف الرسوم المستخدم حاليا يفتقد لبعض الرسوم الاساسية.{}الرجاء حدث ملف الرسوم.
|
||||||
|
STR_NEWGRF_ERROR_GRM_FAILED :معلومات الاضافة غير متاحة
|
||||||
|
STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING}تم تعطيلة بواسطة{4:STRING}
|
||||||
|
|
||||||
# NewGRF related 'general' warnings
|
# NewGRF related 'general' warnings
|
||||||
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}تحذير!
|
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}تحذير!
|
||||||
@@ -2519,6 +2525,8 @@ STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} لـ<ح
|
|||||||
STR_NEWGRF_INVALID_ENGINE :<موديل العربة غير صالح>
|
STR_NEWGRF_INVALID_ENGINE :<موديل العربة غير صالح>
|
||||||
STR_NEWGRF_INVALID_INDUSTRYTYPE :<المصنع غير صالح>
|
STR_NEWGRF_INVALID_INDUSTRYTYPE :<المصنع غير صالح>
|
||||||
|
|
||||||
|
# NewGRF scanning window
|
||||||
|
|
||||||
# Sign list window
|
# Sign list window
|
||||||
STR_SIGN_LIST_CAPTION :{WHITE}قائمة العلامات - {COMMA} علامة
|
STR_SIGN_LIST_CAPTION :{WHITE}قائمة العلامات - {COMMA} علامة
|
||||||
STR_SIGN_LIST_MATCH_CASE :{BLACK}طابق الحالة
|
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_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}السعة الجديدة: {GOLD}{CARGO}, {GOLD}{CARGO}{}{BLACK}تكلفة اعادة التهيئة: {GOLD}{CURRENCY}
|
||||||
STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}اختر العربة لاعادة تهيئتها. اسحب بالفارة لاختيار عدة عربات. اضغط على مساحة خالية لاختيار كل العربات. اضغط + كنترول لاختيار العربة الحالية وما بعدها.
|
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_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK} اختر نوع حمولة العربة
|
||||||
STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}اختر نوع الحمولة للسفينة
|
STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}اختر نوع الحمولة للسفينة
|
||||||
STR_REFIT_AIRCRAFT_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_SERVICE_TOOLTIP :{BLACK}تجاوز هذا الامر الا اذا لم تكن الصيانة مطلوبة
|
||||||
|
|
||||||
STR_ORDER_CONDITIONAL_VARIABLE_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_LOAD_PERCENTAGE :نسبة التحميل
|
||||||
STR_ORDER_CONDITIONAL_RELIABILITY :الصلاحية
|
STR_ORDER_CONDITIONAL_RELIABILITY :الصلاحية
|
||||||
STR_ORDER_CONDITIONAL_MAX_SPEED :السرعة القصوى
|
STR_ORDER_CONDITIONAL_MAX_SPEED :السرعة القصوى
|
||||||
@@ -3246,7 +3256,7 @@ STR_ORDER_STOP_ORDER :توقف
|
|||||||
|
|
||||||
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
|
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
|
||||||
|
|
||||||
STR_ORDER_AUTOMATIC :(تلقائى)
|
STR_ORDER_IMPLICIT :(تلقائى)
|
||||||
|
|
||||||
STR_ORDER_FULL_LOAD :-تحميل بالكامل-
|
STR_ORDER_FULL_LOAD :-تحميل بالكامل-
|
||||||
STR_ORDER_FULL_LOAD_ANY :-حمل اي بضاعة بالكامل-
|
STR_ORDER_FULL_LOAD_ANY :-حمل اي بضاعة بالكامل-
|
||||||
@@ -3437,6 +3447,8 @@ STR_ERROR_PNGMAP_MISC :{WHITE}حدث
|
|||||||
STR_ERROR_BMPMAP :{WHITE}لا يمكن تحميل الخريطة من BMP ...
|
STR_ERROR_BMPMAP :{WHITE}لا يمكن تحميل الخريطة من BMP ...
|
||||||
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}لايمكن تحويل نوع الصورة...
|
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}لايمكن تحويل نوع الصورة...
|
||||||
|
|
||||||
|
STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}الصورة ضخمة جدا ...
|
||||||
|
|
||||||
STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}تحذير
|
STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}تحذير
|
||||||
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}اعادة تحجيم الخريطة المصدر كثيرا غير مستحسن. هل تريد اكمال توليد الخريطة؟
|
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}اعادة تحجيم الخريطة المصدر كثيرا غير مستحسن. هل تريد اكمال توليد الخريطة؟
|
||||||
|
|
||||||
@@ -4242,6 +4254,7 @@ STR_TINY_BLACK_COMA :{TINYFONT}{BLAC
|
|||||||
STR_TINY_COMMA :{TINYFONT}{COMMA}
|
STR_TINY_COMMA :{TINYFONT}{COMMA}
|
||||||
STR_BLUE_COMMA :{BLUE}{COMMA}
|
STR_BLUE_COMMA :{BLUE}{COMMA}
|
||||||
STR_RED_COMMA :{RED}{COMMA}
|
STR_RED_COMMA :{RED}{COMMA}
|
||||||
|
STR_TINY_BLACK_DECIMAL :{TINYFONT}{BLACK}{DECIMAL}
|
||||||
STR_COMPANY_MONEY :{WHITE}{CURRENCY}
|
STR_COMPANY_MONEY :{WHITE}{CURRENCY}
|
||||||
STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG}
|
STR_BLACK_DATE_LONG :{BLACK}{DATE_LONG}
|
||||||
STR_BLACK_CROSS :{BLACK}{CROSS}
|
STR_BLACK_CROSS :{BLACK}{CROSS}
|
||||||
|
@@ -545,11 +545,11 @@ STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Зага
|
|||||||
STR_TOOLTIP_SHADE :{BLACK}Згарнуць вакно, пакінуўшы загаловак
|
STR_TOOLTIP_SHADE :{BLACK}Згарнуць вакно, пакінуўшы загаловак
|
||||||
STR_TOOLTIP_DEBUG :{BLACK}Паказаць наладачную iнфармацыю NewGRF
|
STR_TOOLTIP_DEBUG :{BLACK}Паказаць наладачную iнфармацыю NewGRF
|
||||||
STR_TOOLTIP_STICKY :{BLACK}Ігнараваць націск клявішы «Закрыць усе вокны»
|
STR_TOOLTIP_STICKY :{BLACK}Ігнараваць націск клявішы «Закрыць усе вокны»
|
||||||
STR_TOOLTIP_RESIZE :{BLACK}Націсьніце ды цягнiце для змяненьня памеру вакна
|
STR_TOOLTIP_RESIZE :{BLACK}Націсьніце ды цягнiце для зьмяненьня памеру вакна
|
||||||
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Вялікае/маленькае вакно
|
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Вялікае/маленькае вакно
|
||||||
STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Пракрутка ўверх/уніз
|
STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Пракрутка ўверх/уніз
|
||||||
STR_TOOLTIP_HSCROLL_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
|
# Query window
|
||||||
STR_BUTTON_DEFAULT :{BLACK}Па змоўчаньнi
|
STR_BUTTON_DEFAULT :{BLACK}Па змоўчаньнi
|
||||||
@@ -564,7 +564,7 @@ STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|Q
|
|||||||
STR_MEASURE_LENGTH :{BLACK}Даўжыня: {NUM}
|
STR_MEASURE_LENGTH :{BLACK}Даўжыня: {NUM}
|
||||||
STR_MEASURE_AREA :{BLACK}Плошча: {NUM} x {NUM}
|
STR_MEASURE_AREA :{BLACK}Плошча: {NUM} x {NUM}
|
||||||
STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Даўжыня: {NUM}{}Розніца вышыняў: {HEIGHT}
|
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
|
# These are used in buttons
|
||||||
@@ -581,13 +581,13 @@ STR_SORT_BY_NUMBER :Нумар
|
|||||||
STR_SORT_BY_PROFIT_LAST_YEAR :Прыбытак летась
|
STR_SORT_BY_PROFIT_LAST_YEAR :Прыбытак летась
|
||||||
STR_SORT_BY_PROFIT_THIS_YEAR :Прыбытак у бягучым годзе
|
STR_SORT_BY_PROFIT_THIS_YEAR :Прыбытак у бягучым годзе
|
||||||
STR_SORT_BY_AGE :Узрост
|
STR_SORT_BY_AGE :Узрост
|
||||||
STR_SORT_BY_RELIABILITY :Надзейнасць
|
STR_SORT_BY_RELIABILITY :Надзейнасьць
|
||||||
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Умяшчальнасьць грузу
|
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Умяшчальнасьць грузу
|
||||||
STR_SORT_BY_MAX_SPEED :Максымальная хуткасць
|
STR_SORT_BY_MAX_SPEED :Максымальная хуткасьць
|
||||||
STR_SORT_BY_MODEL :Мадэль
|
STR_SORT_BY_MODEL :Мадэль
|
||||||
STR_SORT_BY_VALUE :Кошт
|
STR_SORT_BY_VALUE :Кошт
|
||||||
STR_SORT_BY_LENGTH :Даўжыня
|
STR_SORT_BY_LENGTH :Даўжыня
|
||||||
STR_SORT_BY_LIFE_TIME :Астатні тэрмін службы
|
STR_SORT_BY_LIFE_TIME :Рэшткавы тэрмін службы
|
||||||
STR_SORT_BY_TIMETABLE_DELAY :Адставаньне ад графіку
|
STR_SORT_BY_TIMETABLE_DELAY :Адставаньне ад графіку
|
||||||
STR_SORT_BY_FACILITY :Тып станцыі
|
STR_SORT_BY_FACILITY :Тып станцыі
|
||||||
STR_SORT_BY_WAITING :Коль-ць грузу на станцыі
|
STR_SORT_BY_WAITING :Коль-ць грузу на станцыі
|
||||||
@@ -599,7 +599,7 @@ STR_SORT_BY_POWER :Магутна
|
|||||||
STR_SORT_BY_TRACTIVE_EFFORT :Цягавае намаганьне
|
STR_SORT_BY_TRACTIVE_EFFORT :Цягавае намаганьне
|
||||||
STR_SORT_BY_INTRO_DATE :Пачатак вытворчасьцi
|
STR_SORT_BY_INTRO_DATE :Пачатак вытворчасьцi
|
||||||
STR_SORT_BY_RUNNING_COST :Кошт абслугоўваньня
|
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стасьць
|
STR_SORT_BY_CARGO_CAPACITY :Ёмiстасьць
|
||||||
|
|
||||||
# Tooltips for the main toolbar
|
# 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_ROADS :{BLACK}Будаўніцтва аўтамабільных дарог
|
||||||
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Будаўніцтва водных камунікацыяў
|
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Будаўніцтва водных камунікацыяў
|
||||||
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Будаўніцтва аэрапортаў
|
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Будаўніцтва аэрапортаў
|
||||||
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Адкрыць панэль ляндшафту для змяненьня рэльефу, пасадкi дрэваў i г.д.
|
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Адкрыць панэль ляндшафту для зьмяненьня рэльефу, пасадкi дрэваў i г.д.
|
||||||
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Наладка гуку й музыкі
|
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Наладка гуку й музыкі
|
||||||
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Паказаць апошнiя паведамленьнi/навiны, паказаць наладкi паведамленьняў
|
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Паказаць апошнiя паведамленьнi/навiны, паказаць наладкi паведамленьняў
|
||||||
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Iнфармацыя аб зямлi; кансоль; наладка штучнага інтэлекту (AI/Ш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
|
############ range for settings menu starts
|
||||||
STR_SETTINGS_MENU_GAME_OPTIONS :Наладкі гульні
|
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_CONFIG_SETTINGS :Пашыраныя наладкі
|
||||||
STR_SETTINGS_MENU_AI_SETTINGS :Наладки ШI (AI)
|
STR_SETTINGS_MENU_AI_SETTINGS :Наладки ШI (AI)
|
||||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS :Наладкі NewGRF
|
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_GIANT_SCREENSHOT :Здымак усёй мапы (Ctrl+G)
|
||||||
STR_ABOUT_MENU_ABOUT_OPENTTD :Аб гульні OpenTTD
|
STR_ABOUT_MENU_ABOUT_OPENTTD :Аб гульні OpenTTD
|
||||||
STR_ABOUT_MENU_SPRITE_ALIGNER :Выраўноўваньне спрайтаў
|
STR_ABOUT_MENU_SPRITE_ALIGNER :Выраўноўваньне спрайтаў
|
||||||
|
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Пераключыць абмежавальныя рамкі
|
||||||
############ range ends here
|
############ range ends here
|
||||||
|
|
||||||
############ range for days starts (also used for the place in the highscore window)
|
############ 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}Зьмяніць парамэтр уласнай валюты
|
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Зьмяніць парамэтр уласнай валюты
|
||||||
|
|
||||||
# Difficulty level window
|
# Difficulty level window
|
||||||
STR_DIFFICULTY_LEVEL_CAPTION :{WHITE}Узровень складанасцi
|
STR_DIFFICULTY_LEVEL_CAPTION :{WHITE}Узровень складанасьцi
|
||||||
|
|
||||||
############ range for difficulty levels starts
|
############ range for difficulty levels starts
|
||||||
STR_DIFFICULTY_LEVEL_EASY :{BLACK}Лёгкі
|
STR_DIFFICULTY_LEVEL_EASY :{BLACK}Лёгкі
|
||||||
@@ -1350,7 +1351,7 @@ STR_NUM_VERY_LOW :Вельмі м
|
|||||||
STR_NUM_LOW :Мала
|
STR_NUM_LOW :Мала
|
||||||
STR_NUM_NORMAL :Звычайна
|
STR_NUM_NORMAL :Звычайна
|
||||||
STR_NUM_HIGH :Шмат
|
STR_NUM_HIGH :Шмат
|
||||||
STR_NUM_CUSTOM :Уласная
|
STR_NUM_CUSTOM :Уласны
|
||||||
STR_NUM_CUSTOM_NUMBER :Зададзены ({NUM})
|
STR_NUM_CUSTOM_NUMBER :Зададзены ({NUM})
|
||||||
|
|
||||||
STR_VARIETY_NONE :Няма
|
STR_VARIETY_NONE :Няма
|
||||||
@@ -1373,6 +1374,7 @@ STR_SEA_LEVEL_HIGH :Вялiкая
|
|||||||
STR_SEA_LEVEL_CUSTOM :Зададзены
|
STR_SEA_LEVEL_CUSTOM :Зададзены
|
||||||
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Зададзены ({NUM}%)
|
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Зададзены ({NUM}%)
|
||||||
|
|
||||||
|
|
||||||
STR_DISASTER_NONE :Выключаны
|
STR_DISASTER_NONE :Выключаны
|
||||||
STR_DISASTER_REDUCED :Зьніжаныя
|
STR_DISASTER_REDUCED :Зьніжаныя
|
||||||
STR_DISASTER_NORMAL :Звычайныя
|
STR_DISASTER_NORMAL :Звычайныя
|
||||||
@@ -1417,7 +1419,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :{LTBLUE}Даз
|
|||||||
STR_CONFIG_SETTING_CATCHMENT :{LTBLUE}Зона пакрыцьця залежыць ад тыпу станцыі: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_CATCHMENT :{LTBLUE}Зона пакрыцьця залежыць ад тыпу станцыі: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_EXTRADYNAMITE :{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_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_NONE :няма
|
||||||
STR_CONFIG_SETTING_SMOKE_AMOUNT_ORIGINAL :арыгiнальная
|
STR_CONFIG_SETTING_SMOKE_AMOUNT_ORIGINAL :арыгiнальная
|
||||||
STR_CONFIG_SETTING_SMOKE_AMOUNT_REALISTIC :рэалістычная
|
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 :{LTBLUE}Мэтад стварэньня сыравінных прадпрыемстваў: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :не ствараць
|
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_NORMAL :як i iншыя
|
||||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :геолагаразьведка
|
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :геалягiчная разьведка
|
||||||
STR_CONFIG_SETTING_INDUSTRY_PLATFORM :{LTBLUE}Плоскi рэльеф вакол прадпрыемстваў: {ORANGE}{STRING} клет{P 0:1 ка кi ак}
|
STR_CONFIG_SETTING_INDUSTRY_PLATFORM :{LTBLUE}Пляскаты рэльеф вакол прадпрыемстваў: {ORANGE}{STRING} клет{P 0:1 ка кi ак}
|
||||||
STR_CONFIG_SETTING_MULTIPINDTOWN :{LTBLUE}Дазволіць некалькі прадпрыемстваў аднаго тыпу на горад: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_MULTIPINDTOWN :{LTBLUE}Дазволіць некалькі прадпрыемстваў аднаго тыпу на горад: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_SIGNALSIDE :{LTBLUE}Паказваць сыгналы на баку руху: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_SIGNALSIDE :{LTBLUE}Паказваць сыгналы на баку руху: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_SHOWFINANCES :{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_STOP_ON_COMPETITOR_ROAD :{LTBLUE}Дазволіць будаўніцтва прыпынкаў Ro-Ro на дарогах канкурэнтаў: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_ADJACENT_STATIONS :{LTBLUE}Дазволіць будаўніцтва сумежных станцыяў: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_ADJACENT_STATIONS :{LTBLUE}Дазволіць будаўніцтва сумежных станцыяў: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_DYNAMIC_ENGINES :{LTBLUE}Уключыць падтрымку некалькіх транспартных набораў NewGRF: {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}
|
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_LEFT :леваруч
|
||||||
STR_CONFIG_SETTING_TOOLBAR_POS_CENTER :ў цэнтры
|
STR_CONFIG_SETTING_TOOLBAR_POS_CENTER :ў цэнтры
|
||||||
STR_CONFIG_SETTING_TOOLBAR_POS_RIGHT :праваруч
|
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_LEFT :Зьлева
|
||||||
STR_CONFIG_SETTING_STATUSBAR_POS_CENTER :Пасярэдзiне
|
STR_CONFIG_SETTING_STATUSBAR_POS_CENTER :Пасярэдзiне
|
||||||
STR_CONFIG_SETTING_STATUSBAR_POS_RIGHT :Зправа
|
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_ROUTING :{ORANGE}Маршруты
|
||||||
STR_CONFIG_SETTING_VEHICLES_TRAINS :{ORANGE}Цягнікі
|
STR_CONFIG_SETTING_VEHICLES_TRAINS :{ORANGE}Цягнікі
|
||||||
STR_CONFIG_SETTING_ECONOMY_TOWNS :{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}
|
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_AI_SETTINGS :{BLACK}Паказаць наладкi ШI/АІ
|
||||||
STR_INTRO_TOOLTIP_QUIT :{BLACK}Выйсьці з OpenTTD
|
STR_INTRO_TOOLTIP_QUIT :{BLACK}Выйсьці з OpenTTD
|
||||||
|
|
||||||
|
|
||||||
# Quit window
|
# Quit window
|
||||||
STR_QUIT_CAPTION :{WHITE}Выхад
|
STR_QUIT_CAPTION :{WHITE}Выхад
|
||||||
STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Вы ўпэўнены, што жадаеце перапыніць гульню й вярнуцца ў {STRING}?
|
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_SUB_TROPICAL_LANDSCAPE :субтрапічны ляндшафт
|
||||||
STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :цацачны ляндшафт
|
STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :цацачны ляндшафт
|
||||||
STR_CHEAT_CHANGE_DATE :{LTBLUE}Зьмяненьне даты: {ORANGE}{DATE_SHORT}
|
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}
|
STR_CHEAT_SETUP_PROD :{LTBLUE}Дазволіць зьмяненьне прадукцыйнасьці: {ORANGE}{STRING}
|
||||||
|
|
||||||
# Livery window
|
# Livery window
|
||||||
@@ -1922,7 +1925,7 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Уста
|
|||||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Абараніце вашу гульню паролем, калі ня хочаце рабіць яе публічна даступнай
|
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Абараніце вашу гульню паролем, калі ня хочаце рабіць яе публічна даступнай
|
||||||
|
|
||||||
STR_NETWORK_START_SERVER_LAN_INTERNET :Лакальная сетка / Інтэрнэт
|
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_CLIENTS_SELECT :{BLACK}{NUM} клiент{P "" ы аў}
|
||||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. клiентаў:
|
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. клiентаў:
|
||||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Выбар максымальнай колькасьці кліентаў. Ня ўсе месцы павінны быць занятыя
|
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Выбар максымальнай колькасьці кліентаў. Ня ўсе месцы павінны быць занятыя
|
||||||
@@ -1952,7 +1955,7 @@ STR_NETWORK_LANG_DUTCH :Нідэрля
|
|||||||
STR_NETWORK_LANG_ESPERANTO :Эспэранта
|
STR_NETWORK_LANG_ESPERANTO :Эспэранта
|
||||||
STR_NETWORK_LANG_FINNISH :Фінская
|
STR_NETWORK_LANG_FINNISH :Фінская
|
||||||
STR_NETWORK_LANG_HUNGARIAN :Вугорская
|
STR_NETWORK_LANG_HUNGARIAN :Вугорская
|
||||||
STR_NETWORK_LANG_ICELANDIC :Ісляндзкая
|
STR_NETWORK_LANG_ICELANDIC :Ісьляндзкая
|
||||||
STR_NETWORK_LANG_ITALIAN :Італьянская
|
STR_NETWORK_LANG_ITALIAN :Італьянская
|
||||||
STR_NETWORK_LANG_JAPANESE :Японская
|
STR_NETWORK_LANG_JAPANESE :Японская
|
||||||
STR_NETWORK_LANG_KOREAN :Карэйская
|
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_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Пераключэньне паміж будаўніцтвам і выдаленьнем чыгуначных рэйкаў, сыгналаў, станцыяў. Пры націснутым Ctrl станцыі ліквідуюцца разам з рэйкамі.
|
||||||
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Канвэртаваць/мадэрнізаваць тып каляінаў. Пры націснутым Shift - ацэнка кошту будаўніцтва.
|
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Канвэртаваць/мадэрнізаваць тып каляінаў. Пры націснутым Shift - ацэнка кошту будаўніцтва.
|
||||||
|
|
||||||
|
|
||||||
# Rail depot construction window
|
# Rail depot construction window
|
||||||
STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Кірунак дэпо
|
STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Кірунак дэпо
|
||||||
STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Выберыце кірунак дэпо
|
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_ENTRY_TOOLTIP :{BLACK}Уваходны сэмафор (прэсыгнал).{}Адкрыты, калі хаця б адзін з выхадных сыгналаў на наступнай сэкцыі каляіны адкрыты. У астатніх выпадках закрыты.
|
||||||
STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Выхадны сэмафор (прэсыгнал).{}Працуе як звычайны сэмафор, але яго стан улічваецца ў працы ўваходных і камбінаваных сыгналаў.
|
STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Выхадны сэмафор (прэсыгнал).{}Працуе як звычайны сэмафор, але яго стан улічваецца ў працы ўваходных і камбінаваных сыгналаў.
|
||||||
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Камбінаваны сэмафор (прэсыгнал).{}Працуе адначасова як уваходны і выхадны сэмафор. Гэта дазваляе будаваць вялікія «дрэвы» каляінаў з прэсыгналамі.
|
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Камбінаваны сэмафор (прэсыгнал).{}Працуе адначасова як уваходны і выхадны сэмафор. Гэта дазваляе будаваць вялікія «дрэвы» каляінаў з прэсыгналамі.
|
||||||
STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Маршрутны сэмафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны з іх можа зарэзэрваваць сабе бясьпечны шлях. Дазваляе праходжаньне цягнікоў у абодва бакі.
|
STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Маршрутны сэмафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны зь іх можа зарэзэрваваць сабе бясьпечны шлях. Дазваляе праходжаньне цягнікоў у абодва бакі.
|
||||||
STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Аднабаковы маршрутны сэмафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны з іх можа зарэзэрваваць сабе бясьпечны шлях. Не дазваляе цягнікам праходзіць з адваротнага боку.
|
STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Аднабаковы маршрутны сэмафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны зь іх можа зарэзэрваваць сабе бясьпечны шлях. Не дазваляе цягнікам праходзіць з адваротнага боку.
|
||||||
STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Звычайны сьветлафор.{}Не дазваляе некалькім цягнікам адначасова знаходзіцца на адным блёк-участку.
|
STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Звычайны сьветлафор.{}Не дазваляе некалькім цягнікам адначасова знаходзіцца на адным блёк-участку.
|
||||||
STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Уваходны сьветлафор (прэсыгнал).{}Адкрыты, калі хаця б адзін з выхадных сыгналаў на наступнай сэкцыі каляіны адкрыты. У астатніх выпадках закрыты.
|
STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Уваходны сьветлафор (прэсыгнал).{}Адкрыты, калі хаця б адзін з выхадных сыгналаў на наступнай сэкцыі каляіны адкрыты. У астатніх выпадках закрыты.
|
||||||
STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Выхадны сьветлафор (прэсыгнал).{}Працуе як звычайны сьветлафор, але яго стан улічваецца ў працы ўваходных і камбінаваных сыгналаў.
|
STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Выхадны сьветлафор (прэсыгнал).{}Працуе як звычайны сьветлафор, але яго стан улічваецца ў працы ўваходных і камбінаваных сыгналаў.
|
||||||
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Камбінаваны сьветлафор (прэсыгнал).{}Працуе адначасова як уваходны і выхадны сьветлафор. Гэта дазваляе будаваць вялікія «дрэвы» каляінаў з прэсыгналамі.
|
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Камбінаваны сьветлафор (прэсыгнал).{}Працуе адначасова як уваходны і выхадны сьветлафор. Гэта дазваляе будаваць вялікія «дрэвы» каляінаў з прэсыгналамі.
|
||||||
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Маршрутны сьветлафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны з іх можа зарэзэрваваць сабе бясьпечны шлях. Дазваляе праходжаньне цягнікоў у абодва бакі.
|
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Маршрутны сьветлафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны зь іх можа зарэзэрваваць сабе бясьпечны шлях. Дазваляе праходжаньне цягнікоў у абодва бакі.
|
||||||
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Аднабаковы маршрутны сьветлафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны з іх можа зарэзэрваваць сабе бясьпечны шлях. Не дазваляе цягнікам праходзіць з адваротнага боку.
|
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Аднабаковы маршрутны сьветлафор (PMS).{}Дазваляе некалькім цягнікам знаходзіцца ў адным сыгнальным блёку, калі кожны зь іх можа зарэзэрваваць сабе бясьпечны шлях. Не дазваляе цягнікам праходзіць з адваротнага боку.
|
||||||
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Зьмяненьне тыпаў сыгналаў.{}Калі кнопка націснута, пстрыкніце для пераўтварэньня існуючага сыгнала ў сыгнал выбранага тыпу й віду, або пстрыкніце з націснутым Ctrl для перабіраньня існуючых варыянтаў. Shift+пстрычка - ацэнка кошту пераўтварэньня.
|
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Зьмяненьне тыпаў сыгналаў.{}Калі кнопка націснута, пстрыкніце для пераўтварэньня існуючага сыгнала ў сыгнал выбранага тыпу й віду, або пстрыкніце з націснутым Ctrl для перабіраньня існуючых варыянтаў. Shift+пстрычка - ацэнка кошту пераўтварэньня.
|
||||||
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Шчыльнасьць аўтаматычнай расстаноўкі сыгналаў пры цягненьні
|
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Шчыльнасьць аўтаматычнай расстаноўкі сыгналаў пры цягненьні
|
||||||
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_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_BUOY_TOOLTIP :{BLACK}Разьмясьціць буй, які можа быць выкарыстаны як пункт шляху. Пры націснутым Shift - ацэнка кошту будаўніцтва.
|
||||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Будаўніцтва аквэдукаў Пры націснутым Shift - ацэнка кошту будаўніцтва.
|
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Будаўніцтва аквэдукаў Пры націснутым Shift - ацэнка кошту будаўніцтва.
|
||||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Пазначыць, дзе будзе вада.{}Пабудаваць канал, а пры націснутым Ctrl клетка на ўзроўні мора запаўняецца вадой.
|
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
|
# Ship depot construction window
|
||||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Кірунак дока
|
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Кірунак дока
|
||||||
@@ -2409,7 +2413,7 @@ STR_STATION_BUILD_NOISE :{BLACK}Узро
|
|||||||
|
|
||||||
# Landscaping toolbar
|
# Landscaping toolbar
|
||||||
STR_LANDSCAPING_TOOLBAR :{WHITE}Земляныя работы
|
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_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Падняць кут зямлі. Перацягваньне падымае першы абраны кут і выраўноўвае выбраную вобласьць да новай вышыні кута. Ctrl выбірае вобласьць па дыяганалі. Пры націснутым Shift - ацэнка кошту будаўніцтва.
|
||||||
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Выраўнаваць зямлю да вышыні першага абранага кута. Ctrl выбірае вобласьць па дыяганалі. Пры націснутым Shift - ацэнка кошту выраўноўваньня.
|
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Выраўнаваць зямлю да вышыні першага абранага кута. Ctrl выбірае вобласьць па дыяганалі. Пры націснутым Shift - ацэнка кошту выраўноўваньня.
|
||||||
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Набыцьцё зямлі. Пры націснутым Shift - ацэнка кошту набыцьця.
|
STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Набыцьцё зямлі. Пры націснутым Shift - ацэнка кошту набыцьця.
|
||||||
@@ -2417,7 +2421,7 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Набы
|
|||||||
# Object construction window
|
# Object construction window
|
||||||
STR_OBJECT_BUILD_CAPTION :{WHITE}Выбар аб'екта
|
STR_OBJECT_BUILD_CAPTION :{WHITE}Выбар аб'екта
|
||||||
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Абярыце ствараны аб'ект. Пры націснутым Shift - ацэнка кошту пабудовы.
|
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_PREVIEW_TOOLTIP :{BLACK}Прагляд аб'екта
|
||||||
STR_OBJECT_BUILD_SIZE :{BLACK}Памер: {GOLD}{NUM} x {NUM} клетак
|
STR_OBJECT_BUILD_SIZE :{BLACK}Памер: {GOLD}{NUM} x {NUM} клетак
|
||||||
|
|
||||||
@@ -2434,10 +2438,10 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Паса
|
|||||||
|
|
||||||
# Land generation window (SE)
|
# Land generation window (SE)
|
||||||
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Стварэньне ляндшафту
|
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Стварэньне ляндшафту
|
||||||
STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Разьмясціць камяні па мапе
|
STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Разьмясьціць камяні па мапе
|
||||||
STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Разьмясціць пустэльню.{}Націсьніце Ctrl, каб выдаліць яе.
|
STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Разьмясьціць пустэльню.{}Націсьніце Ctrl, каб выдаліць яе.
|
||||||
STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Павялічыць плошчу змяненьня рэльефу
|
STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Павялічыць плошчу зьмяненьня рэльефу
|
||||||
STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Паменшыць плошчу змяненьня рэльефу
|
STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Паменшыць плошчу зьмяненьня рэльефу
|
||||||
STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Стварыць выпадковую мапу
|
STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Стварыць выпадковую мапу
|
||||||
STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Стварыць новы сцэнар
|
STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Стварыць новы сцэнар
|
||||||
STR_TERRAFORM_RESET_LANDSCAPE :{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_RANDOM_LAND :{WHITE}Выпадковы рэльеф
|
||||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Вышыня над узроўнем мора:
|
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Вышыня над узроўнем мора:
|
||||||
STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Падняць ўзровень роўнай зямлі на 1
|
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}Зьмяніць вышыню роўнай зямлі
|
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 :{BLACK}Унiз
|
||||||
STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Перамясьціць выбраны файл NewGRF ніжэй
|
STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Перамясьціць выбраны файл NewGRF ніжэй
|
||||||
STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Сьпіс устаноўленых файлаў NewGRF. Выберыце файл для зьмяненьня парамэтраў
|
STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Сьпіс устаноўленых файлаў NewGRF. Выберыце файл для зьмяненьня парамэтраў
|
||||||
|
|
||||||
STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Усталяваць парамэтры
|
STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Усталяваць парамэтры
|
||||||
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Пераключыць палітру
|
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Пераключыць палітру
|
||||||
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Пераключыць палітру для выбраных NewGRF файлаў.{}Выкарыстоўвайце пераключэньне, калі графіка ў гульні малюецца ружовым колерам.
|
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_NO_INFO :{BLACK}Няма даступнай інфармацыі
|
||||||
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Файл ня знойдзены
|
STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Файл ня знойдзены
|
||||||
STR_NEWGRF_SETTINGS_DISABLED :{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
|
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_RESET_TOOLTIP :{BLACK}Ськінуць значэньнi ўсіх парамэтраў
|
||||||
STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Парамэтр {NUM}
|
STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Парамэтр {NUM}
|
||||||
STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING}
|
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
|
# NewGRF inspect window
|
||||||
STR_NEWGRF_INSPECT_CAPTION :{WHITE}Прагляд - {STRING}
|
STR_NEWGRF_INSPECT_CAPTION :{WHITE}Прагляд - {STRING}
|
||||||
STR_NEWGRF_INSPECT_PARENT_BUTTON :{BLACK}Бацька (parent)
|
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 :{STRING} у {HEX}
|
||||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Аб'ект
|
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Аб'ект
|
||||||
@@ -2785,7 +2790,7 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Пара
|
|||||||
# Sprite aligner window
|
# Sprite aligner window
|
||||||
STR_SPRITE_ALIGNER_CAPTION :{WHITE}Выраўноўваньне спрайта {COMMA} ({STRING})
|
STR_SPRITE_ALIGNER_CAPTION :{WHITE}Выраўноўваньне спрайта {COMMA} ({STRING})
|
||||||
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Наступны спрайт
|
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_BUTTON :{BLACK}Перайсьці да спрайта
|
||||||
STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Перайсьці да зададзеных спрайту. Калі спрайт не нармальны, пераход адбудзецца да наступнага нармальнага.
|
STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Перайсьці да зададзеных спрайту. Калі спрайт не нармальны, пераход адбудзецца да наступнага нармальнага.
|
||||||
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{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_UNKNOWN_PROPERTY :Невядомая ўласьцівасьць для Action 0.
|
||||||
STR_NEWGRF_ERROR_INVALID_ID :Выкарыстоўваецца няправільны ID.
|
STR_NEWGRF_ERROR_INVALID_ID :Выкарыстоўваецца няправільны ID.
|
||||||
STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} утрымлiвае пашкоджаны спрайт. Усе пашкоджаныя спрайты будуць паказаны чырвоным знакам пытаньня (?).
|
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_READ_BOUNDS :Дадзеныя раптоўна скончыліся.
|
||||||
STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}У бягучым наборы базавай графікі адсутнічаюць выявы некаторых аб'ектаў.{}Калі ласка, абнавіце модуль базавай графікі.
|
STR_NEWGRF_ERROR_MISSING_SPRITES :{WHITE}У бягучым наборы базавай графікі адсутнічаюць выявы некаторых аб'ектаў.{}Калі ласка, абнавіце модуль базавай графікі.
|
||||||
STR_NEWGRF_ERROR_GRM_FAILED :Запрошаныя рэсурсы GRF недаступныя
|
STR_NEWGRF_ERROR_GRM_FAILED :Запрошаныя рэсурсы GRF недаступныя
|
||||||
@@ -2849,7 +2854,7 @@ STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Мяня
|
|||||||
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Цягнік «{VEHICLE}», які належыць «{COMPANY}», мае няправільную даўжыню. Верагодна, гэта выклікана праблемамі ў файле новай графікі. Гульня можа рассынхранізавацца або «выляцець».
|
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Цягнік «{VEHICLE}», які належыць «{COMPANY}», мае няправільную даўжыню. Верагодна, гэта выклікана праблемамі ў файле новай графікі. Гульня можа рассынхранізавацца або «выляцець».
|
||||||
|
|
||||||
STR_NEWGRF_BUGGY :{WHITE}NewGRF «{0:STRING}» падае няправільную інфармацыю.
|
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}» выклікаў бясконцы цыкл.
|
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}«{1:STRING}» выклікаў бясконцы цыкл.
|
||||||
|
|
||||||
# 'User removed essential NewGRFs'-placeholders for stuff without specs
|
# '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_ENGINE :<няправільная мадэль>
|
||||||
STR_NEWGRF_INVALID_INDUSTRYTYPE :<невядомае прадпрыемства>
|
STR_NEWGRF_INVALID_INDUSTRYTYPE :<невядомае прадпрыемства>
|
||||||
|
|
||||||
|
# NewGRF scanning window
|
||||||
|
|
||||||
# Sign list window
|
# Sign list window
|
||||||
STR_SIGN_LIST_CAPTION :{WHITE}Сьпіс таблічак - {COMMA} табліч{P ка кi ак}
|
STR_SIGN_LIST_CAPTION :{WHITE}Сьпіс таблічак - {COMMA} табліч{P ка кi ак}
|
||||||
STR_SIGN_LIST_MATCH_CASE :{BLACK}Рэг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_MATCH_CASE_TOOLTIP :{BLACK}Пераключыць праверку рэгістра пры параўнанні назваў таблiчак з фільтрам
|
||||||
STR_SIGN_LIST_CLEAR_TOOLTIP :{BLACK}Ачысціць фільтр
|
STR_SIGN_LIST_CLEAR_TOOLTIP :{BLACK}Ачысьціць фільтр
|
||||||
|
|
||||||
# Sign window
|
# Sign window
|
||||||
STR_EDIT_SIGN_CAPTION :{WHITE}Зьмяніць надпіс на таблічцы
|
STR_EDIT_SIGN_CAPTION :{WHITE}Зьмяніць надпіс на таблічцы
|
||||||
@@ -2979,10 +2986,10 @@ STR_CARGO_RATING_OUTSTANDING :Цудоўны
|
|||||||
STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Паказаць станцыю ў асноўным вакне. Ctrl+клік - паказаць у дадатковым вакне.
|
STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Паказаць станцыю ў асноўным вакне. Ctrl+клік - паказаць у дадатковым вакне.
|
||||||
STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Перайменаваць станцыю
|
STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Перайменаваць станцыю
|
||||||
|
|
||||||
STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Паказаць усе цягнiкi, у раскладзе якіх ёсць гэтая станцыя
|
STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Паказаць усе цягнiкi, у раскладзе якіх ёсьць гэтая станцыя
|
||||||
STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Паказаць усе аўтамабiл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_AIRCRAFT_TOOLTIP :{BLACK}Паказаць увесь авiятранспарт, у раскладзе якога ёсьць гэты аэрапорт
|
||||||
STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Паказаць усе караблі, у раскладзе якіх ёсць гэтая прыстань
|
STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Паказаць усе караблі, у раскладзе якіх ёсьць гэтая прыстань
|
||||||
|
|
||||||
STR_STATION_VIEW_RENAME_STATION_CAPTION :Перайменаваць станцыю
|
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_BUTTON :{BLACK}Пазычыць {CURRENCY}
|
||||||
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Павелічыць памер пазыкі. Ctrl+клiк - пазычыць да максымальнай сумы.
|
STR_FINANCES_BORROW_TOOLTIP :{BLACK}Павелічыць памер пазыкі. Ctrl+клiк - пазычыць да максымальнай сумы.
|
||||||
STR_FINANCES_REPAY_BUTTON :{BLACK}Аддаць {CURRENCY}
|
STR_FINANCES_REPAY_BUTTON :{BLACK}Аддаць {CURRENCY}
|
||||||
STR_FINANCES_REPAY_TOOLTIP :{BLACK}Вярнуць частку пазыкі. Ctrl+клiк - вярнуць усё, па магчымасці.
|
STR_FINANCES_REPAY_TOOLTIP :{BLACK}Вярнуць частку пазыкі. Ctrl+клiк - вярнуць усё, па магчымасьці.
|
||||||
|
|
||||||
# Company view
|
# Company view
|
||||||
STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
|
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_HQ :{BLACK}Перамясьціць
|
||||||
STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Перамясьціць штаб-кватэру кампаніі ў іншае месца за 1% ацэнкавага кошту капіталу кампаніі. Shift+пстрычка - ацэнка кошту пераносу.
|
STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Перамясьціць штаб-кватэру кампаніі ў іншае месца за 1% ацэнкавага кошту капіталу кампаніі. Shift+пстрычка - ацэнка кошту пераносу.
|
||||||
|
|
||||||
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Знешнасьць
|
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Зьнешнасьць
|
||||||
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Зьмяніць знешнасьць дырэктара
|
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Зьмяніць зьнешнасьць дырэктара
|
||||||
STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Колер
|
STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Колер
|
||||||
STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Зьмяніць колер транспартных сродкаў кампаніі
|
STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Зьмяніць колер транспартных сродкаў кампаніі
|
||||||
STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{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_CAPTION :{WHITE}{VEHICLE} (Пераабсталяваньне)
|
||||||
STR_REFIT_TITLE :{GOLD}Выберыце тып грузу для перавозкі:
|
STR_REFIT_TITLE :{GOLD}Выберыце тып грузу для перавозкі:
|
||||||
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Новая ёмістасьць: {GOLD}{CARGO}{}{BLACK}Кошт пераабсталяваньня: {GOLD}{CURRENCY}
|
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_SELECT_VEHICLES_TOOLTIP :{BLACK}Абярыце вагоны для пераабсталяваньня. Можна абвесьці мышшу некалькі вагонаў. Пстрычка па-за межамі састава абярэ ўвесь састаў. Ctrl+пстрычка абярэ вагоны да канца састава.
|
||||||
|
|
||||||
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Выберыце тып грузу для перавозкі
|
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Выберыце тып грузу для перавозкі
|
||||||
@@ -3543,9 +3550,11 @@ STR_ORDER_SERVICE :{BLACK}Абсл
|
|||||||
STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ісьці заўсёды
|
STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ісьці заўсёды
|
||||||
STR_ORDER_DROP_SERVICE_DEPOT :Абслужыць, калі неабходна
|
STR_ORDER_DROP_SERVICE_DEPOT :Абслужыць, калі неабходна
|
||||||
STR_ORDER_DROP_HALT_DEPOT :Стоп
|
STR_ORDER_DROP_HALT_DEPOT :Стоп
|
||||||
STR_ORDER_SERVICE_TOOLTIP :{BLACK}Прапусціць гэтае заданьне, калі абслугоўваньне не патрабуецца
|
STR_ORDER_SERVICE_TOOLTIP :{BLACK}Прапусьціць гэтае заданьне, калі абслугоўваньне не патрабуецца
|
||||||
|
|
||||||
STR_ORDER_CONDITIONAL_VARIABLE_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_LOAD_PERCENTAGE :Працэнт пагрузкі
|
||||||
STR_ORDER_CONDITIONAL_RELIABILITY :Надзейнасьць
|
STR_ORDER_CONDITIONAL_RELIABILITY :Надзейнасьць
|
||||||
STR_ORDER_CONDITIONAL_MAX_SPEED :Макс. хуткасьць
|
STR_ORDER_CONDITIONAL_MAX_SPEED :Макс. хуткасьць
|
||||||
@@ -3606,7 +3615,7 @@ STR_ORDER_STOP_ORDER :(Стоп)
|
|||||||
|
|
||||||
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
|
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
|
||||||
|
|
||||||
STR_ORDER_AUTOMATIC :(Аўтаматычна)
|
STR_ORDER_IMPLICIT :(Аўтаматычна)
|
||||||
|
|
||||||
STR_ORDER_FULL_LOAD :(Поўная загрузка)
|
STR_ORDER_FULL_LOAD :(Поўная загрузка)
|
||||||
STR_ORDER_FULL_LOAD_ANY :(Поўная загрузка любым грузам)
|
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_FULL_LOAD_ANY :(Не разгружацца й чакаць поўнай загрузкі любым грузам)
|
||||||
STR_ORDER_NO_UNLOAD_NO_LOAD :(Не разгружацца й не грузiцца)
|
STR_ORDER_NO_UNLOAD_NO_LOAD :(Не разгружацца й не грузiцца)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
STR_ORDER_STOP_LOCATION_NEAR_END :[пачатак станцыi]
|
STR_ORDER_STOP_LOCATION_NEAR_END :[пачатак станцыi]
|
||||||
STR_ORDER_STOP_LOCATION_MIDDLE :[сярэдзiна станцыi]
|
STR_ORDER_STOP_LOCATION_MIDDLE :[сярэдзiна станцыi]
|
||||||
STR_ORDER_STOP_LOCATION_FAR_END :[канец станцыі]
|
STR_ORDER_STOP_LOCATION_FAR_END :[канец станцыі]
|
||||||
@@ -3786,7 +3797,7 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE :<недасту
|
|||||||
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Гульня была захавана ў вэрсіі без падтрымкі трамваяў. Усе трамваі былі адключаны.
|
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Гульня была захавана ў вэрсіі без падтрымкі трамваяў. Усе трамваі былі адключаны.
|
||||||
|
|
||||||
# Map generation messages
|
# 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_NO_TOWN_IN_SCENARIO :{WHITE}... у гэтым сцэнары няма гарадоў
|
||||||
|
|
||||||
STR_ERROR_PNGMAP :{WHITE}Не атрымалася загрузіць ляндшафт з PNG...
|
STR_ERROR_PNGMAP :{WHITE}Не атрымалася загрузіць ляндшафт з PNG...
|
||||||
@@ -3797,8 +3808,10 @@ STR_ERROR_PNGMAP_MISC :{WHITE}... не
|
|||||||
STR_ERROR_BMPMAP :{WHITE}Не атрымалася загрузіць ляндшафт з BMP...
|
STR_ERROR_BMPMAP :{WHITE}Не атрымалася загрузіць ляндшафт з BMP...
|
||||||
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... немагчыма пераўтварыць тып вiдарысу.
|
STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... немагчыма пераўтварыць тып вiдарысу.
|
||||||
|
|
||||||
|
STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}... выява занадта вялiкая
|
||||||
|
|
||||||
STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Выхад за межы даступных значэньняў
|
STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Выхад за межы даступных значэньняў
|
||||||
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Змяненьне памераў зыходнай карты да такіх значэньняў не рэкамендуецца. Працягваць?
|
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Зьмяненьне памераў зыходнай мапы да такіх значэньняў не рэкамэндуецца. Працягваць?
|
||||||
|
|
||||||
# Soundset messages
|
# Soundset messages
|
||||||
STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Бягучая гукавая схэма абрана сістэмай аўтаматычна. Дадатковыя наборы гукаў можна загрузіць праз сістэму анлайн-кантэнту.
|
STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Бягучая гукавая схэма абрана сістэмай аўтаматычна. Дадатковыя наборы гукаў можна загрузіць праз сістэму анлайн-кантэнту.
|
||||||
@@ -3825,7 +3838,7 @@ STR_ERROR_ALREADY_BUILT :{WHITE}... уж
|
|||||||
STR_ERROR_OWNED_BY :{WHITE}... належыць {STRING}
|
STR_ERROR_OWNED_BY :{WHITE}... належыць {STRING}
|
||||||
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... участак належыць іншай кампаніі
|
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... участак належыць іншай кампаніі
|
||||||
STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... дасягнуты лiмiт ляндшафтных зьменаў
|
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_NAME_MUST_BE_UNIQUE :{WHITE}Імя павінна быць унікальным
|
||||||
STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} на шляху
|
STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} на шляху
|
||||||
STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Забаронена падчас паўзы
|
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_AIRPORT :{WHITE}Адміністрацыя г. {NBSP}{TOWN} забараняе пабудову яшчэ аднаго аэрапорта ў горадзе
|
||||||
STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}Адміністрацыя г. {NBSP}{TOWN} не дазваляе будаўніцтва аэрапорта з-за высокага ўзроўню шуму.
|
STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}Адміністрацыя г. {NBSP}{TOWN} не дазваляе будаўніцтва аэрапорта з-за высокага ўзроўню шуму.
|
||||||
STR_ERROR_BRIBE_FAILED :{WHITE}Ваша спроба даць хабар была
|
STR_ERROR_BRIBE_FAILED :{WHITE}Ваша спроба даць хабар была
|
||||||
STR_ERROR_BRIBE_FAILED_2 :{WHITE}выяўлена рэгіянальным следчым
|
STR_ERROR_BRIBE_FAILED_2 :{WHITE}выяўлена рэгіянальным сьледчым
|
||||||
|
|
||||||
# Levelling errors
|
# Levelling errors
|
||||||
STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Тут немагчыма падвысіць узровень зямлі...
|
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_RENAME_TOWN :{WHITE}Немагчыма перайменаваць горад...
|
||||||
STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Тут немагчыма пабудаваць горад...
|
STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Тут немагчыма пабудаваць горад...
|
||||||
STR_ERROR_CAN_T_EXPAND_TOWN :{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_CLOSE_TO_ANOTHER_TOWN :{WHITE}... занадта блізка да іншага горада
|
||||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... занадта шмат гарадоў
|
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... занадта шмат гарадоў
|
||||||
STR_ERROR_NO_SPACE_FOR_TOWN :{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_TOWNS :{WHITE}... можна будаваць толькі ў гарадах
|
||||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... можна будаваць толькі ў нізінах
|
STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... можна будаваць толькі ў нізінах
|
||||||
STR_ERROR_CAN_ONLY_BE_POSITIONED :{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
|
# Station construction related errors
|
||||||
STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Тут немагчыма пабудаваць чыгуначную станцыю...
|
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_WOOD :{G=f}Madeira
|
||||||
STR_CARGO_PLURAL_IRON_ORE :{G=m}Minério de Ferro
|
STR_CARGO_PLURAL_IRON_ORE :{G=m}Minério de Ferro
|
||||||
STR_CARGO_PLURAL_STEEL :{G=m}Aço
|
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_COPPER_ORE :{G=m}Minério de Cobre
|
||||||
STR_CARGO_PLURAL_MAIZE :{G=m}Milho
|
STR_CARGO_PLURAL_MAIZE :{G=m}Milho
|
||||||
STR_CARGO_PLURAL_FRUIT :{G=f}Fruta
|
STR_CARGO_PLURAL_FRUIT :{G=f}Fruta
|
||||||
STR_CARGO_PLURAL_DIAMONDS :{G=m}Diamantes
|
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_PAPER :{G=m}Papel
|
||||||
STR_CARGO_PLURAL_GOLD :{G=m}Ouro
|
STR_CARGO_PLURAL_GOLD :{G=m}Ouro
|
||||||
STR_CARGO_PLURAL_WATER :{G=f}Água
|
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_GIANT_SCREENSHOT :Captura de tela do mapa inteiro
|
||||||
STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre 'OpenTTD'
|
STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre 'OpenTTD'
|
||||||
STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de "sprites"
|
STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de "sprites"
|
||||||
|
STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Alternar caixas limítrofes
|
||||||
############ range ends here
|
############ range ends here
|
||||||
|
|
||||||
############ range for days starts (also used for the place in the highscore window)
|
############ 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
|
# Graph key window
|
||||||
STR_GRAPH_KEY_CAPTION :{WHITE}Chave para gráficos da empresa
|
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
|
# Company league window
|
||||||
STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Tabela da Liga das Empresas
|
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_SHOW_HEIGHT :{BLACK}Mostrar altitude
|
||||||
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Não exibir indústrias no mapa
|
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_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_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
|
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_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_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_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_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 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 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 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 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!
|
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 :Personalizado
|
||||||
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Personalizado ({NUM}%)
|
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Personalizado ({NUM}%)
|
||||||
|
|
||||||
|
|
||||||
STR_DISASTER_NONE :Nenhum
|
STR_DISASTER_NONE :Nenhum
|
||||||
STR_DISASTER_REDUCED :Reduzido
|
STR_DISASTER_REDUCED :Reduzido
|
||||||
STR_DISASTER_NORMAL :Normal
|
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_NONE :Nenhum
|
||||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
|
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
|
||||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Melhorado
|
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_COUNTER_CLOCKWISE :Sentido Anti-Horário
|
||||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Sentido 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}
|
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_NEW_GAME :{BLACK}Novo Jogo
|
||||||
STR_INTRO_LOAD_GAME :{BLACK}Abrir Jogo
|
STR_INTRO_LOAD_GAME :{BLACK}Abrir Jogo
|
||||||
STR_INTRO_PLAY_SCENARIO :{BLACK}Jogar Cenário
|
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_SCENARIO_EDITOR :{BLACK}Editor de Cenário
|
||||||
STR_INTRO_MULTIPLAYER :{BLACK}Multi-jogador
|
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_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_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_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_SCENARIO_EDITOR :{BLACK}Criar um cenário de jogo personalizado
|
||||||
STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Iniciar um jogo de vários jogadores
|
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_AI_SETTINGS :{BLACK}Exibir configs. da IA
|
||||||
STR_INTRO_TOOLTIP_QUIT :{BLACK}Sair de 'OpenTTD'
|
STR_INTRO_TOOLTIP_QUIT :{BLACK}Sair de 'OpenTTD'
|
||||||
|
|
||||||
|
|
||||||
# Quit window
|
# Quit window
|
||||||
STR_QUIT_CAPTION :{WHITE}Sair
|
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}?
|
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 :IA
|
||||||
STR_CONTENT_TYPE_AI_LIBRARY :IA's disponíveis
|
STR_CONTENT_TYPE_AI_LIBRARY :IA's disponíveis
|
||||||
STR_CONTENT_TYPE_SCENARIO :Cenário
|
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_SOUNDS :Sons padrão
|
||||||
STR_CONTENT_TYPE_BASE_MUSIC :Músicsas 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_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_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_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_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_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.
|
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_LOAD_CAPTION :{WHITE}Abrir Jogo
|
||||||
STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Salvar Cenário
|
STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Salvar Cenário
|
||||||
STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Abrir 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_HOME_BUTTON :{BLACK}Clique aqui para selecionar o diretório padrão de jogos salvos
|
||||||
STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} livres
|
STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} livres
|
||||||
STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de unidades, diretórios e arquivos de jogos gravados
|
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_RANDOMIZE :{BLACK}Randômico
|
||||||
STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual
|
STR_MAPGEN_BORDER_MANUAL :{BLACK}Manual
|
||||||
|
|
||||||
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotação do mapa em relevo:
|
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotação do mapa topográfico:
|
||||||
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa em relevo:
|
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Nome do mapa topográfico:
|
||||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho:
|
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Tamanho:
|
||||||
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
|
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_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_SET_PARAMETERS :{BLACK}Definir parâmetros
|
||||||
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Liga/Desliga paleta
|
STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Alterna 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_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_APPLY_CHANGES :{BLACK}Aplicar alterações
|
||||||
|
|
||||||
STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Procurar o conteúdo on-line
|
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_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_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_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
|
# NewGRF related 'general' warnings
|
||||||
STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Cuidado!
|
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_ENGINE :<modelo de veíc. inválido>
|
||||||
STR_NEWGRF_INVALID_INDUSTRYTYPE :<indústria inválida>
|
STR_NEWGRF_INVALID_INDUSTRYTYPE :<indústria inválida>
|
||||||
|
|
||||||
|
# NewGRF scanning window
|
||||||
|
|
||||||
# Sign list window
|
# Sign list window
|
||||||
STR_SIGN_LIST_CAPTION :{WHITE}Lista de Placas - {COMMA} Placa{P "" s}
|
STR_SIGN_LIST_CAPTION :{WHITE}Lista de Placas - {COMMA} Placa{P "" s}
|
||||||
STR_SIGN_LIST_MATCH_CASE :{BLACK}Diferenciar caixa alta
|
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_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
|
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_LOAD_PERCENTAGE :Percentual carregado
|
||||||
STR_ORDER_CONDITIONAL_RELIABILITY :Confiabilidade
|
STR_ORDER_CONDITIONAL_RELIABILITY :Confiabilidade
|
||||||
STR_ORDER_CONDITIONAL_MAX_SPEED :Velocidade máxima
|
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_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 :(Carregar completamente)
|
||||||
STR_ORDER_FULL_LOAD_ANY :(Carregar completamente qualquer carga)
|
STR_ORDER_FULL_LOAD_ANY :(Carregar completamente qualquer carga)
|
||||||
@@ -3404,8 +3413,8 @@ STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{U
|
|||||||
# Income 'floats'
|
# Income 'floats'
|
||||||
STR_INCOME_FLOAT_COST_SMALL :{TINYFONT}{RED}Custo: {CURRENCY}
|
STR_INCOME_FLOAT_COST_SMALL :{TINYFONT}{RED}Custo: {CURRENCY}
|
||||||
STR_INCOME_FLOAT_COST :{RED}Custo: {CURRENCY}
|
STR_INCOME_FLOAT_COST :{RED}Custo: {CURRENCY}
|
||||||
STR_INCOME_FLOAT_INCOME_SMALL :{TINYFONT}{GREEN}Renda: {CURRENCY}
|
STR_INCOME_FLOAT_INCOME_SMALL :{TINYFONT}{GREEN}Lucro: {CURRENCY}
|
||||||
STR_INCOME_FLOAT_INCOME :{GREEN}Renda: {CURRENCY}
|
STR_INCOME_FLOAT_INCOME :{GREEN}Lucro: {CURRENCY}
|
||||||
STR_FEEDER_TINY :{TINYFONT}{YELLOW}Transferir: {CURRENCY}
|
STR_FEEDER_TINY :{TINYFONT}{YELLOW}Transferir: {CURRENCY}
|
||||||
STR_FEEDER :{YELLOW}Transferir: {CURRENCY}
|
STR_FEEDER :{YELLOW}Transferir: {CURRENCY}
|
||||||
STR_MESSAGE_ESTIMATED_COST :{WHITE}Custo Estimado: {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 :{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_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_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?
|
STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Alterar muito o tamanho do mapa original não é recomendado. Continuar com a geração?
|
||||||
|
|
||||||
|