(svn r11146) [NoAI] -Sync: with trunk r11035:11045.
--- a/Doxyfile Sun Sep 09 21:14:29 2007 +0000
+++ b/Doxyfile Sun Sep 23 07:37:38 2007 +0000
@@ -5,7 +5,6 @@
OUTPUT_DIRECTORY = docs/source/
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
-USE_WINDOWS_ENCODING = NO
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \
@@ -186,13 +185,13 @@
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
-MACRO_EXPANSION = NO
-EXPAND_ONLY_PREDEF = NO
+MACRO_EXPANSION = YES
+EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
-EXPAND_AS_DEFINED =
+EXPAND_AS_DEFINED = DEF_COMMAND
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
@@ -221,8 +220,6 @@
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
-MAX_DOT_GRAPH_WIDTH = 1024
-MAX_DOT_GRAPH_HEIGHT = 1024
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
--- a/Makefile.src.in Sun Sep 09 21:14:29 2007 +0000
+++ b/Makefile.src.in Sun Sep 23 07:37:38 2007 +0000
@@ -249,15 +249,15 @@
$(BIN_DIR)/$(TTD): $(TTD)
$(Q)cp $< $@
-$(TTD): rev.o $(OBJS) $(CONFIG_CACHE_LINKER)
+$(TTD): $(OBJS) $(CONFIG_CACHE_LINKER)
$(E) '$(STAGE) Linking $@'
ifeq ($(OS), PSP)
# Because of a bug in the PSP GCC tools, linking via CXX results
# in total chaos and more problems then you can handle. So we need
# CC to link OpenTTD for PSP
- $(Q)$(CC_HOST) $(LDFLAGS) rev.o $(OBJS) $(LIBS) -o $@
+ $(Q)$(CC_HOST) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
else
- $(Q)$(CXX_HOST) $(LDFLAGS) rev.o $(OBJS) $(LIBS) -o $@
+ $(Q)$(CXX_HOST) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
endif
ifdef STRIP
$(Q)$(STRIP) $@
@@ -275,19 +275,11 @@
# Revision files
-rev.cpp: $(CONFIG_CACHE_VERSION)
-# setting the revision number in a place, there the binary can read it
- @echo 'extern const char _openttd_revision[] = "$(REV)";' > rev.cpp
-# Some additions for MorphOS versions tag
-ifeq ($(OS),MORPHOS)
- @echo '#ifdef __MORPHOS__' >> rev.cpp
- @echo 'extern const char morphos_versions_tag[] = "\\0$$VER: OpenTTD $(REV) ('`date +%d.%m.%y`') (C) OpenTTD Team [MorphOS, PowerPC]";' >> rev.cpp
- @echo '#endif' >> rev.cpp
-endif
+$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
+ $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s#@@VERSION@@#$(REV)#g;s#@@DATE@@#`date +%d.%m.%y`#g" > $(SRC_DIR)/rev.cpp
-rev.o: rev.cpp $(FILE_DEP)
- $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
- $(Q)$(CXX_HOST) $(CFLAGS) -c -o $@ $<
+$(SRC_DIR)/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/ottdres.rc.in
+ $(Q)cat $(SRC_DIR)/ottdres.rc.in | sed "s#@@VERSION@@#$(REV)#g;s#@@DATE@@#`date +%d.%m.%y`#g" > $(SRC_DIR)/ottdres.rc
FORCE:
@@ -295,10 +287,10 @@
clean:
$(E) '$(STAGE) Cleaning up object files'
- $(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(TTD:%=$(BIN_DIR)/%) $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_ENDIAN) $(CONFIG_CACHE_SOURCE) $(ENDIAN_TARGETS) rev.o rev.cpp
+ $(Q)rm -f $(DEPS) $(OBJS) $(TTD) $(TTD:%=$(BIN_DIR)/%) $(CONFIG_CACHE_COMPILER) $(CONFIG_CACHE_LINKER) $(CONFIG_CACHE_ENDIAN) $(CONFIG_CACHE_SOURCE) $(ENDIAN_TARGETS)
mrproper: clean
- $(Q)rm -f rev.cpp
+ $(Q)rm -f $(SRC_DIR)/rev.cpp $(SRC_DIR)/ottdres.rc
%.o:
@echo '$(STAGE) No such source-file: $(@:%.o=%).[c|cpp|mm|rc]'
--- a/changelog.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/changelog.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1,3 +1,42 @@
+0.5.3 (2007-09-15)
+------------------------------------------------------------------------
+- Fix: Possible NULL pointer dereference that could be triggered remotely (r11074)
+- Fix: Removing CMD_AUTO from some commands could remotely trigger an assertion [FS#1179] (r11040)
+- Fix: Underflow that caused overflows in the performance rating [FS#1179] (r11039)
+- Fix: [Windows] MIDI does not stop when closing openttd [FS#1164] (r11029)
+- Fix: Do not unconditionally assume that a tile has a depot (r11027)
+- Fix: Give a more correct error when building some things on tile 0 [FS#1173] (r11024)
+- Fix: Do not display income/expenses when they do not belong to a "valid" tile, like the money cheat and giving money [FS#1175] (r11021)
+- Fix: One could not give money when (s)he had too much money [FS#1174] (r11020)
+- Fix: Disallow buying/selling shares in your own company or a bankrupt company [FS#1169] (r11018)
+- Fix: Crash when quiting the game in one of the end score windows [FS#1218] (r11071)
+
+
+0.5.3-RC3 (2007-08-30)
+------------------------------------------------------------------------
+- Fix: Spectators are not allowed to issue commands (r11006)
+- Fix: Make the AI not crash when it has ships as the AI does not support them [FS#1133] (r10942)
+- Fix: Trains would not get flooded when they are at the lower part of a tile that would become a coast tile after flooding [FS#1127] (r10892)
+- Fix: Removing road with the road removal tool would also work with a negative bank account, making the bank account even more negative than it was [FS#1125] (r10890)
+- Fix: Some isocodes were wrong, resulting in some NewGRF not working properly for the affected languages (r10877)
+- Fix: [Windows] Do not try to minimise or restore the window when closing OpenTTD [FS#998] (r10835)
+- Fix: Trains going over bridges would get the "going down hill" accelerate bonus, which causes trains to go faster on bridges than they would be going on level land [FS#1096] (r10739)
+- Fix: Trains being split into two pieces when loading an old savegame [FS#1062] (r10735)
+- Fix: [OS/2] Fix chdir problem with open/save dialog (r10650)
+- Fix: One could not remove locks that were build in a (very) old version of OpenTTD [FS#1038] (r10593)
+- Fix: One cannot navigate using arrow keys in the game name text box [FS#1038] (r10500)
+- Fix: Ship's maximum speed wrongly shown [FS#1013] (r10497)
+- Fix: [OSX] Of the resolution is changed to something that is too high for the monitor, then it is reduced to fit the monitor size, solving several crashes and graphical glitches [FS#458] (r10410)
+- Fix: NPF was leaking memory each time it got initialized, except for the first time (r10357)
+- Fix: [YAPF] 'target_seen' flag that is set prematurely in some cases (1 tile long cached segment followed by target station) which caused asserts to trigger [FS#884] (r10199)
+
+
+0.5.3-RC2 (2007-07-07)
+------------------------------------------------------------------------
+- Fix: Visual glitches when a window is resized in the WE_CREATE callback (r10465)
+- Fix: [Windows] _wnd.has_focus was not properly set after using ALT-TAB [FS#962] (r10399)
+
+
0.5.3-RC1 (2007-06-28)
------------------------------------------------------------------------
- Feature: Make the client list window (for network games) stickyable (r10293)
--- a/config.lib Sun Sep 09 21:14:29 2007 +0000
+++ b/config.lib Sun Sep 23 07:37:38 2007 +0000
@@ -745,7 +745,7 @@
# General CFlags for BUILD
CFLAGS_BUILD=""
# General CFlags for HOST
- CFLAGS="$CFLAGS -D$os -DWITH_REV"
+ CFLAGS="$CFLAGS -D$os"
# CFlags for HOST and C-Compiler
CC_FLAGS=""
# Libs to compile. In fact this is just LDFLAGS
--- a/docs/openttd.6 Sun Sep 09 21:14:29 2007 +0000
+++ b/docs/openttd.6 Sun Sep 23 07:37:38 2007 +0000
@@ -1,6 +1,6 @@
.\" Hey, EMACS: -*- nroff -*-
.\" Please adjust this date whenever revising the manpage.
-.Dd Jun 28, 2007
+.Dd Sep 15, 2007
.Dt OPENTTD 6
.Sh NAME
.Nm openttd
--- a/known-bugs.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/known-bugs.txt Sun Sep 23 07:37:38 2007 +0000
@@ -14,6 +14,7 @@
------------------------------------------------------------------------
URL: http://bugs.openttd.org
+-944 Incorrect el-rail catenary pole/wire offsets
-917 Load scenario with no towns failed without proper warning
-873 Assertion window fails to open on OSX
-820 Pillar drawing order glich, with newbridges
@@ -30,7 +31,6 @@
-501 Mouse pointer gets hidden, when draging out of window and back again. Only affects Wacom etc.
-494 Get free money abusing a stock bug
-474 Overtaking car doesn't hit the against-riding car.
--458 Crash when changing Resolution on Mac OS X (x86)
-435 Assertion window doesn't show when in fullscreen on Mac OS X
-423 Improved loading causes high CPU use with long trains
-410 Openttd in dedicated mode don't run without data files
--- a/os/debian/changelog Sun Sep 09 21:14:29 2007 +0000
+++ b/os/debian/changelog Sun Sep 23 07:37:38 2007 +0000
@@ -4,6 +4,24 @@
-- Matthijs Kooijman <m.kooijman@student.utwente.nl> Mon, 26 Feb 2007 21:07:05 +0100
+openttd (0.5.3-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Matthijs Kooijman <m.kooijman@student.utwente.nl> Sat, 15 Sep 2007 13:30:00 +0100
+
+openttd (0.5.3~rc3-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Matthijs Kooijman <m.kooijman@student.utwente.nl> Thu, 30 Aug 2007 23:30:00 +0100
+
+openttd (0.5.3~rc2-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Matthijs Kooijman <m.kooijman@student.utwente.nl> Sat, 7 Jul 2007 20:05:00 +0100
+
openttd (0.5.3~rc1-1) unstable; urgency=low
* New upstream release.
--- a/os/win32/installer/install.nsi Sun Sep 09 21:14:29 2007 +0000
+++ b/os/win32/installer/install.nsi Sun Sep 23 07:37:38 2007 +0000
@@ -1,6 +1,6 @@
!define APPNAME "OpenTTD" ; Define application name
!define APPVERSION "0.5.3" ; Define application version
-!define INSTALLERVERSION 35 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
+!define INSTALLERVERSION 38 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
!define APPURLLINK "http://www.openttd.org"
!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/projects/determineversion.vbs Sun Sep 23 07:37:38 2007 +0000
@@ -0,0 +1,129 @@
+Option Explicit
+
+Dim FSO
+Set FSO = CreateObject("Scripting.FileSystemObject")
+
+Sub FindReplaceInFile(filename, to_find, replacement)
+ Dim file, data
+ Set file = FSO.OpenTextFile(filename, 1, 0, 0)
+ data = file.ReadAll
+ file.Close
+ data = Replace(data, to_find, replacement)
+ Set file = FSO.CreateTextFile(FileName, -1, 0)
+ file.Write data
+ file.Close
+End Sub
+
+Sub UpdateFile(version, cur_date, filename)
+ FSO.CopyFile filename & ".in", filename
+ FindReplaceInFile filename, "@@VERSION@@", version
+ FindReplaceInFile filename, "@@DATE@@", cur_date
+End Sub
+
+Sub UpdateFiles(version)
+ Dim cur_date
+ cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date)
+ UpdateFile version, cur_date, "../src/rev.cpp"
+ UpdateFile version, cur_date, "../src/ottdres.rc"
+End Sub
+
+Function DetermineSVNVersion()
+ Dim WshShell, version, url, oExec
+ Set WshShell = CreateObject("WScript.Shell")
+ On Error Resume Next
+
+ ' Try TortoiseSVN
+ ' Get the directory where TortoiseSVN (should) reside(s)
+ Dim sTortoise
+ sTortoise = WshShell.RegRead("HKLM\SOFTWARE\TortoiseSVN\Directory")
+
+ Dim file
+ ' Write some "magic" to a temporary file so we can acquire the svn revision/state
+ Set file = FSO.CreateTextFile("tsvn_tmp", -1, 0)
+ file.WriteLine "r$WCREV$$WCMODS?M:$"
+ file.WriteLine "$WCURL$"
+ file.Close
+ Set oExec = WshShell.Exec(sTortoise & "\bin\SubWCRev.exe ../src tsvn_tmp tsvn_tmp")
+ ' Wait till the application is finished ...
+ Do
+ OExec.StdOut.ReadLine()
+ Loop While Not OExec.StdOut.atEndOfStream
+
+ Set file = FSO.OpenTextFile("tsvn_tmp", 1, 0, 0)
+ version = file.ReadLine
+ url = file.ReadLine
+ file.Close
+
+ Set file = FSO.GetFile("tsvn_tmp")
+ file.Delete
+
+ ' Looks like there is no TortoiseSVN installed either. Then we don't know it.
+ If InStr(version, "$") Then
+ ' Reset error and version
+ Err.Clear
+ version = "norev000"
+ ' Do we have subversion installed? Check immediatelly whether we've got a modified WC.
+ Set oExec = WshShell.Exec("svnversion ../src")
+ If Err.Number = 0 Then
+ Dim modified
+ If InStr(OExec.StdOut.ReadLine(), "M") Then
+ modified = "M"
+ Else
+ modified = ""
+ End If
+
+ ' Set the environment to english
+ WshShell.Environment("PROCESS")("LANG") = "en"
+
+ ' And use svn info to get the correct revision and branch information.
+ Set oExec = WshShell.Exec("svn info ../src")
+ If Err.Number = 0 Then
+ Dim line
+ Do
+ line = OExec.StdOut.ReadLine()
+ If InStr(line, "URL") Then
+ url = line
+ End If
+ If InStr(line, "Last Changed Rev") Then
+ version = "r" & Mid(line, 19) & modified
+ End If
+ Loop While Not OExec.StdOut.atEndOfStream
+ End If
+ End If
+ End If
+
+ If version <> "norev000" Then
+ If InStr(url, "branches") Then
+ url = Mid(url, InStr(url, "branches") + 8)
+ url = Mid(url, 1, InStr(2, url, "/") - 1)
+ version = version & Replace(url, "/", "-")
+ End If
+ End If
+
+ DetermineSVNVersion = version
+End Function
+
+Function IsCachedVersion(version)
+ Dim cache_file, cached_version
+ cached_version = ""
+ Set cache_file = FSO.OpenTextFile("../config.cache.version", 1, True, 0)
+ If Not cache_file.atEndOfStream Then
+ cached_version = cache_file.ReadLine()
+ End If
+ cache_file.Close
+
+ If version <> cached_version Then
+ Set cache_file = fso.CreateTextFile("../config.cache.version", True)
+ cache_file.WriteLine(version)
+ cache_file.Close
+ IsCachedVersion = False
+ Else
+ IsCachedVersion = True
+ End If
+End Function
+
+Dim version
+version = DetermineSVNVersion
+If Not (IsCachedVersion(version) And FSO.FileExists("../src/rev.cpp") And FSO.FileExists("../src/ottdres.rc")) Then
+ UpdateFiles version
+End If
--- a/projects/openttd.vcproj Sun Sep 09 21:14:29 2007 +0000
+++ b/projects/openttd.vcproj Sun Sep 23 07:37:38 2007 +0000
@@ -73,7 +73,9 @@
<Tool
Name="VCPostBuildEventTool"/>
<Tool
- Name="VCPreBuildEventTool"/>
+ Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
@@ -135,7 +137,9 @@
<Tool
Name="VCPostBuildEventTool"/>
<Tool
- Name="VCPreBuildEventTool"/>
+ Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
@@ -320,6 +324,9 @@
RelativePath=".\..\src\rail.cpp">
</File>
<File
+ RelativePath=".\..\src\rev.cpp">
+ </File>
+ <File
RelativePath=".\..\src\saveload.cpp">
</File>
<File
@@ -402,6 +409,9 @@
RelativePath=".\..\src\articulated_vehicles.h">
</File>
<File
+ RelativePath=".\..\src\autoslope.h">
+ </File>
+ <File
RelativePath=".\..\src\aystar.h">
</File>
<File
@@ -567,6 +577,9 @@
RelativePath=".\..\src\newgrf_station.h">
</File>
<File
+ RelativePath=".\..\src\newgrf_storage.h">
+ </File>
+ <File
RelativePath=".\..\src\newgrf_text.h">
</File>
<File
@@ -1320,6 +1333,12 @@
RelativePath=".\..\src\blitter\32bpp_base.hpp">
</File>
<File
+ RelativePath=".\..\src\blitter\32bpp_optimized.hpp">
+ </File>
+ <File
+ RelativePath=".\..\src\blitter\32bpp_optimized.cpp">
+ </File>
+ <File
RelativePath=".\..\src\blitter\32bpp_simple.cpp">
</File>
<File
@@ -1434,6 +1453,9 @@
RelativePath=".\..\src\newgrf_station.cpp">
</File>
<File
+ RelativePath=".\..\src\newgrf_storage.cpp">
+ </File>
+ <File
RelativePath=".\..\src\newgrf_text.cpp">
</File>
<File
--- a/projects/openttd.vcproj.in Sun Sep 09 21:14:29 2007 +0000
+++ b/projects/openttd.vcproj.in Sun Sep 23 07:37:38 2007 +0000
@@ -73,7 +73,9 @@
<Tool
Name="VCPostBuildEventTool"/>
<Tool
- Name="VCPreBuildEventTool"/>
+ Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
@@ -135,7 +137,9 @@
<Tool
Name="VCPostBuildEventTool"/>
<Tool
- Name="VCPreBuildEventTool"/>
+ Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
--- a/projects/openttd_vs80.vcproj Sun Sep 09 21:14:29 2007 +0000
+++ b/projects/openttd_vs80.vcproj Sun Sep 23 07:37:38 2007 +0000
@@ -33,6 +33,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""
/>
<Tool
Name="VCCustomBuildTool"
@@ -144,6 +146,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""
/>
<Tool
Name="VCCustomBuildTool"
@@ -255,6 +259,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""
/>
<Tool
Name="VCCustomBuildTool"
@@ -350,6 +356,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""
/>
<Tool
Name="VCCustomBuildTool"
@@ -656,6 +664,10 @@
>
</File>
<File
+ RelativePath=".\..\src\rev.cpp"
+ >
+ </File>
+ <File
RelativePath=".\..\src\saveload.cpp"
>
</File>
@@ -764,6 +776,10 @@
>
</File>
<File
+ RelativePath=".\..\src\autoslope.h"
+ >
+ </File>
+ <File
RelativePath=".\..\src\aystar.h"
>
</File>
@@ -984,6 +1000,10 @@
>
</File>
<File
+ RelativePath=".\..\src\newgrf_storage.h"
+ >
+ </File>
+ <File
RelativePath=".\..\src\newgrf_text.h"
>
</File>
@@ -1976,6 +1996,14 @@
>
</File>
<File
+ RelativePath=".\..\src\blitter\32bpp_optimized.hpp"
+ >
+ </File>
+ <File
+ RelativePath=".\..\src\blitter\32bpp_optimized.cpp"
+ >
+ </File>
+ <File
RelativePath=".\..\src\blitter\32bpp_simple.cpp"
>
</File>
@@ -2124,6 +2152,10 @@
>
</File>
<File
+ RelativePath=".\..\src\newgrf_storage.cpp"
+ >
+ </File>
+ <File
RelativePath=".\..\src\newgrf_text.cpp"
>
</File>
--- a/projects/openttd_vs80.vcproj.in Sun Sep 09 21:14:29 2007 +0000
+++ b/projects/openttd_vs80.vcproj.in Sun Sep 23 07:37:38 2007 +0000
@@ -33,6 +33,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""
/>
<Tool
Name="VCCustomBuildTool"
@@ -144,6 +146,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""
/>
<Tool
Name="VCCustomBuildTool"
@@ -255,6 +259,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""
/>
<Tool
Name="VCCustomBuildTool"
@@ -350,6 +356,8 @@
>
<Tool
Name="VCPreBuildEventTool"
+ Description="Determining version number"
+ CommandLine=""$(InputDir)/determineversion.vbs""
/>
<Tool
Name="VCCustomBuildTool"
--- a/readme.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/readme.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1,6 +1,6 @@
OpenTTD README
-Last updated: 2007-06-28
-Release version: 0.5.3-RC1
+Last updated: 2007-09-15
+Release version: 0.5.3
------------------------------------------------------------------------
--- a/source.list Sun Sep 09 21:14:29 2007 +0000
+++ b/source.list Sun Sep 23 07:37:38 2007 +0000
@@ -57,6 +57,7 @@
players.cpp
queue.cpp
rail.cpp
+rev.cpp
saveload.cpp
screenshot.cpp
#if SDL
@@ -101,6 +102,7 @@
airport.h
airport_movement.h
articulated_vehicles.h
+autoslope.h
aystar.h
bmp.h
cargopacket.h
@@ -156,6 +158,7 @@
newgrf_sound.h
newgrf_spritegroup.h
newgrf_station.h
+newgrf_storage.h
newgrf_text.h
newgrf_town.h
newgrf_townname.h
@@ -415,6 +418,8 @@
blitter/32bpp_anim.hpp
blitter/32bpp_base.cpp
blitter/32bpp_base.hpp
+blitter/32bpp_optimized.hpp
+blitter/32bpp_optimized.cpp
blitter/32bpp_simple.cpp
blitter/32bpp_simple.hpp
blitter/8bpp_base.cpp
@@ -457,6 +462,7 @@
newgrf_sound.cpp
newgrf_spritegroup.cpp
newgrf_station.cpp
+newgrf_storage.cpp
newgrf_text.cpp
newgrf_town.cpp
newgrf_townname.cpp
--- a/src/ai/api/ai_object.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/ai/api/ai_object.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -131,7 +131,6 @@
/* If we did a DC_EXEC, and the command did not return an error, execute it
* over the network */
- if (flags & DC_AUTO) procc |= CMD_AUTO;
if (flags & DC_NO_WATER) procc |= CMD_NO_WATER;
#ifdef ENABLE_NETWORK
--- a/src/aircraft_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/aircraft_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -569,6 +569,7 @@
* Now we change the setting to apply the new one and let the vehicle head for the same hangar.
* Note: the if is (true for requesting service == true for ordered to stop in hangar) */
if (flags & DC_EXEC) {
+ CLRBIT(v->current_order.flags, OFB_PART_OF_ORDERS);
TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
--- a/src/aircraft_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/aircraft_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -23,6 +23,50 @@
#include "vehicle_gui.h"
#include "newgrf_engine.h"
+/**
+* Draw the details for the given vehicle at the position (x,y)
+*
+* @param v current vehicle
+* @param x The x coordinate
+* @param y The y coordinate
+*/
+void DrawAircraftDetails(const Vehicle *v, int x, int y)
+{
+ int y_offset = (v->Next()->cargo_cap != 0) ? -11 : 0;
+
+ for (const Vehicle *u = v ; u != NULL ; u = u->Next()) {
+ if (IsNormalAircraft(u)) {
+ SetDParam(0, u->engine_type);
+ SetDParam(1, u->build_year);
+ SetDParam(2, u->value);
+ DrawString(x, y, STR_A011_BUILT_VALUE, 0);
+
+ SetDParam(0, u->cargo_type);
+ SetDParam(1, u->cargo_cap);
+ SetDParam(2, u->Next()->cargo_type);
+ SetDParam(3, u->Next()->cargo_cap);
+ DrawString(x, y + 10, (u->Next()->cargo_cap != 0) ? STR_A019_CAPACITY : STR_A01A_CAPACITY, 0);
+ }
+
+ if (u->cargo_cap != 0) {
+ uint cargo_count = u->cargo.Count();
+
+ y_offset += 11;
+ if (cargo_count != 0) {
+ /* Cargo names (fix pluralness) */
+ SetDParam(0, u->cargo_type);
+ SetDParam(1, cargo_count);
+ SetDParam(2, u->cargo.Source());
+ DrawString(x, y + 21 + y_offset, STR_8813_FROM, 0);
+ }
+ }
+ }
+
+ SetDParam(0, v->cargo.FeederShare());
+ DrawString(x, y + 33 + y_offset, STR_FEEDER_CARGO_VALUE, 0);
+}
+
+
void DrawAircraftImage(const Vehicle *v, int x, int y, VehicleID selection)
{
SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
@@ -56,172 +100,3 @@
ShowVehicleViewWindow(v);
}
}
-
-static void AircraftDetailsWndProc(Window *w, WindowEvent *e)
-{
- switch (e->event) {
- case WE_PAINT: {
- const Vehicle *v = GetVehicle(w->window_number);
-
- SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
-
- /* Disable service-scroller when interval is set to disabled */
- SetWindowWidgetDisabledState(w, 5, !_patches.servint_aircraft);
- SetWindowWidgetDisabledState(w, 6, !_patches.servint_aircraft);
-
- SetDParam(0, v->index);
- DrawWindowWidgets(w);
-
- /* Draw running cost */
- {
- int year = v->age / 366;
-
- SetDParam(1, year);
-
- SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
- SetDParam(2, v->max_age / 366);
- SetDParam(3, v->GetDisplayRunningCost());
- DrawString(2, 15, STR_A00D_AGE_RUNNING_COST_YR, 0);
- }
-
- /* Draw max speed */
- {
- SetDParam(0, v->GetDisplayMaxSpeed());
- DrawString(2, 25, STR_A00E_MAX_SPEED, 0);
- }
-
- /* Draw profit */
- {
- SetDParam(0, v->profit_this_year);
- SetDParam(1, v->profit_last_year);
- DrawString(2, 35, STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR, 0);
- }
-
- /* Draw breakdown & reliability */
- {
- SetDParam(0, v->reliability * 100 >> 16);
- SetDParam(1, v->breakdowns_since_last_service);
- DrawString(2, 45, STR_A010_RELIABILITY_BREAKDOWNS, 0);
- }
-
- /* Draw service interval text */
- {
- SetDParam(0, v->service_interval);
- SetDParam(1, v->date_of_last_service);
- DrawString(13, 115, _patches.servint_ispercent?STR_SERVICING_INTERVAL_PERCENT:STR_883C_SERVICING_INTERVAL_DAYS, 0);
- }
-
- /* Draw Transfer credits text */
- {
- SetDParam(0, v->cargo.FeederShare());
- DrawString(60, 101, STR_FEEDER_CARGO_VALUE, 0);
- }
-
- DrawAircraftImage(v, 3, 57, INVALID_VEHICLE);
-
- {
- const Vehicle *u;
- int y = 57;
-
- do {
- if (IsNormalAircraft(v)) {
- SetDParam(0, v->engine_type);
- SetDParam(1, v->build_year);
- SetDParam(2, v->value);
- DrawString(60, y, STR_A011_BUILT_VALUE, 0);
- y += 10;
-
- SetDParam(0, v->cargo_type);
- SetDParam(1, v->cargo_cap);
- u = v->Next();
- SetDParam(2, u->cargo_type);
- SetDParam(3, u->cargo_cap);
- DrawString(60, y, (u->cargo_cap != 0) ? STR_A019_CAPACITY : STR_A01A_CAPACITY, 0);
- y += 14;
- }
-
- uint cargo_count = v->cargo.Count();
- if (cargo_count != 0) {
-
- /* Cargo names (fix pluralness) */
- SetDParam(0, v->cargo_type);
- SetDParam(1, cargo_count);
- SetDParam(2, v->cargo.Source());
- DrawString(60, y, STR_8813_FROM, 0);
-
- y += 10;
- }
- } while ((v = v->Next()) != NULL);
- }
- } break;
-
- case WE_CLICK: {
- int mod;
- const Vehicle *v;
- switch (e->we.click.widget) {
- case 2: /* rename */
- v = GetVehicle(w->window_number);
- SetDParam(0, v->index);
- ShowQueryString(STR_VEHICLE_NAME, STR_A030_NAME_AIRCRAFT, 31, 150, w, CS_ALPHANUMERAL);
- break;
- case 5: /* increase int */
- mod = _ctrl_pressed? 5 : 10;
- goto do_change_service_int;
- case 6: /* decrease int */
- mod = _ctrl_pressed?- 5 : -10;
-do_change_service_int:
- v = GetVehicle(w->window_number);
-
- mod = GetServiceIntervalClamped(mod + v->service_interval);
- if (mod == v->service_interval) return;
-
- DoCommandP(v->tile, v->index, mod, NULL, CMD_CHANGE_SERVICE_INT | CMD_MSG(STR_018A_CAN_T_CHANGE_SERVICING));
- break;
- }
- } break;
-
- case WE_ON_EDIT_TEXT:
- if (e->we.edittext.str[0] != '\0') {
- _cmd_text = e->we.edittext.str;
- DoCommandP(0, w->window_number, 0, NULL,
- CMD_NAME_VEHICLE | CMD_MSG(STR_A031_CAN_T_NAME_AIRCRAFT));
- }
- break;
- }
-}
-
-
-static const Widget _aircraft_details_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW },
-{ WWT_CAPTION, RESIZE_NONE, 14, 11, 349, 0, 13, STR_A00C_DETAILS, STR_018C_WINDOW_TITLE_DRAG_THIS },
-{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 350, 389, 0, 13, STR_01AA_NAME, STR_A032_NAME_AIRCRAFT },
-{ WWT_PANEL, RESIZE_NONE, 14, 0, 389, 14, 55, 0x0, STR_NULL },
-{ WWT_PANEL, RESIZE_NONE, 14, 0, 389, 56, 113, 0x0, STR_NULL },
-{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 10, 114, 119, STR_0188, STR_884D_INCREASE_SERVICING_INTERVAL },
-{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 10, 120, 125, STR_0189, STR_884E_DECREASE_SERVICING_INTERVAL },
-{ WWT_PANEL, RESIZE_NONE, 14, 11, 389, 114, 125, 0x0, STR_NULL },
-{ WIDGETS_END},
-};
-
-static const WindowDesc _aircraft_details_desc = {
- WDP_AUTO, WDP_AUTO, 390, 126, 390, 126,
- WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
- _aircraft_details_widgets,
- AircraftDetailsWndProc
-};
-
-
-void ShowAircraftDetailsWindow(const Vehicle *v)
-{
- Window *w;
- VehicleID veh = v->index;
-
- DeleteWindowById(WC_VEHICLE_ORDERS, veh);
- DeleteWindowById(WC_VEHICLE_DETAILS, veh);
-
- w = AllocateWindowDescFront(&_aircraft_details_desc, veh);
- w->caption_color = v->owner;
-// w->vscroll.cap = 6;
-// w->traindetails_d.tab = 0;
-}
--- a/src/airport_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/airport_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -34,7 +34,7 @@
static void PlaceAirport(TileIndex tile)
{
- DoCommandP(tile, _selected_airport_type, _ctrl_pressed, CcBuildAirport, CMD_BUILD_AIRPORT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_A001_CAN_T_BUILD_AIRPORT_HERE));
+ DoCommandP(tile, _selected_airport_type, _ctrl_pressed, CcBuildAirport, CMD_BUILD_AIRPORT | CMD_NO_WATER | CMD_MSG(STR_A001_CAN_T_BUILD_AIRPORT_HERE));
}
static void PlaceAir_DemolishArea(TileIndex tile)
--- a/src/articulated_vehicles.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/articulated_vehicles.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -15,16 +15,24 @@
#include "newgrf_engine.h"
-uint CountArticulatedParts(EngineID engine_type)
+uint CountArticulatedParts(EngineID engine_type, bool purchase_window)
{
if (!HASBIT(EngInfo(engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return 0;
+ Vehicle *v = NULL;;
+ if (!purchase_window) {
+ v = new InvalidVehicle();
+ v->engine_type = engine_type;
+ }
+
uint i;
- for (i = 1; i < 10; i++) {
- uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, engine_type, NULL);
+ for (i = 1; i < MAX_UVALUE(EngineID); i++) {
+ uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, engine_type, v);
if (callback == CALLBACK_FAILED || callback == 0xFF) break;
}
+ delete v;
+
return i - 1;
}
@@ -35,14 +43,13 @@
if (!HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return;
- for (uint i = 1; i < 10; i++) {
+ for (uint i = 1; i < MAX_UVALUE(EngineID); i++) {
uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, v->engine_type, v);
if (callback == CALLBACK_FAILED || callback == 0xFF) return;
/* Attempt to use pre-allocated vehicles until they run out. This can happen
* if the callback returns different values depending on the cargo type. */
u->SetNext(vl[i]);
- if (u->Next() == NULL) u->SetNext(new InvalidVehicle());
if (u->Next() == NULL) return;
Vehicle *previous = u;
@@ -77,6 +84,7 @@
const RailVehicleInfo *rvi_artic = RailVehInfo(engine_type);
u = new (u) Train();
+ previous->SetNext(u);
u->u.rail.track = v->u.rail.track;
u->u.rail.railtype = v->u.rail.railtype;
u->u.rail.first_engine = v->engine_type;
@@ -92,6 +100,7 @@
const RoadVehicleInfo *rvi_artic = RoadVehInfo(engine_type);
u = new (u) RoadVehicle();
+ previous->SetNext(u);
u->u.road.first_engine = v->engine_type;
u->u.road.cached_veh_length = GetRoadVehLength(u);
u->u.road.state = RVSB_IN_DEPOT;
@@ -107,8 +116,6 @@
} break;
}
- previous->SetNext(u);
-
if (flip_image) u->spritenum++;
VehiclePositionChanged(u);
--- a/src/articulated_vehicles.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/articulated_vehicles.h Sun Sep 23 07:37:38 2007 +0000
@@ -5,7 +5,7 @@
#ifndef ARTICULATED_VEHICLES_H
#define ARTICULATED_VEHICLES_H
-uint CountArticulatedParts(EngineID engine_type);
+uint CountArticulatedParts(EngineID engine_type, bool purchase_window);
void AddArticulatedParts(Vehicle **vl, VehicleType type);
#endif /* ARTICULATED_VEHICLES_H */
--- a/src/autoreplace_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/autoreplace_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -202,7 +202,7 @@
/* Get the vehicle in front of the one we move out */
Vehicle *front = old_v->Previous();
/* If the vehicle in front is the rear end of a dualheaded engine, then we need to use the one in front of that one */
- if (IsMultiheaded(front) && !IsTrainEngine(front)) front = front->Previous();
+ if (IsRearDualheaded(front)) front = front->Previous();
/* Now we move the old one out of the train */
DoCommand(0, (INVALID_VEHICLE << 16) | old_v->index, 0, DC_EXEC, CMD_MOVE_RAIL_VEHICLE);
/* Add the new vehicle */
@@ -247,13 +247,17 @@
}
} else { // flags & DC_EXEC not set
CommandCost tmp_move;
- if (old_v->type == VEH_TRAIN && IsFrontEngine(old_v) && old_v->Next() != NULL) {
- /* Verify that the wagons can be placed on the engine in question.
- * This is done by building an engine, test if the wagons can be added and then sell the test engine. */
- DoCommand(old_v->tile, new_engine_type, 3, DC_EXEC, GetCmdBuildVeh(old_v));
- Vehicle *temp = GetVehicle(_new_vehicle_id);
- tmp_move = DoCommand(0, (temp->index << 16) | old_v->Next()->index, 1, 0, CMD_MOVE_RAIL_VEHICLE);
- DoCommand(0, temp->index, 0, DC_EXEC, GetCmdSellVeh(old_v));
+
+ if (old_v->type == VEH_TRAIN && IsFrontEngine(old_v)) {
+ Vehicle *next_veh = GetNextUnit(old_v); // don't try to move the rear multiheaded engine or articulated parts
+ if (next_veh != NULL) {
+ /* Verify that the wagons can be placed on the engine in question.
+ * This is done by building an engine, test if the wagons can be added and then sell the test engine. */
+ DoCommand(old_v->tile, new_engine_type, 3, DC_EXEC, GetCmdBuildVeh(old_v));
+ Vehicle *temp = GetVehicle(_new_vehicle_id);
+ tmp_move = DoCommand(0, (temp->index << 16) | next_veh->index, 1, 0, CMD_MOVE_RAIL_VEHICLE);
+ DoCommand(0, temp->index, 0, DC_EXEC, GetCmdSellVeh(old_v));
+ }
}
/* Ensure that the player will not end up having negative money while autoreplacing
@@ -332,7 +336,7 @@
cost = CommandCost();
w = v;
do {
- if (w->type == VEH_TRAIN && IsMultiheaded(w) && !IsTrainEngine(w)) {
+ if (w->type == VEH_TRAIN && IsRearDualheaded(w)) {
/* we build the rear ends of multiheaded trains with the front ones */
continue;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/autoslope.h Sun Sep 23 07:37:38 2007 +0000
@@ -0,0 +1,42 @@
+/* $Id$ */
+
+/** @file autoslope.h */
+
+#ifndef AUTOSLOPE_H
+#define AUTOSLOPE_H
+
+#include "depot.h"
+
+/**
+ * Autoslope check for tiles with an entrance on an edge.
+ * E.g. depots and non-drive-through-road-stops.
+ *
+ * The test succeeds if the slope is not steep and at least one corner of the entrance edge is on the TileMaxZ() level.
+ *
+ * @note The test does not check if autoslope is enabled at all.
+ *
+ * @param tile The tile.
+ * @param z_new New TileZ.
+ * @param tileh_new New TileSlope.
+ * @param entrance Entrance edge.
+ * @return true iff terraforming is allowed.
+ */
+static inline bool AutoslopeCheckForEntranceEdge(TileIndex tile, uint z_new, Slope tileh_new, DiagDirection entrance)
+{
+ if (IsSteepSlope(tileh_new) || (GetTileMaxZ(tile) != z_new + GetSlopeMaxZ(tileh_new))) return false;
+ return ((tileh_new == SLOPE_FLAT) || CanBuildDepotByTileh(entrance, tileh_new));
+}
+
+/**
+ * Tests if autoslope is enabled for _current_player.
+ *
+ * Autoslope is disabled for town/industry construction.
+ *
+ * @return true iff autoslope is enabled.
+ */
+static inline bool AutoslopeEnabled()
+{
+ return (_patches.autoslope && IsValidPlayer(_current_player));
+}
+
+#endif /* AUTOSLOPE_H */
--- a/src/blitter/32bpp_anim.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/blitter/32bpp_anim.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -10,6 +10,12 @@
void Blitter_32bppAnim::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
{
+ if (bp->dst < _screen.dst_ptr || bp->dst > (uint32 *)_screen.dst_ptr + _screen.width * _screen.height) {
+ /* This means our output is not to the screen, so we can't be doing any animation stuff, so use our parent Draw() */
+ Blitter_32bppOptimized::Draw(bp, mode, zoom);
+ return;
+ }
+
const SpriteLoader::CommonPixel *src, *src_line;
uint32 *dst, *dst_line;
uint8 *anim, *anim_line;
@@ -38,11 +44,22 @@
anim_line += this->anim_buf_width;
for (int x = 0; x < bp->width; x++) {
+ if (src->a == 0) {
+ /* src->r is 'misused' here to indicate how much more pixels are following with an alpha of 0 */
+ int skip = UnScaleByZoom(src->r, zoom);
+
+ dst += skip;
+ anim += skip;
+ x += skip - 1;
+ src += ScaleByZoom(1, zoom) * skip;
+ continue;
+ }
+
switch (mode) {
case BM_COLOUR_REMAP:
/* In case the m-channel is zero, do not remap this pixel in any way */
if (src->m == 0) {
- if (src->a != 0) *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
+ *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
*anim = 0;
} else {
if (bp->remap[src->m] != 0) {
@@ -58,19 +75,15 @@
* we produce a result the newgrf maker didn't expect ;) */
/* Make the current color a bit more black, so it looks like this image is transparent */
- if (src->a != 0) {
- *dst = MakeTransparent(*dst, 75);
- *anim = bp->remap[*anim];
- }
+ *dst = MakeTransparent(*dst, 192);
+ *anim = bp->remap[*anim];
break;
default:
- if (src->a != 0) {
- /* Above 217 is palette animation */
- if (src->m >= 217) *dst = ComposeColourPA(this->LookupColourInPalette(src->m), src->a, *dst);
- else *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
- *anim = src->m;
- }
+ /* Above 217 is palette animation */
+ if (src->m >= 217) *dst = ComposeColourPA(this->LookupColourInPalette(src->m), src->a, *dst);
+ else *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
+ *anim = src->m;
break;
}
dst++;
@@ -90,7 +103,7 @@
if (pal == PALETTE_TO_TRANSPARENT) {
do {
for (int i = 0; i != width; i++) {
- *udst = MakeTransparent(*udst, 60);
+ *udst = MakeTransparent(*udst, 154);
*anim = 0;
udst++;
anim++;
--- a/src/blitter/32bpp_anim.hpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/blitter/32bpp_anim.hpp Sun Sep 23 07:37:38 2007 +0000
@@ -5,10 +5,10 @@
#ifndef BLITTER_32BPP_ANIM_HPP
#define BLITTER_32BPP_ANIM_HPP
-#include "32bpp_simple.hpp"
+#include "32bpp_optimized.hpp"
#include "factory.hpp"
-class Blitter_32bppAnim : public Blitter_32bppSimple {
+class Blitter_32bppAnim : public Blitter_32bppOptimized {
private:
uint8 *anim_buf; ///< In this buffer we keep track of the 8bpp indexes so we can do palette animation
int anim_buf_width;
--- a/src/blitter/32bpp_base.hpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/blitter/32bpp_base.hpp Sun Sep 23 07:37:38 2007 +0000
@@ -48,15 +48,19 @@
*/
static inline uint ComposeColourRGBA(uint r, uint g, uint b, uint a, uint current)
{
+ if (a == 0) return current;
+ if (a >= 255) return ComposeColour(0xFF, r, g, b);
+
uint cr, cg, cb;
cr = GB(current, 16, 8);
cg = GB(current, 8, 8);
cb = GB(current, 0, 8);
+ /* The 256 is wrong, it should be 255, but 256 is much faster... */
return ComposeColour(0xFF,
- (r * a + cr * (255 - a)) / 255,
- (g * a + cg * (255 - a)) / 255,
- (b * a + cb * (255 - a)) / 255);
+ (r * a + cr * (256 - a)) / 256,
+ (g * a + cg * (256 - a)) / 256,
+ (b * a + cb * (256 - a)) / 256);
}
/**
@@ -64,24 +68,28 @@
*/
static inline uint ComposeColourPA(uint colour, uint a, uint current)
{
+ if (a == 0) return current;
+ if (a >= 255) return (colour | 0xFF000000);
+
uint r, g, b, cr, cg, cb;
- r = GB(colour, 16, 8);
- g = GB(colour, 8, 8);
- b = GB(colour, 0, 8);
+ r = GB(colour, 16, 8);
+ g = GB(colour, 8, 8);
+ b = GB(colour, 0, 8);
cr = GB(current, 16, 8);
cg = GB(current, 8, 8);
cb = GB(current, 0, 8);
+ /* The 256 is wrong, it should be 255, but 256 is much faster... */
return ComposeColour(0xFF,
- (r * a + cr * (255 - a)) / 255,
- (g * a + cg * (255 - a)) / 255,
- (b * a + cb * (255 - a)) / 255);
+ (r * a + cr * (256 - a)) / 256,
+ (g * a + cg * (256 - a)) / 256,
+ (b * a + cb * (256 - a)) / 256);
}
/**
* Make a pixel looks like it is transparent.
* @param colour the colour already on the screen.
- * @param amount the amount of transparency, times 100.
+ * @param amount the amount of transparency, times 256.
* @return the new colour for the screen.
*/
static inline uint MakeTransparent(uint colour, uint amount)
@@ -91,7 +99,7 @@
g = GB(colour, 8, 8);
b = GB(colour, 0, 8);
- return ComposeColour(0xFF, r * amount / 100, g * amount / 100, b * amount / 100);
+ return ComposeColour(0xFF, r * amount / 256, g * amount / 256, b * amount / 256);
}
/**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_optimized.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -0,0 +1,108 @@
+#include "../stdafx.h"
+#include "../zoom.hpp"
+#include "../gfx.h"
+#include "../debug.h"
+#include "../table/sprites.h"
+#include "32bpp_optimized.hpp"
+
+static FBlitter_32bppOptimized iFBlitter_32bppOptimized;
+
+void Blitter_32bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
+{
+ const SpriteLoader::CommonPixel *src, *src_line;
+ uint32 *dst, *dst_line;
+
+ /* Find where to start reading in the source sprite */
+ src_line = (const SpriteLoader::CommonPixel *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
+ dst_line = (uint32 *)bp->dst + bp->top * bp->pitch + bp->left;
+
+ for (int y = 0; y < bp->height; y++) {
+ dst = dst_line;
+ dst_line += bp->pitch;
+
+ src = src_line;
+ src_line += bp->sprite_width * ScaleByZoom(1, zoom);
+
+ for (int x = 0; x < bp->width; x++) {
+ if (src->a == 0) {
+ /* src->r is 'misused' here to indicate how much more pixels are following with an alpha of 0 */
+ int skip = UnScaleByZoom(src->r, zoom);
+
+ dst += skip;
+ x += skip - 1;
+ src += ScaleByZoom(1, zoom) * skip;
+ continue;
+ }
+
+ switch (mode) {
+ case BM_COLOUR_REMAP:
+ /* In case the m-channel is zero, do not remap this pixel in any way */
+ if (src->m == 0) {
+ *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
+ } else {
+ if (bp->remap[src->m] != 0) *dst = ComposeColourPA(this->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
+ }
+ break;
+
+ case BM_TRANSPARENT:
+ /* TODO -- We make an assumption here that the remap in fact is transparency, not some color.
+ * This is never a problem with the code we produce, but newgrfs can make it fail... or at least:
+ * we produce a result the newgrf maker didn't expect ;) */
+
+ /* Make the current color a bit more black, so it looks like this image is transparent */
+ *dst = MakeTransparent(*dst, 192);
+ break;
+
+ default:
+ *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
+ break;
+ }
+ dst++;
+ src += ScaleByZoom(1, zoom);
+ }
+ }
+}
+
+Sprite *Blitter_32bppOptimized::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
+{
+ Sprite *dest_sprite;
+ SpriteLoader::CommonPixel *dst;
+ dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sprite->height * sprite->width * sizeof(SpriteLoader::CommonPixel));
+
+ dest_sprite->height = sprite->height;
+ dest_sprite->width = sprite->width;
+ dest_sprite->x_offs = sprite->x_offs;
+ dest_sprite->y_offs = sprite->y_offs;
+
+ dst = (SpriteLoader::CommonPixel *)dest_sprite->data;
+
+ memcpy(dst, sprite->data, sprite->height * sprite->width * sizeof(SpriteLoader::CommonPixel));
+ /* Skip to the end of the array, and work backwards to find transparent blocks */
+ dst = dst + sprite->height * sprite->width - 1;
+
+ for (uint y = sprite->height; y > 0; y--) {
+ int trans = 0;
+ /* Process sprite line backwards, to compute lengths of transparent blocks */
+ for (uint x = sprite->width; x > 0; x--) {
+ if (dst->a == 0) {
+ /* Save transparent block length in red channel; max value is 255 the red channel can contain */
+ if (trans < 255) trans++;
+ dst->r = trans;
+ dst->g = 0;
+ dst->b = 0;
+ dst->m = 0;
+ } else {
+ trans = 0;
+ if (dst->m != 0) {
+ /* Pre-convert the mapping channel to a RGB value */
+ uint color = this->LookupColourInPalette(dst->m);
+ dst->r = GB(color, 16, 8);
+ dst->g = GB(color, 8, 8);
+ dst->b = GB(color, 0, 8);
+ }
+ }
+ dst--;
+ }
+ }
+ return dest_sprite;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_optimized.hpp Sun Sep 23 07:37:38 2007 +0000
@@ -0,0 +1,26 @@
+/* $Id$ */
+
+/** @file 32bpp_optimized.hpp */
+
+#ifndef BLITTER_32BPP_OPTIMIZED_HPP
+#define BLITTER_32BPP_OPTIMIZED_HPP
+
+#include "32bpp_simple.hpp"
+#include "factory.hpp"
+
+class Blitter_32bppOptimized : public Blitter_32bppSimple {
+public:
+ /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
+ /* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+
+ /* virtual */ const char *GetName() { return "32bpp-optimized"; }
+};
+
+class FBlitter_32bppOptimized: public BlitterFactory<FBlitter_32bppOptimized> {
+public:
+ /* virtual */ const char *GetName() { return "32bpp-optimized"; }
+ /* virtual */ const char *GetDescription() { return "32bpp Optimized Blitter (no palette animation)"; }
+ /* virtual */ Blitter *CreateInstance() { return new Blitter_32bppOptimized(); }
+};
+
+#endif /* BLITTER_32BPP_OPTIMIZED_HPP */
--- a/src/blitter/32bpp_simple.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/blitter/32bpp_simple.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -40,7 +40,7 @@
* we produce a result the newgrf maker didn't expect ;) */
/* Make the current color a bit more black, so it looks like this image is transparent */
- if (src->a != 0) *dst = MakeTransparent(*dst, 75);
+ if (src->a != 0) *dst = MakeTransparent(*dst, 192);
break;
default:
@@ -60,7 +60,7 @@
if (pal == PALETTE_TO_TRANSPARENT) {
do {
for (int i = 0; i != width; i++) {
- *udst = MakeTransparent(*udst, 60);
+ *udst = MakeTransparent(*udst, 154);
udst++;
}
udst = udst - width + _screen.pitch;
--- a/src/blitter/factory.hpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/blitter/factory.hpp Sun Sep 23 07:37:38 2007 +0000
@@ -4,6 +4,8 @@
#define BLITTER_FACTORY_HPP
#include "base.hpp"
+#include "../string.h"
+#include "../debug.h"
#include <string>
#include <map>
@@ -61,15 +63,20 @@
*/
static Blitter *SelectBlitter(const char *name)
{
+ const char *default_blitter = "8bpp-optimized";
+
if (GetBlitters().size() == 0) return NULL;
+ const char *bname = (StrEmpty(name)) ? default_blitter : name;
Blitters::iterator it = GetBlitters().begin();
for (; it != GetBlitters().end(); it++) {
BlitterFactoryBase *b = (*it).second;
- if (strcasecmp(name, b->name) == 0) {
+ if (strcasecmp(bname, b->name) == 0) {
Blitter *newb = b->CreateInstance();
delete *GetActiveBlitter();
*GetActiveBlitter() = newb;
+
+ DEBUG(driver, 1, "Successfully %s blitter '%s'",StrEmpty(name) ? "probed" : "loaded", bname);
return newb;
}
}
--- a/src/bridge_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/bridge_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -36,7 +36,7 @@
DeleteWindow(w);
DoCommandP(_bridgedata.end_tile, _bridgedata.start_tile,
_bridgedata.indexes[i] | (_bridgedata.type << 8), CcBuildBridge,
- CMD_BUILD_BRIDGE | CMD_AUTO | CMD_MSG(STR_5015_CAN_T_BUILD_BRIDGE_HERE));
+ CMD_BUILD_BRIDGE | CMD_MSG(STR_5015_CAN_T_BUILD_BRIDGE_HERE));
}
static void BuildBridgeWndProc(Window *w, WindowEvent *e)
--- a/src/build_vehicle_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/build_vehicle_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -621,7 +621,7 @@
int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
SetDParam(0, rvi->cargo_type);
- SetDParam(1, (capacity * (CountArticulatedParts(engine_number) + 1)) << multihead);
+ SetDParam(1, (capacity * (CountArticulatedParts(engine_number, true) + 1)) << multihead);
SetDParam(2, refitable ? STR_9842_REFITTABLE : STR_EMPTY);
}
DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, 0);
--- a/src/clear_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/clear_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -47,7 +47,14 @@
int modheight_count; ///< amount of entries in "modheight".
int tile_table_count; ///< amount of entries in "tile_table".
- TileIndex tile_table[TERRAFORMER_TILE_TABLE_SIZE]; ///< Dirty tiles, i.e. at least one corner changed.
+ /**
+ * Dirty tiles, i.e.\ at least one corner changed.
+ *
+ * This array contains the tiles which are or will be marked as dirty.
+ *
+ * @ingroup dirty
+ */
+ TileIndex tile_table[TERRAFORMER_TILE_TABLE_SIZE];
TerraformerHeightMod modheight[TERRAFORMER_MODHEIGHT_SIZE]; ///< Height modifications.
};
@@ -106,6 +113,7 @@
*
* @param ts TerraformerState.
* @param tile Tile.
+ * @ingroup dirty
*/
static void TerraformAddDirtyTile(TerraformerState *ts, TileIndex tile)
{
@@ -128,6 +136,7 @@
*
* @param ts TerraformerState.
* @param tile Tile.
+ * @ingroup dirty
*/
static void TerraformAddDirtyTileAround(TerraformerState *ts, TileIndex tile)
{
--- a/src/command.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/command.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -15,9 +15,19 @@
#include "network/network.h"
#include "variables.h"
#include "genworld.h"
+#include "newgrf_storage.h"
-const char* _cmd_text = NULL;
+const char *_cmd_text = NULL;
+/**
+ * Helper macro to define the header of all command handler macros.
+ *
+ * This macro create the function header for a given command handler function, as
+ * all command handler functions got the parameters from the #CommandProc callback
+ * type.
+ *
+ * @param yyyy The desired function name of the new command handler function.
+ */
#define DEF_COMMAND(yyyy) CommandCost yyyy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
DEF_COMMAND(CmdBuildRailroadTrack);
@@ -181,166 +191,178 @@
DEF_COMMAND(CmdChangeTimetable);
DEF_COMMAND(CmdSetVehicleOnTime);
DEF_COMMAND(CmdAutofillTimetable);
-
-/* The master command table */
-static const Command _command_proc_table[] = {
- {CmdBuildRailroadTrack, 0}, /* 0 */
- {CmdRemoveRailroadTrack, 0}, /* 1 */
- {CmdBuildSingleRail, 0}, /* 2 */
- {CmdRemoveSingleRail, 0}, /* 3 */
- {CmdLandscapeClear, 0}, /* 4 */
- {CmdBuildBridge, 0}, /* 5 */
- {CmdBuildRailroadStation, 0}, /* 6 */
- {CmdBuildTrainDepot, 0}, /* 7 */
- {CmdBuildSingleSignal, 0}, /* 8 */
- {CmdRemoveSingleSignal, 0}, /* 9 */
- {CmdTerraformLand, 0}, /* 10 */
- {CmdPurchaseLandArea, 0}, /* 11 */
- {CmdSellLandArea, 0}, /* 12 */
- {CmdBuildTunnel, 0}, /* 13 */
- {CmdRemoveFromRailroadStation, 0}, /* 14 */
- {CmdConvertRail, 0}, /* 15 */
- {CmdBuildTrainWaypoint, 0}, /* 16 */
- {CmdRenameWaypoint, 0}, /* 17 */
- {CmdRemoveTrainWaypoint, 0}, /* 18 */
- {NULL, 0}, /* 19 */
- {NULL, 0}, /* 20 */
- {CmdBuildRoadStop, 0}, /* 21 */
- {CmdRemoveRoadStop, 0}, /* 22 */
- {CmdBuildLongRoad, 0}, /* 23 */
- {CmdRemoveLongRoad, 0}, /* 24 */
- {CmdBuildRoad, 0}, /* 25 */
- {CmdRemoveRoad, 0}, /* 26 */
- {CmdBuildRoadDepot, 0}, /* 27 */
- {NULL, 0}, /* 28 */
- {CmdBuildAirport, 0}, /* 29 */
- {CmdBuildDock, 0}, /* 30 */
- {CmdBuildShipDepot, 0}, /* 31 */
- {CmdBuildBuoy, 0}, /* 32 */
- {CmdPlantTree, 0}, /* 33 */
- {CmdBuildRailVehicle, 0}, /* 34 */
- {CmdMoveRailVehicle, 0}, /* 35 */
- {CmdStartStopTrain, 0}, /* 36 */
- {NULL, 0}, /* 37 */
- {CmdSellRailWagon, 0}, /* 38 */
- {CmdSendTrainToDepot, 0}, /* 39 */
- {CmdForceTrainProceed, 0}, /* 40 */
- {CmdReverseTrainDirection, 0}, /* 41 */
-
- {CmdModifyOrder, 0}, /* 42 */
- {CmdSkipToOrder, 0}, /* 43 */
- {CmdDeleteOrder, 0}, /* 44 */
- {CmdInsertOrder, 0}, /* 45 */
-
- {CmdChangeServiceInt, 0}, /* 46 */
-
- {CmdBuildIndustry, 0}, /* 47 */
- {CmdBuildCompanyHQ, 0}, /* 48 */
- {CmdSetPlayerFace, 0}, /* 49 */
- {CmdSetPlayerColor, 0}, /* 50 */
-
- {CmdIncreaseLoan, 0}, /* 51 */
- {CmdDecreaseLoan, 0}, /* 52 */
-
- {CmdWantEnginePreview, 0}, /* 53 */
-
- {CmdNameVehicle, 0}, /* 54 */
- {CmdRenameEngine, 0}, /* 55 */
-
- {CmdChangeCompanyName, 0}, /* 56 */
- {CmdChangePresidentName, 0}, /* 57 */
-
- {CmdRenameStation, 0}, /* 58 */
-
- {CmdSellAircraft, 0}, /* 59 */
- {CmdStartStopAircraft, 0}, /* 60 */
+#undef DEF_COMMAND
- {CmdBuildAircraft, 0}, /* 61 */
- {CmdSendAircraftToHangar, 0}, /* 62 */
- {NULL, 0}, /* 63 */
- {CmdRefitAircraft, 0}, /* 64 */
-
- {CmdPlaceSign, 0}, /* 65 */
- {CmdRenameSign, 0}, /* 66 */
-
- {CmdBuildRoadVeh, 0}, /* 67 */
- {CmdStartStopRoadVeh, 0}, /* 68 */
- {CmdSellRoadVeh, 0}, /* 69 */
- {CmdSendRoadVehToDepot, 0}, /* 70 */
- {CmdTurnRoadVeh, 0}, /* 71 */
- {CmdRefitRoadVeh, 0}, /* 72 */
-
- {CmdPause, CMD_SERVER}, /* 73 */
-
- {CmdBuyShareInCompany, 0}, /* 74 */
- {CmdSellShareInCompany, 0}, /* 75 */
- {CmdBuyCompany, 0}, /* 76 */
-
- {CmdBuildTown, CMD_OFFLINE}, /* 77 */
- {NULL, 0}, /* 78 */
- {NULL, 0}, /* 79 */
- {CmdRenameTown, CMD_SERVER}, /* 80 */
- {CmdDoTownAction, 0}, /* 81 */
-
- {CmdSetRoadDriveSide, CMD_SERVER}, /* 82 */
- {NULL, 0}, /* 83 */
- {NULL, 0}, /* 84 */
- {CmdChangeDifficultyLevel, CMD_SERVER}, /* 85 */
-
- {CmdStartStopShip, 0}, /* 86 */
- {CmdSellShip, 0}, /* 87 */
- {CmdBuildShip, 0}, /* 88 */
- {CmdSendShipToDepot, 0}, /* 89 */
- {NULL, 0}, /* 90 */
- {CmdRefitShip, 0}, /* 91 */
+/**
+ * The master command table
+ *
+ * This table contains all possible CommandProc functions with
+ * the flags which belongs to it. The indizes are the same
+ * as the value from the CMD_* enums.
+ */
+static const Command _command_proc_table[] = {
+ {CmdBuildRailroadTrack, CMD_AUTO}, /* 0, CMD_BUILD_RAILROAD_TRACK */
+ {CmdRemoveRailroadTrack, CMD_AUTO}, /* 1, CMD_REMOVE_RAILROAD_TRACK */
+ {CmdBuildSingleRail, CMD_AUTO}, /* 2, CMD_BUILD_SINGLE_RAIL */
+ {CmdRemoveSingleRail, CMD_AUTO}, /* 3, CMD_REMOVE_SINGLE_RAIL */
+ {CmdLandscapeClear, 0}, /* 4, CMD_LANDSCAPE_CLEAR */
+ {CmdBuildBridge, CMD_AUTO}, /* 5, CMD_BUILD_BRIDGE */
+ {CmdBuildRailroadStation, CMD_AUTO}, /* 6, CMD_BUILD_RAILROAD_STATION */
+ {CmdBuildTrainDepot, CMD_AUTO}, /* 7, CMD_BUILD_TRAIN_DEPOT */
+ {CmdBuildSingleSignal, CMD_AUTO}, /* 8, CMD_BUILD_SIGNALS */
+ {CmdRemoveSingleSignal, CMD_AUTO}, /* 9, CMD_REMOVE_SIGNALS */
+ {CmdTerraformLand, CMD_AUTO}, /* 10, CMD_TERRAFORM_LAND */
+ {CmdPurchaseLandArea, CMD_AUTO}, /* 11, CMD_PURCHASE_LAND_AREA */
+ {CmdSellLandArea, 0}, /* 12, CMD_SELL_LAND_AREA */
+ {CmdBuildTunnel, CMD_AUTO}, /* 13, CMD_BUILD_TUNNEL */
+ {CmdRemoveFromRailroadStation, 0}, /* 14, CMD_REMOVE_FROM_RAILROAD_STATION */
+ {CmdConvertRail, 0}, /* 15, CMD_CONVERT_RAILD */
+ {CmdBuildTrainWaypoint, 0}, /* 16, CMD_BUILD_TRAIN_WAYPOINT */
+ {CmdRenameWaypoint, 0}, /* 17, CMD_RENAME_WAYPOINT */
+ {CmdRemoveTrainWaypoint, 0}, /* 18, CMD_REMOVE_TRAIN_WAYPOINT */
+ {NULL, 0}, /* 19, unused */
+ {NULL, 0}, /* 20, unused */
+ {CmdBuildRoadStop, CMD_AUTO}, /* 21, CMD_BUILD_ROAD_STOP */
+ {CmdRemoveRoadStop, 0}, /* 22, CMD_REMOVE_ROAD_STOP */
+ {CmdBuildLongRoad, CMD_AUTO}, /* 23, CMD_BUILD_LONG_ROAD */
+ {CmdRemoveLongRoad, CMD_AUTO}, /* 24, CMD_REMOVE_LONG_ROAD */
+ {CmdBuildRoad, 0}, /* 25, CMD_BUILD_ROAD */
+ {CmdRemoveRoad, 0}, /* 26, CMD_REMOVE_ROAD */
+ {CmdBuildRoadDepot, CMD_AUTO}, /* 27, CMD_BUILD_ROAD_DEPOT */
+ {NULL, 0}, /* 28, unused */
+ {CmdBuildAirport, CMD_AUTO}, /* 29, CMD_BUILD_AIRPORT */
+ {CmdBuildDock, CMD_AUTO}, /* 30, CMD_BUILD_DOCK */
+ {CmdBuildShipDepot, CMD_AUTO}, /* 31, CMD_BUILD_SHIP_DEPOT */
+ {CmdBuildBuoy, CMD_AUTO}, /* 32, CMD_BUILD_BUOY */
+ {CmdPlantTree, CMD_AUTO}, /* 33, CMD_PLANT_TREE */
+ {CmdBuildRailVehicle, 0}, /* 34, CMD_BUILD_RAIL_VEHICLE */
+ {CmdMoveRailVehicle, 0}, /* 35, CMD_MOVE_RAIL_VEHICLE */
+ {CmdStartStopTrain, 0}, /* 36, CMD_START_STOP_TRAIN */
+ {NULL, 0}, /* 37, unused */
+ {CmdSellRailWagon, 0}, /* 38, CMD_SELL_RAIL_WAGON */
+ {CmdSendTrainToDepot, 0}, /* 39, CMD_SEND_TRAIN_TO_DEPOT */
+ {CmdForceTrainProceed, 0}, /* 40, CMD_FORCE_TRAIN_PROCEED */
+ {CmdReverseTrainDirection, 0}, /* 41, CMD_REVERSE_TRAIN_DIRECTION */
- {NULL, 0}, /* 92 */
- {NULL, 0}, /* 93 */
- {NULL, 0}, /* 94 */
- {NULL, 0}, /* 95 */
- {NULL, 0}, /* 96 */
- {NULL, 0}, /* 97 */
-
- {CmdOrderRefit, 0}, /* 98 */
- {CmdCloneOrder, 0}, /* 99 */
-
- {CmdClearArea, 0}, /* 100 */
- {NULL, 0}, /* 101 */
-
- {CmdMoneyCheat, CMD_OFFLINE}, /* 102 */
- {CmdBuildCanal, 0}, /* 103 */
- {CmdPlayerCtrl, 0}, /* 104 */
-
- {CmdLevelLand, 0}, /* 105 */
+ {CmdModifyOrder, 0}, /* 42, CMD_MODIFY_ORDER */
+ {CmdSkipToOrder, 0}, /* 43, CMD_SKIP_TO_ORDER */
+ {CmdDeleteOrder, 0}, /* 44, CMD_DELETE_ORDER */
+ {CmdInsertOrder, 0}, /* 45, CMD_INSERT_ORDER */
- {CmdRefitRailVehicle, 0}, /* 106 */
- {CmdRestoreOrderIndex, 0}, /* 107 */
- {CmdBuildLock, 0}, /* 108 */
- {NULL, 0}, /* 109 */
- {CmdBuildSignalTrack, 0}, /* 110 */
- {CmdRemoveSignalTrack, 0}, /* 111 */
- {NULL, 0}, /* 112 */
- {CmdGiveMoney, 0}, /* 113 */
- {CmdChangePatchSetting, CMD_SERVER}, /* 114 */
- {CmdSetAutoReplace, 0}, /* 115 */
- {CmdCloneVehicle, 0}, /* 116 */
- {CmdMassStartStopVehicle, 0}, /* 117 */
- {CmdDepotSellAllVehicles, 0}, /* 118 */
- {CmdDepotMassAutoReplace, 0}, /* 119 */
- {CmdCreateGroup, 0}, /* 120 */
- {CmdDeleteGroup, 0}, /* 121 */
- {CmdRenameGroup, 0}, /* 122 */
- {CmdAddVehicleGroup, 0}, /* 123 */
- {CmdAddSharedVehicleGroup, 0}, /* 124 */
- {CmdRemoveAllVehiclesGroup, 0}, /* 125 */
- {CmdSetGroupReplaceProtection, 0}, /* 126 */
- {CmdMoveOrder, 0}, /* 127 */
- {CmdChangeTimetable, 0}, /* 128 */
- {CmdSetVehicleOnTime, 0}, /* 129 */
- {CmdAutofillTimetable, 0}, /* 130 */
+ {CmdChangeServiceInt, 0}, /* 46, CMD_CHANGE_SERVICE_INT */
+
+ {CmdBuildIndustry, 0}, /* 47, CMD_BUILD_INDUSTRY */
+ {CmdBuildCompanyHQ, CMD_AUTO}, /* 48, CMD_BUILD_COMPANY_HQ */
+ {CmdSetPlayerFace, 0}, /* 49, CMD_SET_PLAYER_FACE */
+ {CmdSetPlayerColor, 0}, /* 50, CMD_SET_PLAYER_COLOR */
+
+ {CmdIncreaseLoan, 0}, /* 51, CMD_INCREASE_LOAN */
+ {CmdDecreaseLoan, 0}, /* 52, CMD_DECREASE_LOAN */
+
+ {CmdWantEnginePreview, 0}, /* 53, CMD_WANT_ENGINE_PREVIEW */
+
+ {CmdNameVehicle, 0}, /* 54, CMD_NAME_VEHICLE */
+ {CmdRenameEngine, 0}, /* 55, CMD_RENAME_ENGINE */
+
+ {CmdChangeCompanyName, 0}, /* 56, CMD_CHANGE_COMPANY_NAME */
+ {CmdChangePresidentName, 0}, /* 57, CMD_CHANGE_PRESIDENT_NAME */
+
+ {CmdRenameStation, 0}, /* 58, CMD_RENAME_STATION */
+
+ {CmdSellAircraft, 0}, /* 59, CMD_SELL_AIRCRAFT */
+ {CmdStartStopAircraft, 0}, /* 60, CMD_START_STOP_AIRCRAFT */
+
+ {CmdBuildAircraft, 0}, /* 61, CMD_BUILD_AIRCRAFT */
+ {CmdSendAircraftToHangar, 0}, /* 62, CMD_SEND_AIRCRAFT_TO_HANGAR */
+ {NULL, 0}, /* 63, unused */
+ {CmdRefitAircraft, 0}, /* 64, CMD_REFIT_AIRCRAFT */
+
+ {CmdPlaceSign, 0}, /* 65, CMD_PLACE_SIGN */
+ {CmdRenameSign, 0}, /* 66, CMD_RENAME_SIGN */
+
+ {CmdBuildRoadVeh, 0}, /* 67, CMD_BUILD_ROAD_VEH */
+ {CmdStartStopRoadVeh, 0}, /* 68, CMD_START_STOP_ROADVEH */
+ {CmdSellRoadVeh, 0}, /* 69, CMD_SELL_ROAD_VEH */
+ {CmdSendRoadVehToDepot, 0}, /* 70, CMD_SEND_ROADVEH_TO_DEPOT */
+ {CmdTurnRoadVeh, 0}, /* 71, CMD_TURN_ROADVEH */
+ {CmdRefitRoadVeh, 0}, /* 72, CMD_REFIT_ROAD_VEH */
+
+ {CmdPause, CMD_SERVER}, /* 73, CMD_PAUSE */
+
+ {CmdBuyShareInCompany, 0}, /* 74, CMD_BUY_SHARE_IN_COMPANY */
+ {CmdSellShareInCompany, 0}, /* 75, CMD_SELL_SHARE_IN_COMPANY */
+ {CmdBuyCompany, 0}, /* 76, CMD_BUY_COMANY */
+
+ {CmdBuildTown, CMD_OFFLINE}, /* 77, CMD_BUILD_TOWN */
+ {NULL, 0}, /* 78, unused */
+ {NULL, 0}, /* 79, unused */
+ {CmdRenameTown, CMD_SERVER}, /* 80, CMD_RENAME_TOWN */
+ {CmdDoTownAction, 0}, /* 81, CMD_DO_TOWN_ACTION */
+
+ {CmdSetRoadDriveSide, CMD_SERVER}, /* 82, CMD_SET_ROAD_DRIVE_SIDE */
+ {NULL, 0}, /* 83, unused */
+ {NULL, 0}, /* 84, unused */
+ {CmdChangeDifficultyLevel, CMD_SERVER}, /* 85, CMD_CHANGE_DIFFICULTY_LEVEL */
+
+ {CmdStartStopShip, 0}, /* 86, CMD_START_STOP_SHIP */
+ {CmdSellShip, 0}, /* 87, CMD_SELL_SHIP */
+ {CmdBuildShip, 0}, /* 88, CMD_BUILD_SHIP */
+ {CmdSendShipToDepot, 0}, /* 89, CMD_SEND_SHIP_TO_DEPOT */
+ {NULL, 0}, /* 90, unused */
+ {CmdRefitShip, 0}, /* 91, CMD_REFIT_SHIP */
+
+ {NULL, 0}, /* 92, unused */
+ {NULL, 0}, /* 93, unused */
+ {NULL, 0}, /* 94, unused */
+ {NULL, 0}, /* 95, unused */
+ {NULL, 0}, /* 96, unused */
+ {NULL, 0}, /* 97, unused */
+
+ {CmdOrderRefit, 0}, /* 98, CMD_ORDER_REFIT */
+ {CmdCloneOrder, 0}, /* 99, CMD_CLONE_ORDER */
+
+ {CmdClearArea, 0}, /* 100, CMD_CLEAR_AREA */
+ {NULL, 0}, /* 101, unused */
+
+ {CmdMoneyCheat, CMD_OFFLINE}, /* 102, CMD_MONEY_CHEAT */
+ {CmdBuildCanal, CMD_AUTO}, /* 103, CMD_BUILD_CANAL */
+ {CmdPlayerCtrl, 0}, /* 104, CMD_PLAYER_CTRL */
+
+ {CmdLevelLand, CMD_AUTO}, /* 105, CMD_LEVEL_LAND */
+
+ {CmdRefitRailVehicle, 0}, /* 106, CMD_REFIT_RAIL_VEHICLE */
+ {CmdRestoreOrderIndex, 0}, /* 107, CMD_RESTORE_ORDER_INDEX */
+ {CmdBuildLock, CMD_AUTO}, /* 108, CMD_BUILD_LOCK */
+ {NULL, 0}, /* 109, unused */
+ {CmdBuildSignalTrack, CMD_AUTO}, /* 110, CMD_BUILD_SIGNAL_TRACK */
+ {CmdRemoveSignalTrack, CMD_AUTO}, /* 111, CMD_REMOVE_SIGNAL_TRACK */
+ {NULL, 0}, /* 112, unused */
+ {CmdGiveMoney, 0}, /* 113, CMD_GIVE_MONEY */
+ {CmdChangePatchSetting, CMD_SERVER}, /* 114, CMD_CHANGE_PATCH_SETTING */
+ {CmdSetAutoReplace, 0}, /* 115, CMD_SET_AUTOREPLACE */
+ {CmdCloneVehicle, 0}, /* 116, CMD_CLONE_VEHICLE */
+ {CmdMassStartStopVehicle, 0}, /* 117, CMD_MASS_START_STOP */
+ {CmdDepotSellAllVehicles, 0}, /* 118, CMD_DEPOT_SELL_ALL_VEHICLES */
+ {CmdDepotMassAutoReplace, 0}, /* 119, CMD_DEPOT_MASS_AUTOREPLACE */
+ {CmdCreateGroup, 0}, /* 120, CMD_CREATE_GROUP */
+ {CmdDeleteGroup, 0}, /* 121, CMD_DELETE_GROUP */
+ {CmdRenameGroup, 0}, /* 122, CMD_RENAME_GROUP */
+ {CmdAddVehicleGroup, 0}, /* 123, CMD_ADD_VEHICLE_GROUP */
+ {CmdAddSharedVehicleGroup, 0}, /* 124, CMD_ADD_SHARE_VEHICLE_GROUP */
+ {CmdRemoveAllVehiclesGroup, 0}, /* 125, CMD_REMOVE_ALL_VEHICLES_GROUP */
+ {CmdSetGroupReplaceProtection, 0}, /* 126, CMD_SET_GROUP_REPLACE_PROTECTION */
+ {CmdMoveOrder, 0}, /* 127, CMD_MOVE_ORDER */
+ {CmdChangeTimetable, 0}, /* 128, CMD_CHANGE_TIMETABLE */
+ {CmdSetVehicleOnTime, 0}, /* 129, CMD_SET_VEHICLE_ON_TIME */
+ {CmdAutofillTimetable, 0}, /* 130, CMD_AUTOFILL_TIMETABLE */
};
-/* This function range-checks a cmd, and checks if the cmd is not NULL */
+/*!
+ * This function range-checks a cmd, and checks if the cmd is not NULL
+ *
+ * @param cmd The integervalue of a command
+ * @return true if the command is valid (and got a CommandProc function)
+ */
bool IsValidCommand(uint cmd)
{
cmd &= 0xFF;
@@ -350,14 +372,34 @@
_command_proc_table[cmd].proc != NULL;
}
+/*!
+ * This function mask the parameter with 0xFF and returns
+ * the flags which belongs to the given command.
+ *
+ * @param cmd The integer value of the command
+ * @return The flags for this command
+ * @bug integervalues which are less equals 0xFF and greater than the
+ * size of _command_proc_table can result in an index out of bounce
+ * error (which doesn't happend anyway). Check function #IsValidCommand(). (Progman)
+ */
byte GetCommandFlags(uint cmd)
{
return _command_proc_table[cmd & 0xFF].flags;
}
-
static int _docommand_recursive;
+/*!
+ * This function executes a given command with the parameters from the #CommandProc parameter list.
+ * Depending on the flags parameter it execute or test a command.
+ *
+ * @param tile The tile to apply the command on (for the #CommandProc)
+ * @param p1 Additional data for the command (for the #CommandProc)
+ * @param p2 Additional data for the command (for the #CommandProc)
+ * @param flags Flags for the command and how to execute the command
+ * @param procc The command-id to execute (a value of the CMD_* enums)
+ * @see CommandProc
+ */
CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
{
CommandCost res;
@@ -421,6 +463,13 @@
return res;
}
+/*!
+ * This functions returns the money which can be used to execute a command.
+ * This is either the money of the current player or INT64_MAX if there
+ * is no such a player "at the moment" like the server itself.
+ *
+ * @return The available money of a player or INT64_MAX
+ */
Money GetAvailableMoneyForCommand()
{
PlayerID pid = _current_player;
@@ -428,8 +477,20 @@
return GetPlayer(pid)->player_money;
}
-/* toplevel network safe docommand function for the current player. must not be called recursively.
- * the callback is called when the command succeeded or failed. */
+/*!
+ * Toplevel network safe docommand function for the current player. Must not be called recursively.
+ * The callback is called when the command succeeded or failed. The parameters
+ * tile, p1 and p2 are from the #CommandProc function. The paramater cmd is the command to execute.
+ * The parameter my_cmd is used to indicate if the command is from a player or the server.
+ *
+ * @param tile The tile to perform a command on (see #CommandProc)
+ * @param p1 Additional data for the command (see #CommandProc)
+ * @param p2 Additional data for the command (see #CommandProc)
+ * @param callback A callback function to call after the command is finished
+ * @param cmd The command to execute (a CMD_* value)
+ * @param my_cmd indicator if the command is from a player or server (to display error messages for a user)
+ * @return true if the command succeeded, else false
+ */
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd, bool my_cmd)
{
CommandCost res, res2;
@@ -462,7 +523,6 @@
}
flags = 0;
- if (cmd & CMD_AUTO) flags |= DC_AUTO;
if (cmd & CMD_NO_WATER) flags |= DC_NO_WATER;
/* get pointer to command handler */
@@ -473,6 +533,8 @@
return false;
}
+ if (GetCommandFlags(cmd) & CMD_AUTO) flags |= DC_AUTO;
+
/* Some commands have a different output in dryrun than the realrun
* e.g.: if you demolish a whole town, the dryrun would say okay.
* but by really destroying, your rating drops and at a certain point
@@ -512,6 +574,7 @@
_docommand_recursive = 0;
_cmd_text = NULL;
+ ClearStorageChanges(false);
return false;
}
@@ -542,6 +605,7 @@
if (_network_dedicated || (_network_server && pbck == PLAYER_SPECTATOR)) _local_player = pbck;
_docommand_recursive = 0;
_cmd_text = NULL;
+ ClearStorageChanges(false);
return true;
}
#endif /* ENABLE_NETWORK */
@@ -582,6 +646,7 @@
if (callback) callback(true, tile, p1, p2);
_cmd_text = NULL;
+ ClearStorageChanges(true);
return true;
show_error:
@@ -595,6 +660,7 @@
if (callback) callback(false, tile, p1, p2);
_cmd_text = NULL;
+ ClearStorageChanges(false);
return false;
}
--- a/src/command.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/command.h Sun Sep 23 07:37:38 2007 +0000
@@ -5,161 +5,176 @@
#ifndef COMMAND_H
#define COMMAND_H
+/**
+ * List of commands.
+ *
+ * This enum defines all possible commands which can be executed to the game
+ * engine. Observing the game like the query-tool or checking the profit of a
+ * vehicle don't result in a command which should be executed in the engine
+ * nor send to the server in a network game.
+ *
+ * @see _command_proc_table
+ */
enum {
- CMD_BUILD_RAILROAD_TRACK = 0,
- CMD_REMOVE_RAILROAD_TRACK = 1,
- CMD_BUILD_SINGLE_RAIL = 2,
- CMD_REMOVE_SINGLE_RAIL = 3,
- CMD_LANDSCAPE_CLEAR = 4,
- CMD_BUILD_BRIDGE = 5,
- CMD_BUILD_RAILROAD_STATION = 6,
- CMD_BUILD_TRAIN_DEPOT = 7,
- CMD_BUILD_SIGNALS = 8,
- CMD_REMOVE_SIGNALS = 9,
- CMD_TERRAFORM_LAND = 10,
- CMD_PURCHASE_LAND_AREA = 11,
- CMD_SELL_LAND_AREA = 12,
- CMD_BUILD_TUNNEL = 13,
-
- CMD_REMOVE_FROM_RAILROAD_STATION = 14,
- CMD_CONVERT_RAIL = 15,
-
- CMD_BUILD_TRAIN_WAYPOINT = 16,
- CMD_RENAME_WAYPOINT = 17,
- CMD_REMOVE_TRAIN_WAYPOINT = 18,
-
- CMD_BUILD_ROAD_STOP = 21,
- CMD_REMOVE_ROAD_STOP = 22,
- CMD_BUILD_LONG_ROAD = 23,
- CMD_REMOVE_LONG_ROAD = 24,
- CMD_BUILD_ROAD = 25,
- CMD_REMOVE_ROAD = 26,
- CMD_BUILD_ROAD_DEPOT = 27,
-
- CMD_BUILD_AIRPORT = 29,
-
- CMD_BUILD_DOCK = 30,
-
- CMD_BUILD_SHIP_DEPOT = 31,
- CMD_BUILD_BUOY = 32,
-
- CMD_PLANT_TREE = 33,
-
- CMD_BUILD_RAIL_VEHICLE = 34,
- CMD_MOVE_RAIL_VEHICLE = 35,
-
- CMD_START_STOP_TRAIN = 36,
-
- CMD_SELL_RAIL_WAGON = 38,
-
- CMD_SEND_TRAIN_TO_DEPOT = 39,
- CMD_FORCE_TRAIN_PROCEED = 40,
- CMD_REVERSE_TRAIN_DIRECTION = 41,
-
- CMD_MODIFY_ORDER = 42,
- CMD_SKIP_TO_ORDER = 43,
- CMD_DELETE_ORDER = 44,
- CMD_INSERT_ORDER = 45,
-
- CMD_CHANGE_SERVICE_INT = 46,
+ CMD_BUILD_RAILROAD_TRACK = 0, ///< build a rail track
+ CMD_REMOVE_RAILROAD_TRACK = 1, ///< remove a rail track
+ CMD_BUILD_SINGLE_RAIL = 2, ///< build a single rail track
+ CMD_REMOVE_SINGLE_RAIL = 3, ///< remove a single rail track
+ CMD_LANDSCAPE_CLEAR = 4, ///< demolish a tile
+ CMD_BUILD_BRIDGE = 5, ///< build a bridge
+ CMD_BUILD_RAILROAD_STATION = 6, ///< build a railroad station
+ CMD_BUILD_TRAIN_DEPOT = 7, ///< build a train depot
+ CMD_BUILD_SIGNALS = 8, ///< build a signal
+ CMD_REMOVE_SIGNALS = 9, ///< remove a signal
+ CMD_TERRAFORM_LAND = 10, ///< terraform a tile
+ CMD_PURCHASE_LAND_AREA = 11, ///< purchase a tile
+ CMD_SELL_LAND_AREA = 12, ///< sell a bought tile before
+ CMD_BUILD_TUNNEL = 13, ///< build a tunnel
- CMD_BUILD_INDUSTRY = 47,
-
- CMD_BUILD_COMPANY_HQ = 48,
- CMD_SET_PLAYER_FACE = 49,
- CMD_SET_PLAYER_COLOR = 50,
-
- CMD_INCREASE_LOAN = 51,
- CMD_DECREASE_LOAN = 52,
-
- CMD_WANT_ENGINE_PREVIEW = 53,
-
- CMD_NAME_VEHICLE = 54,
- CMD_RENAME_ENGINE = 55,
- CMD_CHANGE_COMPANY_NAME = 56,
- CMD_CHANGE_PRESIDENT_NAME = 57,
- CMD_RENAME_STATION = 58,
-
- CMD_SELL_AIRCRAFT = 59,
- CMD_START_STOP_AIRCRAFT = 60,
- CMD_BUILD_AIRCRAFT = 61,
- CMD_SEND_AIRCRAFT_TO_HANGAR = 62,
- CMD_REFIT_AIRCRAFT = 64,
-
- CMD_PLACE_SIGN = 65,
- CMD_RENAME_SIGN = 66,
+ CMD_REMOVE_FROM_RAILROAD_STATION = 14, ///< remove a tile station
+ CMD_CONVERT_RAIL = 15, ///< convert a rail type
- CMD_BUILD_ROAD_VEH = 67,
- CMD_START_STOP_ROADVEH = 68,
- CMD_SELL_ROAD_VEH = 69,
- CMD_SEND_ROADVEH_TO_DEPOT = 70,
- CMD_TURN_ROADVEH = 71,
- CMD_REFIT_ROAD_VEH = 72,
-
- CMD_PAUSE = 73,
-
- CMD_BUY_SHARE_IN_COMPANY = 74,
- CMD_SELL_SHARE_IN_COMPANY = 75,
- CMD_BUY_COMPANY = 76,
-
- CMD_BUILD_TOWN = 77,
+ CMD_BUILD_TRAIN_WAYPOINT = 16, ///< build a waypoint
+ CMD_RENAME_WAYPOINT = 17, ///< rename a waypoint
+ CMD_REMOVE_TRAIN_WAYPOINT = 18, ///< remove a waypoint
- CMD_RENAME_TOWN = 80,
- CMD_DO_TOWN_ACTION = 81,
-
- CMD_SET_ROAD_DRIVE_SIDE = 82,
-
- CMD_CHANGE_DIFFICULTY_LEVEL = 85,
+ CMD_BUILD_ROAD_STOP = 21, ///< build a road stop
+ CMD_REMOVE_ROAD_STOP = 22, ///< remove a road stop
+ CMD_BUILD_LONG_ROAD = 23, ///< build a complete road (not a "half" one)
+ CMD_REMOVE_LONG_ROAD = 24, ///< remove a complete road (not a "half" one)
+ CMD_BUILD_ROAD = 25, ///< build a "half" road
+ CMD_REMOVE_ROAD = 26, ///< remove a "half" road
+ CMD_BUILD_ROAD_DEPOT = 27, ///< build a road depot
- CMD_START_STOP_SHIP = 86,
- CMD_SELL_SHIP = 87,
- CMD_BUILD_SHIP = 88,
- CMD_SEND_SHIP_TO_DEPOT = 89,
- CMD_REFIT_SHIP = 91,
+ CMD_BUILD_AIRPORT = 29, ///< build an airport
- CMD_ORDER_REFIT = 98,
- CMD_CLONE_ORDER = 99,
- CMD_CLEAR_AREA = 100,
+ CMD_BUILD_DOCK = 30, ///< build a dock
- CMD_MONEY_CHEAT = 102,
- CMD_BUILD_CANAL = 103,
+ CMD_BUILD_SHIP_DEPOT = 31, ///< build a ship depot
+ CMD_BUILD_BUOY = 32, ///< build a buoy
+
+ CMD_PLANT_TREE = 33, ///< plant a tree
+
+ CMD_BUILD_RAIL_VEHICLE = 34, ///< build a rail vehicle
+ CMD_MOVE_RAIL_VEHICLE = 35, ///< move a rail vehicle (in the depot)
+
+ CMD_START_STOP_TRAIN = 36, ///< start or stop a train
+
+ CMD_SELL_RAIL_WAGON = 38, ///< sell a rail wagon
+
+ CMD_SEND_TRAIN_TO_DEPOT = 39, ///< send a train to a depot
+ CMD_FORCE_TRAIN_PROCEED = 40, ///< proceed a train to pass a red signal
+ CMD_REVERSE_TRAIN_DIRECTION = 41, ///< turn a train around
+
+ CMD_MODIFY_ORDER = 42, ///< modify an order (like set full-load)
+ CMD_SKIP_TO_ORDER = 43, ///< skip an order to the next of specific one
+ CMD_DELETE_ORDER = 44, ///< delete an order
+ CMD_INSERT_ORDER = 45, ///< insert a new order
+
+ CMD_CHANGE_SERVICE_INT = 46, ///< change the server interval of a vehicle
+
+ CMD_BUILD_INDUSTRY = 47, ///< build a new industry
+
+ CMD_BUILD_COMPANY_HQ = 48, ///< build the company headquarter
+ CMD_SET_PLAYER_FACE = 49, ///< set the face of the player/company
+ CMD_SET_PLAYER_COLOR = 50, ///< set the color of the player/company
+
+ CMD_INCREASE_LOAN = 51, ///< increase the loan from the bank
+ CMD_DECREASE_LOAN = 52, ///< decrease the loan from the bank
+
+ CMD_WANT_ENGINE_PREVIEW = 53, ///< confirm the preview of an engine
+
+ CMD_NAME_VEHICLE = 54, ///< rename a whole vehicle
+ CMD_RENAME_ENGINE = 55, ///< rename a engine (in the engine list)
+ CMD_CHANGE_COMPANY_NAME = 56, ///< change the company name
+ CMD_CHANGE_PRESIDENT_NAME = 57, ///< change the president name
+ CMD_RENAME_STATION = 58, ///< rename a station
+
+ CMD_SELL_AIRCRAFT = 59, ///< sell an aircraft
+ CMD_START_STOP_AIRCRAFT = 60, ///< start/stop an aircraft
+ CMD_BUILD_AIRCRAFT = 61, ///< build an aircraft
+ CMD_SEND_AIRCRAFT_TO_HANGAR = 62, ///< send an aircraft to a hanger
+ CMD_REFIT_AIRCRAFT = 64, ///< refit the cargo space of an aircraft
+
+ CMD_PLACE_SIGN = 65, ///< place a sign
+ CMD_RENAME_SIGN = 66, ///< rename a sign
+
+ CMD_BUILD_ROAD_VEH = 67, ///< build a road vehicle
+ CMD_START_STOP_ROADVEH = 68, ///< start/stop a road vehicle
+ CMD_SELL_ROAD_VEH = 69, ///< sell a road vehicle
+ CMD_SEND_ROADVEH_TO_DEPOT = 70, ///< send a road vehicle to the depot
+ CMD_TURN_ROADVEH = 71, ///< turn a road vehicle around
+ CMD_REFIT_ROAD_VEH = 72, ///< refit the cargo space of a road vehicle
+
+ CMD_PAUSE = 73, ///< pause the game
+
+ CMD_BUY_SHARE_IN_COMPANY = 74, ///< buy a share from a company
+ CMD_SELL_SHARE_IN_COMPANY = 75, ///< sell a share from a company
+ CMD_BUY_COMPANY = 76, ///< buy a company which is bankrupt
+
+ CMD_BUILD_TOWN = 77, ///< build a town
+
+ CMD_RENAME_TOWN = 80, ///< rename a town
+ CMD_DO_TOWN_ACTION = 81, ///< do a action from the town detail window (like advertises or bribe)
+
+ CMD_SET_ROAD_DRIVE_SIDE = 82, ///< set the side where the road vehicles drive
+
+ CMD_CHANGE_DIFFICULTY_LEVEL = 85, ///< change the difficult of a game (each setting for it own)
+
+ CMD_START_STOP_SHIP = 86, ///< start/stop a ship
+ CMD_SELL_SHIP = 87, ///< sell a ship
+ CMD_BUILD_SHIP = 88, ///< build a new ship
+ CMD_SEND_SHIP_TO_DEPOT = 89, ///< send a ship to a depot
+ CMD_REFIT_SHIP = 91, ///< refit the cargo space of a ship
+
+ CMD_ORDER_REFIT = 98, ///< change the refit informaction of an order (for "goto depot" )
+ CMD_CLONE_ORDER = 99, ///< clone (and share) an order
+ CMD_CLEAR_AREA = 100, ///< clear an area
+
+ CMD_MONEY_CHEAT = 102, ///< do the money cheat
+ CMD_BUILD_CANAL = 103, ///< build a canal
CMD_PLAYER_CTRL = 104, ///< used in multiplayer to create a new player etc.
CMD_LEVEL_LAND = 105, ///< level land
- CMD_REFIT_RAIL_VEHICLE = 106,
- CMD_RESTORE_ORDER_INDEX = 107,
- CMD_BUILD_LOCK = 108,
-
- CMD_BUILD_SIGNAL_TRACK = 110,
- CMD_REMOVE_SIGNAL_TRACK = 111,
-
- CMD_GIVE_MONEY = 113,
- CMD_CHANGE_PATCH_SETTING = 114,
-
- CMD_SET_AUTOREPLACE = 115,
+ CMD_REFIT_RAIL_VEHICLE = 106, ///< refit the cargo space of a train
+ CMD_RESTORE_ORDER_INDEX = 107, ///< restore vehicle order-index and service interval
+ CMD_BUILD_LOCK = 108, ///< build a lock
- CMD_CLONE_VEHICLE = 116,
- CMD_MASS_START_STOP = 117,
- CMD_DEPOT_SELL_ALL_VEHICLES = 118,
- CMD_DEPOT_MASS_AUTOREPLACE = 119,
+ CMD_BUILD_SIGNAL_TRACK = 110, ///< add signals along a track (by dragging)
+ CMD_REMOVE_SIGNAL_TRACK = 111, ///< remove signals along a track (by dragging)
- CMD_CREATE_GROUP = 120,
- CMD_DELETE_GROUP = 121,
- CMD_RENAME_GROUP = 122,
- CMD_ADD_VEHICLE_GROUP = 123,
- CMD_ADD_SHARED_VEHICLE_GROUP = 124,
- CMD_REMOVE_ALL_VEHICLES_GROUP = 125,
- CMD_SET_GROUP_REPLACE_PROTECTION = 126,
+ CMD_GIVE_MONEY = 113, ///< give money to an other player
+ CMD_CHANGE_PATCH_SETTING = 114, ///< change a patch setting
- CMD_MOVE_ORDER = 127,
- CMD_CHANGE_TIMETABLE = 128,
- CMD_SET_VEHICLE_ON_TIME = 129,
- CMD_AUTOFILL_TIMETABLE = 130,
+ CMD_SET_AUTOREPLACE = 115, ///< set an autoreplace entry
+
+ CMD_CLONE_VEHICLE = 116, ///< clone a vehicle
+ CMD_MASS_START_STOP = 117, ///< start/stop all vehicles (in a depot)
+ CMD_DEPOT_SELL_ALL_VEHICLES = 118, ///< sell all vehicles which are in a given depot
+ CMD_DEPOT_MASS_AUTOREPLACE = 119, ///< force the autoreplace to take action in a given depot
+
+ CMD_CREATE_GROUP = 120, ///< create a new group
+ CMD_DELETE_GROUP = 121, ///< delete a group
+ CMD_RENAME_GROUP = 122, ///< rename a group
+ CMD_ADD_VEHICLE_GROUP = 123, ///< add a vehicle to a group
+ CMD_ADD_SHARED_VEHICLE_GROUP = 124, ///< add all other shared vehicles to a group which are missing
+ CMD_REMOVE_ALL_VEHICLES_GROUP = 125, ///< remove all vehicles from a group
+ CMD_SET_GROUP_REPLACE_PROTECTION = 126, ///< set the autoreplace-protection for a group
+
+ CMD_MOVE_ORDER = 127, ///< move an order
+ CMD_CHANGE_TIMETABLE = 128, ///< change the timetable for a vehicle
+ CMD_SET_VEHICLE_ON_TIME = 129, ///< set the vehicle on time feature (timetable)
+ CMD_AUTOFILL_TIMETABLE = 130, ///< autofill the timetable
};
+/**
+ * List of flags for a command.
+ *
+ * This enums defines some flags which can be used for the commands.
+ */
enum {
- DC_EXEC = 0x01,
+ DC_EXEC = 0x01, ///< execute the given command
DC_AUTO = 0x02, ///< don't allow building on structures
DC_QUERY_COST = 0x04, ///< query cost only, don't build.
DC_NO_WATER = 0x08, ///< don't allow building on water
@@ -168,50 +183,167 @@
DC_FORCETEST = 0x80, ///< force test too.
};
+/**
+ * Used to combine a StringID with the command.
+ *
+ * This macro can be used to add a StringID (the error message to show) on a command-id
+ * (CMD_xxx). Use the binary or-operator "|" to combine the command with the result from
+ * this macro.
+ *
+ * @param x The StringID to combine with a command-id
+ */
#define CMD_MSG(x) ((x) << 16)
+/**
+ * Defines some flags.
+ *
+ * This enumeration defines some flags which are binary-or'ed on a command.
+ */
enum {
- CMD_AUTO = 0x0200,
- CMD_NO_WATER = 0x0400,
+ CMD_NO_WATER = 0x0400, ///< dont build on water
CMD_NETWORK_COMMAND = 0x0800, ///< execute the command without sending it on the network
CMD_NO_TEST_IF_IN_NETWORK = 0x1000, ///< When enabled, the command will bypass the no-DC_EXEC round if in network
- CMD_SHOW_NO_ERROR = 0x2000,
+ CMD_SHOW_NO_ERROR = 0x2000, ///< do not show the error message
};
-/** Command flags for the command table _command_proc_table */
+/**
+ * Command flags for the command table _command_proc_table.
+ *
+ * This enumeration defines flags for the _command_proc_table.
+ */
enum {
CMD_SERVER = 0x1, ///< the command can only be initiated by the server
CMD_OFFLINE = 0x2, ///< the command cannot be executed in a multiplayer game; single-player only
+ CMD_AUTO = 0x4, ///< set the DC_AUTO flag on this command
};
+/**
+ * Defines the callback type for all command handler functions.
+ *
+ * This type defines the function header for all functions which handles a CMD_* command.
+ * A command handler use the parameters to act according to the meaning of the command.
+ * The tile parameter defines the tile to perform an action on.
+ * The flag parameter is filled with flags from the DC_* enumeration. The parameters
+ * p1 and p2 are filled with parameters for the command like "which road type", "which
+ * order" or "direction". Each function should mentioned in there doxygen comments
+ * the usage of these parameters.
+ *
+ * @param tile The tile to apply a command on
+ * @param flags Flags for the command, from the DC_* enumeration
+ * @param p1 Additional data for the command
+ * @param p2 Additional data for the command
+ * @return The CommandCost of the command, which can be succeeded or failed.
+ */
typedef CommandCost CommandProc(TileIndex tile, uint32 flags, uint32 p1, uint32 p2);
+/**
+ * Define a command with the flags which belongs to it.
+ *
+ * This struct connect a command handler function with the flags created with
+ * the #CMD_AUTO, #CMD_OFFLINE and #CMD_SERVER values.
+ */
struct Command {
CommandProc *proc;
byte flags;
};
+/**
+ * Checks if a command failes.
+ *
+ * As you see the parameter is not a command but the return value of a command,
+ * the CommandCost class. This function checks if the command executed by
+ * the CommandProc function failed and returns true if it does.
+ *
+ * @param cost The return value of a CommandProc call
+ * @return true if the command failes
+ * @see CmdSucceded
+ */
static inline bool CmdFailed(CommandCost cost) { return cost.Failed(); }
+
+/**
+ * Checks if a command succeeded.
+ *
+ * As #CmdFailed this function checks if a command succeeded
+ *
+ * @param cost The return value of a CommandProc call
+ * @return true if the command succeeded
+ * @see CmdSucceeded
+ */
static inline bool CmdSucceeded(CommandCost cost) { return cost.Succeeded(); }
+/**
+ * Define a default return value for a failed command.
+ *
+ * This variable contains a CommandCost object with is declared as "failed".
+ * Other functions just need to return this error if there is an error,
+ * which doesn't need to specific by a StringID.
+ */
static const CommandCost CMD_ERROR = CommandCost(INVALID_STRING_ID);
-#define return_cmd_error(errcode) do { return CommandCost(errcode); } while (0)
+/**
+ * Returns from a function with a specific StringID as error.
+ *
+ * This macro is used to return from a function. The parameter contains the
+ * StringID which will be returned.
+ *
+ * @param errcode The StringID to return
+ */
+#define return_cmd_error(errcode) return CommandCost(errcode);
/* command.cpp */
+/**
+ * Define a callback function for the client, after the command is finished.
+ *
+ * Functions of this type are called after the command is finished. The parameters
+ * are from the #CommandProc callback type. The boolean parameter indicates if the
+ * command succeeded or failed.
+ *
+ * @param success If the command succeeded or not.
+ * @param tile The tile of the command action
+ * @param p1 Additional data of the command
+ * @param p1 Additional data of the command
+ * @see CommandProc
+ */
typedef void CommandCallback(bool success, TileIndex tile, uint32 p1, uint32 p2);
+
+/**
+ * Execute a command
+ */
CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
+
+/**
+ * Execute a network safe DoCommand function
+ */
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd, bool my_cmd = true);
#ifdef ENABLE_NETWORK
+/**
+ * Send a command over the network
+ */
void NetworkSend_Command(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback);
#endif /* ENABLE_NETWORK */
-extern const char* _cmd_text; ///< Text, which gets sent with a command
+/**
+ * Text, which gets sent with a command
+ *
+ * This variable contains a string (be specific a pointer of the first
+ * char of this string) which will be send with a command. This is
+ * used for user input data like names or chat messages.
+ */
+extern const char *_cmd_text;
+/**
+ * Checks if a integer value belongs to a command.
+ */
bool IsValidCommand(uint cmd);
+/**
+ * Returns the flags from a given command.
+ */
byte GetCommandFlags(uint cmd);
+/**
+ * Returns the current money available which can be used for a command.
+ */
Money GetAvailableMoneyForCommand();
#endif /* COMMAND_H */
--- a/src/depot_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/depot_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -474,7 +474,7 @@
if (v == NULL) return;
- if (v->HasFront() && !v->IsPrimaryVehicle()) {
+ if (!v->IsPrimaryVehicle()) {
v = v->First();
/* Do nothing when clicking on a train in depot with no loc attached */
if (v->type == VEH_TRAIN && !IsFrontEngine(v)) return;
--- a/src/dock_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/dock_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -38,17 +38,17 @@
static void PlaceDocks_Dock(TileIndex tile)
{
- DoCommandP(tile, _ctrl_pressed, 0, CcBuildDocks, CMD_BUILD_DOCK | CMD_AUTO | CMD_MSG(STR_9802_CAN_T_BUILD_DOCK_HERE));
+ DoCommandP(tile, _ctrl_pressed, 0, CcBuildDocks, CMD_BUILD_DOCK | CMD_MSG(STR_9802_CAN_T_BUILD_DOCK_HERE));
}
static void PlaceDocks_Depot(TileIndex tile)
{
- DoCommandP(tile, _ship_depot_direction, 0, CcBuildDocks, CMD_BUILD_SHIP_DEPOT | CMD_AUTO | CMD_MSG(STR_3802_CAN_T_BUILD_SHIP_DEPOT));
+ DoCommandP(tile, _ship_depot_direction, 0, CcBuildDocks, CMD_BUILD_SHIP_DEPOT | CMD_MSG(STR_3802_CAN_T_BUILD_SHIP_DEPOT));
}
static void PlaceDocks_Buoy(TileIndex tile)
{
- DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_BUOY | CMD_AUTO | CMD_MSG(STR_9835_CAN_T_POSITION_BUOY_HERE));
+ DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_BUOY | CMD_MSG(STR_9835_CAN_T_POSITION_BUOY_HERE));
}
static void PlaceDocks_DemolishArea(TileIndex tile)
@@ -63,7 +63,7 @@
static void PlaceDocks_BuildLock(TileIndex tile)
{
- DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_LOCK | CMD_AUTO | CMD_MSG(STR_CANT_BUILD_LOCKS));
+ DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_LOCK | CMD_MSG(STR_CANT_BUILD_LOCKS));
}
@@ -162,7 +162,7 @@
GUIPlaceProcDragXY(e);
break;
case DDSP_CREATE_WATER:
- DoCommandP(e->we.place.tile, e->we.place.starttile, 0, CcBuildCanal, CMD_BUILD_CANAL | CMD_AUTO | CMD_MSG(STR_CANT_BUILD_CANALS));
+ DoCommandP(e->we.place.tile, e->we.place.starttile, 0, CcBuildCanal, CMD_BUILD_CANAL | CMD_MSG(STR_CANT_BUILD_CANALS));
break;
default: break;
}
--- a/src/economy.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/economy.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -217,10 +217,7 @@
/* Skip the total */
if (i == SCORE_TOTAL) continue;
/* Check the score */
- s = (_score_part[owner][i] >= _score_info[i].needed) ?
- _score_info[i].score :
- _score_part[owner][i] * _score_info[i].score / _score_info[i].needed;
- if (s < 0) s = 0;
+ s = clamp(_score_part[owner][i], 0, _score_info[i].needed) * _score_info[i].score / _score_info[i].needed;
score += s;
total_score += _score_info[i].score;
}
@@ -1692,8 +1689,13 @@
}
}
- /* Calculate the loading indicator fill percent and display */
- if (_patches.loading_indicators && _game_mode != GM_MENU && v->owner == _local_player) {
+ /* Calculate the loading indicator fill percent and display
+ * In the Game Menu do not display indicators
+ * If _patches.loading_indicators == 2, show indicators (bool can be promoted to int as 0 or 1 - results in 2 > 0,1 )
+ * if _patches.loading_indicators == 1, _local_player must be the owner or must be a spectator to show ind., so 1 > 0
+ * if _patches.loading_indicators == 0, do not display indicators ... 0 is never greater than anything
+ */
+ if (_game_mode != GM_MENU && (_patches.loading_indicators > (uint)(v->owner != _local_player && _local_player != PLAYER_SPECTATOR))) {
StringID percent_up_down = STR_NULL;
int percent = CalcPercentVehicleFilled(v, &percent_up_down);
if (v->fill_percent_te_id == INVALID_TE_ID) {
--- a/src/elrail.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/elrail.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -141,6 +141,65 @@
}
}
+/**
+ * Returns the Z position of a Pylon Control Point.
+ *
+ * @param tile The tile the pylon should stand on.
+ * @param PCPpos The PCP of the tile.
+ * @return The Z position of the PCP.
+ */
+static byte GetPCPElevation(TileIndex tile, DiagDirection PCPpos)
+{
+ /* The elevation of the "pylon"-sprite should be the elevation at the PCP.
+ * PCPs are always on a tile edge.
+ *
+ * This position can be outside of the tile, i.e. ?_pcp_offset == TILE_SIZE > TILE_SIZE - 1.
+ * So we have to move it inside the tile, because if the neighboured tile has a foundation,
+ * that does not smoothly connect to the current tile, we will get a wrong elevation from GetSlopeZ().
+ *
+ * When we move the position inside the tile, we will get a wrong elevation if we have a slope.
+ * To catch all cases we round the Z position to the next (TILE_HEIGHT / 2).
+ * This will return the correct elevation for slopes and will also detect non-continuous elevation on edges.
+ *
+ * Also note that the result of GetSlopeZ() is very special on bridge-ramps.
+ */
+
+ byte z = GetSlopeZ(TileX(tile) * TILE_SIZE + min(x_pcp_offsets[PCPpos], TILE_SIZE - 1), TileY(tile) * TILE_SIZE + min(y_pcp_offsets[PCPpos], TILE_SIZE - 1));
+ return (z + 2) & ~3; // this means z = (z + TILE_HEIGHT / 4) / (TILE_HEIGHT / 2) * (TILE_HEIGHT / 2);
+}
+
+/**
+ * Draws wires on a tunnel tile
+ *
+ * DrawTile_TunnelBridge() calls this function to draw the wires as SpriteCombine with the tunnel roof.
+ *
+ * @param ti The Tileinfo to draw the tile for
+ */
+void DrawCatenaryOnTunnel(const TileInfo *ti)
+{
+ /* xmin, ymin, xmax + 1, ymax + 1 of BB */
+ static const int _tunnel_wire_BB[4][4] = {
+ { 0, 1, 16, 15 }, // NE
+ { 1, 0, 15, 16 }, // SE
+ { 0, 1, 16, 15 }, // SW
+ { 1, 0, 15, 16 }, // NW
+ };
+
+ if ((GetRailType(ti->tile) != RAILTYPE_ELECTRIC) || _patches.disable_elrails) return;
+
+ DiagDirection dir = GetTunnelDirection(ti->tile);
+
+ const SortableSpriteStruct *sss = &CatenarySpriteData_Tunnel[dir];
+ const int *BB_data = _tunnel_wire_BB[dir];
+ AddSortableSpriteToDraw(
+ sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
+ BB_data[2] - sss->x_offset, BB_data[3] - sss->y_offset, BB_Z_SEPARATOR - sss->z_offset + 1,
+ GetTileZ(ti->tile) + sss->z_offset,
+ HASBIT(_transparent_opt, TO_BUILDINGS),
+ BB_data[0] - sss->x_offset, BB_data[1] - sss->y_offset, BB_Z_SEPARATOR - sss->z_offset
+ );
+}
+
/** Draws wires and, if required, pylons on a given tile
* @param ti The Tileinfo to draw the tile for
*/
@@ -184,6 +243,11 @@
tileh[TS_NEIGHBOUR] = GetTileSlope(neighbour, NULL);
trackconfig[TS_NEIGHBOUR] = GetRailTrackBitsUniversal(neighbour, NULL);
if (IsTunnelTile(neighbour) && i != GetTunnelDirection(neighbour)) trackconfig[TS_NEIGHBOUR] = TRACK_BIT_NONE;
+
+ /* If the neighboured tile does not smoothly connect to the current tile (because of a foundation),
+ * we have to draw all pillars on the current tile. */
+ if (GetPCPElevation(ti->tile, i) != GetPCPElevation(neighbour, ReverseDiagDir(i))) trackconfig[TS_NEIGHBOUR] = TRACK_BIT_NONE;
+
isflat[TS_NEIGHBOUR] = ((trackconfig[TS_NEIGHBOUR] & (TRACK_BIT_HORZ | TRACK_BIT_VERT)) != 0);
PPPpreferred[i] = 0xFF; // We start with preferring everything (end-of-line in any direction)
@@ -220,7 +284,7 @@
if (IsTileType(neighbour, MP_STATION)) tileh[TS_NEIGHBOUR] = SLOPE_FLAT;
/* Read the foundataions if they are present, and adjust the tileh */
- if (IsTileType(neighbour, MP_RAILWAY) && GetRailType(neighbour) == RAILTYPE_ELECTRIC) foundation = GetRailFoundation(tileh[TS_NEIGHBOUR], trackconfig[TS_NEIGHBOUR]);
+ if (trackconfig[TS_NEIGHBOUR] != TRACK_BIT_NONE && IsTileType(neighbour, MP_RAILWAY) && GetRailType(neighbour) == RAILTYPE_ELECTRIC) foundation = GetRailFoundation(tileh[TS_NEIGHBOUR], trackconfig[TS_NEIGHBOUR]);
if (IsBridgeTile(neighbour)) {
foundation = GetBridgeFoundation(tileh[TS_NEIGHBOUR], DiagDirToAxis(GetBridgeRampDirection(neighbour)));
}
@@ -268,9 +332,9 @@
continue; /* No neighbour, go looking for a better position */
}
- AddSortableSpriteToDraw(pylons_normal[temp], PAL_NONE, x, y, 1, 1, 10,
- GetSlopeZ(ti->x + x_pcp_offsets[i], ti->y + y_pcp_offsets[i]),
- HASBIT(_transparent_opt, TO_BUILDINGS));
+ AddSortableSpriteToDraw(pylon_sprites[temp], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE,
+ GetPCPElevation(ti->tile, i),
+ HASBIT(_transparent_opt, TO_BUILDINGS), -1, -1);
break; /* We already have drawn a pylon, bail out */
}
}
@@ -287,17 +351,7 @@
/* Drawing of pylons is finished, now draw the wires */
for (t = TRACK_BEGIN; t < TRACK_END; t++) {
if (HASBIT(trackconfig[TS_HOME], t)) {
- if (IsTunnelTile(ti->tile)) {
- const SortableSpriteStruct *sss = &CatenarySpriteData_Tunnel[GetTunnelDirection(ti->tile)];
-
- AddSortableSpriteToDraw(
- sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
- sss->x_size, sss->y_size, sss->z_size,
- GetTileZ(ti->tile) + sss->z_offset,
- HASBIT(_transparent_opt, TO_BUILDINGS)
- );
- break;
- }
+ if (IsTunnelTile(ti->tile)) break; // drawn together with tunnel-roof (see DrawCatenaryOnTunnel())
byte PCPconfig = HASBIT(PCPstatus, PCPpositions[t][0]) +
(HASBIT(PCPstatus, PCPpositions[t][1]) << 1);
@@ -308,8 +362,13 @@
assert(!IsSteepSlope(tileh[TS_HOME]));
sss = &CatenarySpriteData[Wires[tileh_selector][t][PCPconfig]];
+ /*
+ * The "wire"-sprite position is inside the tile, i.e. 0 <= sss->?_offset < TILE_SIZE.
+ * Therefore it is save to use GetSlopeZ() for the elevation.
+ * Also note, that the result of GetSlopeZ() is very special for bridge-ramps.
+ */
AddSortableSpriteToDraw(sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
- sss->x_size, sss->y_size, sss->z_size, GetSlopeZ(ti->x + min(sss->x_offset, TILE_SIZE - 1), ti->y + min(sss->y_offset, TILE_SIZE - 1)) + sss->z_offset,
+ sss->x_size, sss->y_size, sss->z_size, GetSlopeZ(ti->x + sss->x_offset, ti->y + sss->y_offset) + sss->z_offset,
HASBIT(_transparent_opt, TO_BUILDINGS));
}
}
@@ -349,20 +408,22 @@
/* Finished with wires, draw pylons */
/* every other tile needs a pylon on the northern end */
if (num % 2) {
- if (axis == AXIS_X) {
- AddSortableSpriteToDraw(pylons_bridge[0 + HASBIT(tlg, 0)], PAL_NONE, ti->x, ti->y + 4 + 8 * HASBIT(tlg, 0), 1, 1, 10, height, HASBIT(_transparent_opt, TO_BUILDINGS));
- } else {
- AddSortableSpriteToDraw(pylons_bridge[2 + HASBIT(tlg, 1)], PAL_NONE, ti->x + 4 + 8 * HASBIT(tlg, 1), ti->y, 1, 1, 10, height, HASBIT(_transparent_opt, TO_BUILDINGS));
- }
+ DiagDirection PCPpos = (axis == AXIS_X ? DIAGDIR_NE : DIAGDIR_NW);
+ Direction PPPpos = (axis == AXIS_X ? DIR_NW : DIR_NE);
+ if (HASBIT(tlg, (axis == AXIS_X ? 0 : 1))) PPPpos = ReverseDir(PPPpos);
+ uint x = ti->x + x_pcp_offsets[PCPpos] + x_ppp_offsets[PPPpos];
+ uint y = ti->y + y_pcp_offsets[PCPpos] + y_ppp_offsets[PPPpos];
+ AddSortableSpriteToDraw(pylon_sprites[PPPpos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, HASBIT(_transparent_opt, TO_BUILDINGS), -1, -1);
}
/* need a pylon on the southern end of the bridge */
if (DistanceMax(ti->tile, start) == length) {
- if (axis == AXIS_X) {
- AddSortableSpriteToDraw(pylons_bridge[0 + HASBIT(tlg, 0)], PAL_NONE, ti->x + 16, ti->y + 4 + 8 * HASBIT(tlg, 0), 1, 1, 10, height, HASBIT(_transparent_opt, TO_BUILDINGS));
- } else {
- AddSortableSpriteToDraw(pylons_bridge[2 + HASBIT(tlg, 1)], PAL_NONE, ti->x + 4 + 8 * HASBIT(tlg, 1), ti->y + 16, 1, 1, 10, height, HASBIT(_transparent_opt, TO_BUILDINGS));
- }
+ DiagDirection PCPpos = (axis == AXIS_X ? DIAGDIR_SW : DIAGDIR_SE);
+ Direction PPPpos = (axis == AXIS_X ? DIR_NW : DIR_NE);
+ if (HASBIT(tlg, (axis == AXIS_X ? 0 : 1))) PPPpos = ReverseDir(PPPpos);
+ uint x = ti->x + x_pcp_offsets[PCPpos] + x_ppp_offsets[PPPpos];
+ uint y = ti->y + y_pcp_offsets[PCPpos] + y_ppp_offsets[PPPpos];
+ AddSortableSpriteToDraw(pylon_sprites[PPPpos], PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, height, HASBIT(_transparent_opt, TO_BUILDINGS), -1, -1);
}
}
@@ -383,6 +444,7 @@
if (IsRailDepot(ti->tile)) {
const SortableSpriteStruct *sss = &CatenarySpriteData_Depot[GetRailDepotDirection(ti->tile)];
+ /* This wire is not visible with the default depot sprites */
AddSortableSpriteToDraw(
sss->image, PAL_NONE, ti->x + sss->x_offset, ti->y + sss->y_offset,
sss->x_size, sss->y_size, sss->z_size,
--- a/src/fileio.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/fileio.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -16,8 +16,8 @@
#else
#include <pwd.h>
#include <unistd.h>
+#endif
#include <sys/stat.h>
-#endif
/*************************************************/
/* FILE IO ROUTINES ******************************/
@@ -74,18 +74,18 @@
#endif /* LIMITED_FDS */
/* Seek to a file and a position */
-void FioSeekToFile(uint32 pos)
+void FioSeekToFile(uint8 slot, uint32 pos)
{
FILE *f;
#if defined(LIMITED_FDS)
/* Make sure we have this file open */
- FioRestoreFile(pos >> 24);
+ FioRestoreFile(slot);
#endif /* LIMITED_FDS */
- f = _fio.handles[pos >> 24];
+ f = _fio.handles[slot];
assert(f != NULL);
_fio.cur_fh = f;
- _fio.filename = _fio.filenames[pos >> 24];
- FioSeekTo(GB(pos, 0, 24), SEEK_SET);
+ _fio.filename = _fio.filenames[slot];
+ FioSeekTo(pos, SEEK_SET);
}
byte FioReadByte()
@@ -180,6 +180,7 @@
#endif /* LIMITED_FDS */
f = FioFOpenFile(filename);
if (f == NULL) error("Cannot open file '%s'", filename);
+ uint32 pos = ftell(f);
FioCloseFile(slot); // if file was opened before, close it
_fio.handles[slot] = f;
@@ -188,7 +189,7 @@
_fio.usage_count[slot] = 0;
_fio.open_handles++;
#endif /* LIMITED_FDS */
- FioSeekToFile(slot << 24);
+ FioSeekToFile(slot, pos);
}
const char *_subdirs[NUM_SUBDIRS] = {
@@ -203,6 +204,8 @@
};
const char *_searchpaths[NUM_SEARCHPATHS];
+TarList _tar_list;
+TarFileList _tar_filelist;
/**
* Check whether the given file exists
@@ -215,8 +218,16 @@
FILE *f = FioFOpenFile(filename, "rb", subdir);
if (f == NULL) return false;
+ FioFCloseFile(f);
+ return true;
+}
+
+/**
+ * Close a file in a safe way.
+ */
+void FioFCloseFile(FILE *f)
+{
fclose(f);
- return true;
}
char *FioGetFullPath(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename)
@@ -266,7 +277,7 @@
return buf;
}
-FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subdirectory subdir)
+FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subdirectory subdir, size_t *filesize)
{
#if defined(WIN32) && defined(UNICODE)
/* fopen is implemented as a define with ellipses for
@@ -292,11 +303,27 @@
f = fopen(buf, mode);
}
#endif
+ if (f != NULL && filesize != NULL) {
+ /* Find the size of the file */
+ fseek(f, 0, SEEK_END);
+ *filesize = ftell(f);
+ fseek(f, 0, SEEK_SET);
+ }
+ return f;
+}
+
+FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize)
+{
+ FILE *f = fopen(entry->tar->filename, "rb");
+ assert(f != NULL);
+
+ fseek(f, entry->position, SEEK_SET);
+ if (filesize != NULL) *filesize = entry->size;
return f;
}
/** Opens OpenTTD files somewhere in a personal or global directory */
-FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir)
+FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize)
{
FILE *f = NULL;
Searchpath sp;
@@ -304,10 +331,22 @@
assert(subdir < NUM_SUBDIRS || subdir == NO_DIRECTORY);
FOR_ALL_SEARCHPATHS(sp) {
- f = FioFOpenFileSp(filename, mode, sp, subdir);
+ f = FioFOpenFileSp(filename, mode, sp, subdir, filesize);
if (f != NULL || subdir == NO_DIRECTORY) break;
}
+ /* We can only use .tar in case of data-dir, and read-mode */
+ if (f == NULL && subdir == DATA_DIR && mode[0] == 'r') {
+ /* Filenames in tars are always forced to be lowercase */
+ char *lcfilename = strdup(filename);
+ strtolower(lcfilename);
+ TarFileList::iterator it = _tar_filelist.find(lcfilename);
+ free(lcfilename);
+ if (it != _tar_filelist.end()) {
+ f = FioFOpenFileTar(&((*it).second), filesize);
+ }
+ }
+
return f;
}
@@ -368,6 +407,169 @@
return dest;
}
+static bool TarListAddFile(const char *filename)
+{
+ /* The TAR-header, repeated for every file */
+ typedef struct TarHeader {
+ char name[100]; ///< Name of the file
+ char mode[8];
+ char uid[8];
+ char gid[8];
+ char size[12]; ///< Size of the file, in ASCII
+ char mtime[12];
+ char chksum[8];
+ char typeflag;
+ char linkname[100];
+ char magic[6];
+ char version[2];
+ char uname[32];
+ char gname[32];
+ char devmajor[8];
+ char devminor[8];
+ char prefix[155]; ///< Path of the file
+
+ char unused[12];
+ } TarHeader;
+
+ /* Check if we already seen this file */
+ TarList::iterator it = _tar_list.find(filename);
+ if (it != _tar_list.end()) return false;
+
+ FILE *f = fopen(filename, "rb");
+ assert(f != NULL);
+
+ TarListEntry *tar_entry = MallocT<TarListEntry>(1);
+ tar_entry->filename = strdup(filename);
+ _tar_list.insert(TarList::value_type(filename, tar_entry));
+
+ TarHeader th;
+ char buf[sizeof(th.name) + 1], *end;
+ char name[sizeof(th.prefix) + 1 + sizeof(th.name) + 1];
+ int num = 0, pos = 0;
+
+ /* Make a char of 512 empty bytes */
+ char empty[512];
+ memset(&empty[0], 0, sizeof(empty));
+
+ while (!feof(f)) {
+ fread(&th, 1, 512, f);
+ pos += 512;
+
+ /* Check if we have the new tar-format (ustar) or the old one (a lot of zeros after 'link' field) */
+ if (strncmp(th.magic, "ustar", 5) != 0 && memcmp(&th.magic, &empty[0], 512 - offsetof(TarHeader, magic)) != 0) {
+ /* If we have only zeros in the block, it can be an end-of-file indicator */
+ if (memcmp(&th, &empty[0], 512) == 0) continue;
+
+ DEBUG(misc, 0, "The file '%s' isn't a valid tar-file", filename);
+ return false;
+ }
+
+ name[0] = '\0';
+ int len = 0;
+
+ /* The prefix contains the directory-name */
+ if (th.prefix[0] != '\0') {
+ memcpy(name, th.prefix, sizeof(th.prefix));
+ name[sizeof(th.prefix)] = '\0';
+ len = strlen(name);
+ name[len] = PATHSEPCHAR;
+ len++;
+ }
+
+ /* Copy the name of the file in a safe way at the end of 'name' */
+ memcpy(&name[len], th.name, sizeof(th.name));
+ name[len + sizeof(th.name)] = '\0';
+
+ /* Calculate the size of the file.. for some strange reason this is stored as a string */
+ memcpy(buf, th.size, sizeof(th.size));
+ buf[sizeof(th.size)] = '\0';
+ int skip = strtol(buf, &end, 8);
+
+ /* 0 byte sized files can be skipped (dirs, symlinks, ..) */
+ if (skip == 0) continue;
+
+ /* Store this entry in the list */
+ TarFileListEntry entry;
+ entry.tar = tar_entry;
+ entry.size = skip;
+ entry.position = pos;
+ /* Force lowercase */
+ strtolower(name);
+
+ /* Tar-files always have '/' path-seperator, but we want our PATHSEPCHAR */
+#if (PATHSEPCHAR != '/')
+ for (char *n = name; *n != '\0'; n++) if (*n == '/') *n = PATHSEPCHAR;
+#endif
+
+ DEBUG(misc, 6, "Found file in tar: %s (%d bytes, %d offset)", name, skip, pos);
+ if (_tar_filelist.insert(TarFileList::value_type(name, entry)).second) num++;
+
+ /* Skip to the next block.. */
+ skip = ALIGN(skip, 512);
+ fseek(f, skip, SEEK_CUR);
+ pos += skip;
+ }
+
+ DEBUG(misc, 1, "Found tar '%s' with %d new files", filename, num);
+ fclose(f);
+
+ return true;
+}
+
+static int ScanPathForTarFiles(const char *path, int basepath_length)
+{
+ extern bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb);
+
+ uint num = 0;
+ struct stat sb;
+ struct dirent *dirent;
+ DIR *dir;
+
+ if (path == NULL || (dir = ttd_opendir(path)) == NULL) return 0;
+
+ while ((dirent = readdir(dir)) != NULL) {
+ const char *d_name = FS2OTTD(dirent->d_name);
+ char filename[MAX_PATH];
+
+ if (!FiosIsValidFile(path, dirent, &sb)) continue;
+
+ snprintf(filename, lengthof(filename), "%s%s", path, d_name);
+
+ if (sb.st_mode & S_IFDIR) {
+ /* Directory */
+ if (strcmp(d_name, ".") == 0 || strcmp(d_name, "..") == 0) continue;
+ AppendPathSeparator(filename, lengthof(filename));
+ num += ScanPathForTarFiles(filename, basepath_length);
+ } else if (sb.st_mode & S_IFREG) {
+ /* File */
+ char *ext = strrchr(filename, '.');
+
+ /* If no extension or extension isn't .tar, skip the file */
+ if (ext == NULL) continue;
+ if (strcasecmp(ext, ".tar") != 0) continue;
+
+ if (TarListAddFile(filename)) num++;
+ }
+ }
+
+ closedir(dir);
+ return num;
+}
+
+void ScanForTarFiles()
+{
+ Searchpath sp;
+ char path[MAX_PATH];
+ uint num = 0;
+
+ DEBUG(misc, 1, "Scanning for tars");
+ FOR_ALL_SEARCHPATHS(sp) {
+ FioAppendDirectory(path, MAX_PATH, sp, DATA_DIR);
+ num += ScanPathForTarFiles(path, strlen(path));
+ }
+ DEBUG(misc, 1, "Scan complete, found %d files", num);
+}
+
#if defined(WIN32) || defined(WINCE)
/**
* Determine the base (personal dir and game data dir) paths
@@ -454,6 +656,8 @@
#else
_searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL;
#endif
+
+ ScanForTarFiles();
}
#endif /* defined(WIN32) || defined(WINCE) */
--- a/src/fileio.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/fileio.h Sun Sep 23 07:37:38 2007 +0000
@@ -6,9 +6,11 @@
#define FILEIO_H
#include "helpers.hpp"
+#include <map>
+#include <string>
void FioSeekTo(uint32 pos, int mode);
-void FioSeekToFile(uint32 pos);
+void FioSeekToFile(uint8 slot, uint32 pos);
uint32 FioGetPos();
const char *FioGetFilename();
byte FioReadByte();
@@ -61,6 +63,22 @@
extern const char *_searchpaths[NUM_SEARCHPATHS];
/**
+ * The define of a TarList.
+ */
+struct TarListEntry {
+ const char *filename;
+};
+struct TarFileListEntry {
+ TarListEntry *tar;
+ int size;
+ int position;
+};
+typedef std::map<std::string, TarListEntry *> TarList;
+typedef std::map<std::string, TarFileListEntry> TarFileList;
+extern TarList _tar_list;
+extern TarFileList _tar_filelist;
+
+/**
* Checks whether the given search path is a valid search path
* @param sp the search path to check
* @return true if the search path is valid
@@ -72,8 +90,13 @@
/** Iterator for all the search paths */
#define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp))
+#define FOR_ALL_TARS(tar) for (tar = _tar_filelist.begin(); tar != _tar_filelist.end(); tar++)
-FILE *FioFOpenFile(const char *filename, const char *mode = "rb", Subdirectory subdir = DATA_DIR);
+typedef bool FioTarFileListCallback(const char *filename, int size, void *userdata);
+FILE *FioTarFileList(const char *tar, const char *mode, size_t *filesize, FioTarFileListCallback *callback, void *userdata);
+
+void FioFCloseFile(FILE *f);
+FILE *FioFOpenFile(const char *filename, const char *mode = "rb", Subdirectory subdir = DATA_DIR, size_t *filesize = NULL);
bool FioCheckFileExists(const char *filename, Subdirectory subdir = DATA_DIR);
char *FioGetFullPath(char *buf, size_t buflen, Searchpath sp, Subdirectory subdir, const char *filename);
char *FioFindFullPath(char *buf, size_t buflen, Subdirectory subdir, const char *filename);
--- a/src/functions.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/functions.h Sun Sep 23 07:37:38 2007 +0000
@@ -103,7 +103,18 @@
void ConvertNameArray();
/* misc functions */
+/**
+ * Mark a tile given by its coordinate dirty for repaint.
+ *
+ * @ingroup dirty
+ */
void MarkTileDirty(int x, int y);
+
+/**
+ * Mark a tile given by its index dirty for repaint.
+ *
+ * @ingroup dirty
+ */
void MarkTileDirtyByTile(TileIndex tile);
void InvalidateWindow(WindowClass cls, WindowNumber number);
void InvalidateWindowWidget(WindowClass cls, WindowNumber number, byte widget_index);
@@ -124,6 +135,12 @@
void DrawSprite(SpriteID img, SpriteID pal, int x, int y);
bool EnsureNoVehicle(TileIndex tile);
bool EnsureNoVehicleOnGround(TileIndex tile);
+
+/**
+ * Mark all viewports dirty for repaint.
+ *
+ * @ingroup dirty
+ */
void MarkAllViewportsDirty(int left, int top, int right, int bottom);
void ShowCostOrIncomeAnimation(int x, int y, int z, Money cost);
void ShowFeederIncomeAnimation(int x, int y, int z, Money cost);
--- a/src/gfx.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/gfx.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -48,6 +48,14 @@
FontSize _cur_fontsize;
static FontSize _last_fontsize;
static uint8 _cursor_backup[64 * 64 * 4];
+
+/**
+ * The rect for repaint.
+ *
+ * This rectangle defines the area which should be repaint by the video driver.
+ *
+ * @ingroup dirty
+ */
static Rect _invalid_rect;
static const byte *_color_remap_ptr;
static byte _string_colorremap[3];
@@ -269,7 +277,8 @@
GfxFillRect((xl + xr - w) / 2, y + 10, (xl + xr + w) / 2, y + 10, _string_colorremap[1]);
}
-/** 'Correct' a string to a maximum length. Longer strings will be cut into
+/**
+ * 'Correct' a string to a maximum length. Longer strings will be cut into
* additional lines at whitespace characters if possible. The string parameter
* is modified with terminating characters mid-string which are the
* placeholders for the newlines.
@@ -284,7 +293,8 @@
* @param maxw the maximum width the string can have on one line
* @return return a 32bit wide number consisting of 2 packed values:
* 0 - 15 the number of lines ADDED to the string
- * 16 - 31 the fontsize in which the length calculation was done at */
+ * 16 - 31 the fontsize in which the length calculation was done at
+ */
uint32 FormatStringLinebreaks(char *str, int maxw)
{
FontSize size = _cur_fontsize;
@@ -919,6 +929,11 @@
_video_driver->MakeDirty(left, top, right - left, bottom - top);
}
+/*!
+ * Repaints the rectangle blocks which are marked as 'dirty'.
+ *
+ * @see SetDirtyBlocks
+ */
void DrawDirtyBlocks()
{
byte *b = _dirty_blocks;
@@ -1003,7 +1018,21 @@
}
}
-
+/*!
+ * This function extends the internal _invalid_rect rectangle as it
+ * now contains the rectangle defined by the given parameters. Note
+ * the point (0,0) is top left.
+ *
+ * @param left The left edge of the rectangle
+ * @param top The top edge of the rectangle
+ * @param right The right edge of the rectangle
+ * @param bottom The bottm edge of the rectangle
+ * @see DrawDirtyBlocks
+ *
+ * @todo The name of the function should be called like @c AddDirtyBlock as
+ * it neither set a dirty rect nor add several dirty rects although
+ * the function name is in plural. (Progman)
+ */
void SetDirtyBlocks(int left, int top, int right, int bottom)
{
byte *b;
@@ -1041,6 +1070,11 @@
} while (--height != 0);
}
+/*!
+ * This function mark the whole screen as dirty. This results in repainting
+ * the whole screen. Use this with care as this function will break the
+ * idea about marking only parts of the screen as 'dirty'.
+ */
void MarkWholeScreenDirty()
{
SetDirtyBlocks(0, 0, _screen.width, _screen.height);
--- a/src/gfx.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/gfx.h Sun Sep 23 07:37:38 2007 +0000
@@ -2,6 +2,36 @@
/** @file gfx.h */
+/**
+ * @defgroup dirty Dirty
+ *
+ * Handles the repaint of some part of the screen.
+ *
+ * Some places in the code are called functions which makes something "dirty".
+ * This has nothing to do with making a Tile or Window darker or less visible.
+ * This term comes from memory caching and is used to define an object must
+ * be repaint. If some data of an object (like a Tile, Window, Vehicle, whatever)
+ * are changed which are so extensive the object must be repaint its marked
+ * as "dirty". The video driver repaint this object instead of the whole screen
+ * (this is btw. also possible if needed). This is used to avoid a
+ * flickering of the screen by the video driver constantly repainting it.
+ *
+ * This whole mechanism is controlled by an rectangle defined in #_invalid_rect. This
+ * rectangle defines the area on the screen which must be repaint. If a new object
+ * needs to be repainted this rectangle is extended to 'catch' the object on the
+ * screen. At some point (which is normaly uninteressted for patch writers) this
+ * rectangle is send to the video drivers method
+ * VideoDriver::MakeDirty and it is truncated back to an empty rectangle. At some
+ * later point (which is uninteressted, too) the video driver
+ * repaints all these saved rectangle instead of the whole screen and drop the
+ * rectangle informations. Then a new round begins by marking objects "dirty".
+ *
+ * @see VideoDriver::MakeDirty
+ * @see _invalid_rect
+ * @see _screen
+ */
+
+
#ifndef GFX_H
#define GFX_H
@@ -36,24 +66,6 @@
WKC_RETURN = 13,
WKC_TAB = 14,
- /* Numerical keyboard */
- WKC_NUM_0 = 16,
- WKC_NUM_1 = 17,
- WKC_NUM_2 = 18,
- WKC_NUM_3 = 19,
- WKC_NUM_4 = 20,
- WKC_NUM_5 = 21,
- WKC_NUM_6 = 22,
- WKC_NUM_7 = 23,
- WKC_NUM_8 = 24,
- WKC_NUM_9 = 25,
- WKC_NUM_DIV = 26,
- WKC_NUM_MUL = 27,
- WKC_NUM_MINUS = 28,
- WKC_NUM_PLUS = 29,
- WKC_NUM_ENTER = 30,
- WKC_NUM_DECIMAL = 31,
-
/* Space */
WKC_SPACE = 32,
@@ -81,20 +93,35 @@
* A-Z are mapped to 65-90
* a-z are mapped to 97-122 */
- /* Other keys, corresponding to their ascii values */
- WKC_SLASH = 47, ///< / Forward slash
- WKC_SEMICOLON = 59, ///< ; Semicolon
- WKC_EQUALS = 61, ///< = Equals
- WKC_L_BRACKET = 91, ///< [ Left square bracket
- WKC_BACKSLASH = 92, ///< \ Backslash
- WKC_R_BRACKET = 93, ///< ] Right square bracket
+ /* Numerical keyboard */
+ WKC_NUM_0 = 128,
+ WKC_NUM_1 = 129,
+ WKC_NUM_2 = 130,
+ WKC_NUM_3 = 131,
+ WKC_NUM_4 = 132,
+ WKC_NUM_5 = 133,
+ WKC_NUM_6 = 134,
+ WKC_NUM_7 = 135,
+ WKC_NUM_8 = 136,
+ WKC_NUM_9 = 137,
+ WKC_NUM_DIV = 138,
+ WKC_NUM_MUL = 139,
+ WKC_NUM_MINUS = 140,
+ WKC_NUM_PLUS = 141,
+ WKC_NUM_ENTER = 142,
+ WKC_NUM_DECIMAL = 143,
- /* Other keys of which their ascii value is already taken
- * - use unused ascii value not present on keyboard directly */
- WKC_SINGLEQUOTE = 58, ///< ' Single quote
- WKC_COMMA = 60, ///< , Comma
- WKC_PERIOD = 62, ///< . Period
- WKC_MINUS = 95, ///< - Minus
+ /* Other keys */
+ WKC_SLASH = 144, ///< / Forward slash
+ WKC_SEMICOLON = 145, ///< ; Semicolon
+ WKC_EQUALS = 146, ///< = Equals
+ WKC_L_BRACKET = 147, ///< [ Left square bracket
+ WKC_BACKSLASH = 148, ///< \ Backslash
+ WKC_R_BRACKET = 149, ///< ] Right square bracket
+ WKC_SINGLEQUOTE = 150, ///< ' Single quote
+ WKC_COMMA = 151, ///< , Comma
+ WKC_PERIOD = 152, ///< . Period
+ WKC_MINUS = 153, ///< - Minus
};
enum GameModes {
@@ -247,8 +274,26 @@
void LoadStringWidthTable();
void DrawStringMultiCenter(int x, int y, StringID str, int maxw);
uint DrawStringMultiLine(int x, int y, StringID str, int maxw, int maxh = -1);
+
+/**
+ * Let the dirty blocks repainting by the video driver.
+ *
+ * @ingroup dirty
+ */
void DrawDirtyBlocks();
+
+/**
+ * Set a new dirty block.
+ *
+ * @ingroup dirty
+ */
void SetDirtyBlocks(int left, int top, int right, int bottom);
+
+/**
+ * Marks the whole screen as dirty.
+ *
+ * @ingroup dirty
+ */
void MarkWholeScreenDirty();
void GfxInitPalettes();
--- a/src/gfxinit.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/gfxinit.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -114,7 +114,8 @@
* returns true if the checksum is correct */
static bool FileMD5(const MD5File file, bool warn)
{
- FILE *f = FioFOpenFile(file.filename);
+ size_t size;
+ FILE *f = FioFOpenFile(file.filename, "rb", DATA_DIR, &size);
if (f != NULL) {
md5_state_t filemd5state;
@@ -123,11 +124,13 @@
size_t len;
md5_init(&filemd5state);
- while ((len = fread(buffer, 1, sizeof(buffer), f)) != 0)
+ while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, f)) != 0 && size != 0) {
+ size -= len;
md5_append(&filemd5state, buffer, len);
+ }
if (ferror(f) && warn) ShowInfoF("Error Reading from %s \n", file.filename);
- fclose(f);
+ FioFCloseFile(f);
md5_finish(&filemd5state, digest);
return CheckMD5Digest(file, digest, warn);
@@ -381,6 +384,8 @@
assert(load_index == SPR_ONEWAY_BASE);
load_index += LoadGrfFile("oneway.grf", load_index, i++);
+ load_index++; // SPR_EMPTY_BOUNDING_BOX
+
assert(load_index == SPR_FLAGS_BASE);
load_index += LoadGrfFile("flags.grf", load_index, i++);
--- a/src/graph_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/graph_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -1006,13 +1006,7 @@
DrawStringRightAligned(107, y, SET_PERFORMANCE_DETAIL_INT, 0);
/* Calculate the %-bar */
- if (val > needed) {
- x = 50;
- } else if (val == 0) {
- x = 0;
- } else {
- x = val * 50 / needed;
- }
+ x = clamp(val, 0, needed) * 50 / needed;
/* SCORE_LOAN is inversed */
if (val < 0 && i == SCORE_LOAN) x = 0;
@@ -1022,7 +1016,7 @@
if (x != 50) GfxFillRect(112 + x, y - 2, 112 + 50, y + 10, color_notdone);
/* Calculate the % */
- x = (val <= needed) ? val * 100 / needed : 100;
+ x = clamp(val, 0, needed) * 100 / needed;
/* SCORE_LOAN is inversed */
if (val < 0 && i == SCORE_LOAN) x = 0;
--- a/src/group_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/group_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -354,7 +354,7 @@
*/
void RemoveVehicleFromGroup(const Vehicle *v)
{
- if (!v->IsValid() || !(v->HasFront() && v->IsPrimaryVehicle())) return;
+ if (!v->IsValid() || !v->IsPrimaryVehicle()) return;
if (!IsDefaultGroupID(v->group_id)) DecreaseGroupNumVehicle(v->group_id);
}
--- a/src/group_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/group_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -329,7 +329,7 @@
SetVScroll2Count(w, gv->l.list_length);
/* Disable all lists management button when the list is empty */
- SetWindowWidgetsDisabledState(w, gv->l.list_length == 0,
+ SetWindowWidgetsDisabledState(w, gv->l.list_length == 0 || _local_player != owner,
GRP_WIDGET_STOP_ALL,
GRP_WIDGET_START_ALL,
GRP_WIDGET_MANAGE_VEHICLES,
@@ -337,12 +337,24 @@
WIDGET_LIST_END);
/* Disable the group specific function when we select the default group or all vehicles */
- SetWindowWidgetsDisabledState(w, IsDefaultGroupID(gv->group_sel) || IsAllGroupID(gv->group_sel),
+ SetWindowWidgetsDisabledState(w, IsDefaultGroupID(gv->group_sel) || IsAllGroupID(gv->group_sel) || _local_player != owner,
GRP_WIDGET_DELETE_GROUP,
GRP_WIDGET_RENAME_GROUP,
GRP_WIDGET_REPLACE_PROTECTION,
WIDGET_LIST_END);
+ /* Disable remaining buttons for non-local player
+ * Needed while changing _local_player, eg. by cheats
+ * All procedures (eg. move vehicle to another group)
+ * verify, whether you are the owner of the vehicle,
+ * so it doesn't have to be disabled
+ */
+ SetWindowWidgetsDisabledState(w, _local_player != owner,
+ GRP_WIDGET_CREATE_GROUP,
+ GRP_WIDGET_AVAILABLE_VEHICLES,
+ WIDGET_LIST_END);
+
+
/* If selected_group == DEFAULT_GROUP || ALL_GROUP, draw the standard caption
We list all vehicles or ungrouped vehicles */
if (IsDefaultGroupID(gv->group_sel) || IsAllGroupID(gv->group_sel)) {
--- a/src/industry.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/industry.h Sun Sep 23 07:37:38 2007 +0000
@@ -7,6 +7,7 @@
#include "oldpool.h"
#include "helpers.hpp"
+#include "newgrf_storage.h"
typedef byte IndustryGfx;
typedef uint8 IndustryType;
@@ -81,6 +82,11 @@
INDUSTRYBEH_AIRPLANE_ATTACKS = 1 << 11, ///< can be exploded by a military airplane (oil refinery)
INDUSTRYBEH_CHOPPER_ATTACKS = 1 << 12, ///< can be exploded by a military helicopter (factory)
INDUSTRYBEH_CAN_SUBSIDENCE = 1 << 13, ///< can cause a subsidence (coal mine, shaft that collapses)
+ /* The following flags are only used for newindustries and do no represent any normal behaviour */
+ INDUSTRYBEH_PROD_MULTI_HNDLING = 1 << 14, ///< Automatic production multiplier handling
+ INDUSTRYBEH_PRODCALLBACK_RANDOM = 1 << 15, ///< Production callback needs random bits in var 10
+ INDUSTRYBEH_NOBUILT_MAPCREATION = 1 << 16, ///< Do not force one instance of this type to appear on map generation
+ INDUSTRYBEH_CANCLOSE_LASTINSTANCE = 1 << 17, ///< Allow closing down the last instance of this type
};
@@ -93,6 +99,8 @@
* Defines the internal data of a functionnal industry
*/
struct Industry : PoolItem<Industry, IndustryID, &_Industry_pool> {
+ typedef PersistentStorageArray<uint32, 16> PersistentStorage;
+
TileIndex xy; ///< coordinates of the primary tile the industry is built one
byte width;
byte height;
@@ -120,6 +128,8 @@
Date last_cargo_accepted_at; ///< Last day cargo was accepted by this industry
byte selected_layout; ///< Which tile layout was used when creating the industry
+ PersistentStorage psa; ///< Persistent storage for NewGRF industries.
+
Industry(TileIndex tile = 0) : xy(tile) {}
~Industry();
--- a/src/industry_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/industry_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -31,11 +31,13 @@
#include "water_map.h"
#include "tree_map.h"
#include "cargotype.h"
+#include "newgrf.h"
#include "newgrf_commons.h"
#include "newgrf_industries.h"
#include "newgrf_industrytiles.h"
#include "newgrf_callbacks.h"
#include "misc/autoptr.hpp"
+#include "autoslope.h"
void ShowIndustryViewWindow(int industry);
void BuildOilRig(TileIndex tile);
@@ -299,8 +301,8 @@
(HASBIT(image, PALETTE_MODIFIER_COLOR) && dits->building.pal == PAL_NONE) ? GENERAL_SPRITE_COLOR(ind->random_color) : dits->building.pal,
ti->x + dits->subtile_x,
ti->y + dits->subtile_y,
- dits->width + 1,
- dits->height + 1,
+ dits->width,
+ dits->height,
dits->dz,
ti->z,
HASBIT(_transparent_opt, TO_INDUSTRIES));
@@ -1196,7 +1198,8 @@
if (!EnsureNoVehicle(cur_tile)) return false;
if (MayHaveBridgeAbove(cur_tile) && IsBridgeAbove(cur_tile)) return false;
- const IndustryTileSpec *its = GetIndustryTileSpec(it->gfx);
+ const IndustryTileSpec *its = GetIndustryTileSpec(gfx);
+
IndustyBehaviour ind_behav = GetIndustrySpec(type)->behaviour;
if (HASBIT(its->callback_flags, CBM_INDT_SHAPE_CHECK)) {
@@ -1692,76 +1695,6 @@
}
}
-/** Change industry production or do closure
- * @param i Industry for which changes are performed
- */
-static void ExtChangeIndustryProduction(Industry *i)
-{
- bool closeit = true;
- int j;
- const IndustrySpec *indspec = GetIndustrySpec(i->type);
-
- if (indspec->life_type == INDUSTRYLIFE_BLACK_HOLE) return;
-
- if ((indspec->life_type & (INDUSTRYLIFE_ORGANIC | INDUSTRYLIFE_EXTRACTIVE)) != 0) {
- for (j = 0; j < 2 && indspec->produced_cargo[j] != CT_INVALID; j++){
- uint32 r = Random();
- int old_prod, new_prod, percent;
- int mag;
-
- new_prod = old_prod = i->production_rate[j];
-
- if (CHANCE16I(20, 1024, r)) new_prod -= max(((RandomRange(50) + 10) * old_prod) >> 8, 1U);
- /* Chance of increasing becomes better when more is transported */
- if (CHANCE16I(20 + (i->last_month_pct_transported[j] * 20 >> 8), 1024, r >> 16) &&
- ((indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) == 0 || _opt.landscape != LT_TEMPERATE)) {
- new_prod += max(((RandomRange(50) + 10) * old_prod) >> 8, 1U);
- }
-
- new_prod = clamp(new_prod, 1, 255);
- /* Do not stop closing the industry when it has the lowest possible production rate */
- if (new_prod == old_prod && old_prod > 1) {
- closeit = false;
- continue;
- }
-
- percent = (old_prod == 0) ? 100 : (new_prod * 100 / old_prod - 100);
- i->production_rate[j] = new_prod;
-
- /* Close the industry when it has the lowest possible production rate */
- if (new_prod > 1) closeit = false;
-
- mag = abs(percent);
- if (mag >= 10) {
- SetDParam(2, mag);
- SetDParam(0, GetCargo(indspec->produced_cargo[j])->name);
- SetDParam(1, i->index);
- AddNewsItem(
- percent >= 0 ? STR_INDUSTRY_PROD_GOUP : STR_INDUSTRY_PROD_GODOWN,
- NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_ECONOMY, 0),
- i->xy + TileDiffXY(1, 1), 0
- );
- }
- }
- }
-
- if ((indspec->life_type & INDUSTRYLIFE_PROCESSING) != 0) {
- if ((byte)(_cur_year - i->last_prod_year) < 5 || !CHANCE16(1, 180)) closeit = false;
- }
-
- /* If industry will be closed down, show this */
- if (closeit) {
- i->prod_level = 0;
- SetDParam(0, i->index);
- AddNewsItem(
- indspec->closure_text,
- NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_OPENCLOSE, 0),
- i->xy + TileDiffXY(1, 1), 0
- );
- }
-}
-
-
static void UpdateIndustryStatistics(Industry *i)
{
byte pct;
@@ -1786,14 +1719,7 @@
}
}
- if (refresh)
- InvalidateWindow(WC_INDUSTRY_VIEW, i->index);
-
- if (i->prod_level == 0) {
- delete i;
- } else if (_patches.smooth_economy) {
- ExtChangeIndustryProduction(i);
- }
+ if (refresh) InvalidateWindow(WC_INDUSTRY_VIEW, i->index);
}
/** Simple helper that will collect data for the generation of industries */
@@ -1854,68 +1780,158 @@
NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_OPENCLOSE, 0), ind->xy, 0);
}
-static void ChangeIndustryProduction(Industry *i)
+/**
+ * Protects an industry from closure if the appropriate flags and conditions are met
+ * INDUSTRYBEH_CANCLOSE_LASTINSTANCE must be set (which, by default, it is not) and the
+ * count of industries of this type must one (or lower) in order to be protected
+ * against closure.
+ * @param type IndustryType been queried
+ * @result true if protection is on, false otherwise (except for oil wells)
+ */
+static bool CheckIndustryCloseDownProtection(IndustryType type)
{
- StringID str = STR_NULL;
- int type = i->type;
const IndustrySpec *indspec = GetIndustrySpec(type);
- if (indspec->life_type == INDUSTRYLIFE_BLACK_HOLE) return;
-
- if ((indspec->life_type & (INDUSTRYLIFE_ORGANIC | INDUSTRYLIFE_EXTRACTIVE)) != 0) {
- bool only_decrease = false;
-
- /* decrease or increase */
- if ((indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) && _opt.landscape == LT_TEMPERATE)
- only_decrease = true;
-
- if (only_decrease || CHANCE16(1, 3)) {
- /* If you transport > 60%, 66% chance we increase, else 33% chance we increase */
- if (!only_decrease && (i->last_month_pct_transported[0] > 153) != CHANCE16(1, 3)) {
- /* Increase production */
- if (i->prod_level != 0x80) {
- byte b;
-
- i->prod_level <<= 1;
+ /* oil wells (or the industries with that flag set) are always allowed to closedown */
+ if (indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD && _opt.landscape == LT_TEMPERATE) return false;
+ return (indspec->behaviour & INDUSTRYBEH_CANCLOSE_LASTINSTANCE && GetIndustryTypeCount(type) <= 1);
+}
- b = i->production_rate[0] * 2;
- if (i->production_rate[0] >= 128)
- b = 0xFF;
- i->production_rate[0] = b;
-
- b = i->production_rate[1] * 2;
- if (i->production_rate[1] >= 128)
- b = 0xFF;
- i->production_rate[1] = b;
+/** Change industry production or do closure
+ * @param i Industry for which changes are performed
+ * @param monthly true if it's the monthly call, false if it's the random call
+ */
+static void ChangeIndustryProduction(Industry *i, bool monthly)
+{
+ extern StringID MapGRFStringID(uint32 grfid, StringID str);
+ StringID str = STR_NULL;
+ bool closeit = false;
+ const IndustrySpec *indspec = GetIndustrySpec(i->type);
+ bool standard = true;
+ bool suppress_message = false;
+ byte div = 0;
+ byte mul = 0;
- str = indspec->production_up_text;
+ if (HASBIT(indspec->callback_flags, monthly ? CBM_IND_MONTHLYPROD_CHANGE : CBM_IND_PRODUCTION_CHANGE)) {
+ uint16 res = GetIndustryCallback(monthly ? CBID_INDUSTRY_MONTHLYPROD_CHANGE : CBID_INDUSTRY_PRODUCTION_CHANGE, 0, Random(), i, i->type, i->xy);
+ if (res != CALLBACK_FAILED) {
+ standard = false;
+ suppress_message = HASBIT(res, 7);
+ /* Get the custom message if any */
+ if (HASBIT(res, 8)) str = MapGRFStringID(indspec->grf_prop.grffile->grfid, GB(GetRegister(0x100), 0, 16));
+ res = GB(res, 0, 4);
+ switch(res) {
+ default: NOT_REACHED();
+ case 0x0: break; // Do nothing, but show the custom message if any
+ case 0x1: div = 1; break; // Halve industry production. If production reaches the quarter of the default, the industry is closed instead.
+ case 0x2: mul = 1; break; // Double industry production if it hasn't reached eight times of the original yet.
+ case 0x3: closeit = true; break; // The industry announces imminent closure, and is physically removed from the map next month.
+ case 0x4: standard = true; break; // Do the standard random production change as if this industry was a primary one.
+ case 0x5: case 0x6: case 0x7: // Divide production by 4, 8, 16
+ case 0x8: div = res - 0x5; break; // Divide production by 32
+ case 0x9: case 0xA: case 0xB: // Multiply production by 4, 8, 16
+ case 0xC: mul = res - 0x9; break; // Multiply production by 32
+ }
+ }
+ }
+
+ if (standard && monthly != _patches.smooth_economy) return;
+
+ if (standard && indspec->life_type == INDUSTRYLIFE_BLACK_HOLE) return;
+
+ if (standard && (indspec->life_type & (INDUSTRYLIFE_ORGANIC | INDUSTRYLIFE_EXTRACTIVE)) != 0) {
+ /* decrease or increase */
+ bool only_decrease = (indspec->behaviour & INDUSTRYBEH_DONT_INCR_PROD) && _opt.landscape == LT_TEMPERATE;
+
+ if (_patches.smooth_economy) {
+ closeit = true;
+ for (byte j = 0; j < 2 && indspec->produced_cargo[j] != CT_INVALID; j++){
+ uint32 r = Random();
+ int old_prod, new_prod, percent;
+ int mag;
+
+ new_prod = old_prod = i->production_rate[j];
+
+ if (CHANCE16I(20, 1024, r)) new_prod -= max(((RandomRange(50) + 10) * old_prod) >> 8, 1U);
+ /* Chance of increasing becomes better when more is transported */
+ if (CHANCE16I(20 + (i->last_month_pct_transported[j] * 20 >> 8), 1024, r >> 16) && !only_decrease) {
+ new_prod += max(((RandomRange(50) + 10) * old_prod) >> 8, 1U);
}
- } else {
- /* Decrease production */
- if (i->prod_level == 4) {
- i->prod_level = 0;
- str = indspec->closure_text;
+
+ new_prod = clamp(new_prod, 1, 255);
+ /* Do not stop closing the industry when it has the lowest possible production rate */
+ if (new_prod == old_prod && old_prod > 1) {
+ closeit = false;
+ continue;
+ }
+
+ percent = (old_prod == 0) ? 100 : (new_prod * 100 / old_prod - 100);
+ i->production_rate[j] = new_prod;
+
+ /* Close the industry when it has the lowest possible production rate */
+ if (new_prod > 1) closeit = false;
+
+ mag = abs(percent);
+ if (mag >= 10) {
+ SetDParam(2, mag);
+ SetDParam(0, GetCargo(indspec->produced_cargo[j])->name);
+ SetDParam(1, i->index);
+ AddNewsItem(
+ percent >= 0 ? STR_INDUSTRY_PROD_GOUP : STR_INDUSTRY_PROD_GODOWN,
+ NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, NT_ECONOMY, 0),
+ i->xy + TileDiffXY(1, 1), 0
+ );
+ }
+ }
+ } else {
+ if (only_decrease || CHANCE16(1, 3)) {
+ /* If you transport > 60%, 66% chance we increase, else 33% chance we increase */
+ if (!only_decrease && (i->last_month_pct_transported[0] > 153) != CHANCE16(1, 3)) {
+ mul = 1; // Increase production
} else {
- i->prod_level >>= 1;
- i->production_rate[0] = (i->production_rate[0] + 1) >> 1;
- i->production_rate[1] = (i->production_rate[1] + 1) >> 1;
-
- str = indspec->production_down_text;
+ div = 1; // Decrease production
}
}
}
}
- if (indspec->life_type & INDUSTRYLIFE_PROCESSING) {
- /* maybe close */
- if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1, 2)) {
- i->prod_level = 0;
- str = indspec->closure_text;
+
+ if (standard && indspec->life_type & INDUSTRYLIFE_PROCESSING) {
+ if ( (byte)(_cur_year - i->last_prod_year) >= 5 && CHANCE16(1, _patches.smooth_economy ? 180 : 2)) {
+ closeit = true;
}
}
- if (str != STR_NULL) {
+ /* Increase if needed */
+ while (mul-- != 0 && i->prod_level < 0x80) {
+ i->prod_level <<= 1;
+ i->production_rate[0] = min(i->production_rate[0] * 2, 0xFF);
+ i->production_rate[1] = min(i->production_rate[1] * 2, 0xFF);
+ if (str == STR_NULL) str = indspec->production_up_text;
+ }
+
+ /* Decrease if needed */
+ while (div-- != 0 && !closeit) {
+ if (i->prod_level == 4) {
+ closeit = true;
+ } else {
+ i->prod_level >>= 1;
+ i->production_rate[0] = (i->production_rate[0] + 1) >> 1;
+ i->production_rate[1] = (i->production_rate[1] + 1) >> 1;
+ if (str == STR_NULL) str = indspec->production_down_text;
+ }
+ }
+
+ /* Close if needed and allowed */
+ if (closeit && !CheckIndustryCloseDownProtection(i->type)) {
+ i->prod_level = 0;
+ str = indspec->closure_text;
+ }
+
+ if (!suppress_message && str != STR_NULL) {
SetDParam(0, i->index);
- AddNewsItem(str, NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, str == indspec->closure_text ? NT_OPENCLOSE : NT_ECONOMY, 0), i->xy + TileDiffXY(1, 1), 0);
+ AddNewsItem(str,
+ NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_TILE, closeit ? NT_OPENCLOSE : NT_ECONOMY, 0),
+ i->xy + TileDiffXY(1, 1), 0);
}
}
@@ -1927,14 +1943,19 @@
FOR_ALL_INDUSTRIES(i) {
UpdateIndustryStatistics(i);
+ if (i->prod_level == 0) {
+ delete i;
+ } else {
+ ChangeIndustryProduction(i, true);
+ }
}
/* 3% chance that we start a new industry */
if (CHANCE16(3, 100)) {
MaybeNewIndustry();
- } else if (!_patches.smooth_economy) {
+ } else {
i = GetRandomIndustry();
- if (i != NULL) ChangeIndustryProduction(i);
+ if (i != NULL) ChangeIndustryProduction(i, false);
}
_current_player = old_player;
@@ -1973,6 +1994,30 @@
static CommandCost TerraformTile_Industry(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
{
+ if (AutoslopeEnabled()) {
+ /* We imitate here TTDP's behaviour:
+ * - Both new and old slope must not be steep.
+ * - TileMaxZ must not be changed.
+ * - Allow autoslope by default.
+ * - Disallow autoslope if callback succeeds and returns non-zero.
+ */
+ Slope tileh_old = GetTileSlope(tile, NULL);
+ /* TileMaxZ must not be changed. Slopes must not be steep. */
+ if (!IsSteepSlope(tileh_old) && !IsSteepSlope(tileh_new) && (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new))) {
+ const IndustryGfx gfx = GetIndustryGfx(tile);
+ const IndustryTileSpec *itspec = GetIndustryTileSpec(gfx);
+
+ /* Call callback 3C 'disable autosloping for industry tiles'. */
+ if (HASBIT(itspec->callback_flags, CBM_INDT_AUTOSLOPE)) {
+ /* If the callback fails, allow autoslope. */
+ uint16 res = GetIndustryTileCallback(CBID_INDUSTRY_AUTOSLOPE, 0, 0, gfx, GetIndustryByTile(tile), tile);
+ if ((res == 0) || (res == CALLBACK_FAILED)) return _price.terraform;
+ } else {
+ // allow autoslope
+ return _price.terraform;
+ }
+ }
+ }
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); // funny magic bulldozer
}
@@ -2020,12 +2065,14 @@
SLE_CONDVAR(Industry, last_prod_year, SLE_INT32, 31, SL_MAX_VERSION),
SLE_VAR(Industry, was_cargo_delivered, SLE_UINT8),
- SLE_CONDVAR(Industry, owner, SLE_UINT8, 70, SL_MAX_VERSION),
+ SLE_CONDVAR(Industry, founder, SLE_UINT8, 70, SL_MAX_VERSION),
SLE_CONDVAR(Industry, construction_date, SLE_INT32, 70, SL_MAX_VERSION),
SLE_CONDVAR(Industry, construction_type, SLE_UINT8, 70, SL_MAX_VERSION),
SLE_CONDVAR(Industry, last_cargo_accepted_at, SLE_INT32, 70, SL_MAX_VERSION),
SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, 73, SL_MAX_VERSION),
+ SLE_CONDARRX(cpp_offsetof(Industry, psa) + cpp_offsetof(Industry::PersistentStorage, storage), SLE_UINT32, 16, 76, SL_MAX_VERSION),
+
/* reserve extra space in savegame here. (currently 32 bytes) */
SLE_CONDNULL(32, 2, SL_MAX_VERSION),
--- a/src/industry_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/industry_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -503,7 +503,10 @@
StringID message = GetGRFStringID(ind->grf_prop.grffile->grfid, 0xD000 + callback_res);
if (message != STR_NULL && message != STR_UNDEFINED) {
y += 10;
+
+ PrepareTextRefStackUsage();
DrawString(2, y, message, 0);
+ StopTextRefStackUsage();
}
}
}
--- a/src/lang/american.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/american.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1020,6 +1020,7 @@
STR_CONFIG_PATCHES_ON :On
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Show vehicle speed in status bar: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Allow building on slopes and coasts: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Allow terraforming under buildings, tracks, etc. (autoslope): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Allow more realistically sized catchment areas: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Allow removal of more town-owned roads, bridges, etc: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Enable building very long trains: {ORANGE}{STRING}
@@ -1103,9 +1104,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Scroll map
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Off
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Map scrollwheel speed: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Right-click emulation: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Command-click
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control-click
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Off
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Automatically pause when starting a new game: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Use the advanced vehicle list: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Off
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Own company
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :All companies
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Use loading indicators: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Off
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Own company
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :All companies
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Enable timetabling for vehicles: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Show timetable in ticks rather than days: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Default rail type (after new game/game load): {ORANGE}{STRING}
@@ -1262,6 +1275,7 @@
STR_BUOY_IS_IN_USE :{WHITE}... buoy is in use!
+STR_LANDINFO_COORDS :{BLACK}Co-ordinates: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Can't remove part of station...
STR_CANT_CONVERT_RAIL :{WHITE}Can't convert railtype here...
@@ -1372,18 +1386,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Protect your game with a password if you don't want other people to join it
STR_NETWORK_SELECT_MAP :{BLACK}Select a map:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Which map do you want to play?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximum allowed clients:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Choose a maximum number of clients. Not all slots need to be filled.
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (advertize)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} client{P "" s}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maximum allowed clients:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Choose a maximum number of clients. Not all slots need to be filled.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} compan{P y ies}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max companies:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limit the server to a certain number of companies
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} spectator{P "" s}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max spectators:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limit the server to a certain number of spectators
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Language spoken:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Other players will know which language is spoken on the server.
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Start Game
STR_NETWORK_START_GAME_TIP :{BLACK}Start a new network game from a random map, or scenario
STR_NETWORK_LOAD_GAME :{BLACK}Load Game
@@ -1611,9 +1630,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Railroad track with normal signals
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Railroad track with pre-signals
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Railroad track with exit-signals
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Railway track with combo-signals
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Railway track with normal and pre-signals
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Railway track with normal and exit-signals
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Railway track with normal and combo-signals
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Railway track with pre- and exit-signals
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Railway track with pre- and combo-signals
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Railway track with exit- and combo-signals
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Must remove railway station first
@@ -3339,7 +3362,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Rename the selected group
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Click to protect this group from global autoreplace
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/brazilian_portuguese.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/brazilian_portuguese.txt Sun Sep 23 07:37:38 2007 +0000
@@ -14,7 +14,7 @@
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Não há dinheiro - requer {CURRENCY}
STR_0004 :{WHITE}{CURRENCY}
STR_EMPTY :
-STR_0007_FLAT_LAND_REQUIRED :{WHITE}Precisa de terreno plano
+STR_0007_FLAT_LAND_REQUIRED :{WHITE}Necessita de terreno plano
STR_0008_WAITING :{BLACK}Aguardando: {WHITE}{STRING}
STR_0009 :{WHITE}{CARGO}
STR_000A_EN_ROUTE_FROM :{WHITE}{CARGO}{YELLOW} (em rota de
@@ -487,7 +487,7 @@
STR_019F_TRAIN :{G=m}Trem
STR_01A0_IS_GETTING_OLD :{WHITE}{STRING} {COMMA} está ficando velho
STR_01A1_IS_GETTING_VERY_OLD :{WHITE}{STRING} {COMMA} está ficando muito velho
-STR_01A2_IS_GETTING_VERY_OLD_AND :{WHITE}{STRING} {COMMA} está ficando muito velho e precisa ser substituÃdo urgentemente
+STR_01A2_IS_GETTING_VERY_OLD_AND :{WHITE}{STRING} {COMMA} está ficando muito velho e necessita substituição urgente
STR_01A3_LAND_AREA_INFORMATION :{WHITE}Informações do Terreno
STR_01A4_COST_TO_CLEAR_N_A :{BLACK}Custo para limpar: {LTBLUE}N/D
STR_01A5_COST_TO_CLEAR :{BLACK}Custo para limpar: {LTBLUE}{CURRENCY}
@@ -720,7 +720,7 @@
STR_0283_CONSTRUCT_TOFFEE_QUARRY :{BLACK}Construir Extração de Caramelo
STR_0284_CONSTRUCT_SUGAR_MINE :{BLACK}Construir Mina de Açúcar
STR_0285_CAN_T_BUILD_HERE :{WHITE}ImpossÃvel construir {STRING} aqui...
-STR_0286_MUST_BUILD_TOWN_FIRST :{WHITE}...precisa construir uma cidade primeiro
+STR_0286_MUST_BUILD_TOWN_FIRST :{WHITE}...necessário construir uma cidade primeiro
STR_0287_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...só é permitido uma por cidade
STR_0288_PLANT_TREES :{BLACK}Plantar árvores
STR_0289_PLACE_SIGN :{BLACK}Colocar placas
@@ -750,7 +750,7 @@
STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...só pode ser construÃdo em cidades com pelo menos 1200 habitantes
STR_029E_MOVE_THE_STARTING_DATE :{BLACK}Retroceder data de inicio em 1 ano
STR_029F_MOVE_THE_STARTING_DATE :{BLACK}Avançar data de inicio em 1 ano
-STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}...os extremos da ponte precisam estar sobre a terra
+STR_02A0_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}...os extremos da ponte necessitam estar sobre a terra
STR_02A1_SMALL :{BLACK}Pequena
STR_02A2_MEDIUM :{BLACK}Média
STR_02A3_LARGE :{BLACK}Grande
@@ -1022,6 +1022,7 @@
STR_CONFIG_PATCHES_ON :On
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Exibir velocidade do veÃculo na barra de estado: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Permitir a construção em declives e encostas: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Permitir terraformação sob edifÃcios, ruas, etc. (auto nivelação): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Permitir dimensionamento mais realista das áreas de abrangência: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Permitir a remoção de mais rodovias, pontes, etc. das cidades: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Permitir a construção de trens muito longos: {ORANGE}{STRING}
@@ -1105,9 +1106,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Scroll map
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Desligado
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Velocidade do scrollwheel do mapa: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Compatibilizar o botão direito do mouse: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Clique de comando
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Clique de controle
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Desligado
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Pausar automaticamente ao inicar um novo jogo: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Usar a lista avançada de veÃculos: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Desligado
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Própria Compania
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Todas as companias
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Usar indicadores de carga: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Desligado
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Própria Compania
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Todas as Companias
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Ativar plano de horário para veÃculos: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Exibir plano de horário em tiques ao invés de dias: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Tipo padrão de ferrovia (ao criar ou carregar um jogo): {ORANGE}{STRING}
@@ -1382,7 +1395,7 @@
STR_NETWORK_INTERNET_ADVERTISE :Internet (divulgar)
STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} cliente{P "" s}
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Máximo de clientes:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Escolha o número máximo de clientes. Não precisam estar todos preenchidos
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Escolha o número máximo de clientes. Não necessita estarem todos preenchidos
STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} compan{P ia ias}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Máximo de empresas:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limita o servidor para uma certa quantia de empresas
@@ -1587,7 +1600,7 @@
STR_1004_TOO_HIGH :{WHITE}Muito alto
STR_1005_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tipo de linha não apropriado
STR_1007_ALREADY_BUILT :{WHITE}...já construÃdo
-STR_1008_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Precisa remover a ferrovia primeiro
+STR_1008_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Necessário remover a ferrovia primeiro
STR_100A_RAILROAD_CONSTRUCTION :{WHITE}Construir ferrovias
STR_TITLE_ELRAIL_CONSTRUCTION :{WHITE}Construir ferrovias (elétricas)
STR_100B_MONORAIL_CONSTRUCTION :{WHITE}Construir ferrovias (monotrilho)
@@ -1631,7 +1644,7 @@
##id 0x1800
-STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Precisa remover a rodovia primeiro
+STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Necessário remover a rodovia primeiro
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Recapeamento rodoviário em progresso
STR_1802_ROAD_CONSTRUCTION :{WHITE}Construir rodovias
STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Construção de Bonde
@@ -1684,7 +1697,7 @@
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
STR_2002 :{TINYFONT}{BLACK}{SIGN}
-STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}O edifÃcio precisa ser demolido primeiro
+STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}O edifÃcio necessita ser demolido primeiro
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}População: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA}
STR_2007_RENAME_TOWN :Renomear Cidade
@@ -1814,9 +1827,9 @@
STR_3008B_TOO_MANY_TRUCK_STOPS :{WHITE}Muitos locais de carga
STR_3009_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Muito perto de outra estação/local de carga
STR_300A_0 :{WHITE}{STATION} {STATIONFEATURES}
-STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Precisa demolir a estação primeiro
+STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Necessário demolir a estação primeiro
STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Muito perto de outro aeroporto
-STR_300E_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Precisa demolir o aeroporto primeiro
+STR_300E_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Necessário demolir o aeroporto primeiro
STR_3030_RENAME_STATION_LOADING :Renomear estação/área de carga
STR_3031_CAN_T_RENAME_STATION :{WHITE}ImpossÃvel renomear a estação...
@@ -1844,16 +1857,16 @@
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Orientação da estação de caminhão
STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Orientação da Estação de Bonde
STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Orientação da Estação de Bonde
-STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Precisa demolir a estação de ônibus primeiro
-STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Precisa demolir a estação de caminhão
-STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Precisa demolir estação de bonde primeiro
-STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Precisa demolir estação de bonde primeiro
+STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Necessário demolir a estação de ônibus primeiro
+STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Necessário demolir a estação de caminhão
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Necessário demolir estação de bonde primeiro
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Necessário demolir estação de bonde primeiro
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Estações
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Nenhuma -
STR_304B_SITE_UNSUITABLE :{WHITE}...local inadequado
STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Muito perto de outra doca
-STR_304D_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Precisa demolir a doca primeiro
+STR_304D_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Necessário demolir a doca primeiro
STR_304E_SELECT_RAILROAD_STATION :{BLACK}Selecionar a orientação da estação ferroviária
STR_304F_SELECT_NUMBER_OF_PLATFORMS :{BLACK}Selecionar o número de linhas da estação ferroviária
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Selecionar o tamanho da estação ferroviária
@@ -1891,7 +1904,7 @@
##id 0x3800
STR_3800_SHIP_DEPOT_ORIENTATION :{WHITE}Orientação do Depósito Naval
-STR_3801_MUST_BE_BUILT_ON_WATER :{WHITE}...precisa ser construÃdo na água
+STR_3801_MUST_BE_BUILT_ON_WATER :{WHITE}...necessita ser construÃdo na água
STR_3802_CAN_T_BUILD_SHIP_DEPOT :{WHITE}ImpossÃvel construir depósito naval aqui...
STR_3803_SELECT_SHIP_DEPOT_ORIENTATION :{BLACK}Selecionar orientação do depósito naval
STR_3804_WATER :Ãgua
@@ -2005,11 +2018,11 @@
STR_5001_ROAD_VEHICLE_IN_TUNNEL :{WHITE}Automóvel no túnel
STR_5003_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Há outro túnel no caminho
STR_5005_UNABLE_TO_EXCAVATE_LAND :{WHITE}Incapaz de escavar o terreno para o outro lado do túnel
-STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Precisa demolir o túnel primeiro
-STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Precisa demolir a ponte primeiro
+STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Necessário demolir o túnel primeiro
+STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Necessário demolir a ponte primeiro
STR_5008_CANNOT_START_AND_END_ON :{WHITE}ImpossÃvel iniciar e terminar no mesmo ponto
STR_5009_LEVEL_LAND_OR_WATER_REQUIRED :{WHITE}Debaixo da ponte é necessário um terreno plano ou água
-STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Inicio e fim precisam estar alinhados
+STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Inicio e fim necessitam estar alinhados
STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}O local não é adequado para a entrada do túnel
STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
STR_500E_SUSPENSION_STEEL :Suspensa, Aço
@@ -2684,7 +2697,7 @@
STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Carregando / descarregando
-STR_TRAIN_MUST_BE_STOPPED :{WHITE}O trem precisa estar parado dentro do depósito
+STR_TRAIN_MUST_BE_STOPPED :{WHITE}O trem necessita estar parado dentro do depósito
STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}ImpossÃvel enviar o trem para o depósito...
STR_8831_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Não há espaço para mais ordens
STR_8832_TOO_MANY_ORDERS :{WHITE}Muitas ordens
@@ -2797,7 +2810,7 @@
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} ConstruÃdo: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO}
-STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...precisa estar parado dentro de uma garagem
+STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...necessita estar parado dentro de uma garagem
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}ImpossÃvel vender automóvel...
STR_9015_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}ImpossÃvel iniciar/parar automóvel...
STR_9016_ROAD_VEHICLE_IS_WAITING :{WHITE}Automóvel {COMMA} está aguardando na garagem
@@ -2861,7 +2874,7 @@
STR_CLONE_SHIP :{BLACK}Clonar Embarcação
STR_CLONE_SHIP_INFO :{BLACK}Isso vai construir uma cópia da embarcação. Control-clique vai compartilhar as ordens
STR_CLONE_SHIP_DEPOT_INFO :{BLACK}Isso irá construir uma cópia da embarcação. Clique neste botão e depois em uma embarcação dentro ou fora do depósito naval. Control-clique vai compartilhar as ordens
-STR_980B_SHIP_MUST_BE_STOPPED_IN :{WHITE}A embarcação precisa estar parado no depósito naval
+STR_980B_SHIP_MUST_BE_STOPPED_IN :{WHITE}A embarcação necessita estar parado no depósito naval
STR_980C_CAN_T_SELL_SHIP :{WHITE}ImpossÃvel vender embarcação...
STR_980D_CAN_T_BUILD_SHIP :{WHITE}ImpossÃvel construir embarcação...
STR_980E_SHIP_IN_THE_WAY :{WHITE}Embarcação no caminho
@@ -2951,7 +2964,7 @@
STR_A017_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Aeronave está em voo
STR_A019_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO}, {CARGO}
STR_A01A_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO}
-STR_A01B_AIRCRAFT_MUST_BE_STOPPED :{WHITE}A aeronave precisa estar parada no hangar
+STR_A01B_AIRCRAFT_MUST_BE_STOPPED :{WHITE}A aeronave necessita estar parada no hangar
STR_A01C_CAN_T_SELL_AIRCRAFT :{WHITE}ImpossÃvel vender aeronave...
STR_A01D_AIRPORT_CONSTRUCTION :Construir aeroporto
STR_A01E_BUILD_AIRPORT :{BLACK}Construir aeroporto
--- a/src/lang/bulgarian.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/bulgarian.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1104,9 +1104,18 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Разгледай картата
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Изклучен
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Scrollwheel ÑкороÑÑ‚ на картата: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Изключен
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Ðвтоматична пауза Ñтартирайки нова игра: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Използваи напредналиат ÑпиÑък на превозни ÑредÑтва: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Изключен
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :СобÑтвена компаниÑ
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Ð’Ñички компаний
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Използвай товарни индикатори: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Изключен
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :СобÑтвена компаниÑ
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Ð’Ñички компаний
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Включи времеÑлуженето на ПС-та: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Покажи времеÑлуженето в Ñлучаи, а не в дни: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Стандартни релÑи (Ñлед нова игра/отварÑне на запазена игра): {ORANGE}{STRING}
@@ -1262,6 +1271,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...шамандурата Ñе използва!
+STR_LANDINFO_COORDS :{BLACK}Координати: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Ðе може да Ñе премахва чаÑÑ‚ от гарата...
STR_CANT_CONVERT_RAIL :{WHITE}Тук не може да Ñе Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ñ‚Ð¸Ð¿Ð° на жп линиÑта...
@@ -1377,14 +1387,17 @@
STR_NETWORK_INTERNET :Интернет
STR_NETWORK_LAN_INTERNET :LAN / Интернет
STR_NETWORK_INTERNET_ADVERTISE :Интернет (реклама)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} клиент{P "" s}
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}МакÑ. клиенти:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Избор на макÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ð±Ñ€Ð¾Ð¹ клиенти. Ðе вÑички Ñлотове Ñ‚Ñ€Ñбва да Ñе попълнÑÑ‚
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}МакÑ. компании:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Ограничаване на играта до определен брой компании
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} зрител{P "" s}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}МакÑ. наблюдатели:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Ограничаване на Ñървъра до определен брой наблюдатели
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Говорим език:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Другите играчи ще знаÑÑ‚ езика на който Ñе говори на Ñървъра
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Ðачало на игра
STR_NETWORK_START_GAME_TIP :{BLACK}Започване на нова мрежова игра от Ñлучайна карта или Ñценарий
STR_NETWORK_LOAD_GAME :{BLACK}Зареждане на игра
@@ -1612,7 +1625,10 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :ЖП Ð»Ð¸Ð½Ð¸Ñ Ñ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¸ Ñигнали
STR_RAILROAD_TRACK_WITH_PRESIGNALS :ЖП Ð»Ð¸Ð½Ð¸Ñ Ñ Ð¿Ñ€Ðµ-Ñигнали
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :ЖП Ð»Ð¸Ð½Ð¸Ñ Ñ Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸ Ñигнали
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Железопътна линиа Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð¸Ñ€Ð°Ð½Ð¸ знаци
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Железопътна линиа Ñ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¸ и изходни Ñигнали
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Железопътна линиа Ñ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ð½Ð¸ и комбинирани знаци
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Железопътна линиа Ñ Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸ и комбинирани знаци
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Железопътната гара Ñ‚Ñ€Ñбва да бъде премахната първо
@@ -2759,6 +2775,7 @@
STR_TIMETABLE_STATUS_LATE :Това превознот ÑредÑтво е в момента Ñ {STRING} закъÑнение
STR_TIMETABLE_STATUS_EARLY :Това превознот ÑредÑтво е в момента Ñ {STRING} по-рано
STR_TIMETABLE_TOTAL_TIME :Ще Ñ‚Ñ€Ñбва {STRING} за това разпиÑание да бъде приклучено
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Това разпиÑание ще вземе най-малко {STRING} за да приклучи (не вÑичко е планирано)
STR_TIMETABLE_AUTOFILL :{BLACK}Ðфтонапълване
##id 0x9000
--- a/src/lang/catalan.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/catalan.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1020,6 +1020,7 @@
STR_CONFIG_PATCHES_ON :Actiu
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Mostra la velocitat del vehicle a la barra d'estat: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Permet construir en desnivells i costes: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Permet terraformar sota edificis, rails, etc. (autopendent): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Permet un tamany més real de l'à rea d'influència: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Permet l'esborrat de propietats de les poblacions: carreteres, ponts, túnels, etc: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Activa la construcció de trens molt llargs: {ORANGE}{STRING}
@@ -1101,11 +1102,23 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING :{LTBLUE}Funció de la rodeta del ratolÃ: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM :Zoom mapa
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Mou el mapa
-STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Off
+STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Inactiu
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Velocitat del mapa amb la rodeta del ratolÃ: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Emulació del botó dret: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Command-clic
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control-clic
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Desactivat
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Posa en pausa automà ticament en començar un joc nou: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Utilitza la llista de vehicles avançada: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Inactiu
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Pròpia companyia
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Totes les companyies
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Utilitza indicadors de carregament: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Inactiu
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Pròpia companyia
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Totes les companyies
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Habilita horaris dels vehicles: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Mostra horaris en marques enlloc de dies: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Tipus de via predeterminada (en un joc nou/joc desat): {ORANGE}{STRING}
--- a/src/lang/croatian.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/croatian.txt Sun Sep 23 07:37:38 2007 +0000
@@ -158,7 +158,7 @@
STR_00B2_MESSAGE :{YELLOW}Poruka
STR_00B3_MESSAGE_FROM :{YELLOW}Poruka od {STRING}
STR_POPUP_CAUTION_CAPTION :{WHITE}Oprez!
-STR_00B4_CAN_T_DO_THIS :{WHITE}To nije moguće napraviti....
+STR_00B4_CAN_T_DO_THIS :{WHITE}To nije moguće uÄiniti....
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Nije moguće oÄistiti ovo podruÄje....
STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Izvorno autorsko pravo {COPYRIGHT} 1995 Chris Sawyer, sva prava pridržana
STR_00B7_VERSION :{BLACK}OpenTTD verzija {REV}
@@ -254,7 +254,7 @@
STR_011B_RAILROAD_STATION :{BLACK}{TINYFONT}ŽeljezniÄka stanica
STR_011C_TRUCK_LOADING_BAY :{BLACK}{TINYFONT}Kamionski terminal
STR_011D_BUS_STATION :{BLACK}{TINYFONT}Autobusn stanica
-STR_011E_AIRPORT_HELIPORT :{BLACK}{TINYFONT}Aerodrom/Heliodrom
+STR_011E_AIRPORT_HELIPORT :{BLACK}{TINYFONT}ZraÄna luka/Heliodrom
STR_011F_DOCK :{BLACK}{TINYFONT}Pristanište
STR_0120_ROUGH_LAND :{BLACK}{TINYFONT}Surova zemlja
STR_0121_GRASS_LAND :{BLACK}{TINYFONT}Travnjak
@@ -292,7 +292,7 @@
STR_013E_TOTAL_CARGO :{BLACK}Ukupni teret
STR_013F_CAPACITY :{BLACK}Nosivost: {LTBLUE}{CARGO}
STR_CAPACITY_MULT :{BLACK}Nosivost: {LTBLUE}{CARGO} (x{NUM})
-STR_013F_TOTAL_CAPACITY_TEXT :{BLACK}Ukupna nosivost ovoga vlaka:
+STR_013F_TOTAL_CAPACITY_TEXT :{BLACK}Ukupna nosivost tereta ovog vlaka:
STR_013F_TOTAL_CAPACITY :{LTBLUE}- {CARGO} ({SHORTCARGO})
STR_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO} ({SHORTCARGO}) (x{NUM})
STR_0140_NEW_GAME :{BLACK}Nova igra
@@ -350,10 +350,10 @@
############ range for menu starts
STR_0154_OPERATING_PROFIT_GRAPH :Grafikon operativne dobiti
-STR_0155_INCOME_GRAPH :Graf prihoda
-STR_0156_DELIVERED_CARGO_GRAPH :Graf isporuÄenog tereta
-STR_0157_PERFORMANCE_HISTORY_GRAPH :Graf povijesti uÄinka
-STR_0158_COMPANY_VALUE_GRAPH :Graf vrijednosti tvrtke
+STR_0155_INCOME_GRAPH :Grafikon prihoda
+STR_0156_DELIVERED_CARGO_GRAPH :Grafikon isporuÄenog tereta
+STR_0157_PERFORMANCE_HISTORY_GRAPH :Grafikon uÄinkovitosti
+STR_0158_COMPANY_VALUE_GRAPH :Grafikon vrijednosti tvrtke
STR_0159_CARGO_PAYMENT_RATES :Iznosi plaćanja tereta
STR_015A_COMPANY_LEAGUE_TABLE :Tablica lige tvrtki
STR_PERFORMANCE_DETAIL_MENU :Detaljna ocjena uÄinka
@@ -382,7 +382,7 @@
STR_SORT_BY_PROFIT_THIS_YEAR :Dobit ove godine
STR_SORT_BY_AGE :Godine
STR_SORT_BY_RELIABILITY :Pouzdanost
-STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Totalna nosivost po vrsti tereta
+STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Ukupna nosivost po vrsti tereta
STR_SORT_BY_MAX_SPEED :Maksimalna brzina
STR_SORT_BY_MODEL :Model
STR_SORT_BY_VALUE :Vrijednost
@@ -397,19 +397,19 @@
STR_ENGINE_SORT_POWER_VS_RUNNING_COST :Trošak snage/uporabe
STR_ENGINE_SORT_CARGO_CAPACITY :Nosivost tereta
STR_NO_WAITING_CARGO :{BLACK}Nijedna vrsta tereta ne Äeka
-STR_SELECT_ALL_FACILITIES :{BLACK}Izaberi sva sredstva
-STR_SELECT_ALL_TYPES :{BLACK}Izaberi sve vrste tereta (ukljuÄujući i teret koji ne Äeka)
+STR_SELECT_ALL_FACILITIES :{BLACK}Odaberi sva sredstva
+STR_SELECT_ALL_TYPES :{BLACK}Odaberi sve vrste tereta (ukljuÄujući i teret koji ne Äeka)
STR_AVAILABLE_TRAINS :{BLACK}Dostupni vlakovi
STR_AVAILABLE_ROAD_VEHICLES :{BLACK}Dostupna vozila
STR_AVAILABLE_SHIPS :{BLACK}Dostupni brodovi
STR_AVAILABLE_AIRCRAFT :{BLACK}Dostupni zrakoplovi
STR_AVAILABLE_ENGINES_TIP :{BLACK}Pogledaj popis dostupnih dizajna motora za ovu vrstu vozila.
STR_MANAGE_LIST :{BLACK}Uredi popis
-STR_MANAGE_LIST_TIP :{BLACK}Pošalji upute svim vozilima na ovoj listi
+STR_MANAGE_LIST_TIP :{BLACK}Pošalji upute svim vozilima na ovom popisu
STR_REPLACE_VEHICLES :Zamjeni vozila
STR_SEND_TRAIN_TO_DEPOT :Pošalji u spremište
-STR_SEND_ROAD_VEHICLE_TO_DEPOT :
-STR_SEND_SHIP_TO_DEPOT :
+STR_SEND_ROAD_VEHICLE_TO_DEPOT :Pošalji u spremište
+STR_SEND_SHIP_TO_DEPOT :Pošalji u spremište
STR_SEND_AIRCRAFT_TO_HANGAR :Pošalji u hangar
STR_SEND_FOR_SERVICING :Pošalji na servis
@@ -433,18 +433,18 @@
STR_0170 :{TINYFONT}{STRING}-
STR_0171_PAUSE_GAME :{BLACK}Zaustavi igru
STR_0172_SAVE_GAME_ABANDON_GAME :{BLACK}Spremi igru, napusti igru, prekini igru
-STR_0173_DISPLAY_LIST_OF_COMPANY :{BLACK}Prikaži popis stanica u vlasništvu tvrke
+STR_0173_DISPLAY_LIST_OF_COMPANY :{BLACK}Prikaži popis stanica u vlasništvu tvrtke
STR_0174_DISPLAY_MAP :{BLACK}Prikaži kartu
STR_0175_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Prikaži kartu, popis gradova
STR_0176_DISPLAY_TOWN_DIRECTORY :{BLACK}Prikaži popis gradova
-STR_0177_DISPLAY_COMPANY_FINANCES :{BLACK}Prikaži financijske podatke tvrke
+STR_0177_DISPLAY_COMPANY_FINANCES :{BLACK}Prikaži financijske podatke tvrtke
STR_0178_DISPLAY_COMPANY_GENERAL :{BLACK}Prikaži opće podatke tvrtke
-STR_0179_DISPLAY_GRAPHS :{BLACK}Prikaži grafove
+STR_0179_DISPLAY_GRAPHS :{BLACK}Prikaži grafikone
STR_017A_DISPLAY_COMPANY_LEAGUE :{BLACK}Prikaži tablicu lige tvrtki
-STR_017B_DISPLAY_LIST_OF_COMPANY :{BLACK}Prikaži popis vlakova u posjedu tvrtke
-STR_017C_DISPLAY_LIST_OF_COMPANY :{BLACK}Prikaži popis cestovnih vozila u posjedu tvrke
-STR_017D_DISPLAY_LIST_OF_COMPANY :{BLACK}Prikaž popis brodova u posjedu tvrke
-STR_017E_DISPLAY_LIST_OF_COMPANY :{BLACK}Prikaži popis zrakoplova u posjedu tvrtke
+STR_017B_DISPLAY_LIST_OF_COMPANY :{BLACK}Prikaži popis vlakova u vlasništvu tvrtke
+STR_017C_DISPLAY_LIST_OF_COMPANY :{BLACK}Prikaži popis cestovnih vozila u vlasništvu tvrtke
+STR_017D_DISPLAY_LIST_OF_COMPANY :{BLACK}Prikaž popis brodova u vlasništvu tvrtke
+STR_017E_DISPLAY_LIST_OF_COMPANY :{BLACK}Prikaži popis zrakoplova u vlasništvu tvrtke
STR_017F_ZOOM_THE_VIEW_IN :{BLACK}Približi pogled
STR_0180_ZOOM_THE_VIEW_OUT :{BLACK}Udalji pogled
STR_0181_BUILD_RAILROAD_TRACK :{BLACK}Izgradi željezniÄku prugu
@@ -462,18 +462,18 @@
STR_STICKY_BUTTON :{BLACK}OznaÄi ovaj prozor kao nezatvoriv kad se rabi tipka 'Zatvori sve prozore'
STR_RESIZE_BUTTON :{BLACK}Pritisni i povuci za promjenu veliÄine prozora
STR_SAVELOAD_HOME_BUTTON :{BLACK}Pritisni ovdje za prelazak u trenutnu pretpostavljenu mapu za snimanje/uÄitavanje
-STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Uništi građevine itd. na kvadratu zemlje
+STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Sruši građevine itd. na kvadratu zemlje
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Snizi vrh kvadrata zemlje
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}Povisi vrh kvadrata zemlje
-STR_0190_SCROLL_BAR_SCROLLS_LIST :{BLACK}PomiÄna traka - lista gore/dolje
-STR_HSCROLL_BAR_SCROLLS_LIST :{BLACK}KlizaÄ - pomiÄi listu lijevo/desno
-STR_0191_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Prikaži obrise zemlje na karti
-STR_0192_SHOW_VEHICLES_ON_MAP :{BLACK}Prikaži vozila na karti
-STR_0193_SHOW_INDUSTRIES_ON_MAP :{BLACK}Prikaži industrije na karti
-STR_0194_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Prikaži prijevozne trase na karti
-STR_0195_SHOW_VEGETATION_ON_MAP :{BLACK}Prikaži vegetaciju na karti
-STR_0196_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Prikaži vlasnike zemlje na karti
-STR_0197_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Prikaži/sakrij imena grada na karti
+STR_0190_SCROLL_BAR_SCROLLS_LIST :{BLACK}Klizna traka - lista gore/dolje
+STR_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Klizna traka - pomiÄi listu lijevo/desno
+STR_0191_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Pokaži obrise zemlje na karti
+STR_0192_SHOW_VEHICLES_ON_MAP :{BLACK}Pokaži vozila na karti
+STR_0193_SHOW_INDUSTRIES_ON_MAP :{BLACK}Pokaži industrije na karti
+STR_0194_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Pokaži prijevozne trase na karti
+STR_0195_SHOW_VEGETATION_ON_MAP :{BLACK}Pokaži vegetaciju na karti
+STR_0196_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Pokaži vlasnike zemlje na karti
+STR_0197_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Prikaži/sakrij imena gradova na karti
STR_0198_PROFIT_THIS_YEAR_LAST_YEAR :{TINYFONT}{BLACK}Ovogodišnja dobit: {CURRENCY} (prošlogodišnja: {CURRENCY})
############ range for service numbers starts
@@ -539,7 +539,7 @@
STR_01D1_8 :({COMMA}/8 {STRING})
STR_01D2_JAZZ_JUKEBOX :{WHITE}Jazz Jukebox
STR_01D3_SOUND_MUSIC :Zvuk/glazba
-STR_01D4_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Prikaži prozor zvuk/glazba
+STR_01D4_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Pokaži prozor zvuk/glazba
STR_01D5_ALL :{TINYFONT}Sve
STR_01D6_OLD_STYLE :{TINYFONT}Staromodno
STR_01D7_NEW_STYLE :{TINYFONT}Moderno
@@ -550,7 +550,7 @@
STR_01DC_EFFECTS_VOLUME :{BLACK}{TINYFONT}Glasnoća zvukova
STR_01DD_MIN_MAX :{BLACK}{TINYFONT}MIN ' ' ' ' ' ' MAX
STR_01DE_SKIP_TO_PREVIOUS_TRACK :{BLACK}Prethodna traka
-STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Sljedeća traka
+STR_01DF_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Sljedeća traka u izboru
STR_01E0_STOP_PLAYING_MUSIC :{BLACK}Zaustavi glazbu
STR_01E1_START_PLAYING_MUSIC :{BLACK}Pokreni glazbu
STR_01E2_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Povuci klizaÄe za namjeÅ¡tanje glasnoće glazbe i zvukova
@@ -577,23 +577,23 @@
STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Odaberi program 'Proizvoljna glazba 2'
STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Obriši aktivni program (samo Proizvoljno 1 ili Proizvoljno 2)
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Spremi glazbene postavke
-STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Klikni na glazbenu traku za dodavanje u aktivni program (samo Proizvoljno 1 ili Proizvoljno 2)
-STR_CLICK_ON_TRACK_TO_REMOVE :{BLACK}Klikni na glazbenu traku da ju makneš iz trenutnog programa (samo Proizvoljno1 ili Proizvoljno2)
-STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}UkluÄi/iskljuÄi mijeÅ¡anje programa
-STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Prikaži prozor za izbor glazbenih traka
-STR_01FD_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Pritisni na uslugu za centriranje pogleda na industriju/grad
+STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Klikni na glazbenu traku za dodavanje u aktivni program (samo Proizvoljno1 ili Proizvoljno2)
+STR_CLICK_ON_TRACK_TO_REMOVE :{BLACK}Klikni na glazbenu traku kako bi ju uklonio iz trenutnog programa (samo Proizvoljno1 ili Proizvoljno2)
+STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}UkljuÄi/iskljuÄi mijeÅ¡anje programa
+STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Pokaži prozor za izbor glazbenih traka
+STR_01FD_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikni na uslugu za centriranje pogleda na industriju/grad
STR_01FE_DIFFICULTY :{BLACK}Težina ({STRING})
STR_01FF :{TINYFONT}{BLACK}{DATE_LONG}
STR_0200_LAST_MESSAGE_NEWS_REPORT :Poslijednja poruka/vijest
STR_0201_MESSAGE_SETTINGS :Postavke poruka
STR_MESSAGE_HISTORY_MENU :Povijest poruka
-STR_0203_SHOW_LAST_MESSAGE_NEWS :{BLACK}Prikaži zadnju poruku/vijest, prikaži postavke poruka
-STR_0204_MESSAGE_OPTIONS :{WHITE}Mogućnosti poruka
+STR_0203_SHOW_LAST_MESSAGE_NEWS :{BLACK}Pokaži zadnju poruku/vijest, prikaži postavke poruka
+STR_0204_MESSAGE_OPTIONS :{WHITE}Postavke poruka
STR_0205_MESSAGE_TYPES :{BLACK}Vrste poruka:
STR_0206_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Dolazak prvog vozila u stanicu igraÄa
STR_0207_ARRIVAL_OF_FIRST_VEHICLE :{YELLOW}Dolazak prvog vozila u stanicu suparnika
STR_0208_ACCIDENTS_DISASTERS :{YELLOW}Nesreće / katastrofe
-STR_0209_COMPANY_INFORMATION :{YELLOW}Podaci vezani za tvrtku
+STR_0209_COMPANY_INFORMATION :{YELLOW}Podatci vezani za tvrtku
STR_NEWS_OPEN_CLOSE :{YELLOW}Otvaranje / zatvaranje industrija
STR_020A_ECONOMY_CHANGES :{YELLOW}Promjene u gospodarstvu
STR_020B_ADVICE_INFORMATION_ON_PLAYER :{YELLOW}Savjet / informacija o vozilima igraÄa
@@ -605,7 +605,7 @@
STR_MESSAGE_SOUND :{YELLOW} Pusti zvuk za sve skraćene novinske poruke
STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO :{WHITE}...predaleko od prethodnog odredišta
STR_0211_TOP_COMPANIES_WHO_REACHED :{BIGFONT}{BLACK}Najbolje tvrtke koje su dosigle razinu {NUM}{}({STRING})
-STR_TOP_COMPANIES_NETWORK_GAME :{BIGFONT}{BLACK}Tablica kompanija u {NUM}
+STR_TOP_COMPANIES_NETWORK_GAME :{BIGFONT}{BLACK}Tablica tvrtki u {NUM}
STR_0212 :{BIGFONT}{COMMA}.
STR_0213_BUSINESSMAN :Privrednik
STR_0214_ENTREPRENEUR :Poduzetnik
@@ -616,8 +616,8 @@
STR_0219_TYCOON_OF_THE_CENTURY :Tajkun stoljeća
STR_HIGHSCORE_NAME :{BIGFONT}{PLAYERNAME}, {COMPANY}
STR_HIGHSCORE_STATS :{BIGFONT}'{STRING}' ({COMMA})
-STR_021B_ACHIEVES_STATUS :{BLACK}{BIGFONT}{COMPANY} postigao je status '{STRING}' !
-STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{PLAYERNAME} iz {COMPANY} postigao je status '{STRING}' !
+STR_021B_ACHIEVES_STATUS :{BLACK}{BIGFONT}Tvrtka {COMPANY} postigla je status '{STRING}' !
+STR_021C_OF_ACHIEVES_STATUS :{WHITE}{BIGFONT}{PLAYERNAME} iz tvrtke {COMPANY} postigao je status '{STRING}' !
STR_021F :{BLUE}{COMMA}
STR_0221_OPENTTD :{YELLOW}OpenTTD
STR_0222_SCENARIO_EDITOR :{YELLOW}Uređivanje scenarija
@@ -638,7 +638,7 @@
STR_0233_TOWN_GENERATION :{WHITE}Stvaranje gradova
STR_0234_NEW_TOWN :{BLACK}Novi grad
STR_0235_CONSTRUCT_NEW_TOWN :{BLACK}Izgradi novi grad
-STR_0236_CAN_T_BUILD_TOWN_HERE :{WHITE}Ovdje nije moguće graditi...
+STR_0236_CAN_T_BUILD_TOWN_HERE :{WHITE}Ovdje nije moguće izgraditi grad...
STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}...preblizu rubu karte
STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...preblizu drugog grada
STR_0239_SITE_UNSUITABLE :{WHITE}...neprikladno mjesto
@@ -719,11 +719,11 @@
STR_0282_CONSTRUCT_BUBBLE_GENERATOR :{BLACK}Izgradi generator balona
STR_0283_CONSTRUCT_TOFFEE_QUARRY :{BLACK}Izgradi iskop miljeÄne karamele
STR_0284_CONSTRUCT_SUGAR_MINE :{BLACK}Izgradi rudnik šećera
-STR_0285_CAN_T_BUILD_HERE :{WHITE}Ne možeš graditi {STRING} ovdje...
-STR_0286_MUST_BUILD_TOWN_FIRST :{WHITE}...moraš prvo izgraditi grad
+STR_0285_CAN_T_BUILD_HERE :{WHITE}Ovdje nije moguće izgraditi {STRING}...
+STR_0286_MUST_BUILD_TOWN_FIRST :{WHITE}...najprije moraš izgraditi grad
STR_0287_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...dozvoljen samo jedan po gradu
STR_0288_PLANT_TREES :{BLACK}Posadi drveće
-STR_0289_PLACE_SIGN :{BLACK}Stavi znak
+STR_0289_PLACE_SIGN :{BLACK}Postavi znak
STR_028A_RANDOM_TREES :{BLACK}NasumiÄno odabrano drveće
STR_028B_PLANT_TREES_RANDOMLY_OVER :{BLACK}Nasumce posadi drveće po krajoliku
STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Stavi stijenje na krajolik
@@ -755,11 +755,11 @@
STR_02A2_MEDIUM :{BLACK}Srednje
STR_02A3_LARGE :{BLACK}Veliko
STR_SCENARIO_EDITOR_CITY :{BLACK}Grad
-STR_02A4_SELECT_TOWN_SIZE :{BLACK}Izaberi veliÄinu grada
+STR_02A4_SELECT_TOWN_SIZE :{BLACK}Odaberi veliÄinu grada
STR_02A5_TOWN_SIZE :{YELLOW}VeliÄina grada:
STR_02B6 :{STRING} - {STRING}
-STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS :{BLACK}Prikaži posljednu poruku ili vijest
+STR_02B7_SHOW_LAST_MESSAGE_OR_NEWS :{BLACK}Pokaži zadnju poruku ili vijest
STR_OFF :IskljuÄeno
STR_SUMMARY :Sažetak
STR_FULL :Puno
@@ -770,7 +770,7 @@
STR_02BE_DEFAULT :Zadano
STR_02BF_CUSTOM :Proizvoljno
STR_02C0_SAVE_CUSTOM_NAMES :{BLACK}Spremi proizvoljna imena
-STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}Odabir imena dizajna vozila
+STR_02C1_VEHICLE_DESIGN_NAMES_SELECTION :{BLACK}Izbor imena dizajna vozila
STR_02C2_SAVE_CUSTOMIZED_VEHICLE :{BLACK}Spremi proizvoljna imena dizajna vozila
STR_CHECKMARK :{CHECKMARK}
@@ -779,7 +779,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Postavke težine
STR_02C7_CONFIG_PATCHES :Konfiguriraj zakrpe
STR_NEWGRF_SETTINGS :Postavke NewGRF-a
-STR_TRANSPARENCY_OPTIONS :Opcije prozirnosti
+STR_TRANSPARENCY_OPTIONS :Postavke prozirnosti
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Prikaži imena gradova
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Prikaži imena stanica
@@ -817,18 +817,18 @@
STR_02E0_CURRENCY_UNITS :{BLACK}NovÄane jedinice
STR_02E1 :{BLACK}{SKIP}{STRING}
-STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}Odabir novÄanih jedinica
+STR_02E2_CURRENCY_UNITS_SELECTION :{BLACK}Izbor novÄanih jedinica
STR_MEASURING_UNITS :{BLACK}Mjerni sustav
STR_02E4 :{BLACK}{SKIP}{SKIP}{STRING}
-STR_MEASURING_UNITS_SELECTION :{BLACK}Odabir mjernog sustava
+STR_MEASURING_UNITS_SELECTION :{BLACK}Izbor mjernog sustava
STR_02E6_ROAD_VEHICLES :{BLACK}Cestovna vozila
STR_02E7 :{BLACK}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02E8_SELECT_SIDE_OF_ROAD_FOR :{BLACK}Izaberi na kojoj će strani ceste vozila prometovati
+STR_02E8_SELECT_SIDE_OF_ROAD_FOR :{BLACK}Odaberi na kojoj će strani ceste vozila prometovati
STR_02E9_DRIVE_ON_LEFT :Vozi na lijevoj strani
STR_02EA_DRIVE_ON_RIGHT :Vozi na desnoj strani
STR_02EB_TOWN_NAMES :{BLACK}Imena gradova
STR_02EC :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_02ED_SELECT_STYLE_OF_TOWN_NAMES :{BLACK}Izaberi stil za imena gradova
+STR_02ED_SELECT_STYLE_OF_TOWN_NAMES :{BLACK}Odaberi stil za imena gradova
STR_02F4_AUTOSAVE :{BLACK}Automatsko spremanje
STR_02F5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
@@ -843,13 +843,13 @@
STR_02FF_SELECT_SINGLE_PLAYER_GAME :{BLACK}Odaberi igru za jednog igraÄa
STR_0300_SELECT_MULTIPLAYER_GAME :{BLACK}Odaberi igru za 2-8 igraÄa
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Prikaži postavke igre
-STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Prikaži opcije težine
+STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Prikaži postavke težine
STR_0303_START_A_NEW_GAME_USING :{BLACK}ZapoÄni novu igru koristeći proizvoljni scenarij
STR_0304_QUIT :{BLACK}Završi
STR_0305_QUIT_OPENTTD :{BLACK}Završi 'OpenTTD'
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...može biti izgrađen samo u gradovima
-STR_030E_SELECT_TEMPERATE_LANDSCAPE :{BLACK}Odaberi 'umjeren' stil krajolika
+STR_030E_SELECT_TEMPERATE_LANDSCAPE :{BLACK}Odaberi 'blag' stil krajolika
STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE :{BLACK}Odaberi 'subarktiÄki' stil krajolika
STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE :{BLACK}Odaberi 'subtropski' stil krajolika
STR_0311_SELECT_TOYLAND_LANDSCAPE :{BLACK}Odaberi 'zemlju igraÄka' za stil krajolika
@@ -874,7 +874,7 @@
STR_032F_AUTOSAVE :{RED}AUTOMATSKO SPREMANJE
STR_SAVING_GAME :{RED}* * SPREMAM IGRU * *
STR_SAVE_STILL_IN_PROGRESS :{WHITE}Spremanje joÅ¡ u tijeku,{}molimo priÄekajte dok se ne zavrÅ¡i!
-STR_0330_SELECT_EZY_STREET_STYLE :{BLACK}Izaberi glazbeni program 'Ezy Street style'
+STR_0330_SELECT_EZY_STREET_STYLE :{BLACK}Odaberi glazbeni program 'Ezy Street style'
STR_0335_6 :{BLACK}6
STR_0336_7 :{BLACK}7
@@ -942,7 +942,7 @@
STR_OPTIONS_RES :{BLACK}RazluÄivost ekrana
STR_OPTIONS_RES_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_OPTIONS_RES_TIP :{BLACK}Izaberi rezoluciju ekrana
+STR_OPTIONS_RES_TIP :{BLACK}Izaberi razluÄivost ekrana
STR_OPTIONS_SCREENSHOT_FORMAT :{BLACK}Format za sliku ekrana
STR_OPTIONS_SCREENSHOT_FORMAT_CBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
@@ -966,8 +966,8 @@
STR_HEADING_FOR_STATION :{LTBLUE}Kreće se prema {STATION}
STR_HEADING_FOR_STATION_VEL :{LTBLUE}Kreće se prema {STATION}, {VELOCITY}
-STR_NO_ORDERS :{LTBLUE}Nema narudžbi
-STR_NO_ORDERS_VEL :{LTBLUE}Nema narudžbi, {VELOCITY}
+STR_NO_ORDERS :{LTBLUE}Nema naredbi
+STR_NO_ORDERS_VEL :{LTBLUE}Nema naredbi, {VELOCITY}
STR_PASSENGERS :putnici
STR_BAGS :vreće
@@ -980,8 +980,8 @@
STR_SMALL_RIGHT_ARROW :{TINYFONT}{RIGHTARROW}
-STR_CANT_SHARE_ORDER_LIST :{WHITE}Nije moguće dijeliti rednu listu...
-STR_CANT_COPY_ORDER_LIST :{WHITE}Nije moguće kopirati rednu listu...
+STR_CANT_SHARE_ORDER_LIST :{WHITE}Nije moguće dijeliti popis naredbi...
+STR_CANT_COPY_ORDER_LIST :{WHITE}Nije moguće kopirati popis naredbi...
STR_END_OF_SHARED_ORDERS :{SETX 10}- - Kraj dijeljenih naredbi - -
STR_TRAIN_IS_LOST :{WHITE}Vlak {COMMA} se izgubio.
@@ -990,9 +990,9 @@
# Start of order review system.
# DON'T ADD OR REMOVE LINES HERE
-STR_TRAIN_HAS_TOO_FEW_ORDERS :{WHITE} Vlak {COMMA} ima premalo naredbi u rasporedu
+STR_TRAIN_HAS_TOO_FEW_ORDERS :{WHITE}Vlak {COMMA} ima premalo naredbi u rasporedu
STR_TRAIN_HAS_VOID_ORDER :{WHITE}Vlak {COMMA} ima praznu naredbu
-STR_TRAIN_HAS_DUPLICATE_ENTRY :{WHITE}Vlak {COMMA} ima udvostuÄenu naredbu
+STR_TRAIN_HAS_DUPLICATE_ENTRY :{WHITE}Vlak {COMMA} ima dvostruku naredbu
STR_TRAIN_HAS_INVALID_ENTRY :{WHITE}Vlak {COMMA} ima nevažeću stanicu u voznom redu
STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}Cestovno vozilo {COMMA} ima premalo naredbi u rasporedu
STR_ROADVEHICLE_HAS_VOID_ORDER :{WHITE}Cestovno vozilo {COMMA} ima praznu naredbu
@@ -1015,148 +1015,161 @@
STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Nakon zamjene, vlak {COMMA} je postao predug
STR_CONFIG_PATCHES :{BLACK}Konfiguriraj zakrpe
-STR_CONFIG_PATCHES_TIP :{BLACK}Podesi zakrpe
-STR_CONFIG_PATCHES_CAPTION :{WHITE}Podesi zakrpe
+STR_CONFIG_PATCHES_TIP :{BLACK}Konfiguriraj zakrpe
+STR_CONFIG_PATCHES_CAPTION :{WHITE}Konfiguriraj zakrpe
STR_CONFIG_PATCHES_OFF :IskljuÄeno
STR_CONFIG_PATCHES_ON :UkljuÄeno
-STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Prikaži brzinu vozila u statusnoj traci: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Dozvoli gradnju na nagibima i obalama: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Dozvoli realistiÄnije veliÄine podruÄja zahvaćanja: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Pokaži brzinu vozila u statusnoj traci: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Dopusti izgradnju na kosinama i obalama: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Dopusti modeliranje zemlje ispod graÄ‘evina, traÄnica, itd (autonagib): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Dopusti realistiÄnije veliÄine podruÄja zahvaćanja: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Dopusti rušenje više gradskih cesta, mostova itd.: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Omogući sastavljanje vrlo dugaÄkih vlakova: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Omogući realno ubrzanje za vlakove: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REALISTICACCEL :{LTBLUE}Omogući realistiÄno ubrzanje za vlakove: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FORBID_90_DEG :{LTBLUE}Zabrani vlakovima i brodovima skretanja pod 90 stupnjeva: {ORANGE}{STRING} {LTBLUE} (requires NPF)
-STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Spoji željezniÄke stanice koje se izgrade jedna kraj druge: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_JOINSTATIONS :{LTBLUE}Spoji željezniÄke stanice koje se izgrade jedna pokraj druge: {ORANGE}{STRING}
STR_CONFIG_PATCHES_FULLLOADANY :{LTBLUE}Napusti stanicu ako je bilo koji teret u potpunosti natovaren pri 'punom utovaru': {ORANGE}{STRING}
-STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Koristi unaprijeđen algoritam ukrcavanja: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_GRADUAL_LOADING :{LTBLUE}Postupno utovaruj vozila: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_IMPROVEDLOAD :{LTBLUE}Koristi unaprijeđen utovarni algoritam: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_GRADUAL_LOADING :{LTBLUE}Postupno utovaruj u vozila: {ORANGE}{STRING}
STR_CONFIG_PATCHES_INFLATION :{LTBLUE}Inflacija: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Dostavi teret u stanicu samo ako u njoj postoji potražnja: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Dostavi teret u stanicu samo ako na njoj postoji potražnja: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Dopusti izgradnju vrlo dugaÄkih mostova: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GOTODEPOT :{LTBLUE}Dopusti naredbe za slanje u spremište: {ORANGE}{STRING}
STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD :{LTBLUE}RuÄna metoda izgradnje primarne industrije: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :ništa
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :nijedna
STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :kao i druge industrije
-STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :prosperirajuće
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :prosperirajuća
STR_CONFIG_PATCHES_MULTIPINDTOWN :{LTBLUE}Dopusti viÅ¡e sliÄnih industrija po gradu: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SAMEINDCLOSE :{LTBLUE}Moguće je graditi spojene industrije iste vrste: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LONGDATE :{LTBLUE}Uvijek prikaži dugi datum u statusnoj traci: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SIGNALSIDE :{LTBLUE}Prikaži znakove na strani po kojoj se vozi: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SHOWFINANCES :{LTBLUE}Prikaži financijski prozor na kraju godine: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NEW_NONSTOP :{LTBLUE}TTDPatch kompatibilno nonstop rukovanje: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Nizanje cestovnih vozila(sa kvantum efektima): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}PomiÄi prozor kada je miÅ¡ na rubu: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Dozvoli potkupljivanje gradskih vlasti: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SAMEINDCLOSE :{LTBLUE}Industrije iste vrste mogu biti izgrađene u blizini jedna druge: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LONGDATE :{LTBLUE}Uvijek pokaži dugi datum u statusnoj traci: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SIGNALSIDE :{LTBLUE}Pokaži signale na vozaÄkoj strani: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SHOWFINANCES :{LTBLUE}Pokaži financijski prozor na kraju godine: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_NONSTOP :{LTBLUE}TTDPatch kompatibilno neprekidno upravljanje: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Nizanje cestovnih vozila (s kvantnim uÄincima): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Pomakni prozor kada je miš na rubu: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Dopusti potkupljivanje lokalne samouprave: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}NeujednaÄene stanice: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Novo globalno pronalaženje puteva (NPF, iskljuÄuje NTP): {ORANGE}{STRING}
STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Težinski množitelj za teret za simulaciju teških vlakova: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Dozvoli drive-through cestovne prepreke na cestama pod vlašću grada: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Dozvoli izradu spojenih stanica: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Dopusti prolazne stanice na cestama u vlasti grada: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Dopusti izgradnju pridruženih stanica: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Uvjek omogući male zraÄne luke: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Uvijek dopusti male zraÄne luke: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_WARN_LOST_TRAIN :{LTBLUE}Upozori kad se vlak izgubi: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ORDER_REVIEW :{LTBLUE}Pogledaj naređenja vozila: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WARN_LOST_TRAIN :{LTBLUE}Upozori ako se vlak izgubio: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ORDER_REVIEW :{LTBLUE}Pregledaj naredbe vozila: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ORDER_REVIEW_OFF :ne
-STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT :da, no iskljuÄi zaustavljena vozila
+STR_CONFIG_PATCHES_ORDER_REVIEW_EXDEPOT :da, ali iskljuÄi zaustavljena vozila
STR_CONFIG_PATCHES_ORDER_REVIEW_ON :od svih vozila
STR_CONFIG_PATCHES_WARN_INCOME_LESS :{LTBLUE}Upozori ako je prihod vlaka negativan: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES :{LTBLUE}Vozila ne zastaruju: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEVER_EXPIRE_VEHICLES :{LTBLUE}Vozila ne zastarjevaju: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AUTORENEW_VEHICLE :{LTBLUE}Automatski zamijeni vozilo kada postane staro
-STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Automatski obnovi vozilo kada je {ORANGE}{STRING}{LTBLUE} mjeseci prije/poslije maksimalnog godišta
+STR_CONFIG_PATCHES_AUTORENEW_MONTHS :{LTBLUE}Automatski obnovi vozilo {ORANGE}{STRING}{LTBLUE} mjeseci prije/poslije maksimalnog godišta
STR_CONFIG_PATCHES_AUTORENEW_MONEY :{LTBLUE}Minimum novca potrebnih za automatsko obnavljanje: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ERRMSG_DURATION :{LTBLUE}Trajanje poruke s greškom: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Prikaži broj stanovnika u traci sa imenom grada: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Nevidljivo drveće (sa prozirnim građevinama): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_POPULATION_IN_LABEL :{LTBLUE}Pokaži broj stanovnika u oznaci imena grada: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_INVISIBLE_TREES :{LTBLUE}Nevidljivo drveće (s prozirnim građevinama): {ORANGE}{STRING}
STR_CONFIG_PATCHES_LAND_GENERATOR :{LTBLUE}Generator zemlje: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL :Izvorno
+STR_CONFIG_PATCHES_LAND_GENERATOR_ORIGINAL :Izvorni
STR_CONFIG_PATCHES_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
-STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE :{LTBLUE}Maksimalna udaljenost Rafinerija nafte od ruba {ORANGE}{STRING}
+STR_CONFIG_PATCHES_OIL_REF_EDGE_DISTANCE :{LTBLUE}Maksimalna udaljenost naftnih rafinerija od ruba {ORANGE}{STRING}
STR_CONFIG_PATCHES_SNOWLINE_HEIGHT :{LTBLUE}Visina linije snijega: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN :{LTBLUE}Grubost terena (samo TerraGenesis) : {ORANGE}{STRING}
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Vrlo glatko
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_SMOOTH :Glatko
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_ROUGH :Grubo
STR_CONFIG_PATCHES_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Vrlo grubo
-STR_CONFIG_PATCHES_TREE_PLACER :{LTBLUE}Algoritam postavljanja drveća: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TREE_PLACER :{LTBLUE}Algoritam za sađenje drveća: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TREE_PLACER_NONE :Nijedan
-STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL :Izvorno
-STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED :Unaprijeđeno
+STR_CONFIG_PATCHES_TREE_PLACER_ORIGINAL :Izvorni
+STR_CONFIG_PATCHES_TREE_PLACER_IMPROVED :Unaprijeđen
STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION :{LTBLUE}Rotacija visinske mape: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Obrnuto smjeru kazaljke na satu
+STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Obrnuto od smjera kazaljke na satu
STR_CONFIG_PATCHES_HEIGHTMAP_ROTATION_CLOCKWISE :U smjeru kazaljke na satu
STR_CONFIG_PATCHES_SE_FLAT_WORLD_HEIGHT :{LTBLUE}Visinski nivo koji ravna mapa u scenariju dobiva: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Maksimalna raširenost stanice: {ORANGE}{STRING} {RED}Pozor: Visoka vrijednost usporuje igru
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Automatski servisiraj helikoptere na heliodromima: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Poveži alatnu traku za krajolik sa alatnim trakama za željeznicu/ceste/vodu/zraÄne luke: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Okreni smjer pomicanja: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}Glatko skrolanje kroz mini pogled: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Pokaži mjerni opis kod korištenja raznih alata za izgradnju: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Pokaži tvrtkine livreje: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_LIVERIES_NONE :Ništa
+STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Poveži alatnu traku za krajolik s alatnim trakama za željeznicu/ceste/vodu/zraÄne luke: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Promijeni smjer klizanja: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}Glatko klizanje kroz mini pogled: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Pokaži mjerni opis prilikom korištenja raznih alata za izgradnju: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Pokaži tvrtkine boje: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LIVERIES_NONE :Nijedna
STR_CONFIG_PATCHES_LIVERIES_OWN :Vlastita tvrtka
STR_CONFIG_PATCHES_LIVERIES_ALL :Sve tvrtke
-STR_CONFIG_PATCHES_PREFER_TEAMCHAT :{LTBLUE}Preferiraj timski chat sa <ENTER>:{ORANGE}{STRING}
-STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING :{LTBLUE}Funkcija kotaÄića: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_PREFER_TEAMCHAT :{LTBLUE}Preferiraj ekipni razgovor s <ENTER>:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING :{LTBLUE}Funkcija kotaÄića za klizanje: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SCROLLWHEEL_ZOOM :Zumiraj kartu
-STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Skrolaj kartom
-STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :IskljuÄeno
-STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Brzina kotaÄića za skrolanje: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Kliži kartom
+STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :IskljuÄen
+STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Brzina kotaÄića za klizanje: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Emulacija desnog klika mišem: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+klik
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control+klik
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :IskljuÄeno
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Automatski pauziraj prilikom pokretanja nove igre: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Koristi naprednu listu vozila: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Koristi napredni popis vozila: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :IskljuÄeno
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Vlastita tvrtka
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Sve tvrtke
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Koristi indikatore utovara: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}UkljuÄi raspored za vozila: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Pokaži raspored u otkucajima radije nego u danima: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Zadana vrsta traÄnica (poslije nove igre/podizanja igre): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Normalne traÄnice
-STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Elektrificirane traÄnice
-STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monopruga
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :IskljuÄeno
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Vlastita tvrtka
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Sve tvrtke
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Omogući red vožnje za vozila: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Pokaži raspored u otkucajima rađe nego u danima: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Inicijalna vrsta pruge (poslije nove igre/podizanja igre): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Normalna pruga
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Elektrificirana pruga
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :JednotraÄna pruga
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
-STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Prvi dostupan
-STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Zadnji dostupan
-STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :NajÄešće koriÅ¡ten
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Prva dostupna
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Zadnja dostupna
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :NajÄešće koriÅ¡tena
-STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE :{LTBLUE}Prikaži alate za građanje kada su prikladna vozila nedostupna: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE :{LTBLUE}Pokaži alate za izgradnju kada su odgovarajuća vozila nedostupna: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Maksimalan broj vlakova po igraÄu: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Maximalan broj cestovnih vozila po igraÄu: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Maksimalan broj cestovnih vozila po igraÄu: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_AIRCRAFT :{LTBLUE}Maksimalan broj zrakoplova po igraÄu: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAX_SHIPS :{LTBLUE}Maximalan broj brodova po igraÄu: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAX_SHIPS :{LTBLUE}Maksimalan broj brodova po igraÄu: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AI_BUILDS_TRAINS :{LTBLUE}IskljuÄi vlakove za raÄunalo: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AI_BUILDS_ROADVEH :{LTBLUE}IskljuÄi cestovna vozila za raÄunalo: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT :{LTBLUE}IskljuÄi zrakoplov za raÄunalo: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_AI_BUILDS_SHIPS :{LTBLUE}IskljuÄi cestovna vozila za raÄunalo: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_AIRCRAFT :{LTBLUE}IskljuÄi zrakoplove za raÄunalo: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AI_BUILDS_SHIPS :{LTBLUE}IskljuÄi brodove za raÄunalo: {ORANGE}{STRING}
STR_CONFIG_PATCHES_AINEW_ACTIVE :{LTBLUE}Omogući novi AI (alfa): {ORANGE}{STRING}
STR_CONFIG_PATCHES_AI_IN_MULTIPLAYER :{LTBLUE}Omogući AI u modu s viÅ¡e igraÄa (eksperimentalno): {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SERVINT_TRAINS :{LTBLUE}Pretpostavljeni period servisiranja vlakova: {ORANGE}{STRING} dana/%
-STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED :{LTBLUE}Pretpostavljeni period servisiranja vlakova: {ORANGE}onemogućeno
-STR_CONFIG_PATCHES_SERVINT_ROADVEH :{LTBLUE}Pretpostavljeni period servisiranja cestovnih vozila: {ORANGE}{STRING} dana/%
-STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED :{LTBLUE}Pretpostavljeni period servisiranja cestovnih vozila: {ORANGE}onemogućeno
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Pretpostavljeni period servisiranja zrakoplova: {ORANGE}{STRING} dana/%
-STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED :{LTBLUE}Pretpostavljeni period servisiranja aviona: {ORANGE}onemogućeno
-STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Pretpostavljeni period servisiranja brodova: {ORANGE}{STRING} dana/%
-STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Pretpostavljeni period servisiranja brodova: {ORANGE}onemogućeno
+STR_CONFIG_PATCHES_SERVINT_TRAINS :{LTBLUE}Inicijalni servisni period za vlakove: {ORANGE}{STRING} dana/%
+STR_CONFIG_PATCHES_SERVINT_TRAINS_DISABLED :{LTBLUE}Inicijalni servisni period za vlakove: {ORANGE}onemogućeno
+STR_CONFIG_PATCHES_SERVINT_ROADVEH :{LTBLUE}Inicijalni servisni interval za cestovna vozila: {ORANGE}{STRING} dana/%
+STR_CONFIG_PATCHES_SERVINT_ROADVEH_DISABLED :{LTBLUE}Inicijalni servisni interval za cestovna vozila: {ORANGE}onemogućeno
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT :{LTBLUE}Inicijalni servisni interval za zrakoplove: {ORANGE}{STRING} dana/%
+STR_CONFIG_PATCHES_SERVINT_AIRCRAFT_DISABLED :{LTBLUE}Inicijalni servisni interval za zrakoplove: {ORANGE}onemogućeno
+STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Inicijalni servisni interval za brodove: {ORANGE}{STRING} dana/%
+STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Inicijalni servisni interval za brodove: {ORANGE}onemogućeno
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}IskljuÄi servisiranje kada su kvarovi postavljeni na nula: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_WAGONSPEEDLIMITS :{LTBLUE}UkljuÄi ograniÄenje brzine za vagone: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_DISABLE_ELRAILS :{LTBLUE}Onemogući elektriÄne traÄnice: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS :{LTBLUE}Omogući ograniÄenje brzine za vagone: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DISABLE_ELRAILS :{LTBLUE}Onemogući elektriÄnu prugu: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_YEAR :{LTBLUE}Vijesti u boji pojavljuju se: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STARTING_YEAR :{LTBLUE}PoÄetna godina: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENDING_YEAR :{LTBLUE}Završna godina: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}UkljuÄi teÄnu ekonomiju (viÅ¡e manjih izazova)
-STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Dopusti kupovanje udjela drugih tvrtki
-STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Kod povlaÄenja, postavi signale svakih/svaku; {ORANGE}{STRING}ploÄica/u
+STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Dopusti kupovanje udjela u drugim tvrtkama
+STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Kod povlaÄenja, postavi signale svakih; {ORANGE}{STRING} ploÄica
STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}Automatski izgradi semafore prije: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID :{WHITE}Izgled grada "bezviše cesta" nije valjan u editoru scenarija
+STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID :{WHITE}Raspored grada "nema više cesta" nije valjan u editoru scenarija
STR_CONFIG_PATCHES_TOWN_LAYOUT :{LTBLUE}Odaberi grad-cesta raspored: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS :nema više cesta
-STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT :zadano
+STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT :inicijalno
STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS :bolje ceste
STR_CONFIG_PATCHES_TOWN_LAYOUT_2X2_GRID :2x2 mreža
STR_CONFIG_PATCHES_TOWN_LAYOUT_3X3_GRID :3x3 mreža
@@ -1165,16 +1178,16 @@
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Lijevo
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :Sredina
STR_CONFIG_PATCHES_TOOLBAR_POS_RIGHT :Desno
-STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Radijus hvatanja prozora: {ORANGE}{STRING} px
+STR_CONFIG_PATCHES_SNAP_RADIUS :{LTBLUE}Radijus hvatanja prozora: {ORANGE}{STRING} px
STR_CONFIG_PATCHES_SNAP_RADIUS_DISABLED :{LTBLUE}Radijus hvatanja prozora: {ORANGE}iskljuÄen
STR_CONFIG_PATCHES_TOWN_GROWTH :{LTBLUE}Brzina rasta gradova: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TOWN_GROWTH_NONE :Ništa
+STR_CONFIG_PATCHES_TOWN_GROWTH_NONE :Nema
STR_CONFIG_PATCHES_TOWN_GROWTH_SLOW :Sporo
STR_CONFIG_PATCHES_TOWN_GROWTH_NORMAL :Normalno
STR_CONFIG_PATCHES_TOWN_GROWTH_FAST :Brzo
STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST :Vrlo brzo
-STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Proporcije mjesta koja će postati gradovi: {ORANGE}1 u {STRING}
-STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Proporcije mjesta koja će postati gradovi: {ORANGE} Ništa
+STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Omjer gradova koji će postati metropole: {ORANGE}1 u {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Omjer gradova koji će postati metropole: {ORANGE}Nijedan
STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}PoÄetni množitelj veliÄine grada: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GUI :{BLACK}SuÄelje
@@ -1182,19 +1195,19 @@
STR_CONFIG_PATCHES_VEHICLES :{BLACK}Vozila
STR_CONFIG_PATCHES_STATIONS :{BLACK}Stanice
STR_CONFIG_PATCHES_ECONOMY :{BLACK}Ekonomija
-STR_CONFIG_PATCHES_AI :{BLACK}Konkurenti
+STR_CONFIG_PATCHES_AI :{BLACK}Suparnici
STR_CONFIG_PATCHES_DISABLED :onemogućeno
STR_CONFIG_PATCHES_INT32 :{NUM}
STR_CONFIG_PATCHES_CURRENCY :{CURRENCY}
-STR_CONFIG_PATCHES_QUERY_CAPT :{WHITE}Promjeni vrijednost postavke
-STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Neki ili svi od zadanih servisnih intervala ispod nisu kompatibilni sa odabranim postavkama! 5-90% ili 30-800 dana su valjane vrijednosti
+STR_CONFIG_PATCHES_QUERY_CAPT :{WHITE}Promijeni vrijednost postavke
+STR_CONFIG_PATCHES_SERVICE_INTERVAL_INCOMPATIBLE :{WHITE}Neki ili svi od zadanih servisnih intervala ispod nisu kompatibilni s odabranim postavkama! Valjane vrijednosti su 5-90% ili 30-800 dana.
STR_CONFIG_PATCHES_YAPF_SHIPS :{LTBLUE}Koristi YAPF za brodove: {ORANGE}{STRING}
STR_CONFIG_PATCHES_YAPF_ROAD :{LTBLUE}Koristi YAPF za cestovna vozila: {ORANGE}{STRING}
STR_CONFIG_PATCHES_YAPF_RAIL :{LTBLUE}Koristi YAPF za vlakove: {ORANGE}{STRING}
-STR_TEMPERATE_LANDSCAPE :Umjereni krajolik
+STR_TEMPERATE_LANDSCAPE :Blagi krajolik
STR_SUB_ARCTIC_LANDSCAPE :Pod-arktiÄki krajolik
STR_SUB_TROPICAL_LANDSCAPE :Sub-tropski krajolik
STR_TOYLAND_LANDSCAPE :Toyland krajolik
@@ -1216,9 +1229,9 @@
STR_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Ide prema {WAYPOINT}, {VELOCITY}
STR_GO_TO_WAYPOINT :Idi preko {WAYPOINT}
-STR_GO_NON_STOP_TO_WAYPOINT :Idi non-stop preko {WAYPOINT}
+STR_GO_NON_STOP_TO_WAYPOINT :Idi neprekidno preko {WAYPOINT}
-STR_WAYPOINTNAME_CITY : Čvorište{TOWN}
+STR_WAYPOINTNAME_CITY :Čvorište {TOWN}
STR_WAYPOINTNAME_CITY_SERIAL :Čvorište {TOWN} #{COMMA}
STR_LANDINFO_WAYPOINT :Čvorište
@@ -1230,12 +1243,12 @@
STR_WAYPOINT_RAW :{WAYPOINT}
STR_EDIT_WAYPOINT_NAME :{WHITE}Promijeni ime ÄvoriÅ¡ta
-STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Ne možeÅ¡ promijeniti ime ÄvoriÅ¡ta...
-STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}Promijeni traÄnicu u ÄvoriÅ¡te
-STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Ne možeÅ¡ izgraditi željezniÄko ÄvoriÅ¡te ovdje...
-STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Ne možeÅ¡ ukloniti željezniÄko ÄvoriÅ¡te odavdje...
+STR_CANT_CHANGE_WAYPOINT_NAME :{WHITE}Nije moguće promijeniti ime ÄvoriÅ¡ta...
+STR_CONVERT_RAIL_TO_WAYPOINT_TIP :{BLACK}Pretvori prugu u ÄvoriÅ¡te
+STR_CANT_BUILD_TRAIN_WAYPOINT :{WHITE}Ovdje nije moguće izgraditi željezniÄko ÄvoriÅ¡te...
+STR_CANT_REMOVE_TRAIN_WAYPOINT :{WHITE}Nije moguće ukloniti željezniÄko ÄvoriÅ¡te odavdje...
-STR_BUILD_AUTORAIL_TIP :{BLACK}Izgradi željezniÄku traÄnicu koristeći Autorail modus
+STR_BUILD_AUTORAIL_TIP :{BLACK}Izgradi željezniÄku prugu koristeći Autorail naÄin
STR_NO_TOWN_IN_SCENARIO :{WHITE}...u ovom scenariju nema gradova
@@ -1244,7 +1257,7 @@
STR_RANDOM_TOWNS_TIP :{BLACK}Popuni kartu nasumce smještenim gradovima
STR_MANY_RANDOM_INDUSTRIES :Mnoge nasumiÄne industrije
STR_RANDOM_INDUSTRIES_TIP :{BLACK}Popuni kartu nasumce smještenim industrijama
-STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Ne možeš generirati gospodarstva...
+STR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Nije moguće generirati industrije...
STR_LANDSCAPING_TOOLBAR_TIP :{BLACK}Otvori alatnu traku za snižavanje/povećavanje, sadnju drveća, itd.
STR_LANDSCAPING_TOOLBAR :{WHITE}Uređivanje krajolika
@@ -1252,13 +1265,13 @@
STR_TREES_RANDOM_TYPE :{BLACK}Raznovrsno drveće
-STR_TREES_RANDOM_TYPE_TIP :{BLACK}Stavi drveće nasumiÄnog tipa
+STR_TREES_RANDOM_TYPE_TIP :{BLACK}Posadi raznovrsno drveće
-STR_CANT_BUILD_CANALS :{WHITE}Ovdje ne možeš graditi kanale...
+STR_CANT_BUILD_CANALS :{WHITE}Ovdje nije moguće izgraditi kanale...
STR_BUILD_CANALS_TIP :{BLACK}Izgradi kanale.
STR_LANDINFO_CANAL :Kanal
-STR_CANT_BUILD_LOCKS :{WHITE}Ne mogu graditi brane ovdje...
+STR_CANT_BUILD_LOCKS :{WHITE}Ovdje nije moguće izgraditi brane...
STR_BUILD_LOCKS_TIP :{BLACK}Izgradi brane
STR_LANDINFO_LOCK :Brana
@@ -1266,16 +1279,16 @@
STR_LANDINFO_COORDS :{BLACK}Koordinate: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
-STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Ne možeš ukloniti dio stanice...
-STR_CANT_CONVERT_RAIL :{WHITE}Ne možeÅ¡ pretvoriti vrstu traÄnica ovdje...
-STR_CONVERT_RAIL_TIP :{BLACK}Konvertiraj/Nadogradi vrstu traÄnica
+STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Nije moguće ukloniti dio stanice...
+STR_CANT_CONVERT_RAIL :{WHITE}Ovdje nije moguće pretvoriti vrstu pruge...
+STR_CONVERT_RAIL_TIP :{BLACK}Pretvori/nadogradi vrstu pruge
-STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP :{BLACK}Povucite lokomotivu na ovo mjesto da bi prodaoli cijeli vlak
+STR_DRAG_WHOLE_TRAIN_TO_SELL_TIP :{BLACK}Ovdje povuci lokomotivu kako bi prodao cijeli vlak
STR_DRAG_DROP :{BLACK}Povuci i spusti
STR_STATION_DRAG_DROP :{BLACK}Napravi stanicu koristeći drag & drop
-STR_SELECT_STATION_CLASS_TIP :{BLACK}Odaberite vrstu stanice koju želite vidjeti
-STR_SELECT_STATION_TYPE_TIP :{BLACK}Izaberite vrstu stanice za izgradnju
+STR_SELECT_STATION_CLASS_TIP :{BLACK}Odaberi vrstu stanice za prikazivanje
+STR_SELECT_STATION_TYPE_TIP :{BLACK}Odaberi vrstu stanice za izgradnju
STR_FAST_FORWARD :{BLACK}Premotaj igru naprijed
STR_MESSAGE_HISTORY :{WHITE}Povijest poruka
@@ -1310,24 +1323,24 @@
STR_INDUSTRY_TOO_CLOSE :{WHITE}...preblizu drugoj industriji
-STR_RAIL_REFIT_VEHICLE_TO_CARRY :{BLACK}Prepravi vlak kako bi nosio drugu vrstu tereta
-STR_RAIL_REFIT_VEHICLE :{BLACK}Prepravi vlak
-STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Izaberi vrstu tereta koju će vlak nositi
-STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Prepravi vlak kako bi nosio oznaÄenu vrstu tereta
-STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Ne možeš prepraviti vlak...
-STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Servisni intervali u postotcima: {ORANGE}{STRING}
+STR_RAIL_REFIT_VEHICLE_TO_CARRY :{BLACK}Prenamijeni vlak za prijevoz neke druge vrste tereta
+STR_RAIL_REFIT_VEHICLE :{BLACK}Prenamijeni vlak
+STR_RAIL_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Odaberi vrstu tereta koju će vlak prevoziti
+STR_RAIL_REFIT_TO_CARRY_HIGHLIGHTED :{BLACK}Prenamijeni vlak za prijevoz oznaÄene vrste tereta
+STR_RAIL_CAN_T_REFIT_VEHICLE :{WHITE}Nije moguće prenamijeniti vlak...
+STR_CONFIG_PATCHES_SERVINT_ISPERCENT :{LTBLUE}Servisni su intervali u postotcima: {ORANGE}{STRING}
STR_CONFIG_GAME_PRODUCTION :{WHITE}Promijeni proizvodnju
TEMP_AI_IN_PROGRESS :{WHITE}Dobrodošli u novi AI pod razvojem. Ukoliko naiđete na probleme, napravite sliku ekrana i stavite ju na forum.
-TEMP_AI_ACTIVATED :{WHITE}Upozorenje: ovaj novi AI je još uvijek alfa! Trenutno, samo kamioni i autobusi rade!
-TEMP_AI_MULTIPLAYER :{WHITE}Upozorenje: implementacije je još uvijek pokusna (koristeći novi AI). Molimo prijavite bilo kakav problem na truelight@openttd.org
+TEMP_AI_ACTIVATED :{WHITE}Upozorenje: ovaj novi AI još uvijek je alfa! Trenutno, samo kamioni i autobusi rade!
+TEMP_AI_MULTIPLAYER :{WHITE}Upozorenje: implementacija je još uvijek pokusna (koristi novi AI). Molimo prijavite bilo kakav problem na truelight@openttd.org
############ network gui strings
STR_NETWORK_MULTIPLAYER :{WHITE}ViÅ¡e igraÄa
STR_NETWORK_PLAYER_NAME :{BLACK}Ime igraÄa:
-STR_NETWORK_ENTER_NAME_TIP :{BLACK}Ovo je ime po kojem će te drugi igraÄi identificirati
+STR_NETWORK_ENTER_NAME_TIP :{BLACK}Ovo je ime po kojem će te drugi igraÄi raspoznavati
STR_NETWORK_CONNECTION :{BLACK}Veza:
STR_NETWORK_CONNECTION_TIP :{BLACK}Izaberi između internetske igre ili igre preko lokalne mreže (LAN)
@@ -1337,7 +1350,7 @@
STR_NETWORK_GAME_NAME :{BLACK}Ime
STR_NETWORK_GAME_NAME_TIP :{BLACK}Ime igre
STR_NETWORK_INFO_ICONS_TIP :{BLACK}Jezik, verzija poslužitelja, itd.
-STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Klikni na igru s liste kako bi ju izabrao
+STR_NETWORK_CLICK_GAME_TO_SELECT :{BLACK}Klikni na igru s popisa kako bi ju odabrao
STR_NETWORK_FIND_SERVER :{BLACK}Pronađi poslužitelj
STR_NETWORK_FIND_SERVER_TIP :{BLACK}Pronađi poslužitelje u mreži
@@ -1347,7 +1360,7 @@
STR_NETWORK_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
STR_NETWORK_CLIENTS_CAPTION :{BLACK}Klijenti
-STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Klijenata online / klijenata maks{}Tvrki online / tvrki maks
+STR_NETWORK_CLIENTS_CAPTION_TIP :{BLACK}Klijenata online / klijenata maks{}Tvrtki online / tvrki maks.
STR_NETWORK_GAME_INFO :{SILVER}INFO O IGRI
STR_ORANGE :{ORANGE}{STRING}
STR_NETWORK_CLIENTS :{SILVER}Klijenti: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
@@ -1362,7 +1375,7 @@
STR_NETWORK_SERVER_OFFLINE :{SILVER}POSLUŽITELJ NEDOSTUPAN
STR_NETWORK_SERVER_FULL :{SILVER}POSLUŽITELJ PUN
STR_NETWORK_VERSION_MISMATCH :{SILVER}RAZLIKA U VERZIJAMA
-STR_NETWORK_GRF_MISMATCH :{SILVER}NEWGRF GREÅ KA
+STR_NETWORK_GRF_MISMATCH :{SILVER}NEWGRF RAZLIKA
STR_NETWORK_JOIN_GAME :{BLACK}Pridruži se igri
@@ -1373,7 +1386,7 @@
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}Ime igre bit će prikazno drugim igraÄima u izborniku za odabir igre s viÅ¡e igraÄa
STR_NETWORK_SET_PASSWORD :{BLACK}Postavi zaporku
STR_NETWORK_PASSWORD_TIP :{BLACK}Zaštiti svoju igru pomoću zaporke ukoliko ne želiš da bude javno dostupna
-STR_NETWORK_SELECT_MAP :{BLACK}Izaberi kartu:
+STR_NETWORK_SELECT_MAP :{BLACK}Odaberi kartu:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Koju kartu želiš igrati?
STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
@@ -1384,7 +1397,7 @@
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maks klijenata:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Izaberi maksimalan broj klijenata. Ne moraju sva mjesta biti popunjena.
STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} tvrtk{P a e i}
-STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maks tvrki:
+STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maks tvrtki:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}OgraniÄi poslužitelj na odreÄ‘eni broj tvrtki
STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} gledatelj{P "" a a}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maks promatraÄa:
@@ -1393,9 +1406,9 @@
STR_NETWORK_LANGUAGE_TIP :{BLACK}Drugi igraÄi znat će kojim se jezikom govori na poslužitelju
STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}ZapoÄni igru
-STR_NETWORK_START_GAME_TIP :{BLACK}ZapoÄni novu igru u mreži na nasumiÄnoj mapi ili iz nasumiÄnog scenarija
+STR_NETWORK_START_GAME_TIP :{BLACK}ZapoÄni novu igru u mreži na nasumiÄnoj mapi ili iz scenarija
STR_NETWORK_LOAD_GAME :{BLACK}UÄitaj igru
-STR_NETWORK_LOAD_GAME_TIP :{BLACK}Nastavi snimljenu igru za viÅ¡e igraÄa (pazite da se spojite pod svojim imenom)
+STR_NETWORK_LOAD_GAME_TIP :{BLACK}Nastavi ranije snimljenu igru za viÅ¡e igraÄa (pazite da se spojite pod svojim imenom)
############ Leave those lines in this order!!
STR_NETWORK_LANG_ANY :Bilo koji
@@ -1432,24 +1445,24 @@
STR_NETWORK_GAME_LOBBY :{WHITE}Predvorje igre za viÅ¡e igraÄa
STR_NETWORK_PREPARE_TO_JOIN :{BLACK}Pripremanje za pridruživanje: {ORANGE}{STRING}
-STR_NETWORK_COMPANY_LIST_TIP :{BLACK}Popis svih kompanija trenutno u igri. Možete se pridružiti jednoj ili osnovati novu ako postoji slobodno mjesto
+STR_NETWORK_COMPANY_LIST_TIP :{BLACK}Popis svih tvrtki trenutno u igri. Možete se pridružiti jednoj ili osnovati novu ako postoji slobodno mjesto
STR_NETWORK_NEW_COMPANY :{BLACK}Nova tvrtka
STR_NETWORK_NEW_COMPANY_TIP :{BLACK}Otvori novu tvrtku
STR_NETWORK_SPECTATE_GAME :{BLACK}Gledaj igru
STR_NETWORK_SPECTATE_GAME_TIP :{BLACK}Promatraj igru kao gledatelj
STR_NETWORK_JOIN_COMPANY :{BLACK}Pridruži se tvrtki
-STR_NETWORK_JOIN_COMPANY_TIP :{BLACK}Pomogni upravljati ovom tvrtkom
-STR_NETWORK_REFRESH :{BLACK}Osvježi poslužitelja
+STR_NETWORK_JOIN_COMPANY_TIP :{BLACK}Pomozi upravljati ovom tvrtkom
+STR_NETWORK_REFRESH :{BLACK}Osvježi poslužitelj
STR_NETWORK_REFRESH_TIP :{BLACK}Osvježi podatke o poslužitelju
-STR_NETWORK_COMPANY_INFO :{SILVER}PODACI O TVRTKI
+STR_NETWORK_COMPANY_INFO :{SILVER}PODATCI O TVRTKI
STR_NETWORK_COMPANY_NAME :{SILVER}Ime tvrtke: {WHITE}{STRING}
-STR_NETWORK_INAUGURATION_YEAR :{SILVER}Preuzimanje dužnosti: {WHITE}{NUM}
+STR_NETWORK_INAUGURATION_YEAR :{SILVER}UstoliÄenje: {WHITE}{NUM}
STR_NETWORK_VALUE :{SILVER}Vrijednost tvrtke: {WHITE}{CURRENCY}
STR_NETWORK_CURRENT_BALANCE :{SILVER}Trenutno stanje: {WHITE}{CURRENCY}
STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Prošlogodišnji prihod: {WHITE}{CURRENCY}
-STR_NETWORK_PERFORMANCE :{SILVER}Izvršavanje: {WHITE}{NUM}
+STR_NETWORK_PERFORMANCE :{SILVER}UÄinkovitost: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Vozila: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
STR_NETWORK_STATIONS :{SILVER}Stanice: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1458,7 +1471,7 @@
STR_NETWORK_CONNECTING :{WHITE}Spajanje...
############ Leave those lines in this order!!
-STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Spajanje u toku..
+STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Spajanje u tijeku..
STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Provjera ovlaštenja..
STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) ÄŒekanje..
STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Preuzimanje karte..
@@ -1469,34 +1482,34 @@
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Dohvaćanje podataka o tvrtki..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} klijen{P t ta ata} {P je su je} prije Vas
-STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK} Do sad je preuzeto {NUM} / {NUM} kbajta
+STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK} Do sad je preuzeto {NUM} / {NUM} kilobajta
STR_NETWORK_DISCONNECT :{BLACK}Odspoji
-STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Unesite koliÄinu novca koju želite dati
-STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Poslužitelj je zaštićen. Upišite zaporku
+STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Unesi koliÄinu novca koju želiÅ¡ dati
+STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Poslužitelj je zaštićen. Unesite zaporku
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tvrtka je zaštićena. Unesite zaporku
STR_NETWORK_CLIENT_LIST :{WHITE}Popis klijenata
-STR_NETWORK_ERR_NOTAVAILABLE :{WHITE}Nisu pronađeni mrežni uređaji ili je kompajlirano bez ENABLE_NETWORK
+STR_NETWORK_ERR_NOTAVAILABLE :{WHITE} Nisu pronađeni mrežni uređaji ili je kompajlirano bez ENABLE_NETWORK
STR_NETWORK_ERR_NOSERVER :{WHITE} Niti jedna mrežna igra nije pronađena
STR_NETWORK_ERR_NOCONNECTION :{WHITE} Poslužitelj nije odgovorio na zahtjev
-STR_NETWORK_ERR_NEWGRF_MISMATCH :{WHITE} Ne mogu se spojiti zbog neslaganja u NewGRF
+STR_NETWORK_ERR_NEWGRF_MISMATCH :{WHITE} Ne mogu se spojiti zbog razlike u NewGRF
STR_NETWORK_ERR_DESYNC :{WHITE} Neuspješno usklađivanje mrežne igre
STR_NETWORK_ERR_LOSTCONNECTION :{WHITE} Izgubljena veza sa mrežnom igrom
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Nije moguće uÄitati snimljenu igru
-STR_NETWORK_ERR_SERVER_START :{WHITE} Nemoguće je pokrenuti poslužitelja
+STR_NETWORK_ERR_SERVER_START :{WHITE} Nemoguće je pokrenuti poslužitelj
STR_NETWORK_ERR_CLIENT_START :{WHITE} Nije se moguće spojiti
STR_NETWORK_ERR_TIMEOUT :{WHITE} Istekla je veza #{NUM}
STR_NETWORK_ERR_SERVER_ERROR :{WHITE} Napravljena je greška u protokolu te se veza prekinula
-STR_NETWORK_ERR_WRONG_REVISION :{WHITE}Revizija ovog klijenta ne slaže se sa revizijom servera
+STR_NETWORK_ERR_WRONG_REVISION :{WHITE} Revizija ovog klijenta ne slaže se s revizijom poslužitelja
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Pogrešna zaporka
STR_NETWORK_ERR_SERVER_FULL :{WHITE} Poslužitelj je pun
-STR_NETWORK_ERR_SERVER_BANNED :{WHITE} Zabranjen vam je pristup ovom poslužitelju
-STR_NETWORK_ERR_KICKED :{WHITE} IzbaÄeni ste iz igre
-STR_NETWORK_ERR_CHEATER :{WHITE} Na ovom poslužitelju nije dopušteno varanje
+STR_NETWORK_ERR_SERVER_BANNED :{WHITE} Zabranjen ti je pristup ovom poslužitelju
+STR_NETWORK_ERR_KICKED :{WHITE} IzbaÄen si iz igre
+STR_NETWORK_ERR_CHEATER :{WHITE} Na ovome poslužitelju varanje nije dopušteno
-STR_NETWORK_ERR_LEFT :je napustio igru
+STR_NETWORK_ERR_LEFT :je napusti{G o la lo} igru
############ Leave those lines in this order!!
STR_NETWORK_ERR_CLIENT_GENERAL :opća greška
STR_NETWORK_ERR_CLIENT_DESYNC :greška u sinkronizaciji
@@ -1509,23 +1522,23 @@
STR_NETWORK_ERR_CLIENT_WRONG_REVISION :pogrešna revizija
STR_NETWORK_ERR_CLIENT_NAME_IN_USE :ime se već koristi
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :pogrešna zaporka
-STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :pogreÅ¡an igraÄ-id u DoCommand
+STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :pogreÅ¡an id igraÄa u DoCommand
STR_NETWORK_ERR_CLIENT_KICKED :izbaÄen{G "" a o} od strane poslužitelja
STR_NETWORK_ERR_CLIENT_CHEATER :je pokuša{G o la lo} varati
STR_NETWORK_ERR_CLIENT_SERVER_FULL :poslužitelj je pun
############ End of leave-in-this-order
STR_NETWORK_CLIENT_JOINED :se pridruži{G o la lo} igri
STR_NETWORK_GIVE_MONEY :je da{G o la lo} novac Vašoj tvrtki ({CURRENCY})
-STR_NETWORK_GAVE_MONEY_AWAY :dali ste {STRING} novac ({CURRENCY})
-STR_NETWORK_CHAT_COMPANY_CAPTION :[Tim]:
-STR_NETWORK_CHAT_COMPANY :[Tim] {STRING}: {GRAY}{STRING}
-STR_NETWORK_CHAT_TO_COMPANY :[Tim] Za {STRING}: {GRAY}{STRING}
+STR_NETWORK_GAVE_MONEY_AWAY :da{G o la lo} si {STRING} novac ({CURRENCY})
+STR_NETWORK_CHAT_COMPANY_CAPTION :[Ekipa]:
+STR_NETWORK_CHAT_COMPANY :[Ekipa] {STRING}: {GRAY}{STRING}
+STR_NETWORK_CHAT_TO_COMPANY :[Ekipa] Za {STRING}: {GRAY}{STRING}
STR_NETWORK_CHAT_CLIENT_CAPTION :[Privatno] :
STR_NETWORK_CHAT_CLIENT :[Privatno] {STRING}: {GRAY}{STRING}
STR_NETWORK_CHAT_TO_CLIENT :[Privatno] Za {STRING}: {GRAY}{STRING}
STR_NETWORK_CHAT_ALL_CAPTION :[Svima] :
STR_NETWORK_CHAT_ALL :[Svima] {STRING}: {GRAY}{STRING}
-STR_NETWORK_NAME_CHANGE :je promjeni {G o la lo} ime u
+STR_NETWORK_NAME_CHANGE :je promjeni {G o la lo} svoje ime u
STR_NETWORK_SERVER_SHUTDOWN :{WHITE} Poslužitelj je zatvorio sesiju
STR_NETWORK_SERVER_REBOOT :{WHITE} Poslužitelj se ponovno pokreće...{}Molimo priÄekajte...
@@ -1546,19 +1559,19 @@
############ end network gui strings
-STR_CONFIG_PATCHES_MAP_X :{LTBLUE}VeliÄina karte X: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_MAP_Y :{LTBLUE}VeliÄina karte Y: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAP_X :{LTBLUE}X veliÄina karte: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_MAP_Y :{LTBLUE}Y veliÄina karte: {ORANGE}{STRING}
##### PNG-MAP-Loader
STR_PNGMAP_ERROR :{WHITE}Nemoguće je uÄitati krajolik iz PNG-a...
STR_PNGMAP_ERR_FILE_NOT_FOUND :{WHITE}...datoteka nije pronađena.
-STR_PNGMAP_ERR_IMAGE_TYPE :{WHITE}...ne mogu konvertirati tip slike. 8 ili 24-bitni PNG je potreban.
+STR_PNGMAP_ERR_IMAGE_TYPE :{WHITE}...ne mogu pretvoriti vrstu slike. Potrebna je 8 ili 24-bitna PNG slika.
STR_PNGMAP_ERR_MISC :{WHITE}...nešto je otišlo u krivom smjeru. Oprostite. (vjerojatno je pokvarena datoteka)
STR_BMPMAP_ERROR :{WHITE}Ne mogu uÄitati krajolik iz BMP...
-STR_BMPMAP_ERR_IMAGE_TYPE :{WHITE}...ne mogu pretvoriti tip slike.
+STR_BMPMAP_ERR_IMAGE_TYPE :{WHITE}...ne mogu pretvoriti vrstu slike.
##id 0x0800
STR_0800_COST :{TINYFONT}{RED}Trošak: {CURRENCY}
@@ -1569,8 +1582,8 @@
STR_FEEDER :{YELLOW}Prebaci: {CURRENCY}
STR_0805_ESTIMATED_COST :{WHITE}Predviđeni trošak: {CURRENCY}
STR_0807_ESTIMATED_INCOME :{WHITE}Predviđeni prihod: {CURRENCY}
-STR_0808_CAN_T_RAISE_LAND_HERE :{WHITE}Ne možeš povisiti zemlju ovdje...
-STR_0809_CAN_T_LOWER_LAND_HERE :{WHITE}Ne možeš sniziti zemlju ovdje...
+STR_0808_CAN_T_RAISE_LAND_HERE :{WHITE}Ovdje nije moguće povisiti zemlju...
+STR_0809_CAN_T_LOWER_LAND_HERE :{WHITE}Ovdje nije moguće sniziti zemlju...
STR_080A_ROCKS :Stijenje
STR_080B_ROUGH_LAND :Surova zemlja
STR_080C_BARE_LAND :Ogoljena zemlja
@@ -1585,76 +1598,76 @@
STR_1002_EXCAVATION_WOULD_DAMAGE :{WHITE}Iskopavanje bi oštetilo tunel
STR_1003_ALREADY_AT_SEA_LEVEL :{WHITE}Već je na razini mora
STR_1004_TOO_HIGH :{WHITE}Previsoko
-STR_1005_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nije prikladno za želježnicke traÄnice
+STR_1005_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nije prikladno za želježnicku prugu
STR_1007_ALREADY_BUILT :{WHITE}...već izgrađeno
-STR_1008_MUST_REMOVE_RAILROAD_TRACK :{WHITE}MoraÅ¡ najprije ukloniti traÄnice
+STR_1008_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Najprije moraÅ¡ ukloniti željezniÄku prugu
STR_100A_RAILROAD_CONSTRUCTION :{WHITE}Izgradnja željeznice
-STR_TITLE_ELRAIL_CONSTRUCTION :{WHITE}Izgradnja elektrificiranih traÄnica
+STR_TITLE_ELRAIL_CONSTRUCTION :{WHITE}Izgradnja elektrificirane željeznice
STR_100B_MONORAIL_CONSTRUCTION :{WHITE}Izgradnja jednotraÄne željeznice
STR_100C_MAGLEV_CONSTRUCTION :{WHITE}Izgradnja MagLeva
STR_100D_SELECT_RAIL_BRIDGE :{WHITE}Odaberi željezniÄki most
-STR_100E_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Ovdje nije moguće graditi željezniÄko spremiÅ¡te...
+STR_100E_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Ovdje nije moguće izgraditi željezniÄko spremiÅ¡te...
STR_100F_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Ovdje nije moguće izgraditi željezniÄku stanicu...
-STR_1010_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Ovdje ne možeš postaviti znakove...
-STR_1011_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Ovdje ne možeÅ¡ graditi traÄnice...
-STR_1012_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Odavde ne možeÅ¡ ukloniti traÄnice...
-STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Ovdje ne možeš maknuti znakove...
+STR_1010_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Ovdje nije moguće postaviti signale...
+STR_1011_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Ovdje nije moguće izgraditi željezniÄke traÄnice...
+STR_1012_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nije moguće ukloniti željezniÄku prugu odavdje...
+STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Nije moguće ukloniti signale odavdje...
STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Smjer spremišta vlakova
-STR_1015_RAILROAD_CONSTRUCTION :Izgradnja traÄnica
-STR_TOOLB_ELRAIL_CONSTRUCTION :Izgradnja elektriÄne željezniÄke pruge
+STR_1015_RAILROAD_CONSTRUCTION :Izgradnja željeznice
+STR_TOOLB_ELRAIL_CONSTRUCTION :Izgradnja elektrificirane željeznice
STR_1016_MONORAIL_CONSTRUCTION :Izgradnja jednotraÄne željeznice
STR_1017_MAGLEV_CONSTRUCTION :Izgradnja MagLeva
-STR_1018_BUILD_RAILROAD_TRACK :{BLACK}Izgradi traÄnicu
-STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Izgradi spremište vlakova (za gradnju i servisiranje vlakova)
+STR_1018_BUILD_RAILROAD_TRACK :{BLACK}Izgradi željezniÄku prugu
+STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Izgradi spremište vlakova (za izgradnju i servisiranje vlakova)
STR_101A_BUILD_RAILROAD_STATION :{BLACK}Izgradi željezniÄku stanicu
-STR_101B_BUILD_RAILROAD_SIGNALS :{BLACK}Izgradi željezniÄke znakove
+STR_101B_BUILD_RAILROAD_SIGNALS :{BLACK}Izgradi željezniÄke signale
STR_101C_BUILD_RAILROAD_BRIDGE :{BLACK}Izgradi željezniÄki most
STR_101D_BUILD_RAILROAD_TUNNEL :{BLACK}Izgradi željezniÄki tunel
-STR_101E_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prebacuj izgradnju/uklanjanje za traÄnice i željezniÄke signale
-STR_101F_BRIDGE_SELECTION_CLICK :{BLACK}Odabir mosta - pritisni na most koji želiš izgraditi
+STR_101E_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Aktiviraj izgradnju/uklanjanje željezniÄke pruge i znakova
+STR_101F_BRIDGE_SELECTION_CLICK :{BLACK}Izbor mosta - klikni na most koji želiš izgraditi
STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO :{BLACK}Odaberi smjer željezniÄkog spremiÅ¡ta
-STR_1021_RAILROAD_TRACK :TraÄnica
-STR_1023_RAILROAD_TRAIN_DEPOT :Spremište vlakova
+STR_1021_RAILROAD_TRACK :ŽeljezniÄka pruga
+STR_1023_RAILROAD_TRAIN_DEPOT :ŽeljezniÄko spremiÅ¡te vlakova
STR_1024_AREA_IS_OWNED_BY_ANOTHER :{WHITE}...podruÄje je u vlasniÅ¡tvu druge tvrke
-STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :TraÄnice s normalnim znakovima
-STR_RAILROAD_TRACK_WITH_PRESIGNALS :TraÄnice s prethodno postavljenim znakovima
-STR_RAILROAD_TRACK_WITH_EXITSIGNALS :TraÄnice s izlaznim znakovima
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :TraÄnice s kombo znakovima
-STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :TraÄnice sa normalnim i prethodno postavljenim znakovima
-STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :TraÄnice sa normalnim i izlaznim znakovima
-STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :TraÄnice s normalnim i kombo znakovima
-STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :TraÄnice sa prethodno postavljenim i izlaznim znakovima
-STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :TraÄnice s prethodno postavljenim i kombo znakovima
-STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :TraÄnice s izlaznim i kombo znakovima
-STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Morati prvo maknuti željezniÄku stanicu
+STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :ŽeljezniÄke traÄnice s normalnim signalima
+STR_RAILROAD_TRACK_WITH_PRESIGNALS :ŽeljezniÄke traÄnice s prethodno postavljenim signalima
+STR_RAILROAD_TRACK_WITH_EXITSIGNALS :ŽeljezniÄke traÄnice s izlaznim signalima
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :ŽeljezniÄke traÄnice s kombo signalima
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :ŽeljezniÄke traÄnice s normalnim i prethodno postavljenim signalima
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :ŽeljezniÄke traÄnice sa normalnim i izlaznim signalima
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :ŽeljezniÄke traÄnice s normalnim i kombo signalima
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :ŽeljezniÄke traÄnice s prethodno postavljenim i izlaznim signalima
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :ŽeljezniÄke traÄnice s prethodno postavljenim i kombo signalima
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :ŽeljezniÄke traÄnice s izlaznim i kombo signalima
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Najprije moraÅ¡ ukloniti željezniÄku stanicu
##id 0x1800
-STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Moraš prvo ukloniti cestu
+STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Najprije moraš ukloniti cestu
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Cestovni radovi u tijeku
STR_1802_ROAD_CONSTRUCTION :{WHITE}Izgradnja ceste
-STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Konstruiranje Tramvaja
-STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Izaberi cestovni most
-STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}...jednosmjerne ceste ne mogu imati raskršća
-STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Ovdje ne možeš graditi cestu...
-STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Ne mogu izgraditi tramvaj ovdje...
-STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Odavde ne možeš maknuti cestu...
-STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Ne mogu maknuti tramvaj odavde...
+STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Izgradnja tramvaja
+STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Odaberi cestovni most
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}...jednosmjerne ceste ne mogu imati raskrižja
+STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Ovdje nije moguće izgraditi cestu...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Ovdje nije moguće izgraditi tramvaj...
+STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Nije moguće ukloniti cestu odavdje...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Nije moguće ukloniti tramvaj odavdje...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Smjer cestovnog spremišta
-STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Smjer Tramvajskog Skladišta
-STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Ovdje ne možeš izgraditi spremište cestovnih vozila...
-STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Ne mogu izgraditi skladište tramvaja ovdje
+STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Smjer tramvajskog spremišta
+STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Ovdje nije moguće izgraditi spremište cestovnih vozila...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Ovdje nije moguće izgraditi tramvajsko spremište...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Nije moguće izgraditi autobusnu stanicu...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Nije moguće izgraditi kamionski terminal...
-STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Ne mogu izgraditi tramvajsku stanicu za putnike...
-STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nemogu izgraditi teretnu tramvajsku stanicu...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nije moguće izgraditi tramvajsku stanicu za putnike...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nije moguće izgraditi teretnu tramvajsku stanicu...
STR_180A_ROAD_CONSTRUCTION :Izgradnja ceste
-STR_180A_TRAMWAY_CONSTRUCTION :Konstruiranje tramvaja
+STR_180A_TRAMWAY_CONSTRUCTION :Izgradnja tramvaja
STR_180B_BUILD_ROAD_SECTION :{BLACK}Izgradi dio ceste
-STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Izgradi dio tramvaja
+STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Izgradi tramvajski dio
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Izgradi spremište cestovnih vozila (za izgradnju i servisiranje vozila)
-STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Izgradi skladište za tramvajska vozila(za izgradnju i servisiranje vozila)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Izgradi spremište tramvajskih vozila (za izgradnju i servisiranje vozila)
STR_180D_BUILD_BUS_STATION :{BLACK}Izgradi autobusnu stanicu
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Izgradi pretovarni kamionski terminal
STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Izgradi putniÄku tramvajsku stanicu
@@ -1663,19 +1676,19 @@
STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Izgradi tramvajski most
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Izgradi cestovni tunel
STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Izgradi tramvajski tunel
-STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prebacuj izgradnju/uklanjanje ceste
-STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}UkljuÄi izgradnju/brisanje za konstruiranje tramvaja
-STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Izaberi smjer spremišta cestovnih vozila
-STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Odaberi smjer skladišta za tramvaj
+STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Aktiviraj izgradnju/uklanjanje ceste
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Aktiviraj izgradnju/brisanje za izgradnju tramvaja
+STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Odaberi smjer spremišta cestovnih vozila
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Odaberi smjer tramvajskog spremišta
STR_1814_ROAD :Cesta
STR_1815_ROAD_WITH_STREETLIGHTS :Cesta sa semaforima
STR_1816_TREE_LINED_ROAD :Cesta s tri trake
STR_1817_ROAD_VEHICLE_DEPOT :Spremište cestovnih vozila
STR_1818_ROAD_RAIL_LEVEL_CROSSING :Prijelaz ceste preko željezniÄke pruge
-STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Ne mogu maknuti autobusnu stanicu...
-STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Ne mogu maknuti kamionsku stanicu...
-STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Ne mogu maknuti putniÄku tramvajsku stanicu...
-STR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Ne mogu maknuti teretnu tramvajsku stanicu...
+STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Nije moguće ukloniti autobusnu stanicu...
+STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Nije moguće ukloniti kamionsku stanicu...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Nije moguće ukloniti putniÄku tramvajsku stanicu...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Nije moguće ukloniti teretnu tramvajsku stanicu...
##id 0x2000
STR_2000_TOWNS :{WHITE}Gradovi
@@ -1684,13 +1697,13 @@
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
STR_2002 :{TINYFONT}{BLACK}{SIGN}
-STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Građevina mora prvo biti srušena
+STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Najprije moraš srušiti građevinu
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Stanovništvo: {ORANGE}{COMMA}{BLACK} Kuće: {ORANGE}{COMMA}
STR_2007_RENAME_TOWN :Preimenuj grad
-STR_2008_CAN_T_RENAME_TOWN :{WHITE}Grad se ne može preimenovati...
+STR_2008_CAN_T_RENAME_TOWN :{WHITE}Nije moguće preimenovati grad...
STR_2009_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN} lokalna samouprava odbija to dozvoliti
-STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Imena gradova - pritisni na ime kako bi centrirao pogled na zaslon
+STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Imena gradova - klikni na ime kako bi centrirao pogled na grad
STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Centriraj glavni pogled na lokaciju grada
STR_200C_CHANGE_TOWN_NAME :{BLACK}Promijeni ime grada
STR_200D_PASSENGERS_LAST_MONTH_MAX :{BLACK}Putnika prošli mjesec: {ORANGE}{COMMA}{BLACK} maks: {ORANGE}{COMMA}
@@ -1713,7 +1726,7 @@
STR_201E_STADIUM :Stadion
STR_201F_OLD_HOUSES :Stare kuće
STR_2020_LOCAL_AUTHORITY :{BLACK}Lokalna samouprava
-STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Prikaži informacije o lokalnoj samoupravi
+STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Pokaži informacije o lokalnoj samoupravi
STR_2022_LOCAL_AUTHORITY :{WHITE}Lokalna samouprava {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Ocjene prijevoznih tvrtki:
STR_2024 :{YELLOW}{COMPANY} {COMPANYNUM}: {ORANGE}{STRING}
@@ -1725,13 +1738,13 @@
STR_202B_SERVICES_ALREADY_SUBSIDISED :{BLACK}Usluge subvencionirane:
STR_202C_FROM_TO :{ORANGE}{STRING} iz {STATION} prema {STATION}{YELLOW} ({COMPANY}
STR_202D_UNTIL :{YELLOW}, do {DATE_SHORT})
-STR_202E_OFFER_OF_SUBSIDY_EXPIRED :{BLACK}{BIGFONT}Istekla je ponuda subvencije:{}{}Prijevoz tereta ( {STRING} ) od {STRING} do {STRING} neće više biti subvencioniran.
-STR_202F_SUBSIDY_WITHDRAWN_SERVICE :{BLACK}{BIGFONT}PovuÄena subvencija:{}{}Prijevoz tereta ( {STRING} ) od {STATION} do {STATION} nije viÅ¡e subvencioniran.
-STR_2030_SERVICE_SUBSIDY_OFFERED :{BLACK}{BIGFONT}Ponuđena je subvencija:{}{}Prvi koji preveze teret ({STRING}) od {STRING} do {STRING} dobivat će subvenciju od lokalne samouprave!
-STR_2031_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se 50% više sljedećih godinu dana!
-STR_2032_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se dvostruko sljedećih godinu dana!
-STR_2033_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se trostruko sljedećih godinu dana!
-STR_2034_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvencija je dodjeljena tvrtki {COMPANY}!{}{}Prijevoz tereta ({STRING}) od {STATION} do {STATION} plaćat će se Äetverostruko sljedećih godinu dana!
+STR_202E_OFFER_OF_SUBSIDY_EXPIRED :{BLACK}{BIGFONT}Istekla je ponuda subvencije:{}{}Prijevoz {STRING.gen} od {STRING} do {STRING} više ne će biti subvencioniran.
+STR_202F_SUBSIDY_WITHDRAWN_SERVICE :{BLACK}{BIGFONT}PovuÄena subvencija:{}{}Prijevoz {STRING.gen} od {STATION} do {STATION} viÅ¡e nije subvencioniran.
+STR_2030_SERVICE_SUBSIDY_OFFERED :{BLACK}{BIGFONT}Ponuđena je subvencija:{}{}Prvi koji preveze {STRING.aku} od {STRING} do {STRING} primat će jednogodišnju subvenciju od lokalne samouprave!
+STR_2031_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvencija je dodijeljena tvrtki {COMPANY}!{}{}Prijevoz {STRING.gen} od {STATION} do {STATION} plaćat će se 50% više sljedećih godinu dana!
+STR_2032_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvencija je dodijeljena tvrtki {COMPANY}!{}{}Prijevoz {STRING.gen} od {STATION} do {STATION} plaćat će se dvostruko sljedećih godinu dana!
+STR_2033_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvencija je dodijeljena tvrtki {COMPANY}!{}{}Prijevoz {STRING.gen} od {STATION} do {STATION} plaćat će se trostruko sljedećih godinu dana!
+STR_2034_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}Subvencija je dodijeljena tvrtki {COMPANY}!{}{}Prijevoz {STRING.gen} od {STATION} do {STATION} plaćat će se Äetverostruko sljedećih godinu dana!
STR_2035_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN} lokalne vlasti odbijaju dozvoliti izgradnju joÅ¡ jedne zraÄne luke u ovom gradu
STR_2036_COTTAGES :Kolibe
STR_2037_HOUSES :Kuće
@@ -1746,14 +1759,14 @@
STR_2040_CINEMA :Kino
STR_2041_SHOPPING_MALL :TrgovaÄki centar
STR_2042_DO_IT :{BLACK}UÄini to
-STR_2043_LIST_OF_THINGS_TO_DO_AT :{BLACK}Popis stvari koje treba uÄiniti u ovom gradu - pritisni za dodatne informacije
+STR_2043_LIST_OF_THINGS_TO_DO_AT :{BLACK}Popis stvari koje treba uÄiniti u ovom gradu - klikni za dodatne informacije
STR_2044_CARRY_OUT_THE_HIGHLIGHTED :{BLACK}IzvrÅ¡i akcije oznaÄene na gornjem popisu
-STR_2045_ACTIONS_AVAILABLE :{BLACK}Dostupne akcije:
+STR_2045_ACTIONS_AVAILABLE :{BLACK}Dostupne radnje:
STR_2046_SMALL_ADVERTISING_CAMPAIGN :Mala oglasna kampanja
STR_2047_MEDIUM_ADVERTISING_CAMPAIGN :Srednja oglasna kampanja
STR_2048_LARGE_ADVERTISING_CAMPAIGN :Velika oglasna kampanja
STR_2049_FUND_LOCAL_ROAD_RECONSTRUCTION :Financiraj popravljanje lokalne prometnice
-STR_204A_BUILD_STATUE_OF_COMPANY :Izgradi kip vlasnika tvrke
+STR_204A_BUILD_STATUE_OF_COMPANY :Izgradi kip vlasnika tvrtke
STR_204B_FUND_NEW_BUILDINGS :Financiraj nove građevine
STR_204C_BUY_EXCLUSIVE_TRANSPORT :Kupi ekskluzivna prava prijevozna
STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY :Podmiti lokalnu samoupravu
@@ -1765,7 +1778,7 @@
STR_2052_FUND_THE_CONSTRUCTION_OF :{WHITE}{STRING}{}{YELLOW} Financiraj izgradnju novih poslovnih prostora u gradu.{} Trošak: {CURRENCY}
STR_2053_BUY_1_YEAR_S_EXCLUSIVE :{WHITE}{STRING}{}{YELLOW} Kupi jednogodišnje ekskluzivno pravo prijevoza u gradu. Gradska vlast će dopustiti putnicima i teretu da koriste stanice samo tvoje tvrtke.{} Trošak: {CURRENCY}
STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC :{WHITE}{STRING}{}{YELLOW} Podmiti lokalnu vlast zbog povećanja rejtinga, riskirajući ozbiljne kazne ako vas uhvate{} Trošak: {CURRENCY}
-STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING :{BIGFONT}{BLACK}{TOWN} zahvatile prometne gužve!{}{}Program popravka cesta koji financira tvrtka {COMPANY} slijedećih će 6 mjeseci zadavati glavobolje motociskistima!
+STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING :{BIGFONT}{BLACK}{TOWN} zahvatile prometne gužve!{}{}Program rekonstrukcije cesta koji financira tvrtka {COMPANY} sljedećih će 6 mjeseci zadavati glavobolje motoriziranima!
STR_2056 :{TINYFONT}{WHITE}{TOWN}
STR_2057 :{ORANGE}{TOWN}{BLACK} ({COMMA})
STR_2058_UNDER_CONSTRUCTION :{STRING} (u izgradnji)
@@ -1786,21 +1799,21 @@
STR_2802_TREES :{WHITE}Drveće
STR_2803_TREE_ALREADY_HERE :{WHITE}...ovdje već postoji drvo
STR_2804_SITE_UNSUITABLE :{WHITE}...neprikladno mjesto
-STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Ovdje ne možeš posaditi drvo...
+STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Ovdje nije moguće posaditi drvo...
STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...previše znakova
-STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Ovdje ne možeš postaviti znak...
+STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Ovdje nije moguće postaviti znak...
STR_280A_SIGN :Znak
STR_280B_EDIT_SIGN_TEXT :{WHITE}Izmijeni tekst znaka
-STR_280C_CAN_T_CHANGE_SIGN_NAME :{WHITE}Ne možeš promijeniti ime znaka...
-STR_280D_SELECT_TREE_TYPE_TO_PLANT :{BLACK}Izaberi vrstu drveta za sadnju
+STR_280C_CAN_T_CHANGE_SIGN_NAME :{WHITE}Nije moguće promijeniti ime znaka...
+STR_280D_SELECT_TREE_TYPE_TO_PLANT :{BLACK}Odaberi vrstu drveta za sadnju
STR_280E_TREES :Drveće
STR_280F_RAINFOREST :Kišna šuma
STR_2810_CACTUS_PLANTS :Kaktusi
##id 0x3000
-STR_3000_RAIL_STATION_SELECTION :{WHITE}Odabir željezniÄke stanice
-STR_3001_AIRPORT_SELECTION :{WHITE}Odabir zraÄne luke
+STR_3000_RAIL_STATION_SELECTION :{WHITE}Izbor željezniÄke stanice
+STR_3001_AIRPORT_SELECTION :{WHITE}Izbor zraÄne luke
STR_3002_ORIENTATION :{BLACK}Smjer
STR_3003_NUMBER_OF_TRACKS :{BLACK}Broj traÄnica
STR_3004_PLATFORM_LENGTH :{BLACK}Dužina platforme
@@ -1812,12 +1825,12 @@
STR_3008B_TOO_MANY_TRUCK_STOPS :{WHITE}Previše kamionskih stanica
STR_3009_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Preblizu drugoj stanici/terminalu
STR_300A_0 :{WHITE}{STATION} {STATIONFEATURES}
-STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Prvo moraÅ¡ uniÅ¡titi željezniÄku stanicu
+STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Najprije moraÅ¡ sruÅ¡iti željezniÄku stanicu
STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Preblizu drugoj zraÄnoj luci
-STR_300E_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}MoraÅ¡ uniÅ¡titi zraÄnu luku prvo
+STR_300E_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Najprije moraÅ¡ sruÅ¡iti zraÄnu luku
STR_3030_RENAME_STATION_LOADING :Preimenuj stanicu/terminal
-STR_3031_CAN_T_RENAME_STATION :{WHITE}Ne možeš preimenovati stanicu...
+STR_3031_CAN_T_RENAME_STATION :{WHITE}Nije moguće preimenovati stanicu...
STR_3032_RATINGS :{BLACK}Ocjene
STR_3033_ACCEPTS :{BLACK}Prihvaća
STR_3034_LOCAL_RATING_OF_TRANSPORT :{BLACK}Lokalna ocjena usluge prijevoza:
@@ -1841,30 +1854,30 @@
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Smjer autobusne stanice
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Smjer kamionskog terminala
STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Orijentacija putniÄkog tramvaja
-STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Orijentacija tovarnog tramvaja
-STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Prvo moraš uništiti autobusnu stanicu
-STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Prvo moraš uništiti kamionski terminal
-STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Morate prvo maknuti putniÄku tramvajsku stanicu
-STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Morate prvo maknuti teretnu tramvajsku stanicu
-STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Stanic{P a e a}
+STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Orijentacija teretnog tramvaja
+STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Najprije moraš srušiti autobusnu stanicu
+STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Najprije moraš srušiti kamionski terminal
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Najprije moraÅ¡ sruÅ¡iti putniÄku tramvajsku stanicu
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Najprije moraš srušiti teretnu tramvajsku stanicu
+STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} stanic{P a e a}
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Ništa -
STR_304B_SITE_UNSUITABLE :{WHITE}...neprikladno mjesto
STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Preblizu drugom pristaništu
-STR_304D_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Prvo moraš srušiti pristanište
-STR_304E_SELECT_RAILROAD_STATION :{BLACK}Izaberi smjer željezniÄke stanice
-STR_304F_SELECT_NUMBER_OF_PLATFORMS :{BLACK}Izaberi broj perona na željezniÄkoj stanici
-STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Izaberi dužinu željezniÄke stanice
-STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Izaberi smjer autobusne stanice
-STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Izaberi smjer kamionskog terminala
-STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Odaberite smjer putniÄke tramvajske stanice
-STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Odaberite smjer teretne tramvajske stanice
+STR_304D_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Najprije moraš srušiti pristanište
+STR_304E_SELECT_RAILROAD_STATION :{BLACK}Odaberi smjer željezniÄke stanice
+STR_304F_SELECT_NUMBER_OF_PLATFORMS :{BLACK}Odaberi broj perona na željezniÄkoj stanici
+STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Odaberi dužinu željezniÄke stanice
+STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Odaberi smjer autobusne stanice
+STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Odaberi smjer kamionskog terminala
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Odaberi smjer putniÄke tramvajske stanice
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Odaberi smjer teretne tramvajske stanice
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Centriraj glavni pogled na lokaciju stanice
STR_3054_SHOW_STATION_RATINGS :{BLACK}Pokaži ocjene stanice
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Promijeni ime stanice
-STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO :{BLACK}Prikaži popis prihvaćenog tereta
-STR_3057_STATION_NAMES_CLICK_ON :{BLACK}Imena stanica - pritisni ime da bi centrirao glavni pogled na stanicu
-STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT :{BLACK}Izaberi veliÄinu/tip zraÄne luke
+STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO :{BLACK}Prikaži popis tereta koji se prihvaća
+STR_3057_STATION_NAMES_CLICK_ON :{BLACK}Imena stanica - klikni na ime kako bi centrirao glavni pogled na stanicu
+STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT :{BLACK}Odaberi veliÄinu/vrstu zraÄne luke
STR_305C_0 :{STATION} {STATIONFEATURES}
STR_STATION_SIGN_TINY :{TINYFONT}{STATION}
STR_305E_RAILROAD_STATION :ŽeljezniÄka stanica
@@ -1881,22 +1894,22 @@
STR_306A_BUOY_IN_THE_WAY :{WHITE}...plutaÄa na putu
STR_306C_STATION_TOO_SPREAD_OUT :{WHITE}...stanica previše proširena
STR_306D_NONUNIFORM_STATIONS_DISALLOWED :{WHITE}...neujednaÄene stanice onemogućene
-STR_USE_CTRL_TO_SELECT_MORE :{BLACK}Drži CTRL kako bi izabrao više od jednog itema
+STR_USE_CTRL_TO_SELECT_MORE :{BLACK}Drži CTRL kako bi odabrao više od jedne stavke
STR_UNDEFINED :(neodređen znakovni niz)
STR_STAT_CLASS_DFLT :Pretpostavljena stanica
STR_STAT_CLASS_WAYP :Čvorišta
##id 0x3800
-STR_3800_SHIP_DEPOT_ORIENTATION :{WHITE}Smjer brodskog spremišta
+STR_3800_SHIP_DEPOT_ORIENTATION :{WHITE}Smjer spremišta brodova
STR_3801_MUST_BE_BUILT_ON_WATER :{WHITE}...mora biti izgrađen na vodi
-STR_3802_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Ovdje ne možeš graditi brodsko spremište...
-STR_3803_SELECT_SHIP_DEPOT_ORIENTATION :{BLACK}Izaberi smjer brodskog spremišta
+STR_3802_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Ovdje nije moguće izgraditi spremište brodova...
+STR_3803_SELECT_SHIP_DEPOT_ORIENTATION :{BLACK}Odaberi smjer spremišta brodova
STR_3804_WATER :Voda
STR_3805_COAST_OR_RIVERBANK :Obala ili rijeÄni nasip
-STR_3806_SHIP_DEPOT :Brodsko spremište
-STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Ne možeš graditi na vodi
-STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Morate prvo maknuti kanal
+STR_3806_SHIP_DEPOT :Spremište brodova
+STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Nije moguće graditi na vodi
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Najprije moraš srušiti kanal
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Spremi igru
@@ -2003,11 +2016,11 @@
STR_5001_ROAD_VEHICLE_IN_TUNNEL :{WHITE}Cestovno vozilo u tunelu
STR_5003_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Smeta drugi tunel
STR_5005_UNABLE_TO_EXCAVATE_LAND :{WHITE}Ne moguće iskopoati zemlju na drugoj strani tunela
-STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Moraš prvo srušiti tunel
-STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Moraš prvo srušiti most
+STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Najprije moraš srušiti tunel
+STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Najprije moraš srušiti most
STR_5008_CANNOT_START_AND_END_ON :{WHITE}PoÄetak i kraj ne mogu biti na istom mjestu
STR_5009_LEVEL_LAND_OR_WATER_REQUIRED :{WHITE}Ispod mosta mora biti ravna zemlja ili voda
-STR_500A_START_AND_END_MUST_BE_IN :{WHITE}PoÄetak i kraj moraju biti u istoj liniji
+STR_500A_START_AND_END_MUST_BE_IN :{WHITE}PoÄetak i kraj moraju biti u ravnini
STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Neprikladan teren za ulaz u tunel
STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
STR_500E_SUSPENSION_STEEL :Viseći, ÄeliÄni
@@ -2018,8 +2031,8 @@
STR_5013_CONCRETE :Betonski
STR_5014_TUBULAR_STEEL :Cijevni, ÄeliÄni
STR_BRIDGE_TUBULAR_SILICON :Cjevni, silikonski
-STR_5015_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Ovdje se ne može graditi most...
-STR_5016_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Ovdje se ne može graditi tunel...
+STR_5015_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Ovdje nije moguće izgraditi most...
+STR_5016_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Ovdje nije moguće izgraditi tunel...
STR_5017_RAILROAD_TUNNEL :ŽeljezniÄki tunel
STR_5018_ROAD_TUNNEL :Cestovni tunel
STR_501B_STEEL_SUSPENSION_RAIL_BRIDGE :ÄŒeliÄni viseći željezniÄki most
@@ -2041,10 +2054,10 @@
STR_5800_OBJECT_IN_THE_WAY :{WHITE}Smeta objekt
STR_5801_TRANSMITTER :OdaÅ¡iljaÄ
STR_5802_LIGHTHOUSE :Svjetionik
-STR_5803_COMPANY_HEADQUARTERS :Sjedište tvrke
-STR_5804_COMPANY_HEADQUARTERS_IN :{WHITE}...smeta sjedište tvrke
-STR_5805_COMPANY_OWNED_LAND :Zemlja u posjedu tvrke
-STR_5806_CAN_T_PURCHASE_THIS_LAND :{WHITE}Ova zemlja ne može se kupiti...
+STR_5803_COMPANY_HEADQUARTERS :Sjedište tvrtke
+STR_5804_COMPANY_HEADQUARTERS_IN :{WHITE}...smeta sjedište tvrtke
+STR_5805_COMPANY_OWNED_LAND :Zemlja u posjedu tvrtke
+STR_5806_CAN_T_PURCHASE_THIS_LAND :{WHITE}Ovu zemlju nije moguće kupiti...
STR_5807_YOU_ALREADY_OWN_IT :{WHITE}...već je u tvom vlasništvu!
@@ -2118,11 +2131,11 @@
STR_680D_INTELLIGENCE_OF_COMPETITORS :{LTBLUE}Inteligencija natjecatelja: {ORANGE}{STRING}
STR_680E_VEHICLE_BREAKDOWNS :{LTBLUE}Kvarovi na vozilima: {ORANGE}{STRING}
STR_680F_SUBSIDY_MULTIPLIER :{LTBLUE}Subvencijski množitelj: {ORANGE}{STRING}
-STR_6810_COST_OF_CONSTRUCTION :{LTBLUE}Troškovi građenja: {ORANGE}{STRING}
+STR_6810_COST_OF_CONSTRUCTION :{LTBLUE}Troškovi izgradnje: {ORANGE}{STRING}
STR_6811_TERRAIN_TYPE :{LTBLUE}Vrsta terena: {ORANGE}{STRING}
STR_6812_QUANTITY_OF_SEA_LAKES :{LTBLUE}KoliÄina mora/jezera: {ORANGE}{STRING}
STR_6813_ECONOMY :{LTBLUE}Ekonomija: {ORANGE}{STRING}
-STR_6814_TRAIN_REVERSING :{LTBLUE}Promjena smjera vlakova: {ORANGE}{STRING}
+STR_6814_TRAIN_REVERSING :{LTBLUE}Promjena smjera vlaka: {ORANGE}{STRING}
STR_6815_DISASTERS :{LTBLUE}Prirodne katastrofe: {ORANGE}{STRING}
STR_16816_CITY_APPROVAL :{LTBLUE}Stav gradsko vijeća prema restrukturiranju podruÄja: {ORANGE}{STRING}
############ range for difficulty settings ends
@@ -2164,7 +2177,7 @@
STR_6835_AT_END_OF_LINE_ONLY :IskljuÄivo na kraju pruge
STR_6836_OFF :IskljuÄeno
STR_6837_ON :UkljuÄeno
-STR_6838_SHOW_HI_SCORE_CHART :{BLACK}Prikaz tablice najboljih rezultata
+STR_6838_SHOW_HI_SCORE_CHART :{BLACK}Pokaži tablice najboljih rezultata
STR_6839_PERMISSIVE :Dopustiv
STR_683A_TOLERANT :Tolerantan
STR_683B_HOSTILE :Agresivan
@@ -2181,12 +2194,12 @@
STR_7009_PRESIDENT_NAME :{BLACK}Ime direktora
STR_700A_COMPANY_NAME :Ime tvrtke
STR_700B_PRESIDENT_S_NAME :Ime direktora
-STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Ime tvrtke ne može se promijeniti...
-STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Ne možeš promijeniti ime direktora...
+STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Ime tvrtke nije moguće promijeniti...
+STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Nije moguće promijeniti ime direktora...
STR_700E_FINANCES :{WHITE}{COMPANY} Financije {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Izdatci/Prihodi
STR_7010 :{WHITE}{NUM}
-STR_7011_CONSTRUCTION :{GOLD}Građenje
+STR_7011_CONSTRUCTION :{GOLD}Izgradnja
STR_7012_NEW_VEHICLES :{GOLD}Nova vozila
STR_7013_TRAIN_RUNNING_COSTS :{GOLD}Troškovi uporabe vlakova
STR_7014_ROAD_VEH_RUNNING_COSTS :{GOLD}Troškovi uporabe cestovnih vozila
@@ -2203,7 +2216,7 @@
STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Ukupno:
STR_7021 :{COMPANY} {COMPANYNUM}
-STR_7022_INCOME_GRAPH :{WHITE}Graf prihoda
+STR_7022_INCOME_GRAPH :{WHITE}Grafikon prihoda
STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Grafikon operativne dobiti
@@ -2214,16 +2227,16 @@
STR_7029_BORROW :{BLACK}Pozajmi {SKIP}{SKIP}{CURRENCY}
STR_702A_REPAY :{BLACK}Otplati {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...najveći dopušteni zajam iznosi {CURRENCY}
-STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Ne možeš dobiti još kredita...
+STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Nije moguće posuditi još više novaca...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...nema zajma za otplatu
STR_702E_REQUIRED :{WHITE}...{CURRENCY} potrebno
-STR_702F_CAN_T_REPAY_LOAN :{WHITE}Ne možeš otplatiti zajam...
+STR_702F_CAN_T_REPAY_LOAN :{WHITE}Nije moguće otplatiti zajam...
STR_INSUFFICIENT_FUNDS :{WHITE}Ne možeš dati novac koji je pozajmljen od banke...
-STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT :{BLACK}Odaberi novo lice za direktora
-STR_7031_CHANGE_THE_COMPANY_VEHICLE :{BLACK}Promijeni izgled vozila tvrtke
+STR_7030_SELECT_NEW_FACE_FOR_PRESIDENT :{BLACK}Odaberi novo lice direktora
+STR_7031_CHANGE_THE_COMPANY_VEHICLE :{BLACK}Promijeni shemu boja za vozila tvrtke
STR_7032_CHANGE_THE_PRESIDENT_S :{BLACK}Promjeni ime direktora
STR_7033_CHANGE_THE_COMPANY_NAME :{BLACK}Promijeni ime tvrtke
-STR_7034_CLICK_ON_SELECTED_NEW_COLOR :{BLACK}Klikni na odabranu boju
+STR_7034_CLICK_ON_SELECTED_NEW_COLOR :{BLACK}Klikni na željenu boju
STR_7035_INCREASE_SIZE_OF_LOAN :{BLACK}Povećaj iznos zajma
STR_7036_REPAY_PART_OF_LOAN :{BLACK}Otplati dio zajma
STR_7037_PRESIDENT :{WHITE}{PLAYERNAME}{}{GOLD}(Direktor)
@@ -2234,19 +2247,19 @@
STR_AIRCRAFT :{WHITE}{COMMA} zrakoplov
STR_SHIPS :{WHITE}{COMMA} brod{P "" a ova}
STR_7042_NONE :{WHITE}Ništa
-STR_7043_FACE_SELECTION :{WHITE}Odabir lica
+STR_7043_FACE_SELECTION :{WHITE}Izbor lica
STR_7044_MALE :{BLACK}Muško
STR_7045_FEMALE :{BLACK}Žensko
STR_7046_NEW_FACE :{BLACK}Novo lice
-STR_7047_CANCEL_NEW_FACE_SELECTION :{BLACK}Odustani od odabira novog lica
-STR_7048_ACCEPT_NEW_FACE_SELECTION :{BLACK}Prihvati odabir novog lica
+STR_7047_CANCEL_NEW_FACE_SELECTION :{BLACK}Odustani od izbora novog lica
+STR_7048_ACCEPT_NEW_FACE_SELECTION :{BLACK}Prihvati izbor novog lica
STR_7049_SELECT_MALE_FACES :{BLACK}Odaberi muška lica
STR_704A_SELECT_FEMALE_FACES :{BLACK}Odaberi ženska lica
STR_704B_GENERATE_RANDOM_NEW_FACE :{BLACK}Generiraj nasumiÄno novo lice
STR_704C_KEY :{BLACK}KljuÄ
-STR_704D_SHOW_KEY_TO_GRAPHS :{BLACK}Prikaži kljuÄeve po grafovima
-STR_704E_KEY_TO_COMPANY_GRAPHS :{WHITE}KljuÄ za grafove tvrtke
-STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY :{BLACK}Klikni ovdje za ukljuÄivanje/iskljuÄivanje tvrke s grafa
+STR_704D_SHOW_KEY_TO_GRAPHS :{BLACK}Pokaži kljuÄeve na grafikonima
+STR_704E_KEY_TO_COMPANY_GRAPHS :{WHITE}KljuÄ za grafikone tvrtke
+STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY :{BLACK}Klikni ovdje za ukljuÄivanje/iskljuÄivanje tvrtke s grafikona
STR_7050_UNITS_OF_CARGO_DELIVERED :{WHITE}Dostavljenih jedinica tereta
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Ocjena uÄinka tvrtke (najveća ocjena = 1000)
STR_7052_COMPANY_VALUES :{WHITE}Vrijednost tvrtki
@@ -2256,18 +2269,18 @@
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Prijevozna tvrtka u nevoljama!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} će biti rasprodana ili objaviti bankrot ukoliko se uÄinak uskoro ne poboljÅ¡a!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Direktor)
-STR_7059_TRANSPORT_COMPANY_MERGER :{BLACK}{BIGFONT}Spajanje prijevoznih tvrki!
+STR_7059_TRANSPORT_COMPANY_MERGER :{BLACK}{BIGFONT}Spajanje prijevoznih tvrtki!
STR_705A_HAS_BEEN_SOLD_TO_FOR :{BLACK}{BIGFONT}{COMPANY} je prodana tvrtki {COMPANY} za {CURRENCY}!
-STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT :{WHITE}Tražimo prijevoznu tvrku koja bi preuzela našu tvrtku.{}{}Želiš li kupiti tvrtku{COMPANY} za {CURRENCY}?
+STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT :{WHITE}Tražimo prijevoznu tvrtku koja bi preuzela našu tvrtku.{}{}Želiš li kupiti tvrtku {COMPANY} za {CURRENCY}?
STR_705C_BANKRUPT :{BLACK}{BIGFONT}Bankrot!
STR_705D_HAS_BEEN_CLOSED_DOWN_BY :{BLACK}{BIGFONT}{COMPANY} je zatvorena od strane kreditora i sva je imovina rasprodana!
STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED :{BLACK}{BIGFONT}Osnovana je nova prijevozna tvrtka!
STR_705F_STARTS_CONSTRUCTION_NEAR :{BLACK}{BIGFONT}{COMPANY} zapoÄinje gradnju blizu grada {TOWN}!
-STR_7060_CAN_T_BUY_COMPANY :{WHITE}Ne možeš kupiti tvrtku...
+STR_7060_CAN_T_BUY_COMPANY :{WHITE}Nije moguće kupiti tvrtku...
STR_7061_CARGO_PAYMENT_RATES :{WHITE}Isplatne rate tereta
STR_7062_DAYS_IN_TRANSIT :{BLACK}{TINYFONT}Dana u tranzitu
STR_7063_PAYMENT_FOR_DELIVERING :{BLACK}{TINYFONT}Plaćanje za dostavu 10 jedinica (ili 10,000 litara) tereta za udaljenost od 20 kvadrata
-STR_7064_TOGGLE_GRAPH_FOR_CARGO :{BLACK}Aktiviraj/deaktiviraj graf za vrstu tereta
+STR_7064_TOGGLE_GRAPH_FOR_CARGO :{BLACK}UkljuÄi/iskljuÄi grafikon za vrstu tereta
STR_7065 :{BLACK}{TINYFONT}{STRING}
STR_7066_ENGINEER :Inženjer
STR_7067_TRAFFIC_MANAGER :Prijevozni upravitelj
@@ -2280,39 +2293,39 @@
STR_706E_TYCOON :Tajkun
STR_706F_BUILD_HQ :{BLACK}Izgradi sjedište tvrtke
STR_7070_BUILD_COMPANY_HEADQUARTERS :{BLACK}Izgradi središte tvrtke / pogledaj sjedište tvrtke
-STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Izgradi sjedište kompanije negdje dalje za 1% troška od vrijednosti kompanije
-STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Ne mogu izgraditi sjedište tvrke...
+STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Izgradi sjedište tvrtke negdje drugdje za 1% troška od cjelokupne vrijednosti tvrtke
+STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nije moguće izgraditi sjedište tvrtke...
STR_7072_VIEW_HQ :{BLACK}Pogledaj sjedište tvrtke
STR_RELOCATE_HQ :{BLACK}Premjesti sjedište kompanije
STR_COMPANY_PASSWORD :{BLACK}Zaporka
-STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Zaštiti svoju tvrku od neovlaštenog korištenje pomoću zaporke.
+STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Zaštiti svoju tvrtku od neovlaštenog korištenja pomoću zaporke.
STR_SET_COMPANY_PASSWORD :Postavi zaporku tvrtke
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Svjetska recesija!{}{}Financijski struÄnjaci oÄekuju najgore zbog ekonomske krize!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recesija zavrÅ¡ena!{}{}Obrat u trgovanu daje samopouzdanje gospodarstvu jer ekonomija jaÄa!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Namjesti veliku/malu veliÄinu prozora
STR_7076_COMPANY_VALUE :{GOLD}Vrijednost tvrtke: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Kupi 25% udjela u tvrtci
-STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Prodaj 25% udio u tvrtci
+STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Prodaj 25% udjela u tvrtci
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Kupi 25% udjela u ovoj tvrtci
STR_707A_SELL_25_SHARE_IN_THIS_COMPANY :{BLACK}Prodaj 25% udjela u ovoj tvrtci
-STR_707B_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Ne možeš kupiti 25% udjela u ovoj tvrtci...
-STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Ne možeš prodati 25% udjela u ovoj tvrtci...
+STR_707B_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Nije moguće kupiti 25% udjela u ovoj tvrtci...
+STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Nije moguće prodati 25% udjela u ovoj tvrtci...
STR_707D_OWNED_BY :{WHITE}({COMMA}% u vlasništvu {COMPANY})
STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA}% u vlasništvu {COMPANY}{} {COMMA}% u vlasništvu {COMPANY})
STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{COMPANY} je preuzeta od strane tvrtke {COMPANY}!
STR_7080_PROTECTED :{WHITE}Ova tvrka još nije dovoljno stara da bi trgovala udjelima...
STR_LIVERY_DEFAULT :Standardna boja
-STR_LIVERY_STEAM :Parna lokomotva
-STR_LIVERY_DIESEL :Dieselska lokomotiva
+STR_LIVERY_STEAM :Parna lokomotiva
+STR_LIVERY_DIESEL :Dizelska lokomotiva
STR_LIVERY_ELECTRIC :ElektriÄna lokomotiva
STR_LIVERY_MONORAIL :JednotraÄna lokomotiva
-STR_LIVERY_MAGLEV :Maglevska lokomotiva
+STR_LIVERY_MAGLEV :Maglev lokomotiva
STR_LIVERY_DMU :DMU
STR_LIVERY_EMU :EMU
-STR_LIVERY_PASSENGER_WAGON_STEAM :Lokomotiva s putnicima (Parna)
-STR_LIVERY_PASSENGER_WAGON_DIESEL :PutniÄka lokomotiva (dizelska)
-STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Lokomotiva s putnicima (ElektriÄna)
+STR_LIVERY_PASSENGER_WAGON_STEAM :PutniÄka kola (parna)
+STR_LIVERY_PASSENGER_WAGON_DIESEL :PutniÄka kola (dizelska)
+STR_LIVERY_PASSENGER_WAGON_ELECTRIC :PutniÄka kola (elektriÄna)
STR_LIVERY_FREIGHT_WAGON :Teretni vagon
STR_LIVERY_BUS :Autobus
STR_LIVERY_TRUCK :Kamion
@@ -2322,7 +2335,7 @@
STR_LIVERY_SMALL_PLANE :Mali zrakoplov
STR_LIVERY_LARGE_PLANE :Veliki zrakoplov
STR_LIVERY_PASSENGER_TRAM :PutniÄki tramvaj
-STR_LIVERY_FREIGHT_TRAM :Tovarni tramvaj
+STR_LIVERY_FREIGHT_TRAM :Teretni tramvaj
STR_LIVERY_GENERAL_TIP :{BLACK}Prikaži generalne sheme boja
STR_LIVERY_TRAIN_TIP :{BLACK}Prikaži sheme boja za vlak
@@ -2334,17 +2347,17 @@
STR_LIVERY_PANEL_TIP :{BLACK}Izaberi shemu boja za promjenu, ili višestruke sheme pomoću CTRL+klik. Klikni na kućicu kako bi odredio uporabu sheme
##id 0x8000
-STR_8000_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Para)
+STR_8000_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (parni)
STR_8001_MJS_250_DIESEL :MJS 250 (Diesel)
STR_8002_PLODDYPHUT_CHOO_CHOO :Ploddyphut Choo-Choo
STR_8003_POWERNAUT_CHOO_CHOO :Powernaut Choo-Choo
STR_8004_MIGHTYMOVER_CHOO_CHOO :Mightymover Choo-Choo
STR_8005_PLODDYPHUT_DIESEL :Ploddyphut Diesel
STR_8006_POWERNAUT_DIESEL :Powernaut Diesel
-STR_8007_WILLS_2_8_0_STEAM :Wills 2-8-0 (Para)
-STR_8008_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (Para)
-STR_8009_GINZU_A4_STEAM :Ginzu 'A4' (Para)
-STR_800A_SH_8P_STEAM :SH '8P' (Para)
+STR_8007_WILLS_2_8_0_STEAM :Wills 2-8-0 (parni)
+STR_8008_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (parni)
+STR_8009_GINZU_A4_STEAM :Ginzu 'A4' (parni)
+STR_800A_SH_8P_STEAM :SH '8P' (parni)
STR_800B_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (Diesel)
STR_800C_DASH_DIESEL :'Dash' (Diesel)
STR_800D_SH_HENDRY_25_DIESEL :SH/Hendry '25' (Diesel)
@@ -2526,18 +2539,18 @@
STR_80BD_MIGHTYMOVER_CANDY_TRUCK :MightyMover Kamona za slatkiše
STR_80BE_POWERNAUGHT_CANDY_TRUCK :Powernaught Kamion za slatkiše
STR_80BF_WIZZOWOW_CANDY_TRUCK :Wizzwow Kamion za slatkiše
-STR_80C0_MIGHTYMOVER_BATTERY_TRUCK :MightyMover Kamiona za baterije
-STR_80C1_POWERNAUGHT_BATTERY_TRUCK :Powernaught Kamion za baterije
-STR_80C2_WIZZOWOW_BATTERY_TRUCK :Wizzwwow Kamion za baterije
-STR_80C3_MIGHTYMOVER_FIZZY_DRINK :MightyMover Kamion za gazirana pića
-STR_80C4_POWERNAUGHT_FIZZY_DRINK :Powernaught Kamion za gazirana pića
-STR_80C5_WIZZOWOW_FIZZY_DRINK_TRUCK :Wizzwow Kamion za gazirana pića
-STR_80C6_MIGHTYMOVER_PLASTIC_TRUCK :MightyMover kamion s plastikom
-STR_80C7_POWERNAUGHT_PLASTIC_TRUCK :Powernaught kamion s plastikom
-STR_80C8_WIZZOWOW_PLASTIC_TRUCK :Wizzowow kamion s plastikom
-STR_80C9_MIGHTYMOVER_BUBBLE_TRUCK :MightyMover kamion s žvakaÄim gumama
-STR_80CA_POWERNAUGHT_BUBBLE_TRUCK :Powernaught kamion s žvakaÄim gumama
-STR_80CB_WIZZOWOW_BUBBLE_TRUCK :Wizzowow kamion s žvakaÄim gumama
+STR_80C0_MIGHTYMOVER_BATTERY_TRUCK :MightyMover kamion za baterije
+STR_80C1_POWERNAUGHT_BATTERY_TRUCK :Powernaught kamion za baterije
+STR_80C2_WIZZOWOW_BATTERY_TRUCK :Wizzwwow kamion za baterije
+STR_80C3_MIGHTYMOVER_FIZZY_DRINK :MightyMover kamion za gazirana pića
+STR_80C4_POWERNAUGHT_FIZZY_DRINK :Powernaught kamion za gazirana pića
+STR_80C5_WIZZOWOW_FIZZY_DRINK_TRUCK :Wizzwow kamion za gazirana pića
+STR_80C6_MIGHTYMOVER_PLASTIC_TRUCK :MightyMover PlastiÄni Kamion
+STR_80C7_POWERNAUGHT_PLASTIC_TRUCK :Powernaught PlastiÄni Kamion
+STR_80C8_WIZZOWOW_PLASTIC_TRUCK :Wizzwow PlastiÄni kamion
+STR_80C9_MIGHTYMOVER_BUBBLE_TRUCK :MightyMover kamion sa žvakaÄim gumama
+STR_80CA_POWERNAUGHT_BUBBLE_TRUCK :Powernaught kamion sa žvakaÄim gumama
+STR_80CB_WIZZOWOW_BUBBLE_TRUCK :Wizzowow kamion sa žvakaÄim gumama
STR_80CC_MPS_OIL_TANKER :MPS naftna cisterna
STR_80CD_CS_INC_OIL_TANKER :CS-Inc. naftna cisterna
STR_80CE_MPS_PASSENGER_FERRY :MPS putniÄki trajekt
@@ -2591,16 +2604,16 @@
STR_80FE_GURU_X2_HELICOPTER :Guru X2 Helicopter
STR_80FF_POWERNAUT_HELICOPTER :Powernaut Helicopter
STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE :{WHITE}Poruka od proizvoÄ‘aÄa vozila
-STR_8101_WE_HAVE_JUST_DESIGNED_A :{GOLD}Upravo smo dizajnirani novi {STRING} - jeste li zainteresirani za jednogodiÅ¡nje iskljuÄivo pravo uporabe ovog vozila, tako da vidimo kako se vozilo ponaÅ¡a prije nego Å¡to postane univerzalno dostupno?
+STR_8101_WE_HAVE_JUST_DESIGNED_A :{GOLD}Upravo smo dizajnirani novi {STRING} - jeste li zainteresirani za jednogodišnje ekskluzivno pravo uporabe ovog vozila, kako bi vidjeli kako se vozilo ponaša prije nego što postane univerzalno dostupno?
STR_8102_RAILROAD_LOCOMOTIVE :željezniÄka lokomotiva
STR_8103_ROAD_VEHICLE :cestovno vozilo
STR_8104_AIRCRAFT :zrakoplov
STR_8105_SHIP :brod
-STR_8106_MONORAIL_LOCOMOTIVE :monorail lokomotiva
+STR_8106_MONORAIL_LOCOMOTIVE :jednotraÄna željezniÄka lokomotiva
STR_8107_MAGLEV_LOCOMOTIVE :maglev lokomotiva
##id 0x8800
-STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Spremište vlakova
+STR_8800_TRAIN_DEPOT :{WHITE}Spremište vlakova grada {TOWN}
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Građani slave . . .{}Prvi vlak je stigao na {STATION}!
STR_8802_DETAILS :{WHITE}{VEHICLE} (Detalji)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Vlak na putu
@@ -2612,16 +2625,16 @@
STR_8809_GO_TO_TRANSFER_UNLOAD :Go to {STATION} (Transferiraj i otiđi prazan)
STR_880A_GO_TO_LOAD :Idi do{STATION} (Utovar)
STR_880B_GO_TO_TRANSFER_LOAD :Idi do {STATION} (Transferiraj i priÄekaj puni utovar)
-STR_880C_GO_NON_STOP_TO :Idi non-stop do {STATION}
-STR_880D_GO_TO_NON_STOP_TRANSFER :Idi non-stop do {STATION} (Transferiraj i preuzmi teret)
-STR_880E_GO_NON_STOP_TO_UNLOAD :Idi non-stop do {STATION} (Istovar)
-STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Idi non-stop do {STATION} (Transferiraj i otiđi prazan)
-STR_8810_GO_NON_STOP_TO_LOAD :Idi non-stop do{STATION} (Utovar)
-STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Idi non-stop do {STATION} (Transferiraj i priÄekaj puni utovar)
-STR_GO_TO_TRAIN_DEPOT :Idi do {TOWN} spremište vlakova
-STR_SERVICE_AT_TRAIN_DEPOT :Servisiraj u {TOWN} spremištu vlakova
-STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Idi non-stop do {TOWN} spremišta vlakova
-STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Servisiraj non-stop u {TOWN} ŽeljezniÄkom SkladiÅ¡tu
+STR_880C_GO_NON_STOP_TO :Idi neprekidno do {STATION}
+STR_880D_GO_TO_NON_STOP_TRANSFER :Idi neprekidno do {STATION} (Transferiraj i preuzmi teret)
+STR_880E_GO_NON_STOP_TO_UNLOAD :Idi neprekidno do {STATION} (Istovar)
+STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Idi neprekidno do {STATION} (Transferiraj i otiđi prazan)
+STR_8810_GO_NON_STOP_TO_LOAD :Idi neprekidno do {STATION} (Utovar)
+STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Idi neprekidno do {STATION} (Transferiraj i priÄekaj puni utovar)
+STR_GO_TO_TRAIN_DEPOT :Idi u spremište vlakova grada {TOWN}
+STR_SERVICE_AT_TRAIN_DEPOT :Servisiranje u spremištu vlakova grada {TOWN}
+STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Idi neprekidno do spremišta vlakova grada {TOWN}
+STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Servisiraj neprekidno u spremištu vlakova grada {TOWN}
STR_TIMETABLE_GO_TO :{STRING} {STRING}
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Putovanje (bez rasporeda)
@@ -2630,10 +2643,10 @@
STR_TIMETABLE_DAYS :{COMMA} dan{P "" a a}
STR_TIMETABLE_TICKS :{COMMA} tik{P "" a ova}
-STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE} Krećem za {TOWN} ŽeljezniÄko SkladiÅ¡te
-STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE} Krećem za {TOWN} ŽeljezniÄko SkladiÅ¡te, {VELOCITY}
-STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Servis u {TOWN} ŽeljezniÄkom SkladiÅ¡tu
-STR_HEADING_FOR_TRAIN_DEPOT_SERVICE_VEL :{LTBLUE}Servis kod {TOWN} spremište vlakova, {VELOCITY}
+STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Kreće se prema spremištu vlakova grada {TOWN}
+STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Kreće se prema spremištu vlakova grada {TOWN}, {VELOCITY}
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Servisiranje u spremištu vlakova grada {TOWN}
+STR_HEADING_FOR_TRAIN_DEPOT_SERVICE_VEL :{LTBLUE}Servisiranje u spremištu vlakova grada {TOWN}, {VELOCITY}
STR_INVALID_ORDER :{RED} (Neispravna naredba)
@@ -2644,32 +2657,32 @@
STR_8814_TRAIN_IS_WAITING_IN_DEPOT :{WHITE}Vlak {COMMA} Äeka u spremiÅ¡tu
STR_8815_NEW_VEHICLES :{BLACK}Nova vozila
STR_8816 :{BLACK}-
-STR_8819_TRAIN_TOO_LONG :{WHITE}Vlak predugaÄak
+STR_8819_TRAIN_TOO_LONG :{WHITE}PredugaÄak vlak
STR_881A_TRAINS_CAN_ONLY_BE_ALTERED :{WHITE}Vlakovi mogu biti izmjenjeni jedino kad su zaustavljeni u spremištu
-STR_881B_TRAINS :{WHITE}{COMPANY} - {COMMA} Vlak{P "" a ova}
+STR_881B_TRAINS :{WHITE}{COMPANY} - {COMMA} vlak{P "" a ova}
STR_881C_NEW_RAIL_VEHICLES :{WHITE}Nova željezniÄka vozila
-STR_NEW_ELRAIL_VEHICLES :{WHITE}Nova vozila elektriÄne pruge
-STR_881D_NEW_MONORAIL_VEHICLES :{WHITE}Nova monorail vozila
+STR_NEW_ELRAIL_VEHICLES :{WHITE}Nova elektriÄna pružna vozila
+STR_881D_NEW_MONORAIL_VEHICLES :{WHITE}Nova jednotraÄna željezniÄka vozila
STR_881E_NEW_MAGLEV_VEHICLES :{WHITE}Nova maglev vozila
-STR_ALL_AVAIL_RAIL_VEHICLES :{WHITE}ŽeljezniÄka vozila
+STR_ALL_AVAIL_RAIL_VEHICLES :{WHITE}Pružna vozila
STR_881F_BUILD_VEHICLE :{BLACK}Izgradi vozilo
STR_CLONE_ROAD_VEHICLE :{BLACK}Kloniraj vozilo
STR_CLONE_ROAD_VEHICLE_INFO :{BLACK}Ovo će izgraditi kopiju cestovnog vozila. Control-clik će dijeliti naredbe
-STR_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Ovo će napraviti kopiju cestovnog vozila. Kliknite na ovu tipku i onda na cestovno vozilo unutar ili izvan skladišta. CTRL-klik će podijeliti naredbe
+STR_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Ovo će napraviti kopiju cestovnog vozila. Klikni na ovaj gumb i onda na cestovno vozilo unutar ili izvan spremišta. CTRL+klik će dijeliti naredbe
STR_CLONE_TRAIN :{BLACK}Kloniraj vlak
STR_CLONE_TRAIN_INFO :{BLACK}Ovo će izgraditi kopiju vlaka ukljuÄujući sve vagone. Control-klik će dijeliti naredbe
-STR_CLONE_TRAIN_DEPOT_INFO :{BLACK}Ovo će napraviti kopiju vlaka ukljuÄujući vagone. Kliknite na ovu tipku i onda na vlak unutar ili izvan skladiÅ¡ta. CTRL-klik će podijeliti naredbe
+STR_CLONE_TRAIN_DEPOT_INFO :{BLACK}Ovo će napraviti kopiju vlaka ukljuÄujući sve vagone. Kliknite na ovaj gumb i onda na vlak unutar ili izvan spremiÅ¡ta. CTRL-klik će dijeliti naredbe
STR_8820_RENAME :{BLACK}Preimenuj
STR_8823_SKIP :{BLACK}PreskoÄi
STR_8824_DELETE :{BLACK}Obriši
-STR_8825_NON_STOP :{BLACK}Non-stop
+STR_8825_NON_STOP :{BLACK}Neprekidno
STR_8826_GO_TO :{BLACK}Idi do
STR_8827_FULL_LOAD :{BLACK}Puni utovar
STR_8828_UNLOAD :{BLACK}Istovar
STR_REFIT :{BLACK}Prenamijeni
-STR_REFIT_TIP :{BLACK}Odaberi tip tereta za prenamijeniti u ovoj narudžbi. CTRL-klik za brisanje uputa za prenamijenu
+STR_REFIT_TIP :{BLACK}Odaberi vrstu tereta za prenamijenu u ovoj naredbi. CTRL+klik kako bi uklonio naputak za prenamjenu
STR_REFIT_ORDER :(Prenamijeni u {STRING})
STR_TIMETABLE_VIEW :{BLACK} Raspored
STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Prebacivanje na pogled rasporeda
@@ -2677,53 +2690,53 @@
STR_882A_END_OF_ORDERS :{SETX 10}- - Kraj naredbi - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Servis
-STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Ne mogu izgraditi željezniÄko vozilo...
+STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Nije moguće izgraditi željezniÄko vozilo...
STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Izgrađen: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Utovar / Istovar
-STR_TRAIN_MUST_BE_STOPPED :{WHITE}Vlak mora biti zaustavljan unutar skladišta
-STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Ne mogu poslati vlak u spremište...
+STR_TRAIN_MUST_BE_STOPPED :{WHITE}Vlak mora biti zaustavljen unutar spremišta
+STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Nije moguće poslati vlak u spremište...
STR_8831_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Nema mjesta za nove naredbe
STR_8832_TOO_MANY_ORDERS :{WHITE}Previše naredbi
-STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Ne možeš ubaciti novu naredbu...
-STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Ne možeš obrisati ovu naredbu...
-STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Ne možeš izmjeniti ovu naredbu...
-STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Ne mogu pomaknuti ovu naredbu...
-STR_CAN_T_SKIP_ORDER :{WHITE}Ne mohu preskoÄiti trenutaÄnu naredbu...
-STR_CAN_T_SKIP_TO_ORDER :{WHITE}Nwe mogu skoÄiti na odabranu naredbu...
-STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Ne možeš pomaknuti vozilo...
+STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Nije moguće ubaciti novu naredbu...
+STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Nije moguće obrisati ovu naredbu...
+STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Nije moguće izmijeniti ovu naredbu...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Nije moguće pomaknuti ovu naredbu...
+STR_CAN_T_SKIP_ORDER :{WHITE}Neije moguće preskoÄiti trenutnu naredbu...
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}Nije moguće skoÄiti na odabranu naredbu...
+STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Nije moguće ukloniti vozilo...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}Stražnja lokomotiva će uvijek pratiti svog prednjeg dvojnika
STR_8838_N_A :N/A{SKIP}
-STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Ne možeÅ¡ prodati željezniÄko vozilo
+STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Nije moguće prodati željezniÄko vozilo
STR_883A_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Ne može pronaći put do lokalnog spremišta
-STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Ne možeš zaustaviti/pokrenuti vlak...
+STR_883B_CAN_T_STOP_START_TRAIN :{WHITE}Nije moguće zaustaviti/pokrenuti vlak...
STR_883C_SERVICING_INTERVAL_DAYS :{BLACK}Servisni interval: {LTBLUE}{COMMA}dana{BLACK} Zadnji servis: {LTBLUE}{DATE_LONG}
STR_SERVICING_INTERVAL_PERCENT :{BLACK}Servisni interval: {LTBLUE}{COMMA}%{BLACK} Zadnji servis: {LTBLUE}{DATE_LONG}
STR_883D_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Vlakovi - klikni na vlak za informacije
STR_883E_BUILD_NEW_TRAINS_REQUIRES :{BLACK}Izgradi/kupi nove vlakove (zahtijeva spremište vlakova)
STR_883F_TRAINS_CLICK_ON_TRAIN_FOR :{BLACK}Vlakovi - klikni na vlak za informacije., vuci vozilo kako bi dodao/oduzeo od vlaka
STR_8840_BUILD_NEW_TRAIN_VEHICLE :{BLACK}Izgradi novi vlak
-STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE :{BLACK}Povuci vlak ovdje za prodaju
-STR_8842_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Centriraj glavni pogled na lokaciju željezniÄkog skladiÅ¡ta
-STR_8843_TRAIN_VEHICLE_SELECTION :{BLACK}Lista za odabiranje vlakova - klikni na vlak za informacije
+STR_8841_DRAG_TRAIN_VEHICLE_TO_HERE :{BLACK}Ovdje povuci vlak kako bi ga prodao
+STR_8842_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Centriraj glavni pogled na lokaciju željezniÄkog spremiÅ¡ta
+STR_8843_TRAIN_VEHICLE_SELECTION :{BLACK}Popis izabranih vlakova - klikni na vlak za informacije
STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN :{BLACK}Izgradi oznaÄeni vlak
-STR_8845_RENAME_TRAIN_VEHICLE_TYPE :{BLACK}Preimenuj tip vlaka
-STR_8846_CURRENT_TRAIN_ACTION_CLICK :{BLACK}Akcije trenutnog vlaka - klikni za zaustavljanje/pokretanje vlaka
+STR_8845_RENAME_TRAIN_VEHICLE_TYPE :{BLACK}Preimenuj vrstu vagona
+STR_8846_CURRENT_TRAIN_ACTION_CLICK :{BLACK}Trenutna radnja vlaka - klikni ovdje kako bi zaustavio/pokrenuo vlak
STR_8847_SHOW_TRAIN_S_ORDERS :{BLACK}Pokaži naredbe vlaka
STR_8848_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Centriraj glavni pogled na lokaciju vlaka
-STR_8849_SEND_TRAIN_TO_DEPOT :{BLACK}Pošalji vlak u skladište. CTRL+klik će ga samo servisirati
-STR_884A_FORCE_TRAIN_TO_PROCEED :{BLACK}Natjeraj vlak da nastavi bez Äekanja za odobrenjem signala
+STR_8849_SEND_TRAIN_TO_DEPOT :{BLACK}Pošalji vlak u spremište. CTRL+klik će samo servisirati
+STR_884A_FORCE_TRAIN_TO_PROCEED :{BLACK}Natjeraj vlak da nastavi bez Äekanja signala odobrenja
STR_884B_REVERSE_DIRECTION_OF_TRAIN :{BLACK}Okreni smjer vlaka
-STR_884C_SHOW_TRAIN_DETAILS :{BLACK}Prikaži detalje vlaka
+STR_884C_SHOW_TRAIN_DETAILS :{BLACK}Pokaži detalje vlaka
STR_884D_INCREASE_SERVICING_INTERVAL :{BLACK}Povećaj servisni interval
STR_884E_DECREASE_SERVICING_INTERVAL :{BLACK}Smanji servisni interval
-STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Pokaži detalje prevoženog tereta
+STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED :{BLACK}Pokaži detalje tereta koji se prevozi
STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES :{BLACK}Pokaži detalje vagona
-STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Pokaži kapacitet svakog vagona
-STR_8852_SHOW_TOTAL_CARGO :{BLACK}Pokaži potpuni kapacitet vlaka, podijeljen prema tipu tereta
-STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Lista naredbi - klikni na naredbu da ju oznaÄiÅ¡. CTRL + klik klizi na stanicu
-STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}PreskoÄi trenutnu naredbu, i pokreni slijedeću. CTRL + klik preskaÄe na odabranu naredbu
+STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Pokaži nosivosti svakog vagona
+STR_8852_SHOW_TOTAL_CARGO :{BLACK}Pokaži ukupnu nosivost vlaka podijeljenu prema vrsti tereta
+STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Popis naredbi - klikni na naredbu kako bi ju oznaÄio. CTRL + klik klizi na stanicu
+STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}PreskoÄi trenutnu naredbu i pokreni slijedeću. CTRL + klik preskaÄe na odabranu naredbu
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}ObriÅ¡i oznaÄenu naredbu
STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Napravi oznaÄenu naredbu da bude non-stop
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Umetni novu naredbu prije odabrane naredbe, ili dodaj na kraj liste
@@ -2742,126 +2755,126 @@
STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Dobit ove godine: {LTBLUE}{CURRENCY} (prošle godine: {CURRENCY})
STR_8860_RELIABILITY_BREAKDOWNS :{BLACK}Pouzdanost: {LTBLUE}{COMMA}% {BLACK}Kvarova od zadnjeg servisa: {LTBLUE}{COMMA}
STR_8861_STOPPED :{RED}Zaustavljen
-STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Ne mogu natjerati vlak da ignorira znakove dok je opasnost...
+STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nije moguće natjerati vlak da ignorira signale dok traje opasnost...
STR_8863_CRASHED :{RED}Slupan!
STR_8865_NAME_TRAIN :{WHITE}Imenuj vlak
-STR_8866_CAN_T_NAME_TRAIN :{WHITE}Ne mogu imenovati vlak...
+STR_8866_CAN_T_NAME_TRAIN :{WHITE}Nije moguće imenovati vlak...
STR_8867_NAME_TRAIN :{BLACK}Imenuj vlak
-STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Vlak se sudario!{}{COMMA} poginulih u eksploziji nakon sudara
-STR_8869_CAN_T_REVERSE_DIRECTION :{WHITE}Ne mogu promijeniti smjer vlaka...
-STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Preimenuj vrstu vlaka
-STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Ne mogu preimenovati tip vagona...
-STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Naprvi da oznaÄeni red prisili vozilo da izbaci teret
+STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Vlak se sudario!{}{COMMA} poginu{P o la lih} u eksploziji nakon sudara
+STR_8869_CAN_T_REVERSE_DIRECTION :{WHITE}Nije moguće promijeniti smjer vlaka...
+STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Preimenuj vrstu vagona
+STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Nije moguće preimenovati vrstu vagona...
+STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Napravi da oznaÄena naredba prisili vozilo da izbaci teret
STR_886F_TRANSFER :{BLACK}Transfer
STR_CLEAR_TIME :{BLACK}Obriši vrijeme
STR_RESET_LATENESS :{BLACK}PoniÅ¡ti BrojaÄ KaÅ¡njenja
STR_TRAIN_STOPPING :{RED}Zaustavljam
STR_TRAIN_STOPPING_VEL :{RED}Zaustavljam, {VELOCITY}
-STR_INCOMPATIBLE_RAIL_TYPES :Nekompatibilan tip traÄnica
+STR_INCOMPATIBLE_RAIL_TYPES :Nekompatibilna vrsta traÄnica
STR_TRAIN_NO_POWER :{RED}Nema struje
-STR_TRAIN_START_NO_CATENARY :Ovim traÄnicama nedostaje vuÄna užad, tako da vlak ne može krenuti
+STR_TRAIN_START_NO_CATENARY :Ovoj pruzi nedostaje vuÄna užad, stoga vlak ne može krenuti
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Novi {STRING} je sada dostupan!
STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novi {STRING} je sada dostupan! - {ENGINE}
-STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Ne mogu rasporediti vozilo...
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Nije moguće rasporediti vozilo...
STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vozila mogu Äekati samo na stanicama.
STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Ovo vozilo se ne zaustavlja na ovoj stanici.
STR_TIMETABLE_CHANGE_TIME :{BLACK}Promijeni Vrijeme
STR_TIMETABLE_STATUS_ON_TIME :Ovo vozilo vozi na vrijeme
STR_TIMETABLE_STATUS_LATE :Ovo vozilo trenutaÄno {STRING} kasni
STR_TIMETABLE_STATUS_EARLY :Ovo vozilo je stiglo {STRING} ranije
-STR_TIMETABLE_TOTAL_TIME :Ovaj raspored će trebati {STRING} za završetak
-STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :OVaj raspored će trebati najmanje {STRING} za završetak (nije sve raspoređeno)
+STR_TIMETABLE_TOTAL_TIME :Ovaj raspored trebat će {STRING} za završetak
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Ovaj raspored trebat će najmanje {STRING} za završetak (nije sve raspoređeno)
STR_TIMETABLE_AUTOFILL :{BLACK}Automatsko punjenje
STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Napuni raspored automatski sa vrijednostima iz prvog puta
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Cestovno vozilo na putu
-STR_9001_ROAD_VEHICLES :{WHITE}{COMPANY} - {COMMA} Cestovno vozilo{P "" a a}
+STR_9001_ROAD_VEHICLES :{WHITE}{COMPANY} - {COMMA} cestovn{P o a ih} vozil{P o a a}
STR_9002 :{WHITE}{VEHICLE}
-STR_9003_ROAD_VEHICLE_DEPOT :{WHITE}{TOWN} Spremište cestovnih vozila
+STR_9003_ROAD_VEHICLE_DEPOT :{WHITE}Spremište cestovnih vozila grada {TOWN}
STR_9004_NEW_VEHICLES :{BLACK}Nova vozila
STR_9006_NEW_ROAD_VEHICLES :{WHITE}Nova cestovna vozila
STR_9007_BUILD_VEHICLE :{BLACK}Izgradi vozilo
-STR_9009_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Ne mogu izgraditi cestovno vozilo...
+STR_9009_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Nije moguće izgraditi cestovno vozilo...
STR_900C_DETAILS :{WHITE}{VEHICLE} (Detalji)
STR_900D_AGE_RUNNING_COST_YR :{BLACK}Starost: {LTBLUE}{STRING}{BLACK} Trošak uporabe {LTBLUE}{CURRENCY}/god
STR_900E_MAX_SPEED :{BLACK}Maks brzina: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Dobit ove godine: {LTBLUE}{CURRENCY} (prošle godine: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Pouzdanost: {LTBLUE}{COMMA}% {BLACK}Kvarovi od posljednjeg servisa: {LTBLUE}{COMMA}
STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Izgrađen: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
-STR_9012_CAPACITY :{BLACK}Kapacitet: {LTBLUE}{CARGO}
+STR_9012_CAPACITY :{BLACK}Nosivost: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...mora biti zaustavljen unutar spremišta cestovnih vozila
-STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Ne mogu prodati cestovno vozilo...
-STR_9015_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Ne mogu zaustaviti/pokrenuti cestovno vozilo...
+STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Nije moguće prodati cestovno vozilo...
+STR_9015_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Nije moguće zaustaviti/pokrenuti cestovno vozilo...
STR_9016_ROAD_VEHICLE_IS_WAITING :{WHITE}Cestovno vozilo {COMMA} Äeka u spremiÅ¡tu
-STR_HEADING_FOR_ROAD_DEPOT :{ORANGE}Kreće se prema {TOWN} cestovnom spremištu
-STR_HEADING_FOR_ROAD_DEPOT_VEL :{ORANGE}Kreće se prema {TOWN} cestovnom spremištu, {VELOCITY}
-STR_HEADING_FOR_ROAD_DEPOT_SERVICE :{LTBLUE}Servisiranje u {TOWN} cestovnom spremištu
-STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL :{LTBLUE}Seervisiranje u {TOWN} cestovnom spremištu, {VELOCITY}
-STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT :{WHITE}Ne mogu poslati vozilo u spremište...
+STR_HEADING_FOR_ROAD_DEPOT :{ORANGE}Kreće se prema cestovnom spremištu grada {TOWN}
+STR_HEADING_FOR_ROAD_DEPOT_VEL :{ORANGE}Kreće se prema cestovnom spremištu grada {TOWN}, {VELOCITY}
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE :{LTBLUE}Servisiranje u cestovnom spremištu grada {TOWN}
+STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL :{LTBLUE}Servisiranje u cestovnom spremištu grada {TOWN}, {VELOCITY}
+STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT :{WHITE}Nije moguće poslati vozilo u spremište...
STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Ne mogu pronaći lokalno spremište
STR_901A_ROAD_VEHICLES_CLICK_ON :{BLACK}Cestovna vozila - klikni na vozilo za informacije
STR_901B_BUILD_NEW_ROAD_VEHICLES :{BLACK}Izgradi nova cestovna vozila (zahtijeva spremište cestovnih vozila)
STR_901C_CURRENT_VEHICLE_ACTION :{BLACK}Trenutna radnja vozila - klikni ovdje kako bi zaustavio/pokrenuo vozilo
-STR_901D_SHOW_VEHICLE_S_ORDERS :{BLACK}Prikaži naredbe vozila
+STR_901D_SHOW_VEHICLE_S_ORDERS :{BLACK}Pokaži naredbe vozila
STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE :{BLACK}Centriraj glavni pogled na lokaciju vozila
STR_901F_SEND_VEHICLE_TO_DEPOT :{BLACK}Pošalji vozilo u spremište. CTRL+klik će samo servisirati
STR_9020_FORCE_VEHICLE_TO_TURN_AROUND :{BLACK}Natjeraj vozila da se okrene natrag
-STR_9021_SHOW_ROAD_VEHICLE_DETAILS :{BLACK}Prikaži detalje cestovnog vozila
+STR_9021_SHOW_ROAD_VEHICLE_DETAILS :{BLACK}Pokaži detalje cestovnog vozila
STR_9022_VEHICLES_CLICK_ON_VEHICLE :{BLACK}Vozila - klikni na vozilo za informaciju
STR_9023_BUILD_NEW_ROAD_VEHICLE :{BLACK}Izgradi novo cestovno vozilo
STR_9024_DRAG_ROAD_VEHICLE_TO_HERE :{BLACK}Povuci cestovno vozilo ovdje kako bi ga prodao
STR_9025_CENTER_MAIN_VIEW_ON_ROAD :{BLACK}Centriraj glavni pogled na lokaciju spremišta cestovnih vozila
-STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Popis cestovnih vozila - pritisni na vozilo za informacije
+STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Popis izabranih cestovnih vozila - klikni na vozilo za informacije
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Izgradi oznaÄeno cestovno vozilo
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Trošak: {CURRENCY}{}Brzina: {VELOCITY}{}Trošak uporabe: {CURRENCY}/god{}Kapacitet: {CARGO}
-STR_ARTICULATED_RV_CAPACITY :{BLACK}Kapacitet: {LTBLUE}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Nosivost: {LTBLUE}
STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Imenuj cestovno vozilo
-STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Ne mogu imenovati cestovno vozilo...
+STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Nije moguće imenovati cestovno vozilo...
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Imenuj cestovno vozilo
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Građani slave . . .{}Prvi bus je stigao na {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Građani slave . . .{}Prvi kamion je stigao na {STATION}!
STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}GraÄ‘ani slave . . .{}Prvi putniÄki tramvaj je stigao na {STATION}!
-STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Građani slave . . .{}Prvi teretni tramvaj je stigao u {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Građani slave . . .{}Prvi teretni tramvaj je stigao na {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Sudar cestovnog vozila!{}VozaÄ poginuo u eksploziji nakon sudara s vlakom
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Sudar cestovnog vozila!{}{COMMA} poginulih u eksploziji nakon sudara s vlakom
-STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Ne mogu natjerati vozilo da se okrene...
+STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Nije moguće natjerati vozilo da se okrene...
STR_ONLY_TURN_SINGLE_UNIT :{WHITE}Ne mogu okreniti vozila koja se sastoje od više jedinica
STR_9034_RENAME :{BLACK}Preimenuj
STR_9035_RENAME_ROAD_VEHICLE_TYPE :{BLACK}Preimenuj vrstu cestovnog vozila
STR_9036_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Preimenuj vrstu cestovnog vozila
-STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Ne mogu preimenovati vrstu cestovnog vozila...
-STR_9038_GO_TO_ROADVEH_DEPOT :Idi prema spremištu cestovnih vozila {TOWN}
-STR_SERVICE_AT_ROADVEH_DEPOT :Servisiranje pri {TOWN} spremištu cestovnih vozila
+STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Nije moguće preimenovati vrstu cestovnog vozila...
+STR_9038_GO_TO_ROADVEH_DEPOT :Idi prema spremištu cestovnih vozila grada {TOWN}
+STR_SERVICE_AT_ROADVEH_DEPOT :Servisiranje u spremištu cestovnih vozila grada {TOWN}
-STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Prenamijeni cestovno vozilo za prijevoz druge vrste tereta
+STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Prenamijeni cestovno vozilo za prijevoz neke druge vrste tereta
STR_REFIT_ROAD_VEHICLE :{BLACK}Prenamijeni cestovno vozilo
-STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED :{BLACK}Prenamijeni cestovno vozilo za prijevoz druge vrste tereta
-STR_REFIT_ROAD_VEHICLE_CAN_T :{WHITE}Ne mogu prenamijeniti cestovno vozilo...
-STR_ROAD_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Izaberi vrstu tereta koje će cestovno vozilo prevoziti
+STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED :{BLACK}Prenamijeni cestovno vozilo za prijevoz oznaÄene vrste tereta
+STR_REFIT_ROAD_VEHICLE_CAN_T :{WHITE}Nije moguće prenamijeniti cestovno vozilo...
+STR_ROAD_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Odaberi vrstu tereta koje će cestovno vozilo prevoziti
##id 0x9800
STR_9800_DOCK_CONSTRUCTION :Izgradnja pristaništa
STR_9801_DOCK_CONSTRUCTION :{WHITE}Izgradnja pristaništa
-STR_9802_CAN_T_BUILD_DOCK_HERE :{WHITE}Ovdje ne mogu izgraditi pristanište...
-STR_9803_SHIP_DEPOT :{WHITE}{TOWN} Spremište brodova
+STR_9802_CAN_T_BUILD_DOCK_HERE :{WHITE}Ovdje nije moguće izgraditi pristanište...
+STR_9803_SHIP_DEPOT :{WHITE} Spremište brodova grada {TOWN}
STR_9804_NEW_SHIPS :{BLACK}Novi brodovi
-STR_9805_SHIPS :{WHITE}{COMPANY} - {COMMA} Brod{P "" a ova}
+STR_9805_SHIPS :{WHITE}{COMPANY} - {COMMA} brod{P "" a ova}
STR_9808_NEW_SHIPS :{WHITE}Novi brodovi
STR_9809_BUILD_SHIP :{BLACK}Izgradi brod
STR_CLONE_SHIP :{BLACK}Kloniraj brod
STR_CLONE_SHIP_INFO :{BLACK}Ovo će izgradi kopiju broda. Control-klik će dijeliti naredbe
-STR_CLONE_SHIP_DEPOT_INFO :{BLACK}Ovo će napraviti kopiju broda. Kliknite na ovu tipku i onda na brod unutar ili izvan skladišta. CTRL-klik će podijeliti naredbe
+STR_CLONE_SHIP_DEPOT_INFO :{BLACK}Ovo će napraviti kopiju broda. Klikni na ovaj gumb i onda na brod unutar ili izvan spremišta. CTRL+klik će dijeliti naredbe
STR_980B_SHIP_MUST_BE_STOPPED_IN :{WHITE}Brod mora biti zaustavljen u spremištu
-STR_980C_CAN_T_SELL_SHIP :{WHITE}Ne mogu prodati brod...
-STR_980D_CAN_T_BUILD_SHIP :{WHITE}Ne mogu izgraditi brod...
+STR_980C_CAN_T_SELL_SHIP :{WHITE}Nije moguće prodati brod...
+STR_980D_CAN_T_BUILD_SHIP :{WHITE}Nije moguće izgraditi brod...
STR_980E_SHIP_IN_THE_WAY :{WHITE}Smeta brod
STR_980F :{WHITE}{VEHICLE}
STR_9811_DETAILS :{WHITE}{VEHICLE} (Detalji)
@@ -2870,66 +2883,66 @@
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Dobit ove godine: {LTBLUE}{CURRENCY} (prošle godine: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Pouzdanost: {LTBLUE}{COMMA}% {BLACK}Kvarova od posljednjeg servisa: {LTBLUE}{COMMA}
STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Izgrađeno: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
-STR_9817_CAPACITY :{BLACK}Zapremnina: {LTBLUE}{CARGO}
-STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Ne mogu pokrenuti/zaustaviti brod...
-STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Ne mogu poslati brod u skladište...
-STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Ne mogu naći lokalno spremište
-STR_HEADING_FOR_SHIP_DEPOT :{ORANGE}Kreće se prema {TOWN} spremištu brodova
-STR_HEADING_FOR_SHIP_DEPOT_VEL :{ORANGE}Kreće se prema {TOWN} spremištu brodova, {VELOCITY}
-STR_HEADING_FOR_SHIP_DEPOT_SERVICE :{LTBLUE}Servisiranje u {TOWN} spremištu brodova
-STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL :{LTBLUE}Servisiranje u {TOWN} spremištu brodova, {VELOCITY}
+STR_9817_CAPACITY :{BLACK}Nosivost: {LTBLUE}{CARGO}
+STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Nije moguće pokrenuti/zaustaviti brod...
+STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Nije moguće poslati brod u spremište...
+STR_981A_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Ne mogu pronaći lokalno spremište
+STR_HEADING_FOR_SHIP_DEPOT :{ORANGE}Kreće se prema spremištu brodova grada {TOWN}
+STR_HEADING_FOR_SHIP_DEPOT_VEL :{ORANGE}Kreće se prema spremištu brodova grada {TOWN}, {VELOCITY}
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE :{LTBLUE}Servisiranje u spremištu brodova grada {TOWN}
+STR_HEADING_FOR_SHIP_DEPOT_SERVICE_VEL :{LTBLUE}Servisiranje u spremištu brodova grada {TOWN}, {VELOCITY}
STR_981C_SHIP_IS_WAITING_IN_DEPOT :{WHITE}Brod {COMMA} Äeka u spremiÅ¡tu
STR_981D_BUILD_SHIP_DOCK :{BLACK}Izgradi brodsko pristanište
-STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING :{BLACK}Izgradi spremište brodova (za gradnu i servisiranje brodova)
+STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING :{BLACK}Izgradi spremište brodova (za izgradnju i servisiranje brodova)
STR_981F_SHIPS_CLICK_ON_SHIP_FOR :{BLACK}Brodovi - klikni na brod za informacije
STR_9820_BUILD_NEW_SHIP :{BLACK}Izgradi novi brod
STR_9821_DRAG_SHIP_TO_HERE_TO_SELL :{BLACK}Povuci brod ovdje kako bi ga prodao
STR_9822_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Centriraj glavni pogled na lokaciju spremišta brodova
STR_9823_SHIPS_CLICK_ON_SHIP_FOR :{BLACK}Brodovi - klikni na brod za informacije
STR_9824_BUILD_NEW_SHIPS_REQUIRES :{BLACK}Izgradi nove brodove (zahtijeva spremište brodova)
-STR_9825_SHIP_SELECTION_LIST_CLICK :{BLACK}Popis brodova - pritisni na brod za informacije
+STR_9825_SHIP_SELECTION_LIST_CLICK :{BLACK}Popis izabranih brodova - klikni na brod za informacije
STR_9826_BUILD_THE_HIGHLIGHTED_SHIP :{BLACK}Izgradi oznaÄeni brod
-STR_9827_CURRENT_SHIP_ACTION_CLICK :{BLACK}Trenutna radnja broda - pritisni ovdje za zaustavljanje/pokretanje broda
-STR_9828_SHOW_SHIP_S_ORDERS :{BLACK}Prikaži naredbe broda
+STR_9827_CURRENT_SHIP_ACTION_CLICK :{BLACK}Trenutna radnja broda - klikni ovdje kako bi zaustavio/pokrenuo brod
+STR_9828_SHOW_SHIP_S_ORDERS :{BLACK}Pokaži naredbe broda
STR_9829_CENTER_MAIN_VIEW_ON_SHIP :{BLACK}Centriraj glavni pogled na lokaciju broda
STR_982A_SEND_SHIP_TO_DEPOT :{BLACK}Pošalji brod u spremište. CTRL+klik će samo servisirati
-STR_982B_SHOW_SHIP_DETAILS :{BLACK}Prikaži detalje broda
-STR_982E_COST_MAX_SPEED_CAPACITY :{BLACK}Trošak {CURRENCY} Maks. brzina: {VELOCITY}{}Kapacitet: {CARGO}{}Trošak uporabe: {CURRENCY}/god
+STR_982B_SHOW_SHIP_DETAILS :{BLACK}Pokaži detalje broda
+STR_982E_COST_MAX_SPEED_CAPACITY :{BLACK}Trošak {CURRENCY} Maks. brzina: {VELOCITY}{}Nosivost: {CARGO}{}Trošak uporabe: {CURRENCY}/god
STR_982F_NAME_SHIP :{BLACK}Imenuj brod
STR_9831_NAME_SHIP :{WHITE}Imenuj brod
-STR_9832_CAN_T_NAME_SHIP :{WHITE}Ne mogu imenovati brod...
+STR_9832_CAN_T_NAME_SHIP :{WHITE}Nije moguće imenovati brod...
STR_9833_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Građani slave . . .{}Prvi brod je stigao u {STATION}!
STR_9834_POSITION_BUOY_WHICH_CAN :{BLACK}Smjesti plutaÄu koja može biti koriÅ¡tena kao pokazatelj puta
-STR_9835_CAN_T_POSITION_BUOY_HERE :{WHITE}Ne mogu staviti plutaÄu ovdje...
+STR_9835_CAN_T_POSITION_BUOY_HERE :{WHITE}Nije moguće staviti plutaÄu ovdje...
STR_9836_RENAME :{BLACK}Preimenuj
STR_9837_RENAME_SHIP_TYPE :{BLACK}Preimenuj vrstu broda
STR_9838_RENAME_SHIP_TYPE :{WHITE}Preimenuj vrstu broda
-STR_9839_CAN_T_RENAME_SHIP_TYPE :{WHITE}Ne mogu preimenovati vrstu broda...
-STR_983A_REFIT_CARGO_SHIP_TO_CARRY :{BLACK}Prenamijeni teretni brod da nosi neku drugu vrstu tereta
+STR_9839_CAN_T_RENAME_SHIP_TYPE :{WHITE}Nije moguće preimenovati vrstu broda...
+STR_983A_REFIT_CARGO_SHIP_TO_CARRY :{BLACK}Prenamijeni teretni brod za prijevoz neke druge vrste tereta
STR_983B_REFIT :{WHITE}{VEHICLE} (Prenamijeni)
STR_983C_REFIT_SHIP :{BLACK}Prenamijeni brod
-STR_983D_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Odabri vrstu tereta za prijevoz brodom:
-STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED :{BLACK}Prenamjeni brod za prijevoz oznaÄene vrste tereta
-STR_983F_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Odabri vrstu tereta za prijevoz:
-STR_9840_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova zapremnina: {GOLD}{CARGO}{}{BLACK}Cijena prenamjene: {GOLD}{CURRENCY}
-STR_9841_CAN_T_REFIT_SHIP :{WHITE}Ne mogu prenamijeniti brod...
+STR_983D_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Odaberi vrstu tereta za prijevoz brodom
+STR_983E_REFIT_SHIP_TO_CARRY_HIGHLIGHTED :{BLACK}Prenamijeni brod za prijevoz oznaÄene vrste tereta
+STR_983F_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Odaberi vrstu tereta za prijevoz:
+STR_9840_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova nosivost: {GOLD}{CARGO}{}{BLACK}Cijena prenamjene: {GOLD}{CURRENCY}
+STR_9841_CAN_T_REFIT_SHIP :{WHITE}Nije moguće prenamijeniti brod...
STR_9842_REFITTABLE :(prenamjenjiv)
-STR_GO_TO_SHIP_DEPOT :Idi u {TOWN} spremište brodova
-SERVICE_AT_SHIP_DEPOT :Servis u brodskom spremištu grada {TOWN}
+STR_GO_TO_SHIP_DEPOT :Idi u spremište brodova grada {TOWN}
+SERVICE_AT_SHIP_DEPOT :Servis u spremištu brodova grada {TOWN}
##id 0xA000
STR_A000_AIRPORTS :{WHITE}ZraÄne luke
-STR_A001_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Ne možeÅ¡ graditi zraÄnu luku ovdje...
-STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} Spremište zrakoplova
+STR_A001_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Ovdje nije moguće izgraditi zraÄnu luku...
+STR_A002_AIRCRAFT_HANGAR :{WHITE}{STATION} Zrakoplovni hangar
STR_A003_NEW_AIRCRAFT :{BLACK}Novi zrakoplov
STR_CLONE_AIRCRAFT :{BLACK}Kloniraj zrakoplov
STR_CLONE_AIRCRAFT_INFO :{BLACK}Ovo će izgraditi kopiju zrakoplova. Control-klik će dijeliti naredbe
-STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Ovo će napraviti kopiju zrakoplova. Klikni ovaj gumb i onda na zrakoplov unutar ili izvan hangara. Control+klik će dijeliti naredbe.
+STR_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Ovo će napraviti kopiju zrakoplova. Klikni ovaj gumb i onda na zrakoplov unutar ili izvan hangara. Control+klik će dijeliti naredbe
STR_A005_NEW_AIRCRAFT :{WHITE}Novi zrakoplov
STR_A006_BUILD_AIRCRAFT :{BLACK}Izgradi zrakoplov
-STR_A008_CAN_T_BUILD_AIRCRAFT :{WHITE}Ne mogu izgraditi zrakoplov...
-STR_A009_AIRCRAFT :{WHITE}{COMPANY} - {COMMA} zrakoplov
+STR_A008_CAN_T_BUILD_AIRCRAFT :{WHITE}Nije moguće izgraditi zrakoplov...
+STR_A009_AIRCRAFT :{WHITE}{COMPANY} - {COMMA} zrakoplova
STR_A00A :{WHITE}{VEHICLE}
STR_A00B_ORDERS :{WHITE}{VEHICLE} (Naredbe)
STR_A00C_DETAILS :{WHITE}{VEHICLE} (Detalji)
@@ -2938,38 +2951,38 @@
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Dobit ove godine: {LTBLUE}{CURRENCY} (prošle godine: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Pouzdanost: {LTBLUE}{COMMA}% {BLACK}Kvarova od poslijednjeg servisa: {LTBLUE}{COMMA}
STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Izgrađen: {LTBLUE}{NUM}{BLACK} Vrijednost: {LTBLUE}{CURRENCY}
-STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Ne mogu poslati zrakoplov u hangar
-STR_HEADING_FOR_HANGAR :{ORANGE}Putuje prema {STATION} hangaru
-STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Putuje prema {STATION} hangaru, {VELOCITY}
-STR_HEADING_FOR_HANGAR_SERVICE :{LTBLUE}Servis u {STATION} hangaru
-STR_HEADING_FOR_HANGAR_SERVICE_VEL :{LTBLUE}Servis u {STATION} hangaru, {VELOCITY}
+STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Nije moguće poslati zrakoplov u hangar
+STR_HEADING_FOR_HANGAR :{ORANGE}Putuje prema hangaru stanice {STATION}
+STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Putuje prema hangaru stanice {STATION}, {VELOCITY}
+STR_HEADING_FOR_HANGAR_SERVICE :{LTBLUE}Servisiranje u hangaru stanice {STATION}
+STR_HEADING_FOR_HANGAR_SERVICE_VEL :{LTBLUE}Servisiranje u hangaru stanice {STATION}, {VELOCITY}
STR_A014_AIRCRAFT_IS_WAITING_IN :{WHITE}Zrakoplov {COMMA} Äeka u hangaru
STR_A015_AIRCRAFT_IN_THE_WAY :{WHITE}Smeta zrakoplov
-STR_A016_CAN_T_STOP_START_AIRCRAFT :{WHITE}Ne mogu zaustaviti/pokrenuti zrakoplov...
+STR_A016_CAN_T_STOP_START_AIRCRAFT :{WHITE}Nije moguće zaustaviti/pokrenuti zrakoplov...
STR_A017_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Zrakoplov je u letu
STR_A019_CAPACITY :{BLACK}Nosivost: {LTBLUE}{CARGO}, {CARGO}
STR_A01A_CAPACITY :{BLACK}Nosivost: {LTBLUE}{CARGO}
STR_A01B_AIRCRAFT_MUST_BE_STOPPED :{WHITE}Zrakoplov mora biti zaustavljen u hangaru
-STR_A01C_CAN_T_SELL_AIRCRAFT :{WHITE}Ne možeš prodati zrakoplov...
+STR_A01C_CAN_T_SELL_AIRCRAFT :{WHITE}Nije moguće prodati zrakoplov...
STR_A01D_AIRPORT_CONSTRUCTION :Izgradnja zraÄne luke
STR_A01E_BUILD_AIRPORT :{BLACK}Izgradi zraÄnu luku
STR_A01F_AIRCRAFT_CLICK_ON_AIRCRAFT :{BLACK}Zrakoplov - klikni na zrakoplov za informacije
-STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES :{BLACK}Izgradi novi zrakoplov(potreban je aerodrom sa hangarom)
-STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT :{BLACK}Zrakoplov - kliknite na zrakoplov za informacije
+STR_A020_BUILD_NEW_AIRCRAFT_REQUIRES :{BLACK}Izgradi novi zrakoplov (potrebna je zraÄna luka s hangarom)
+STR_A021_AIRCRAFT_CLICK_ON_AIRCRAFT :{BLACK}Zrakoplov - klikni na zrakoplov za informacije
STR_A022_BUILD_NEW_AIRCRAFT :{BLACK}Izgradi novi zrakoplov
STR_A023_DRAG_AIRCRAFT_TO_HERE_TO :{BLACK}Povuci zrakoplov ovdje kako bi ga prodao
STR_A024_CENTER_MAIN_VIEW_ON_HANGAR :{BLACK}Centriraj glavni pogled na lokaciju hangara
-STR_A025_AIRCRAFT_SELECTION_LIST :{BLACK}Popis zrakoplova - klini na zrakoplov za informacije
+STR_A025_AIRCRAFT_SELECTION_LIST :{BLACK}Popis izabranih zrakoplova - klikni na zrakoplov za informacije
STR_A026_BUILD_THE_HIGHLIGHTED_AIRCRAFT :{BLACK}Izgradi oznaÄeni zrakoplov
-STR_A027_CURRENT_AIRCRAFT_ACTION :{BLACK}Trenutka radnja zrakoplova - kliknite ovdje za zaustavljanje/pokretanje zrakoplova
-STR_A028_SHOW_AIRCRAFT_S_ORDERS :{BLACK}Prikaži naredbe zrakoplova
+STR_A027_CURRENT_AIRCRAFT_ACTION :{BLACK}Trenutna radnja zrakoplova - klikni ovdje kako bi zaustavio/pokrenuo zrakoplov
+STR_A028_SHOW_AIRCRAFT_S_ORDERS :{BLACK}Pokaži naredbe zrakoplova
STR_A029_CENTER_MAIN_VIEW_ON_AIRCRAFT :{BLACK} Centrirajte glavni prozor na lokaciju zrakoplova
-STR_A02A_SEND_AIRCRAFT_TO_HANGAR :{BLACK}Pošaljite avion u hangar. CTRL + klik će ga samo servisirati
-STR_A02B_SHOW_AIRCRAFT_DETAILS :{BLACK}Prikaži detalje zrakoplova
-STR_A02E_COST_MAX_SPEED_CAPACITY :{BLACK}Trošak: {CURRENCY} Maks. brzina: {VELOCITY}{}Kapacitet: {COMMA} putnika, {COMMA} poštanskih vreća{}Trošak uporabe {CURRENCY}/god
+STR_A02A_SEND_AIRCRAFT_TO_HANGAR :{BLACK}Pošalji avion u hangar. CTRL+klik će samo servisirati
+STR_A02B_SHOW_AIRCRAFT_DETAILS :{BLACK}Pokaži detalje zrakoplova
+STR_A02E_COST_MAX_SPEED_CAPACITY :{BLACK}Trošak: {CURRENCY} Maks. brzina: {VELOCITY}{}Nosivost: {COMMA} putnika, {COMMA} poštanskih vreća{}Trošak uporabe {CURRENCY}/god
STR_A030_NAME_AIRCRAFT :{WHITE}Imenuj zrakoplov
-STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Ne mogu imenovati zrakoplov...
+STR_A031_CAN_T_NAME_AIRCRAFT :{WHITE}Nije moguće imenovati zrakoplov...
STR_A032_NAME_AIRCRAFT :{BLACK}Imenuj zrakoplov
STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Građani slave . . .{}Prvi zrakoplov je stigao na {STATION}!
STR_A034_PLANE_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Pad zrakoplova!{}{COMMA} poginulih u eksploziji na {STATION}
@@ -2978,17 +2991,17 @@
STR_A037_RENAME :{BLACK}Preimenuj
STR_A038_RENAME_AIRCRAFT_TYPE :{BLACK}Preimenuj vrstu zrakoplova
STR_A039_RENAME_AIRCRAFT_TYPE :{WHITE}Preimenuj vrstu zrakoplova
-STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Ne mogu preimenovati vrstu zrakoplova...
-STR_A03B_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Prenamijeni zrakoplov da nosi drugu vrstu tereta
+STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Nije moguće preimenovati vrstu zrakoplova...
+STR_A03B_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Prenamijeni zrakoplov za prijevoz neke druge vrste tereta
STR_A03C_REFIT :{WHITE}{VEHICLE} (Prenamijeni)
STR_A03D_REFIT_AIRCRAFT :{BLACK}Prenamijeni zrakoplov
-STR_A03E_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Izaberi vrstu tereta koju će zrakoplov nositi
-STR_A03F_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Prenamijeni zrakoplov da nosi oznaÄenu vrstu tereta
-STR_A040_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}OznaÄi vrstu tereta za prijenos:
-STR_A041_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Novi kapacitet: {GOLD}{STRING}{}{BLACK}Trošak prenamjene: {GOLD}{CURRENCY}
-STR_A042_CAN_T_REFIT_AIRCRAFT :{WHITE}Ne mogu prenamijeniti zrakoplov...
-STR_GO_TO_AIRPORT_HANGAR :Idi u {STATION} Hangar
-SERVICE_AT_AIRPORT_HANGAR :Servis u hangaru {STATION}
+STR_A03E_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Odaberi vrstu tereta koju će zrakoplov prevoziti
+STR_A03F_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Prenamijeni zrakoplov za prijevoz oznaÄene vrste tereta
+STR_A040_SELECT_CARGO_TYPE_TO_CARRY :{GOLD}Odaberi vrstu tereta za prijevoz:
+STR_A041_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova nosivost: {GOLD}{STRING}{}{BLACK}Trošak prenamjene: {GOLD}{CURRENCY}
+STR_A042_CAN_T_REFIT_AIRCRAFT :{WHITE}Nije moguće prenamijeniti zrakoplov...
+STR_GO_TO_AIRPORT_HANGAR :Idi u hangar stanice {STATION}
+SERVICE_AT_AIRPORT_HANGAR :Servisiranje u hangaru stanice {STATION}
STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Raspored)
@@ -3021,7 +3034,7 @@
STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Cargo:
STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Novac:
STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Zajam:
-STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Totalno:
+STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Ukupno:
############ End of order list
STR_PERFORMANCE_DETAIL_VEHICLES_TIP :{BLACK}Broj vozila; ovo ukljuÄuje cestovna vozila, vlakove, brodove i avione
STR_PERFORMANCE_DETAIL_STATIONS_TIP :{BLACK}Broj dijelova stanice. Svaki dio stanice (npr. željezniÄki kolodvor, autobusna postaja, aerodrom) se raÄuna, Äak i ako su spojene kao jedna stanica
@@ -3032,7 +3045,7 @@
STR_PERFORMANCE_DETAIL_CARGO_TIP :{BLACK}Broj vrsta tereta dostavljenog u zadnjoj Äetvrtini
STR_PERFORMANCE_DETAIL_MONEY_TIP :{BLACK}KoliÄina novca koji ova kompanija ima u banci
STR_PERFORMANCE_DETAIL_LOAN_TIP :{BLACK}Iznos novca koji je ova tvrtka pozajmila
-STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Totalni broj bodova od mogućih bodova
+STR_PERFORMANCE_DETAIL_TOTAL_TIP :{BLACK}Ukupni broj bodova od mogućih bodova
STR_NEWGRF_SETTINGS_BUTTON :{BLACK}NewGRF Postavke
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}NewGRF postavke
@@ -3059,8 +3072,8 @@
STR_NEWGRF_ADD :{BLACK}Dodaj
STR_NEWGRF_ADD_TIP :{BLACK}Dodaj NewGRF datoteku u listu
-STR_NEWGRF_REMOVE :{BLACK}Obriši
-STR_NEWGRF_REMOVE_TIP :{BLACK}Obriši odabranu NewGRF datoteku sa liste
+STR_NEWGRF_REMOVE :{BLACK}Ukloni
+STR_NEWGRF_REMOVE_TIP :{BLACK}Ukloni odabranu NewGRF datoteku s popisa
STR_NEWGRF_MOVEUP :{BLACK}Pomakni gore
STR_NEWGRF_MOVEUP_TIP :{BLACK}Pomakni odabranu NewGRF datoteku gore na listi
STR_NEWGRF_MOVEDOWN :{BLACK} Pomakni dolje
@@ -3101,42 +3114,42 @@
STR_PLANE :{BLACK}{PLANE}
STR_SHIP :{BLACK}{SHIP}
-STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA} Vlak{P "" a ova}
+STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA} vlak{P "" a ova}
STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA} Cestovn{P o a ih} vozil{P o a a}
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA} Zrakoplov
STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA} Brod{P "" a ova}
-STR_SCHEDULED_TRAINS_TIP :{BLACK}Prikaži sve vlakove koji imaju ovu stanicu u svom rasporedu
+STR_SCHEDULED_TRAINS_TIP :{BLACK}Pokaži sve vlakove koji imaju ovu stanicu u svom rasporedu
STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Prikaži sva cestovna vozila koja imaju ovu stanicu u svom rasporedu
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Prikaži sve zrakoplove koji imaju ovu stanicu u svom rasporedu
STR_SCHEDULED_SHIPS_TIP :{BLACK}Prikaži sve brodove koji imaju ovu stanicu u svom rasporedu
-STR_VEH_WITH_SHARED_ORDERS_LIST :{WHITE}Djeljene naredbe za {COMMA} vozil{P o a a}
-STR_VEH_WITH_SHARED_ORDERS_LIST_TIP :{BLACK}Prikaži sva vozila koja dijele ovaj raspored.
+STR_VEH_WITH_SHARED_ORDERS_LIST :{WHITE}Dijeljene naredbe za {COMMA} vozil{P o a a}
+STR_VEH_WITH_SHARED_ORDERS_LIST_TIP :{BLACK}Pokaži sva vozila koja dijele ovaj raspored.
### depot strings
STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Upravo se spremaš prodati sva vozila u spremištu. Jesi li siguran?
-STR_DEPOT_WRONG_DEPOT_TYPE :Pogrešna vrsta skladišta
+STR_DEPOT_WRONG_DEPOT_TYPE :Pogrešna vrsta spremišta
STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}Prodaj sve vlakove u spremištu
STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}Prodaj sva cestovna vozila u spremištu
STR_DEPOT_SELL_ALL_BUTTON_SHIP_TIP :{BLACK}Prodaj sve brodove u spremištu
STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP :{BLACK}Prodaj sve zrakoplove u hangaru
-STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP :{BLACK}Daje popis svih vlakova u trenutnom spremištu, zajedno s njihovim naredbama
-STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP :{BLACK}Daje popis svih cestovnih vozila u trenutnom spremištu, zajedno s njihovim naredbama
-STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP :{BLACK}Daje popis svih brodova u trenutnom spremištu, zajedno s njihovim naredbama
-STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP :{BLACK}Daje popis svih zrakoplova u trenutnom spremištu, zajedno s njihovim naredbama
+STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP :{BLACK}Daje popis svih vlakova koji imaju trenutno spremište među svojim naredbama
+STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP :{BLACK}Daje popis svih cestovnih vozila koje imaju trenutno spremište među svojim naredbama
+STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP :{BLACK}Daje popis svih brodova koji imaju trenutno spremište među svojim naredbama
+STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP :{BLACK}Daje popis svih zrakoplova koji imaju bilo koji hangar ove zraÄne luke meÄ‘u svojim naredbama
STR_DEPOT_AUTOREPLACE_TRAIN_TIP :{BLACK}Automatski zamijeni sve vlakove u spremištu
STR_DEPOT_AUTOREPLACE_ROADVEH_TIP :{BLACK}Automatski zamijeni sva cestovna vozikla u spremištu
STR_DEPOT_AUTOREPLACE_SHIP_TIP :{BLACK}Automatski zamijeni sve brodove u spremištu
STR_DEPOT_AUTOREPLACE_AIRCRAFT_TIP :{BLACK}Automatski zamijeni sve zrakoplove u spremištu
-STR_VEHICLE_LIST_TRAIN_DEPOT :{BLACK}{STRING} - {COMMA} Vlak{P "" a ova}
-STR_VEHICLE_LIST_ROADVEH_DEPOT :{BLACK}{STRING} - {COMMA} Cestovn{P o a ih} vozil{P o a a}
-STR_VEHICLE_LIST_SHIP_DEPOT :{BLACK}{STRING} - {COMMA} Brod{P "" a ova}
-STR_VEHICLE_LIST_AIRCRAFT_DEPOT :{BLACK}{STRING} - {COMMA} Zrakoplov
+STR_VEHICLE_LIST_TRAIN_DEPOT :{BLACK}{STRING} - {COMMA} vlak{P "" a ova}
+STR_VEHICLE_LIST_ROADVEH_DEPOT :{BLACK}{STRING} - {COMMA} cestovn{P o a ih} vozil{P o a a}
+STR_VEHICLE_LIST_SHIP_DEPOT :{BLACK}{STRING} - {COMMA} brod{P "" a ova}
+STR_VEHICLE_LIST_AIRCRAFT_DEPOT :{BLACK}{STRING} - {COMMA} zrakoplova
STR_REPLACE_VEHICLES_WHITE :{WHITE}Zamijeni {STRING}
STR_REPLACE_VEHICLES_START :{BLACK}PoÄni zamijenjivati vozila
@@ -3147,13 +3160,13 @@
STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Odaberite novi tip lokomotive koji želite koristiti umjesto lijevo odabranog tipa lokomotive
STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klikni za zaustavljanje zamjene lijevo odabranog tipa lokomotive
STR_REPLACE_HELP_START_BUTTON :{BLACK}Klikni za poÄetak zamjene lijevo odabrane lokomotive sa desno odabranim tipom
-STR_REPLACE_HELP_RAILTYPE :{BLACK}Odaberite tip traÄnica za koji želite zamijeniti lokomotive
+STR_REPLACE_HELP_RAILTYPE :{BLACK}Odaberite vrstu željeznice za koju želite zamijeniti lokomotive
STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Prikazuje sa kojom se lokomotivom zamjenjuje lijevo odabrana lokomotiva, ako postoji koji
STR_REPLACE_HELP :{BLACK}Ovo dozvoljava zamjenu jednog tipa lokomotive sa drugim, kada vlakovi prvotnog tipa uđu u stovarište
-STR_REPLACE_REMOVE_WAGON :{BLACK}Brisanje vagona: {ORANGE}{SKIP}{STRING}
-STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Neka automatska zamijena drži dužinu vlaka istom briÅ¡ući vagone(poÄevÅ¡i od naprijed), ako bi zamijena lokomotive vlak uÄinila dužim.
+STR_REPLACE_REMOVE_WAGON :{BLACK}Uklanjanje vagona: {ORANGE}{SKIP}{STRING}
+STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Ukoliko bi zamjena lokomotive uÄinla vlak dužim, neka automatska zamjena zadrži istu dužinu vlaka tako da ukloni suviÅ¡ne vagone (poÄevÅ¡i od naprijed).
STR_REPLACE_ENGINE_WAGON_SELECT :{BLACK}Zamjenjujem:{ORANGE}{SKIP}{SKIP}{STRING}
-STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}EXPERIMENTALNA FUNKCIJA {} Prebaci između prozora za izmjenu lokomotiva i vagona.{}Izmjena vagona će se izvršiti samo ako novi vagon može biti prenamijenjen za prijevoz istog tipa tereta kao i stari vagon. Ovo se provjerava za svaki vagon kada se stvarna zamjena odvija.
+STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK} POKUSNA FUNKCIJA {} Prebaci između prozora za izmjenu lokomotiva i vagona.{}Izmjena vagona izvršit će se samo ako novi vagon može biti prenamijenjen za prijevoz istog tipa tereta kao i stari vagon. Ovo se provjerava za svaki vagon kada se stvarna zamjena odvija.
STR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Vozilo nije dostupno
STR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Vozilo nije dostupno
STR_SHIP_NOT_AVAILABLE :{WHITE}Brod nije dostupan
@@ -3162,28 +3175,28 @@
STR_ENGINES :Lokomotive
STR_WAGONS :Vagoni
-STR_MASS_STOP_DEPOT_TRAIN_TIP :{BLACK}Pritisni za zaustavljanje svih vlakova u spremištu
-STR_MASS_STOP_DEPOT_ROADVEH_TIP :{BLACK}Pritisni za zaustavljanje svih cestovnih vozila u spremištu
-STR_MASS_STOP_DEPOT_SHIP_TIP :{BLACK}Pritisni za zaustavljanje svih brodova u spremištu
-STR_MASS_STOP_HANGAR_TIP :{BLACK}Pritisni za zaustavljanje svih zrakoplova u hangaru
+STR_MASS_STOP_DEPOT_TRAIN_TIP :{BLACK}Klikni za zaustavljanje svih vlakova u spremištu
+STR_MASS_STOP_DEPOT_ROADVEH_TIP :{BLACK}Klikni za zaustavljanje svih cestovnih vozila u spremištu
+STR_MASS_STOP_DEPOT_SHIP_TIP :{BLACK}Klikni za zaustavljanje svih brodova u spremištu
+STR_MASS_STOP_HANGAR_TIP :{BLACK}Klikni za zaustavljanje svih zrakoplova u hangaru
-STR_MASS_START_DEPOT_TRAIN_TIP :{BLACK}Pritisni za pokretanje svih vlakova u spremištu
-STR_MASS_START_DEPOT_ROADVEH_TIP :{BLACK}Pritisni za pokretanje svih cestovnih vozila u spremištu
-STR_MASS_START_DEPOT_SHIP_TIP :{BLACK}Pritisni za pokretanje svih brodova u spremištu
-STR_MASS_START_HANGAR_TIP :{BLACK}Klikni za pokretanje svih aviona u hangaru
+STR_MASS_START_DEPOT_TRAIN_TIP :{BLACK}Klikni za pokretanje svih vlakova u spremištu
+STR_MASS_START_DEPOT_ROADVEH_TIP :{BLACK}Klikni za pokretanje svih cestovnih vozila u spremištu
+STR_MASS_START_DEPOT_SHIP_TIP :{BLACK}Klikni za pokretanje svih brodova u spremištu
+STR_MASS_START_HANGAR_TIP :{BLACK}Klikni za pokretanje svih zrakoplova u hangaru
-STR_MASS_STOP_LIST_TIP :{BLACK}Klikni za zaustavljanje svih vozila na listi
-STR_MASS_START_LIST_TIP :{BLACK}Klikni za pokretanje svih vozila na listi
+STR_MASS_STOP_LIST_TIP :{BLACK}Klikni za zaustavljanje svih vozila na popisu
+STR_MASS_START_LIST_TIP :{BLACK}Klikni za pokretanje svih vozila na popisu
STR_SHORT_DATE :{WHITE}{DATE_TINY}
-STR_SIGN_LIST_CAPTION :{WHITE}Popis znakova - {COMMA} Znak{P "" a ova}
+STR_SIGN_LIST_CAPTION :{WHITE}Popis znakova - {COMMA} znak{P "" a ova}
-STR_ORDER_REFIT_FAILED :{WHITE}Prepravke narudžbi nisu uspjele {STRING} {COMMA}
+STR_ORDER_REFIT_FAILED :{WHITE}Naredba prenamijeni neuspjela zaustavljena {STRING} {COMMA}
############ Lists rail types
-STR_RAIL_VEHICLES :TraÄna Vozila
-STR_ELRAIL_VEHICLES :ElektriÄna željezniÄka vozila
+STR_RAIL_VEHICLES :Pružna vozila
+STR_ELRAIL_VEHICLES :ElektriÄna pružna vozila
STR_MONORAIL_VEHICLES :JednotraÄna vozila
STR_MAGLEV_VEHICLES :Maglev željezniÄka vozila
@@ -3195,16 +3208,16 @@
STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Brzina: {GOLD}{VELOCITY}{BLACK} Snaga: {GOLD}{POWER}
STR_PURCHASE_INFO_SPEED :{BLACK}Brzina: {GOLD}{VELOCITY}
STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}Trošak uporabe: {GOLD}{CURRENCY}/god
-STR_PURCHASE_INFO_CAPACITY :{BLACK}Kapacitet: {GOLD}{CARGO}{STRING}
+STR_PURCHASE_INFO_CAPACITY :{BLACK}Nosivost: {GOLD}{CARGO}{STRING}
STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Dizajnirana: {GOLD}{NUM}{BLACK} Životni vijek: {GOLD}{COMMA} godina
STR_PURCHASE_INFO_RELIABILITY :{BLACK}Maks. pouzdanost: {GOLD}{COMMA}%
STR_PURCHASE_INFO_COST :{BLACK}Trošak: {GOLD}{CURRENCY}
STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Težina: {GOLD}{WEIGHT_S} ({WEIGHT_S})
STR_PURCHASE_INFO_COST_SPEED :{BLACK}Trošak: {GOLD}{CURRENCY}{BLACK} Brzina: {GOLD}{VELOCITY}
-STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Zapremnina: {GOLD}{COMMA} putnika, {COMMA} vreća s poštom
+STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Nosivost: {GOLD}{COMMA} putnika, {COMMA} vreća s poštom
STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK} Pokretni vagoni:.{GOLD}+{POWER}{BLACK} Težina: {GOLD}+{WEIGHT_S}
-STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Promjenjivo u: {GOLD}
-STR_PURCHASE_INFO_ALL_TYPES :Svi tipovi tereta
+STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Prenamjenjivo u: {GOLD}
+STR_PURCHASE_INFO_ALL_TYPES :Sve vrste tereta
STR_PURCHASE_INFO_ALL_BUT :Sve osim {GOLD}
STR_PURCHASE_INFO_MAX_TE :{BLACK} Maks. vuÄni napor: {GOLD}{FORCE}
@@ -3268,16 +3281,16 @@
########### String for new airports
STR_SMALL_AIRPORT :{BLACK}Mala
STR_CITY_AIRPORT :{BLACK}Grad
-STR_METRO_AIRPORT :{BLACK}Metropolitanski airport
-STR_INTERNATIONAL_AIRPORT :{BLACK}Međunarodni aerodrom
+STR_METRO_AIRPORT :{BLACK}Metropolitanska zraÄna luka
+STR_INTERNATIONAL_AIRPORT :{BLACK}MeÄ‘unarodna zraÄna luka
STR_COMMUTER_AIRPORT :{BLACK}Redoviti putnik
STR_INTERCONTINENTAL_AIRPORT :{BLACK}Međukontinentalni
STR_HELIPORT :{BLACK}Heliodrom
-STR_HELIDEPOT :{BLACK}Spremište za helikoptere
+STR_HELIDEPOT :{BLACK}Spremište helikoptera
STR_HELISTATION :{BLACK}Stanica za helikoptere
-STR_SMALL_AIRPORTS :{BLACK}Mali aerodromi
-STR_LARGE_AIRPORTS :{BLACK}Veliki aerodromi
+STR_SMALL_AIRPORTS :{BLACK}Male zraÄne luke
+STR_LARGE_AIRPORTS :{BLACK}Velike zraÄne luke
STR_HUB_AIRPORTS :{BLACK}SrediÅ¡nje zraÄne luke
STR_HELIPORTS :{BLACK}Helicopterske zraÄne luke
@@ -3304,7 +3317,7 @@
STR_TRANSPARENT_TREES_DESC :{BLACK}Namjesti prozirnost za drveće
STR_TRANSPARENT_HOUSES_DESC :{BLACK}Namjesti prozirnost za kuće
STR_TRANSPARENT_INDUSTRIES_DESC :{BLACK}Namjesti prozirnost za industrije
-STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Namjesti prozirnost za građevine poput postaja, spremišta, smjerokaza i užadi
+STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Namjesti prozirnost za graÄ‘evine poput postaja, spremiÅ¡ta, ÄvoriÅ¡ta i vuÄne užadi
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Namjesti prozirnost za mostove
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Namjesti prozirnost za strukture poput svjetionika i antena, možda u budućnosti i vizualne efekte
STR_TRANSPARENT_LOADING_DESC :{BLACK}Namjesti prozirnost za indikatore uÄitavanja
@@ -3319,11 +3332,11 @@
##### Mass Order
STR_GROUP_NAME_FORMAT :Groupa {COMMA}
STR_GROUP_TINY_NAME :{TINYFONT}{GROUP}
-STR_GROUP_ALL_TRAINS :Sva vozila
+STR_GROUP_ALL_TRAINS :Svi vlakovi
STR_GROUP_ALL_ROADS :Sva cestovna vozila
STR_GROUP_ALL_SHIPS :Svi brodovi
STR_GROUP_ALL_AIRCRAFTS :Svi zrakoplovi
-STR_GROUP_DEFAULT_TRAINS :Negrupirani valkovi
+STR_GROUP_DEFAULT_TRAINS :Negrupirani vlakovi
STR_GROUP_DEFAULT_ROADS :Negrupirana cestovna vozila
STR_GROUP_DEFAULT_SHIPS :Negrupirani brodovi
STR_GROUP_DEFAULT_AIRCRAFTS :Negrupirani zrakoplovi
@@ -3331,21 +3344,21 @@
STR_GROUP_ADD_SHARED_VEHICLE :Dodaj dijeljena vozila
STR_GROUP_REMOVE_ALL_VEHICLES :Ukloni sva vozila
-STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} Vlak{P "" a ova}
+STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} vlak{P "" a ova}
STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} Cestovno vozil{P o a a}
STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} Brod{P "" a ova}
STR_GROUP_AIRCRAFTS_CAPTION :{WHITE}{GROUP} - {COMMA} Zrakoplov
STR_GROUP_RENAME_CAPTION :{BLACK}Preimenuj grupu
STR_GROUP_REPLACE_CAPTION :{WHITE}Zamjeni vozila "{GROUP}"
-STR_GROUP_CAN_T_CREATE :{WHITE}Ne mogu kreirati grupu...
-STR_GROUP_CAN_T_DELETE :{WHITE}Ne mogu obrisati ovu grupu...
-STR_GROUP_CAN_T_RENAME :{WHITE}Ne mogu preimenovati ovu grupu...
-STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Nije moguće maknuti sva vozila iz ove grupe...
+STR_GROUP_CAN_T_CREATE :{WHITE}Nije moguće kreirati grupu...
+STR_GROUP_CAN_T_DELETE :{WHITE}Nije moguće obrisati ovu grupu...
+STR_GROUP_CAN_T_RENAME :{WHITE}Nije moguće preimenovati ovu grupu...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Nije moguće ukloniti sva vozila iz ove grupe...
STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Nije moguće dodati vozila u ovu grupu
-STR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Ne možeš dodati dijeljena vozila u grupu...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Nije moguće dodati dijeljena vozila u grupu...
-STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Groupe - Klikni na grupu kako bi izlista sva vozila ove grupe
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Groupe - klikni na grupu kako bi izlistao sva vozila ove grupe
STR_GROUP_CREATE_TIP :{BLACK}Klikni za kreiranje grupe
STR_GROUP_DELETE_TIP :{BLACK}Obriši odabranu grupu
STR_GROUP_RENAME_TIP :{BLACK}Preimenuj odabranu grupu
@@ -3369,4 +3382,4 @@
STR_FUND_NEW_INDUSTRY :{BLACK}Financiraj
STR_PROSPECT_NEW_INDUSTRY :{BLACK}Prospekt
STR_BUILD_NEW_INDUSTRY :{BLACK}Izgradi
-STR_INDUSTRY_SELECTION_HINT :{BLACK}Izaberi prikladnu industriju s ove liste
+STR_INDUSTRY_SELECTION_HINT :{BLACK}Izaberi prikladnu industriju s ovog popisa
--- a/src/lang/czech.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/czech.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1078,6 +1078,7 @@
STR_CONFIG_PATCHES_ON :zapnuto
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Ukazovat rychlost vozidla ve stavové liště: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Povolit výstavbu na svazÃch kopců a na pobÅ™ežÃch: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Úpravy terénu pod budovami, kolejemi atd. (tzv. autoslope): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Povolit u oblasti pokrytà realistiÄtÄ›jÅ¡Ã velikost: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Povolit bouránà vÃce mÄ›stských silnic, mostů, tunelů, atp.: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Povolit stavbu dlouhých vlaků: {ORANGE}{STRING}
@@ -1161,9 +1162,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :pohyb po mapÄ›
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :nic
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Rychlost skrolovacÃho koleÄka: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Emulace pravého tlaÄÃtka: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Command + kliknutÃ
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control + kliknutÃ
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :vypnutá
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Zastavit automaticky hru pÅ™i zaÄÃnánà nové hry: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}PoužÃvat pokroÄilý seznam vozidel: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :ne
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :u vlastnà spoleÄnosti
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :u vÅ¡ech spoleÄnostÃ
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}PoužÃvat ukazatele naloženÃ: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :ne
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :u vlastnà spoleÄnosti
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :u vÅ¡ech spoleÄnostÃ
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Povolit jÃzdnà řády vozidel: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Zobrazit jÃzdnà řády v cyklech mÃsto ve dnech: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Výchozà druh kolejà (v nové hÅ™e/po naÄtenà hry): {ORANGE}{STRING}
@@ -3240,7 +3253,7 @@
STR_SHORT_DATE :{WHITE}{DATE_TINY}
STR_SIGN_LIST_CAPTION :{WHITE}Seznam popisků - {COMMA} popis{P ek ky ků}
-STR_ORDER_REFIT_FAILED :{WHITE}Přestavba se nezdařila. Konec.{STRING} {COMMA}
+STR_ORDER_REFIT_FAILED :{WHITE}Selhánà refitu pÅ™Ãkazu zastavilo {STRING} {COMMA}
############ Lists rail types
--- a/src/lang/danish.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/danish.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1020,6 +1020,7 @@
STR_CONFIG_PATCHES_ON :Til
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Vis køretøjets fart i statusbaren: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Tillad bygning på skråninger og kyster: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Tillad landskabsformning under bygninger, spor, etc. (autoslope): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Tillad mere realistisk størrelse på stationernes opland: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Tillad nedriving af industribygninger, flere veje, osv: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Aktiver bygning af meget lange tog: {ORANGE}{STRING}
@@ -1103,9 +1104,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Rul kort
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Slået fra
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Rulleknap-hastighed på kort: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Højreklik-emulering: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Kommandoklik
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Kontrolklik
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Fra
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Sæt automatisk på pause når nyt spil startes: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Brug avanceret køretøjsliste: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Fra
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Eget firma
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Alle firmaer
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Benyt laste-indikatorer: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Fra
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Eget firma
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Alle firmaer
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Slå køreplaner for transportmidler til: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Vis køreplan i tik i stedet for dage: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Standard skinnetype (efter nyt spil/hentet spil): {ORANGE}{STRING}
@@ -1262,6 +1275,7 @@
STR_BUOY_IS_IN_USE :{WHITE}... bøjen er i brug!
+STR_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan ikke fjerne en del af en station...
STR_CANT_CONVERT_RAIL :{WHITE}Kan ikke konvertere jernbanetype her...
@@ -1372,18 +1386,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Beskyt dit spil med et kodeord hvis du ikke vil have fremmede med
STR_NETWORK_SELECT_MAP :{BLACK}Vælg et kort:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Hvilket kort vil du spille?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tilladte klienter:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Vælg det maksimale antal klienter. Det er ikke nødvendigt at fylde dem alle
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (bekendtgør spillet)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} klient{P "" er}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tilladte klienter:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Vælg det maksimale antal klienter. Det er ikke nødvendigt at fylde dem alle
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} firma{P "" er}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maks. selskaber:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Begræns serveren til et bestemt antal selskaber
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} tilskuer{P "" e}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maks. tilskuere:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Begræns serveren til et bestemt antal tilskurere
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Talt sprog:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Andre spillere vil vide hvilket sprog, der bliver talt på serveren
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Start spillet
STR_NETWORK_START_GAME_TIP :{BLACK}Start et nyt netværksspil med et tilfældigt kort eller et scenarie
STR_NETWORK_LOAD_GAME :{BLACK}Hent et spil
@@ -1611,9 +1630,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Jernbane med almindelige signaler
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Jernbane med præ-signaler
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Jernbane med exit-signaler
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Jernbaneskinne med kombi-signaler
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Jernbanespor med normale og præ-signaler
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbanespor med normale og exit-signaler
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbaneskinne med normale og kombi-signaler
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Jernbanespor med præ- og exit-signaler
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Jernbaneskinne med præ- og kombi-signaler
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbaneskinne med exit- og kombi-signaler
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Jernbanestation skal fjernes først
@@ -3339,7 +3362,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Omdøb den valgte gruppe
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klik for at beskytte denne gruppe mod global auto-udskiftning
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/dutch.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/dutch.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1020,6 +1020,7 @@
STR_CONFIG_PATCHES_ON :Aan
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Geef snelheid in statusbalk weer: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Bouwen op hellingen toestaan: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Omgeving aanpassen onder gebouwen, spoorweg, enz. toestaan (autoslope): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Gebruik realistisch handelsgebied: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Sta verwijderen van meer stedelijke wegen, bruggen, tunnels, enz. toe: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Zeer lange treinen toestaan: {ORANGE}{STRING}
@@ -1103,9 +1104,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Scroll kaart
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Uit
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Kaart muiswiel snelheid: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Rechts-klik emulatie: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Opdracht-klik
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control-klik
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Uit
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Automatisch pauzeren wanneer je een nieuw spel start: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Gebruik de geavanceerde voertuigenlijst: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Uit
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Eigen bedrijf
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Alle bedrijven
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Gebruik laad indicatoren: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Uit
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Eigen bedrijf
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Alle bedrijven
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Activeer dienstregeling voor voertuigen: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Toon dienstregeling in tikken ipv in dagen: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Standaard spoorsoort (bij nieuw of opgeslagen spel): {ORANGE}{STRING}
--- a/src/lang/english.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/english.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1020,6 +1020,7 @@
STR_CONFIG_PATCHES_ON :On
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Show vehicle speed in status bar: {ORANGE}{STRING1}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Allow building on slopes and coasts: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Allow terraforming under buildings, tracks, etc. (autoslope): {ORANGE}{STRING1}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Allow more realistically sized catchment areas: {ORANGE}{STRING1}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Allow removal of more town-owned roads, bridges, etc: {ORANGE}{STRING1}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Enable building very long trains: {ORANGE}{STRING1}
@@ -1111,7 +1112,13 @@
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Automatically pause when starting a new game: {ORANGE}{STRING1}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Use the advanced vehicle list: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Off
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Own company
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :All companies
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Use loading indicators: {ORANGE}{STRING1}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Off
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Own company
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :All companies
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Enable timetabling for vehicles: {ORANGE}{STRING1}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Show timetable in ticks rather than days: {ORANGE}{STRING1}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Default rail type (after new game/game load): {ORANGE}{STRING1}
--- a/src/lang/estonian.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/estonian.txt Sun Sep 23 07:37:38 2007 +0000
@@ -258,7 +258,7 @@
STR_POPUP_CAUTION_CAPTION :{WHITE}Ettevaatust!
STR_00B4_CAN_T_DO_THIS :{WHITE}Seda ei saa teha....
STR_00B5_CAN_T_CLEAR_THIS_AREA :{WHITE}Seda ala ei saa puhastada....
-STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Originaali autorikaitse {COPYRIGHT} 1995 Chris Sawyer, kõik õigused kaitstud
+STR_00B6_ORIGINAL_COPYRIGHT :{BLACK}Algupärane autorikaitse {COPYRIGHT} 1995 Chris Sawyer, kõik õigused kaitstud
STR_00B7_VERSION :{BLACK}OpenTTD versioon {REV}
STR_00BA_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2007 OpenTTD meeskond
STR_TRANSLATED_BY :{BLACK} Tõlgi(d) -
@@ -724,7 +724,7 @@
STR_0225 :{BLACK}{DOWNARROW}
STR_0228_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Suurenda kõrgendatava/madaldatava maa-ala pindala
STR_0229_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Vähenda kõrgendatava/madaldatava maa-ala pindala
-STR_022A_GENERATE_RANDOM_LAND :{BLACK}Juhusliku kaardi loomine
+STR_022A_GENERATE_RANDOM_LAND :{BLACK}Suvalise kaardi tekitamine
STR_022B_RESET_LANDSCAPE :{BLACK}Nulli maastik
STR_022C_RESET_LANDSCAPE :{WHITE}Nulli maastik
STR_RESET_LANDSCAPE_TOOLTIP :{BLACK}Eemalda kõik mängija omandid
@@ -732,7 +732,7 @@
STR_022E_LANDSCAPE_GENERATION :{BLACK}Maastiku loomine
STR_022F_TOWN_GENERATION :{BLACK}Linnade loomine
STR_0230_INDUSTRY_GENERATION :{BLACK}Tööstuste loomine
-STR_0231_ROAD_CONSTRUCTION :{BLACK}Teeehitus
+STR_0231_ROAD_CONSTRUCTION :{BLACK}Tee-ehitus
STR_0233_TOWN_GENERATION :{WHITE}Linnade loomine
STR_0234_NEW_TOWN :{BLACK}Uus linn
STR_0235_CONSTRUCT_NEW_TOWN :{BLACK}Ehita uus linn
@@ -741,11 +741,11 @@
STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...liiga lähedal teisele linnale
STR_0239_SITE_UNSUITABLE :{WHITE}...ebasobiv koht
STR_023A_TOO_MANY_TOWNS :{WHITE}...liiga palju linnu
-STR_CANNOT_GENERATE_TOWN :{WHITE}Ei saa ühtegi linna ehitada
+STR_CANNOT_GENERATE_TOWN :{WHITE}Ãœhtegi linna ei saa ehitada...
STR_NO_SPACE_FOR_TOWN :{WHITE}...pole enam ruumi kaardil
STR_023B_INCREASE_SIZE_OF_TOWN :{BLACK}Linna suuruse suurendamine
STR_023C_EXPAND :{BLACK}Laienda
-STR_023D_RANDOM_TOWN :{BLACK}Juhuslik linn
+STR_023D_RANDOM_TOWN :{BLACK}Suvaline linn
STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION :{BLACK}Ehita linn suvalisse kohta
STR_023F_INDUSTRY_GENERATION :{WHITE}Tööstuste loomine
STR_0240_COAL_MINE :{BLACK}Kivisöekaevandus
@@ -822,8 +822,8 @@
STR_0287_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...iga linna kohta lubatud ainult üks
STR_0288_PLANT_TREES :{BLACK}Istuta puid
STR_0289_PLACE_SIGN :{BLACK}Paigalda silt
-STR_028A_RANDOM_TREES :{BLACK}Juhuslikud puud
-STR_028B_PLANT_TREES_RANDOMLY_OVER :{BLACK}Istutab puid juhuslikult üle kogu maa
+STR_028A_RANDOM_TREES :{BLACK}Suvalised puud
+STR_028B_PLANT_TREES_RANDOMLY_OVER :{BLACK}Istutab puid suvaliselt üle kogu maa
STR_028C_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Loo maastikule kivised alad
STR_028D_PLACE_LIGHTHOUSE :{BLACK}Ehita tuletorn
STR_028E_PLACE_TRANSMITTER :{BLACK}Paigalda saatjamast
@@ -1120,6 +1120,7 @@
STR_CONFIG_PATCHES_ON :Sees
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Näita olekuribal veovahendi kiirust: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Luba ehitised nõlvadele ja kallastele: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Võimalda maastikujunduse teostust majade, rööbaste jms. all (autoslope): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Võimalda reaalsemaid veekogu alasid: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Luba linnateede, -sildade, -tunnelite jne lammutamine: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Luba väga pikkade rongide ehitamine: {ORANGE}{STRING}
@@ -1147,7 +1148,7 @@
STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Keri vaadet, kui hiir on viidud ekraani serva: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Luba kohalikule omavalitsusele altkäemaksu maksmine: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Luba suvalise kujuga jaamad: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Uus teeotsimise algoritm(NPF asendab NTP): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Uus trassi otsimise algoritm(NPF asendab NTP): {ORANGE}{STRING}
STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Raskete rongide simuleerimiseks kasutatav raskuse korrutaja: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Luba läbisõidupeatused linnateedel: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Luba jaamu lähestikku ehitada: {ORANGE}{STRING}
@@ -1203,9 +1204,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Keri kaarti
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Väljas
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Kaardi kerimisrulliku kiirus: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Paremklõpsu matkimine: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+klikk
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+klikk
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Väljas
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Mängu isepeatamine uue mängu alustamisel: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Kasuta laiendatud sõidukinimekirja: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Väljas
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Oma ettevõte
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Kõik ettevõtted
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Kasuta laadimisnäidikuid: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Väljas
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Oma ettevõte
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Kõik ettevõtted
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Luba sõiduplaanide määramine: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Kasuta sõiduplaanis päevade asemel tikse: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Algne rööbastee liik (mängu alustamisel/laadimisel): {ORANGE}{STRING}
@@ -1450,12 +1463,12 @@
STR_ORANGE :{ORANGE}{STRING}
STR_NETWORK_CLIENTS :{SILVER}Kliendid: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
STR_NETWORK_LANGUAGE :{SILVER}Keel: {WHITE}{STRING}
-STR_NETWORK_TILESET :{SILVER}Maastikuühikud: {WHITE}{STRING}
+STR_NETWORK_TILESET :{SILVER}Ruudustik: {WHITE}{STRING}
STR_NETWORK_MAP_SIZE :{SILVER}Kaardi suurus: {WHITE}{COMMA}x{COMMA}
STR_NETWORK_SERVER_VERSION :{SILVER}Serveri versioon: {WHITE}{STRING}
STR_NETWORK_SERVER_ADDRESS :{SILVER}Serveri aadress: {WHITE}{STRING} : {NUM}
-STR_NETWORK_START_DATE :{SILVER}Algus aeg: {WHITE}{DATE_SHORT}
-STR_NETWORK_CURRENT_DATE :{SILVER}Hetke aeg: {WHITE}{DATE_SHORT}
+STR_NETWORK_START_DATE :{SILVER}Aeg alguses: {WHITE}{DATE_SHORT}
+STR_NETWORK_CURRENT_DATE :{SILVER}Aeg hetkel: {WHITE}{DATE_SHORT}
STR_NETWORK_PASSWORD :{SILVER}Parooliga kaitstud!
STR_NETWORK_SERVER_OFFLINE :{SILVER}SERVER ON MAAS
STR_NETWORK_SERVER_FULL :{SILVER}SERVER ON TÄIS
@@ -1767,7 +1780,7 @@
STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Vali trammidepoo suund
STR_1814_ROAD :Sõidutee
STR_1815_ROAD_WITH_STREETLIGHTS :Valgustatud sõidutee
-STR_1816_TREE_LINED_ROAD :Kolmerajaline tee
+STR_1816_TREE_LINED_ROAD :Puiestee
STR_1817_ROAD_VEHICLE_DEPOT :Depoo
STR_1818_ROAD_RAIL_LEVEL_CROSSING :Raudteeületuskoht
STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Siinset bussijaama ei saa lammutada...
@@ -2018,7 +2031,7 @@
STR_400D_SAVE_THE_CURRENT_GAME_USING :{BLACK}Salvesta mäng valitud nimega
STR_400E_SELECT_NEW_GAME_TYPE :{WHITE}Vali uue mängu tüüp
STR_400F_SELECT_SCENARIO_GREEN_PRE :{BLACK}Vali valmis kaart (roheline), eelseadistatud mäng (sinine), või juhusliku kaardiga uus mäng
-STR_4010_GENERATE_RANDOM_NEW_GAME :Tekita juhuslik kaart
+STR_4010_GENERATE_RANDOM_NEW_GAME :Tekita suvaline kaart
STR_4011_LOAD_HEIGHTMAP :{WHITE}Laadi kõrguskaart
##id 0x4800
@@ -2162,7 +2175,7 @@
STR_SV_STNAME_EAST : Ida {STRING}
STR_SV_STNAME_WEST : Lääne {STRING}
STR_SV_STNAME_CENTRAL :{STRING} keskus
-STR_SV_STNAME_TRANSFER :{STRING} ülekanne
+STR_SV_STNAME_TRANSFER :{STRING} ümberlaadimispaik
STR_SV_STNAME_HALT :{STRING} peatus
STR_SV_STNAME_VALLEY :{STRING} org
STR_SV_STNAME_HEIGHTS :{STRING} kõrgendikud
@@ -2340,7 +2353,7 @@
STR_7048_ACCEPT_NEW_FACE_SELECTION :{BLACK}Uue näo valimine
STR_7049_SELECT_MALE_FACES :{BLACK}Vali mehe nägu
STR_704A_SELECT_FEMALE_FACES :{BLACK}Vali naise nägu
-STR_704B_GENERATE_RANDOM_NEW_FACE :{BLACK}Loo uus juhuslik nägu
+STR_704B_GENERATE_RANDOM_NEW_FACE :{BLACK}Tekita uus suvaline nägu
STR_704C_KEY :{BLACK}Selgitus
STR_704D_SHOW_KEY_TO_GRAPHS :{BLACK}Näita selgitust graafikute juures
STR_704E_KEY_TO_COMPANY_GRAPHS :{WHITE}Ettevõttegraafiku selgitus
@@ -2688,8 +2701,8 @@
STR_80FD_TRICARIO_HELICOPTER :Tricario helikopter
STR_80FE_GURU_X2_HELICOPTER :Guru X2 helikopter
STR_80FF_POWERNAUT_HELICOPTER :Powernaut helikopter
-STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE :{WHITE}Teade veovahendi tootjalt
-STR_8101_WE_HAVE_JUST_DESIGNED_A :{GOLD}Me oleme just kujundanud uue {STRING}{P "" i} - kas te tahaksite testida seda aasta aega enne, kui see on saadaval kõigile?
+STR_8100_MESSAGE_FROM_VEHICLE_MANUFACTURE :{WHITE}Teade veovahendite tootjalt
+STR_8101_WE_HAVE_JUST_DESIGNED_A :{GOLD}Me töötasime välja uue {STRING}{P "" i}. Kas te oleksite huvitatud selle ainuõiguslikust katsetamisest järgneva aasta jooksul, et me saaksime jälgida kuidas see toimib?
STR_8102_RAILROAD_LOCOMOTIVE :raudteevedur
STR_8103_ROAD_VEHICLE :mootorsõiduk
STR_8104_AIRCRAFT :lennuk
@@ -2705,17 +2718,17 @@
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
STR_8806_GO_TO :Mine {STATION}
-STR_8807_GO_TO_TRANSFER :Mine {STATION} (vea ja võta laadung peale)
+STR_8807_GO_TO_TRANSFER :Mine {STATION} (laadi ümber ja võta laadung peale)
STR_8808_GO_TO_UNLOAD :Mine {STATION} (laadi maha)
-STR_8809_GO_TO_TRANSFER_UNLOAD :Mine {STATION} (vea ja jäta tühjaks)
+STR_8809_GO_TO_TRANSFER_UNLOAD :Mine {STATION} (laadi ümber ja jäta tühjaks)
STR_880A_GO_TO_LOAD :Mine {STATION} (laadi)
-STR_880B_GO_TO_TRANSFER_LOAD :Mine {STATION} (vea ja oota täislaadungit)
+STR_880B_GO_TO_TRANSFER_LOAD :Mine {STATION} (laadi ümber ja oota täislaadungit)
STR_880C_GO_NON_STOP_TO :Sõida läbi {STATION}
-STR_880D_GO_TO_NON_STOP_TRANSFER :Sõida läbi {STATION} (vea ja oota täislaadungit)
+STR_880D_GO_TO_NON_STOP_TRANSFER :Sõida läbi {STATION} (laadi ümber ja oota täislaadungit)
STR_880E_GO_NON_STOP_TO_UNLOAD :Sõida läbi {STATION} (laadi maha)
-STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Sõida läbi {STATION} (vea ja jäta tühjaks)
+STR_880F_GO_TO_NON_STOP_TRANSFER_UNLOAD :Sõida läbi {STATION} (laadi ümber ja jäta tühjaks)
STR_8810_GO_NON_STOP_TO_LOAD :Sõida läbi {STATION} (laadi)
-STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Sõida läbi {STATION} (vea ja oota täislaadungit)
+STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Sõida läbi {STATION} (laadi ümber ja oota täislaadungit)
STR_GO_TO_TRAIN_DEPOT :Mine linna {TOWN} rongidepoosse
STR_SERVICE_AT_TRAIN_DEPOT :Hoolda linna {TOWN} rongidepoos
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Sõida läbi linna {TOWN} rongidepoo
@@ -2808,7 +2821,7 @@
STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN :{BLACK}Ehita valitud raudteesõiduk
STR_8845_RENAME_TRAIN_VEHICLE_TYPE :{BLACK}Muuda raudteesõiduki tüübinime
STR_8846_CURRENT_TRAIN_ACTION_CLICK :{BLACK}Praegune rongi tegevus - vajuta siia et peatada/käivitada rong
-STR_8847_SHOW_TRAIN_S_ORDERS :{BLACK}Näita rongi käske
+STR_8847_SHOW_TRAIN_S_ORDERS :{BLACK}Näita rongi sihtpunkte
STR_8848_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Vaate viimine rongi asukohale
STR_8849_SEND_TRAIN_TO_DEPOT :{BLACK}Saada rong depoosse
STR_884A_FORCE_TRAIN_TO_PROCEED :{BLACK}Sunni rongi signaale eirama
@@ -2823,10 +2836,10 @@
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Sihtpunktide nimekiri - vajuta käsul et see valida. CTRL + klik kerib jaama juurde
STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Jäta praegune järjestus vahele ja alusta järgmisega. CTRL + klõps jätab vahele kuni valitud järjestuseni
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Kustuta valitud käsk
-STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Märgi valitud käsk ilma peatusetta peatuseks
-STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Lisa uus käsk enne valitud käsku või nimekirja lõppu
-STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Sunni valitud käsu juures oodata täis laadingut
-STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Sunni valitud käsu juures maha laadida.
+STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Muuda valitud käsk peatuseta sihtpunktiks
+STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Lisa uus käsk nimekirja lõppu, või enne valitud käsku
+STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Käsi valitud sihtpunktis sõiduk täis laadida
+STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Käsi valitud sihtpunktis sõiduk tühjaks laadida
STR_TIMETABLE_TOOLTIP :{BLACK}Sõiduplaan - esiletõstmiseks klõpsa sihtpunktil
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuda, kaua esile tõstetud sihtpunkti peale aega peaks kuluma
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Tühista esile tõstetud sihtpunkti ajaperiood
@@ -2850,8 +2863,8 @@
STR_8869_CAN_T_REVERSE_DIRECTION :{WHITE}Ei saa rongi ümber pöörata.
STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Muuda rongivaguni tüübinime
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Raudteesõiduki tüübinime ei saa muuta...
-STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Sunni valitud käsul visata maha laadung
-STR_886F_TRANSFER :{BLACK}Transpordi
+STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Käsi valitud sihtpunktis sõiduki laadung kõrvaldada
+STR_886F_TRANSFER :{BLACK}Laadi ümber
STR_CLEAR_TIME :{BLACK}Tühista aeg
STR_RESET_LATENESS :{BLACK}Tühista hilinemisloendur
@@ -3222,7 +3235,7 @@
STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TIP :{BLACK}Müü kõik lennukid angaarist
STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TIP :{BLACK}Võta nimekiri kõikidest rongidest selles jaamas nende käskude järgi
-STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP :{BLACK}Võta nimekiri kõikidest autodest selles garaažis nende käskude järgi
+STR_DEPOT_VEHICLE_ORDER_LIST_ROADVEH_TIP :{BLACK}Hangi kõikidest autodest nimekiri, kus käskude all on nende praegune depoo
STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TIP :{BLACK}Võta nimekiri kõikidest laevadest selles sadamas nende käskude järgi
STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TIP :{BLACK}Võta nimekiri kõikidest lennukitest suvalistest angaaridest selles lennujaamas nende käskude järgi
@@ -3308,12 +3321,12 @@
########### String for New Landscape Generator
-STR_GENERATE :{WHITE}Genereeri
-STR_RANDOM :{BLACK}Muuda juhuslikuks
-STR_RANDOM_HELP :{BLACK}Muuda maastikuloomisel kasutatavat suvalist seemet
+STR_GENERATE :{WHITE}Tekita
+STR_RANDOM :{BLACK}Muuda suvaliseks
+STR_RANDOM_HELP :{BLACK}Muuda maastiku loomisel kasutatavat suvalist seemet
STR_WORLD_GENERATION_CAPTION :{WHITE}Maailma genereerimine
-STR_RANDOM_SEED :{BLACK}Suvaline seeme:
-STR_RANDOM_SEED_HELP :{BLACK}Klõpsa, et sisestada juhuslik seeme
+STR_RANDOM_SEED :{BLACK}Juhuarv:
+STR_RANDOM_SEED_HELP :{BLACK}Klõpsa juhuarvu sisestamiseks
STR_LAND_GENERATOR :{BLACK}Maa generaator:
STR_TREE_PLACER :{BLACK}Puu algoritm:
STR_HEIGHTMAP_ROTATION :{BLACK}Kõrgustekaardi pööre:
--- a/src/lang/finnish.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/finnish.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1103,9 +1103,24 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Vieritä karttaa
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Pois
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Rullan nopeus: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Oikean painikkeen emulointi: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Command
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Pois
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Uusi peli alkaa pysäytettynä: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Edistynyt ajoneuvolista: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Pois
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Oma yhtiö
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Kaikki yhtiöt
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Lastausindikaattorit: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Pois
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Oma yhtiö
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Kaikki yhtiöt
+STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Aikataulut ajoneuvoille: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Näytä aikataulu tickseissä päivien sijaan: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Raidetyyppi oletuksena: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Tavallinen raide
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Sähköraide
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Yksiraiteinen
@@ -1375,10 +1390,13 @@
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :Lähiverkko/Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (mainosta)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} asiakas{P "" ta}
STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Pelaajien enimmäismäärä:
STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Pelaajien enimmäismäärä. Pelissä voi olla myös vähemmän pelaajia.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} yritys{P "" tä}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Yhtiöiden enimmäismäärä:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Rajoita yhtiöiden määrää palvelimella
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} katsoja{P "" a}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Katsojien enimmäismäärä:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Rajoita katsojien määrää palvelimella
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Puhuttu kieli:
@@ -1611,9 +1629,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Rautatie tavallisin opastimin
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Rautatie esiopastimin
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Rautatie poistumisopastimin
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Rautatie yhdistelmäopastein
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Rautatie esisignaaleilla
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Rautatie poistumis-signaaleilla
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Rautatie normaali- ja yhdistelmäopastein
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Rautatie esi- ja poistumissignaaleilla
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Rautatie esi- ja yhdistelmäopastein
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Rautatie poistumis- ja yhdistelmäopastein
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Poista asema ensin
--- a/src/lang/french.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/french.txt Sun Sep 23 07:37:38 2007 +0000
@@ -377,7 +377,7 @@
STR_SORT_BY_DROPDOWN_NAME :Nom
STR_SORT_BY_DATE :{BLACK}Date
STR_SORT_BY_NUMBER :Numéro
-STR_SORT_BY_PROFIT_LAST_YEAR :Profit l'an dernier
+STR_SORT_BY_PROFIT_LAST_YEAR :Profit année précédente
STR_SORT_BY_PROFIT_THIS_YEAR :Profit cette année
STR_SORT_BY_AGE :Âge
STR_SORT_BY_RELIABILITY :Fiabilité
@@ -473,7 +473,7 @@
STR_0195_SHOW_VEGETATION_ON_MAP :{BLACK}Afficher la végétation sur la carte
STR_0196_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Afficher les propriétaires sur la carte
STR_0197_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Afficher le nom des villes sur la carte
-STR_0198_PROFIT_THIS_YEAR_LAST_YEAR :{TINYFONT}{BLACK}Profit cette année: {CURRENCY} (l'an dernier: {CURRENCY})
+STR_0198_PROFIT_THIS_YEAR_LAST_YEAR :{TINYFONT}{BLACK}Profit cette année: {CURRENCY} (année précédente: {CURRENCY})
############ range for service numbers starts
STR_AGE :{COMMA} an{P "" nées} ({COMMA})
@@ -1021,6 +1021,7 @@
STR_CONFIG_PATCHES_ON :Activé
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Afficher vitesse du véhicule dans la barre d'état: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Construction côtière et sur pentes: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Repaysagement sous les bâtiments, voies, ... (autoslope): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Autoriser des zones de désserte plus réalistes : {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Permettre le retrait de plus d'éléments possédés par une ville: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Permettre les trains plus longs: {ORANGE}{STRING}
@@ -1104,9 +1105,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Défilement de la carte
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Désactivé
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Vitesse de défilement avec molette: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Emulation du clic droit: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Commande-clic
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl-clic
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Désactivé
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Pause automatique en début de nouvelle partie: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Utiliser la liste de véhicules avancée: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Désactivé
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Propre compagnie
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Toutes les compagnies
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Utiliser les indicateurs de chargement: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Désactivé
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Propre compagnie
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Toutes les compagnies
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Activer les horaires pour les véhicules: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Afficher l'horaire en ticks plutôt qu'en jours: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Type de rail par défaut (après nouvelle partie/chargement): {ORANGE}{STRING}
@@ -2790,7 +2803,7 @@
STR_900C_DETAILS :{WHITE}{VEHICLE} (Détails)
STR_900D_AGE_RUNNING_COST_YR :{BLACK}Âge: {LTBLUE}{STRING}{BLACK} Coût d'entretien: {LTBLUE}{CURRENCY}/an
STR_900E_MAX_SPEED :{BLACK}Vitesse max.: {LTBLUE}{VELOCITY}
-STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit de cette année: {LTBLUE}{CURRENCY} (année dernière: {CURRENCY})
+STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit cette année: {LTBLUE}{CURRENCY} (année précédente: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilité: {LTBLUE}{COMMA}% {BLACK}Pannes depuis le dernier entretien: {LTBLUE}{COMMA}
STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construit en: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Capacité: {LTBLUE}{CARGO}
@@ -2866,7 +2879,7 @@
STR_9811_DETAILS :{WHITE}{VEHICLE} (Détails)
STR_9812_AGE_RUNNING_COST_YR :{BLACK}Âge: {LTBLUE}{STRING}{BLACK} Coût d'entretien: {LTBLUE}{CURRENCY}/an
STR_9813_MAX_SPEED :{BLACK}Vitesse max.: {LTBLUE}{VELOCITY}
-STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit cette année: {LTBLUE}{CURRENCY} (l'an dernier: {CURRENCY})
+STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit cette année: {LTBLUE}{CURRENCY} (année précédente: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilité: {LTBLUE}{COMMA}% {BLACK}Pannes depuis le dernier entretien: {LTBLUE}{COMMA}
STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacité: {LTBLUE}{CARGO}
@@ -2934,7 +2947,7 @@
STR_A00C_DETAILS :{WHITE}{VEHICLE} (Détails)
STR_A00D_AGE_RUNNING_COST_YR :{BLACK}Âge: {LTBLUE}{STRING}{BLACK} Coût d'entretien: {LTBLUE}{CURRENCY}/an
STR_A00E_MAX_SPEED :{BLACK}Vitesse max.: {LTBLUE}{VELOCITY}
-STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profits cette année: {LTBLUE}{CURRENCY} (l'an dernier: {CURRENCY})
+STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit cette année: {LTBLUE}{CURRENCY} (année précédente: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilité: {LTBLUE}{COMMA}% {BLACK}Pannes depuis le dernier service: {LTBLUE}{COMMA}
STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Impossible d'envoyer l'aéronef au hangar...
--- a/src/lang/german.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/german.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1104,9 +1104,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Hauptansicht verschieben
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Aus
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Mausradgeschwindigkeit auf dem Spielfeld: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Rechtsklick-Emulation: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Kommando-Klick
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Strg-Klick
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Aus
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Automatische Pause bei Spielstart: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Erweiterte Fahrzeugliste benutzen: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Aus
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Eigene Firma
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Alle Firmen
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Ladestandanzeiger verwenden: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Aus
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Eigene Firma
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Alle Firmen
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Fahrpläne für Fahrzeuge aktivieren: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Zeitpläne in Ticks anstatt in Tagen anzeigen: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Standard-Gleistyp (bei Spielbeginn/geladenem Spiel): {ORANGE}{STRING}
--- a/src/lang/hungarian.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/hungarian.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1086,6 +1086,7 @@
STR_CONFIG_PATCHES_ON :Be
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Járművek sebességének kijelzése: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}LejtÅ‘re es partokra épÃtés: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Épületek, sinek alatti tereprendezés engedélyezése (autoslope): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Élethűbben méretezett befogadókörzetek bekapcsolása: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Engedélyezi az ipari létesÃtmények és utak rombolását, stb: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Óriásvonatok engedélyezése: {ORANGE}{STRING}
@@ -1169,9 +1170,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Térkép mozgatás
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Ki
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Scrollgomb sebessége a térképen: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Jobb-klikk emuláció: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+klikk
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control+klikk
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Kikapcsolva
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Automatikus pause-mode új játék esetén: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Továbbfejlesztett járműlista használata: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Kikapcsolva
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Saját vállalat
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Minden vállalat
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Betöltésjelző használata: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Kikapcsolva
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Saját vállalat
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Minden vállalat
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Időalapú menetrend engedélyezése: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Menetrendi idő-alapegység tick a nap helyett: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Alapértelmezett sÃntipus (játéktöltés/új játék után): {ORANGE}{STRING}
--- a/src/lang/italian.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/italian.txt Sun Sep 23 07:37:38 2007 +0000
@@ -795,8 +795,8 @@
STR_02D5_LAND_BLOCK_INFO :Informazioni sull'area di terreno
STR_02D6 :
STR_CONSOLE_SETTING :Apri/chiudi console
-STR_02D7_SCREENSHOT_CTRL_S :Screenshot (Ctrl-S)
-STR_02D8_GIANT_SCREENSHOT_CTRL_G :Screenshot Gigante (Ctrl-G)
+STR_02D7_SCREENSHOT_CTRL_S :Screenshot (CTRL+S)
+STR_02D8_GIANT_SCREENSHOT_CTRL_G :Screenshot Gigante (CTRL+G)
STR_02D9_ABOUT_OPENTTD :Informazioni su 'OpenTTD'
############ range ends here
@@ -1022,6 +1022,7 @@
STR_CONFIG_PATCHES_ON :Si
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Mostra velocità veicoli sulla barra di stato: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Consenti la costruzione sui pendii e coste: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Consenti rimodellazione terreno sotto a edifici, rotaie, etc.: {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Consenti aree di copertura più realistiche: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Consenti la rimozione di strade, ponti, etc. delle città : {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Consenti la costruzione di treni molto lunghi: {ORANGE}{STRING}
@@ -1105,9 +1106,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Scorri la mappa
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Off
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Velocità rotellina mappa: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Emulazione clic destro: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :COMANDO+clic
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :CTRL+clic
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Off
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Metti in pausa all'inizio di una nuova partita: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Utilizza la lista veicoli avanzata: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Off
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Propria compagnia
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Tutte le compagnie
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Utilizza gli indicatori di caricamento: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Off
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Propria compagnia
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Tutte le compagnie
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Abilita la definizione di tabelle orarie per i veicoli: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Mostra le tabelle orarie in tick piuttosto che in giorni: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Ferrovia predefinita (a inizio/ripresa partita): {ORANGE}{STRING}
--- a/src/lang/japanese.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/japanese.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1103,9 +1103,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :地図をスクãƒãƒ¼ãƒ«
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :切
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}地図ã®ã‚¹ã‚¯ãƒãƒ¼ãƒ«é€Ÿåº¦ï¼š{ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}å³ãƒœã‚¿ãƒ³ã®ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :コマンド+クリック
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :コントãƒãƒ¼ãƒ«ï¼‹ã‚¯ãƒªãƒƒã‚¯
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :切
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}æ–°è¦ã‚²ãƒ¼ãƒ を開始ã—ãŸã¨ãã«è‡ªå‹•çš„ã«ãƒãƒ¼ã‚ºï¼š{ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}詳細ã®è»Šä¸¡ãƒªã‚¹ãƒˆã‚’使用:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :切
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :自分
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :ã™ã¹ã¦
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}ç©ã¿é™ã‚ã—を表示:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :切
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :自分
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :ã™ã¹ã¦
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}車両ã®æ™‚刻表を使用:{ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}æ—¥ã®ä»£ã‚ã‚Šã«æ™‚刻表をティックã§è¡¨ç¤ºï¼š{ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}デフォルトã®é‰„é“ã®ç¨®é¡žï¼ˆæ–°è¦ã‚²ãƒ¼ãƒ 後ï¼ã‚²ãƒ¼ãƒ ã®èªã¿è¾¼ã¿å¾Œï¼‰ï¼š{ORANGE}{STRING}
--- a/src/lang/korean.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/korean.txt Sun Sep 23 07:37:38 2007 +0000
@@ -413,18 +413,18 @@
STR_SEND_FOR_SERVICING :ì 검하러 보냄
############ range for months starts
-STR_0162_JAN :1ì›”
-STR_0163_FEB :2ì›”
-STR_0164_MAR :3ì›”
-STR_0165_APR :4ì›”
-STR_0166_MAY :5ì›”
-STR_0167_JUN :6ì›”
-STR_0168_JUL :7ì›”
-STR_0169_AUG :8ì›”
-STR_016A_SEP :9ì›”
-STR_016B_OCT :10ì›”
-STR_016C_NOV :11ì›”
-STR_016D_DEC :12ì›”
+STR_0162_JAN :1
+STR_0163_FEB :2
+STR_0164_MAR :3
+STR_0165_APR :4
+STR_0166_MAY :5
+STR_0167_JUN :6
+STR_0168_JUL :7
+STR_0169_AUG :8
+STR_016A_SEP :9
+STR_016B_OCT :10
+STR_016C_NOV :11
+STR_016D_DEC :12
############ range for months ends
STR_016E :{TINYFONT}{STRING}{} {STRING}
@@ -488,9 +488,9 @@
STR_01A1_IS_GETTING_VERY_OLD :{WHITE}{STRING} {COMMA}ì˜ ìˆ˜ëª…ì´ ë‹¤ë˜ì–´ 갑니다.
STR_01A2_IS_GETTING_VERY_OLD_AND :{WHITE}{STRING} {COMMA}ì˜ ìˆ˜ëª…ì´ ë‹¤ë˜ì–´ 긴급 êµì²´ê°€ 필요합니다.
STR_01A3_LAND_AREA_INFORMATION :{WHITE}ì´ ì§€ì—ì˜ ì§€í˜• ì •ë³´
-STR_01A4_COST_TO_CLEAR_N_A :{BLACK}초기화 가격: {LTBLUE}N/A
+STR_01A4_COST_TO_CLEAR_N_A :{BLACK}초기화 가격: {LTBLUE}ì—†ìŒ
STR_01A5_COST_TO_CLEAR :{BLACK}초기화 가격: {LTBLUE}{CURRENCY}
-STR_01A6_N_A :N/A
+STR_01A6_N_A :ì—†ìŒ
STR_01A7_OWNER :{BLACK}ì†Œìœ ìž: {LTBLUE}{STRING}
STR_01A8_LOCAL_AUTHORITY :{BLACK}ì§€ì— ë‹¹êµ: {LTBLUE}{STRING}
STR_01A9_NONE :ì—†ìŒ
@@ -1104,11 +1104,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :맵 스í¬ë¡¤
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :ë„기
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}맵 스í¬ë¡¤ ì†ë„: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}오른쪽 í´ë¦ 매í¬ë¡œ: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :커맨드 + í´ë¦
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :컨트롤 + í´ë¦
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :ë„기
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}새로운 게임 ì‹œìž‘í• ë•Œ ìžë™ìœ¼ë¡œ ì¼ì‹œì •ì§€: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}ì§„ë³´ëœ ì°¨ëŸ‰ ëª©ë¡ ì‚¬ìš©: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}ì 재 ì •ë„ í‘œì‹œ: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}ì°¨ëŸ‰ì— ì‹œê°„í‘œ 사용: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}시간표를 ë‚ ë³´ë‹¤ 틱로 표시: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}시간표를 ì¼(æ—¥)ì´ ì•„ë‹Œ 틱으로 표시: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}기본 ì² ë„ ì¢…ë¥˜ (새 게임/불러오기 후): {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :보통 ì² ë„
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :ì „ê°œ ì² ë„
@@ -1263,6 +1269,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...ì‚¬ìš©ì¤‘ì¸ ë¶€ì´ìž…니다!
+STR_LANDINFO_COORDS :{BLACK}좌표: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}ì—ì˜ ì¼ë¶€ë¥¼ ì œê±°í• ìˆ˜ 없습니다...
STR_CANT_CONVERT_RAIL :{WHITE}ì´ê³³ì˜ ì² ë„ íƒ€ìž…ì„ ë°”ê¿€ 수 없습니다...
@@ -1373,18 +1380,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}ìžìœ 로운 ì ‘ê·¼ì„ ë§‰ê³ ì‹¶ì„ ë•Œ 게임 ì ‘ê·¼ì‹œ 암호를 ì„¤ì •í• ìˆ˜ 있습니다
STR_NETWORK_SELECT_MAP :{BLACK}맵 ì„ íƒ:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}í”Œë ˆì´í• ë§µì„ ì„ íƒí•©ë‹ˆë‹¤.
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}최대 ì ‘ì†ìž 수:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}최대 ì ‘ì†ìžìˆ˜ë¥¼ ì„ íƒí•©ë‹ˆë‹¤. ëª¨ë“ ìŠ¬ë¡¯ì´ ì°¨ìžˆì„ í•„ìš”ëŠ” 없습니다.
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :ì¸í„°ë„·
STR_NETWORK_LAN_INTERNET :LAN / ì¸í„°ë„·
STR_NETWORK_INTERNET_ADVERTISE :ì¸í„°ë„· (ê´‘ê³ í—ˆìš©)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM}명 ì ‘ì†ì¤‘
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}최대 ì ‘ì†ìž 수:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}최대 ì ‘ì†ìžìˆ˜ë¥¼ ì„ íƒí•©ë‹ˆë‹¤. ëª¨ë“ ìŠ¬ë¡¯ì´ ì°¨ìžˆì„ í•„ìš”ëŠ” 없습니다.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM}ê°œì˜ íšŒì‚¬
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}최대 회사수:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}ì„œë²„ì˜ íšŒì‚¬ì˜ ìˆ˜ë¥¼ ì œí•œí•©ë‹ˆë‹¤
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM}명 참관중
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}최대 ê´€ì „ìžìˆ˜:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}ê²Œìž„ì„ ê´€ì „í•˜ëŠ” ì ‘ì†ìžì˜ 수를 ì œí•œí•©ë‹ˆë‹¤
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}대화 언어:
STR_NETWORK_LANGUAGE_TIP :{BLACK}서버ì—ì„œ 주로 사용하는 언어를 ê³ ë¥´ì‹ì‹œì˜¤.
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}서버 열기
STR_NETWORK_START_GAME_TIP :{BLACK}무작위 맵ì´ë‚˜ 시나리오로 새로운 ë„¤íŠ¸ì›Œí¬ ê²Œìž„ì„ ì‹œìž‘í•©ë‹ˆë‹¤.
STR_NETWORK_LOAD_GAME :{BLACK}맵 불러오기
@@ -1612,9 +1624,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :ì¼ë°˜ ì‹ í˜¸ë“±ì´ ì„¤ì¹˜ëœ ì² ë„
STR_RAILROAD_TRACK_WITH_PRESIGNALS :PRE ì‹ í˜¸ë“±ì´ ì„¤ì¹˜ëœ ì² ë„
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :출구 ì‹ í˜¸ë“±ì´ ì„¤ì¹˜ëœ ì² ë„
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :콤보-ì‹ í˜¸ë“±ì„ ê°€ì§„ ì² ë¡œ
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :ì¼ë°˜ ì‹ í˜¸ë“±ê³¼ PREì‹ í˜¸ë“±ì´ ì„¤ì¹˜ëœ ì² ë„
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :ì¼ë°˜ ì‹ í˜¸ë“±ê³¼ ì¶œêµ¬ì‹ í˜¸ë“±ì´ ì„¤ì¹˜ëœ ì² ë„
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :ì¼ë°˜, 콤보-ì‹ í˜¸ë“±ì„ ê°€ì§„ ì² ë¡œ
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :PRE ì‹ í˜¸ë“±ê³¼ ì¶œêµ¬ì‹ í˜¸ë“±ì´ ì„¤ì¹˜ëœ ì² ë„
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :프리, 콤보-ì‹ í˜¸ë“±ì„ ê°€ì§„ ì² ë¡œ
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :출구, 콤보-ì‹ í˜¸ë“±ì„ ê°€ì§„ ì² ë¡œ
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}ë¨¼ì € 기차 ì •ê±°ìž¥ì„ ì œê±°í•´ì•¼ 합니다
@@ -1714,8 +1730,8 @@
STR_202B_SERVICES_ALREADY_SUBSIDISED :{BLACK}ì´ë¯¸ ì§€ê¸‰ëœ ë³´ì¡°ê¸ˆ:
STR_202C_FROM_TO :{ORANGE}{1:STATION}ì—ì„œ {2:STATION}까지 {0:STRING} 수송{YELLOW} ({3:COMPANY}
STR_202D_UNTIL :{YELLOW}, {DATE_SHORT}까지)
-STR_202E_OFFER_OF_SUBSIDY_EXPIRED :{BLACK}{BIGFONT}보조금 ì œê³µ 계약 파기:{}{}{0:STRING}ì—ì„œ {1:STRING}ê¹Œì§€ì˜ {2:STRING} ìˆ˜ì†¡ì€ ë”ì´ìƒ ë³´ì¡°ê¸ˆì„ ì§€ê¸‰í•˜ì§€ 않습니다.
-STR_202F_SUBSIDY_WITHDRAWN_SERVICE :{BLACK}{BIGFONT}보조금 ì œê³µ ì² íšŒ:{}{}{1:STATION}ì—ì„œ {2:STATION}ê¹Œì§€ì˜ {0:STRING} ìˆ˜ì†¡ì€ ë”ì´ìƒ ë³´ì¡°ê¸ˆì„ ì§€ê¸‰í•˜ì§€ 않습니다.
+STR_202E_OFFER_OF_SUBSIDY_EXPIRED :{BLACK}{BIGFONT}보조금 ì œê³µ 계약 파기:{}{}{1:STRING}ì—ì„œ {2:STRING}ê¹Œì§€ì˜ {0:STRING} ìˆ˜ì†¡ì€ ë”ì´ìƒ ë³´ì¡°ê¸ˆì„ ì§€ê¸‰í•˜ì§€ 않습니다.
+STR_202F_SUBSIDY_WITHDRAWN_SERVICE :{BLACK}{BIGFONT}보조금 ì œê³µ ì² íšŒ:{}{}ì§€ì— ë‹¹êµì€ {1:STATION}ì—ì„œ {2:STATION}ê¹Œì§€ì˜ {0:STRING} ìˆ˜ì†¡ì— ëŒ€í•œ ë³´ì¡°ê¸ˆì„ ì² íšŒí•˜ì˜€ìŠµë‹ˆë‹¤.
STR_2030_SERVICE_SUBSIDY_OFFERED :{BLACK}{BIGFONT}보조금 ì œê³µ 안내:{}{}처ìŒìœ¼ë¡œ {1:STRING}ì—ì„œ {2:STRING}ê¹Œì§€ì˜ {0:STRING}ì„/를 수송하는 회사는 ì§€ì— ë‹¹êµìœ¼ë¡œë¶€í„° ë³´ì¡°ê¸ˆì„ ë°›ê²Œ ë 것입니다!
STR_2031_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}{0:COMPANY}ì—게 보조금 지급!{}{}{2:STATION}ì—ì„œ {3:STATION}ê¹Œì§€ì˜ {1:STRING} ìˆ˜ì†¡ì— ëŒ€í•´ 50%ì˜ ì¶”ê°€ ë³´ì¡°ê¸ˆì„ ë‚´ë…„ê¹Œì§€ 받게 ë©ë‹ˆë‹¤!
STR_2032_SERVICE_SUBSIDY_AWARDED :{BLACK}{BIGFONT}{0:COMPANY}ì—게 보조금 지급!{}{}{2:STATION}ì—ì„œ {3:STATION}ê¹Œì§€ì˜ {1:STRING} ìˆ˜ì†¡ì— ëŒ€í•´ 2ë°°ì˜ ì¶”ê°€ ë³´ì¡°ê¸ˆì„ ë‚´ë…„ê¹Œì§€ 받게 ë©ë‹ˆë‹¤!
@@ -2060,7 +2076,7 @@
STR_SV_STNAME_WOODS :{STRING} 숲
STR_SV_STNAME_LAKESIDE :{STRING} 호숫가
STR_SV_STNAME_EXCHANGE :{STRING} êµí™˜
-STR_SV_STNAME_AIRPORT :{STRING}ê³µí•
+STR_SV_STNAME_AIRPORT :{STRING}
STR_SV_STNAME_OILFIELD :{STRING} ìœ ì „
STR_SV_STNAME_MINES :{STRING} ê´‘ì‚°
STR_SV_STNAME_DOCKS :{STRING}í•
@@ -2794,7 +2810,7 @@
STR_HEADING_FOR_ROAD_DEPOT_SERVICE_VEL :{LTBLUE}{TOWN} ì°¨ê³ ë¡œ ì 검하러 가는중 ({VELOCITY})
STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT :{WHITE}ì°¨ëŸ‰ì„ ì°¨ê³ ë¡œ 보낼 수 없습니다...
STR_9019_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}ì¸ì ‘í•œ ì°¨ê³ ë¥¼ ì°¾ì„ ìˆ˜ 없습니다
-STR_901A_ROAD_VEHICLES_CLICK_ON :{BLACK}ìžë™ì°¨ - click on vehicle for information
+STR_901A_ROAD_VEHICLES_CLICK_ON :{BLACK}ìžë™ì°¨ - ìžì„¸ížˆ ë³´ë ¤ë©´ í´ë¦
STR_901B_BUILD_NEW_ROAD_VEHICLES :{BLACK}새 ìžë™ì°¨ 만들기 (ì°¨ê³ í•„ìš”)
STR_901C_CURRENT_VEHICLE_ACTION :{BLACK}현재 차량 í–‰ë™ - ìš´í–‰/ì •ì§€ì‹œí‚¤ë ¤ë©´ í´ë¦í•˜ì„¸ìš”
STR_901D_SHOW_VEHICLE_S_ORDERS :{BLACK}차량 경로 ë³´ì´ê¸°
@@ -3278,9 +3294,9 @@
STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}ë„“ì´: {NUM} x {NUM}{}ê³ ë„ì°¨: {NUM} m
############ Date formatting
-STR_DATE_TINY :{STRING}-{STRING}-{NUM}
-STR_DATE_SHORT :{STRING} {NUM}
-STR_DATE_LONG :{STRING} {STRING} {NUM}
+STR_DATE_TINY :{2:NUM}.{1:STRING}.{0:STRING}
+STR_DATE_SHORT :{1:NUM}ë…„ {0:STRING}ì›”
+STR_DATE_LONG :{2:NUM}ë…„ {1:STRING}ì›” {0:STRING}ì¼
########
@@ -3340,7 +3356,6 @@
STR_GROUP_RENAME_TIP :{BLACK}ì„ íƒí•œ 그룹 ì´ë¦„ 바꾸기
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}ì „ì²´ ìžë™ êµì²´ë¡œë¶€í„° ì´ ê·¸ë£¹ 보호
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/norwegian_nynorsk.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/norwegian_nynorsk.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1104,9 +1104,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Scroll kart
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :av
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Fart på rullehjul: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Høgreklikk emulering: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Kommando klikk
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Kontroll klikk
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Av
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Automatisk pause når ein startar nytt spel: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Bruk avansert køyretøyliste: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Av
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Eige firma
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Alle firma
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Bruk lasteindikatorar: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Av
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Eige firma
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Alle firma
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Bruk rutetabellar for køyretøy: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Vis rutetabell i klikk i staden for dagar: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Standard Jernbane / etter nytt spel / lasta spel: {ORANGE}{STRING}
@@ -1263,6 +1275,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...bøye er i bruk!
+STR_LANDINFO_COORDS :{BLACK}Koordinatar: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan ikkje fjerne del av stasjonen...
STR_CANT_CONVERT_RAIL :{WHITE}Kan ikkje konvertere jernbanetype her...
@@ -1373,18 +1386,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Beskytt spelet ditt med passord så ikkje kven som helst kan verte med på det
STR_NETWORK_SELECT_MAP :{BLACK}Vel eit kart:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Kva kart vil du spele?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tillatne klientar
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Vel maksimalt antal klientar. Alle plassane treng ikkje å verte tekne
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internett
STR_NETWORK_LAN_INTERNET :LAN / Internett
STR_NETWORK_INTERNET_ADVERTISE :Internett (annonser)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} klient{P "" s}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tillatne klientar
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Vel maksimalt antal klientar. Alle plassane treng ikkje å verte tekne
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} firma
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maks. antal firma:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Begrens tenaren til eit visst antal firma
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} tilskodar{P "" ar}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maks antal tilskodarar
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Begrens tenaren til eit visst antal tilskodarar
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Språk som vert tala på tenaren:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Andre spelarar skal vete kva språk ein talar på denne tenaren
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Start spel
STR_NETWORK_START_GAME_TIP :{BLACK}Start eit nytt nettverksspel frå ein tilfeldig bane, eller eit scenario
STR_NETWORK_LOAD_GAME :{BLACK}Last spel
@@ -1612,9 +1630,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Jernbanespor med normale signal
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Jernbanespor med for-signal
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Jernbanespor med ut-signal
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Jernbane med kombinasjonssignal
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Jernbanespor med normale- og pre-signal
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbanespor med normale- og exit-spor
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbane med vanlege og kombinasjonssignal
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Jernbanespor med pre- og exit-signal
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Jernbane med pre- og kombinasjonssignal
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbane med utgangs- og kombinasjonssignal
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Må fjerne togstasjon først
@@ -3340,7 +3362,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Gje den valde gruppa nytt namn
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klikk for å beskytte denne gruppa frå å global automatisk erstatning
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/piglatin.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/piglatin.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1103,9 +1103,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Ollscray apmay
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Offway
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Apmay ollwheelscray eedspay: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Ightray-ickclay emulationway: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Ommandcay-ickclay
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Ontrolcay-ickclay
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Offway
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Automaticallyway ausepay enwhay artingstay away ewnay amegay: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Useway ethay advancedway ehiclevay istlay: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Offway
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Ownway ompanycay
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Allway ompaniescay
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Useway oadinglay indicatorsway:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Offway
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Ownway ompanycay
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Allway ompaniescay
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Enableway imetablingtay orfay ehiclesvay: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Owshay imetabletay inway ickstay atherray anthay aysday: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Efaultday ailray ypetay (afterway ewnay amegay/amegay oadlay): {ORANGE}{STRING}
@@ -1262,6 +1274,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...uoybay isway inway useway!
+STR_LANDINFO_COORDS :{BLACK}Oordinatescay: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}An'tcay emoveray artpay ofway ationstay...
STR_CANT_CONVERT_RAIL :{WHITE}An'tcay onvertcay ailtyperay erehay...
@@ -1372,18 +1385,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Otectpray ouryay amegay ithway away asswordpay ifway ouyay on'tday antway itway otay ebay ubliclypay accessibleway
STR_NETWORK_SELECT_MAP :{BLACK}Electsay away apmay:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Ichwhay apmay oday ouyay antway otay ayplay?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Axmay ientsclay:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Oosechay ethay aximummay umbernay ofway ientsclay. Otnay allway otsslay eednay otay ebay illedfay
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LANay
STR_NETWORK_INTERNET :Internetway
STR_NETWORK_LAN_INTERNET :LANay / Internetway
STR_NETWORK_INTERNET_ADVERTISE :Internetway (advertiseway)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} ient{P "" s}clay
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Axmay ientsclay:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Oosechay ethay aximummay umbernay ofway ientsclay. Otnay allway otsslay eednay otay ebay illedfay
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} ompan{P y ies}cay
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Axmay ompaniescay:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Imitlay ethay erversay otay away ertaincay amountway ofway ompaniescay
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} ectator{P "" s}spay
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Axmay ectatorsspay:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Imitlay ethay erversay otay away ertaincay amountway ofway ectatorsspay
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Anguagelay okenspay:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Otherway ayersplay illway owknay ichwhay anguagelay isway okenspay onway ethay erversay
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Artstay Amegay
STR_NETWORK_START_GAME_TIP :{BLACK}Artstay away ewnay etworknay amegay omfray away andomray apmay, orway enarioscay
STR_NETWORK_LOAD_GAME :{BLACK}Oadlay Amegay
@@ -1611,9 +1629,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Ailwayray acktray ithway ormalnay ignalssay
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Ailwayray acktray ithway epray-ignalssay
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Ailwayray acktray ithway exitway-ignalssay
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Ailwayray acktray ithway ombocay-ignalssay
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Ailwayray acktray ithway ormalnay andway epray-ignalssay
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Ailwayray acktray ithway ormalnay andway exitway-ignalssay
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Ailwayray acktray ithway ormalnay andway ombocay-ignalssay
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Ailwayray acktray ithway epray- andway exitway-ignalssay
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Ailwayray acktray ithway epray- andway ombocay-ignalssay
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Ailwayray acktray ithway exitway- andway ombocay-ignalssay
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Ustmay emoveray ailwayray ationstay irstfay
@@ -3339,7 +3361,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Enameray ethay electedsay oupgray
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Ickclay otay otectpray isthay oupgray omfray obalglay autoreplaceway
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/romanian.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/romanian.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1020,6 +1020,7 @@
STR_CONFIG_PATCHES_ON :activ
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Afiseazã viteza vehiculelor in bara de jos: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Permite construirea pe coastã si in pantã: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Permite terra-formarea sub cladiri, sine, etc. (auto-pante): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Permite arii de cuprindere mai realistice: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Permite demolarea unui nr. mai mare constructii: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Permite constructia de trenuri foarte lungi: {ORANGE}{STRING}
@@ -1103,9 +1104,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Ruleaza harta
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :inactiva
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Viteza harta la rotita mouse: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Emulatie click-dreapta: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Comanda-click
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control-click
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Oprit
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}La pornirea unui joc nou, pune-l pe pauza: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Foloseste lista avanata de vehicule: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Oprit
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Propria companie
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Toate companiile
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Foloseste indicatorii de incarcare: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Oprit
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Propria companie
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Toate companiile
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Foloseste orarul pentru vehicule: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Arata orarul per programari, nu per zile: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Tipul implicit de sina (dupa joc nou/incarcare joc): {ORANGE}{STRING}
@@ -1262,6 +1275,7 @@
STR_BUOY_IS_IN_USE :{WHITE}... baliza in uz!
+STR_LANDINFO_COORDS :{BLACK}Coordonate: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Nu pot demola o parte din statie...
STR_CANT_CONVERT_RAIL :{WHITE}Nu pot converti linia aici...
@@ -1372,18 +1386,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Protejeazã-ti jocul cu o parolã dacã nu vrei sã intre jucãtori neautorizati
STR_NETWORK_SELECT_MAP :{BLACK}Alege o hartã:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Ce hartã doresti sa joci?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Numar maxim de clienti
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Alege un numar maxim de clienti. Nu trebuie ocupate toate locurile.
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (fă reclamă)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} client{P "" i}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Numar maxim de clienti
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Alege un numar maxim de clienti. Nu trebuie ocupate toate locurile.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} compan{P ie ii}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Maximum companii:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Limiteazã serverle la un anumit numãr companii
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} spectator{P "" i}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maxim spectatori:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Limiteazã serverul la un anumit numãr de spectatori
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Limba vorbită:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Ceilalţi jucători vor şti în ce limbă se discută pe server.
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}ÃŽncepe jocul
STR_NETWORK_START_GAME_TIP :{BLACK}Incepe un joc nou in retea cu o harta aleatoare sau intr-un scenariu
STR_NETWORK_LOAD_GAME :{BLACK}Incarca joc
@@ -1611,9 +1630,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Cale ferată cu semafoare normale
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Cale ferată cu pre-semafoare
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Cale ferată cu semafoare de ieşire
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Cale ferata cu semnale combinate
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Cale ferată cu semafoare normale şi pre-semafoare
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Cale ferată cu semafoare normale şi semafoare de ieşire
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Cale ferata cu semnale normale si combinate
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Cale ferată cu pre-semafoare şi semafoare de ieşire
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Cale ferata cu pre-semnalizate si cu semnale combinate
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Cale ferata cu post-semnalizate si cu semnale combinate
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Trebuie mai intai sa demolati gara
@@ -3339,7 +3362,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Redenumeste grupul selectat
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Click aici pentru a proteja acest grup de la inlocuirile automate globale
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/russian.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/russian.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1105,9 +1105,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Ð´Ð»Ñ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¾Ð±Ð·Ð¾Ñ€Ð°
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :не иÑпользовать
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}СкороÑÑ‚ÑŒ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¾Ð±Ð·Ð¾Ñ€Ð° прокруткой колеÑа мыши: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}ÐмулÑÑ†Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð³Ð¾ клика мыши: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Команд.
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Контрол.
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Выкл.
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Ðвтопауза в начале игры: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}ИÑпользовать раÑширенный ÑпиÑок транÑпорта: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Выкл.
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :СобÑтв.
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Ð’Ñе комп.
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}ИÑпользовать индикатор загрузки: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Выкл.
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :СобÑтв.
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Ð’Ñе комп.
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}ИÑпользовать раÑпиÑание Ð´Ð»Ñ Ñ‚Ñ€Ð°Ð½Ñпорта: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Показывать раÑпиÑание в 'тиках', а не днÑÑ…: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Тип Ñ€ÐµÐ»ÑŒÑ Ð¿Ð¾ умолчанию (поÑле Ñтарта/загрузки игры): {ORANGE}{STRING}
@@ -1264,6 +1276,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...Ñтот буй иÑпользуетÑÑ!
+STR_LANDINFO_COORDS :{BLACK}Координаты: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Ðевозможно удалить чаÑÑ‚ÑŒ Ñтанции...
STR_CANT_CONVERT_RAIL :{WHITE}Ðевозможно преобразовать тип рельÑа здеÑÑŒ...
@@ -1374,18 +1387,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Защитите вашу игру паролем, еÑли вы не хотите, чтобы к ней могли подключитьÑÑ Ð²Ñе желающие
STR_NETWORK_SELECT_MAP :{BLACK}Выбор карты:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Какую карту вы хотите играть?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}МакÑ. клиентов:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Выбор макÑимального чиÑла клиентов. Ðе вÑе меÑта должны быть занÑÑ‚Ñ‹
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ñеть
STR_NETWORK_INTERNET :Интернет
STR_NETWORK_LAN_INTERNET :Лок. Ñеть/Интернет
STR_NETWORK_INTERNET_ADVERTISE :Интернет (объÑвл.)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} клиент{P "" а ов}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}МакÑ. клиентов:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Выбор макÑимального чиÑла клиентов. Ðе вÑе меÑта должны быть занÑÑ‚Ñ‹
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} компан{P Ð¸Ñ Ð¸Ð¸ ий}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}МакÑ. компаний:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Ограничить макÑимальное чиÑло компаний на Ñервере
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} наблюдател{P ÑŒ Ñ ÐµÐ¹}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}МакÑ. наблюдателей:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Ограничить макÑимальное количеÑтво наблюдателей на Ñервере
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Язык общениÑ:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Другие игроки будут знать, на каком Ñзыке говорÑÑ‚ на Ñервере
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}ЗапуÑк игры
STR_NETWORK_START_GAME_TIP :{BLACK}ЗапуÑк новой Ñетевой игры Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð»ÑŒÐ½Ð¾Ð¹ карты или ÑценариÑ
STR_NETWORK_LOAD_GAME :{BLACK}Загрузка игры
@@ -1613,9 +1631,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Ж/Д путь Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ Ñигналом
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Ж/Д путь Ñ Ð¿Ñ€ÐµÑигналами
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Ж/Д путь Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ð¼Ð¸ Ñигналами
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Ж/д путь Ñ ÐºÐ¾Ð¼Ð±Ð¾-Ñигналами
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :РельÑÑ‹ и нормальными и пре-Ñигналами
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :РельÑÑ‹ и нормальными и выходными Ñигналами
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Ж/д путь Ñ Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ и комбо-Ñигналами
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :РельÑÑ‹ Ñ Ð¿Ñ€Ðµ- и выходными Ñигналами
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Ж/д путь Ñ Ð¿Ñ€Ðµ- и комбо-Ñигналами
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Ж/д путь Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð½Ñ‹Ð¼Ð¸ и комбо-Ñигналами
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Сначала удалите ЖД Ñтанцию
--- a/src/lang/slovak.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/slovak.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1084,6 +1084,7 @@
STR_CONFIG_PATCHES_ON :Zap.
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Zobrazit rychlost vozidla v stavovej liste: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Umoznit vystavbu na svahoch a na pobrezi: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Povolit úpravy terénu pod budovami, kolajami, ... : {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Povolit realistickejsiu velkost oblasti pokrytia: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Umoznit odstranenie viacerych mestskych ciest, mostov, ... : {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Umoznit stavbu dlhych vlakov: {ORANGE}{STRING}
@@ -1167,9 +1168,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Posúvat mapu
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Vypnuté
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Rychlost posúvania pohladu: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Funkcia pravého tlacidla myši: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :PrÃkaz - klik
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control - klik
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Ziadna
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Automaticka pauza pri Å¡tarte novej hry: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Použit vylepšený zoznam vozidiel: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Vypnutý
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Vlastná spolocnost
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :VÅ¡etky spolocnosti
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Zobrazovat ukazovatele nakladania a vykladania: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Vypnuté
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Vlastná spolocnost
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :VÅ¡etky spolocnosti
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Povolit cestovné poriadky pre vozidlá: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Zobrazovat cestovné poriadky v tikoch namiesto dnÃ: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Predvolený typ kolajà (v novej/nahranej hre): {ORANGE}{STRING}
--- a/src/lang/slovenian.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/slovenian.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1062,6 +1062,7 @@
STR_CONFIG_PATCHES_ON :Vklopi
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Prikaz hitrosti vozil v vrstici stanja: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Dovoli gradnjo hiš na nagibih ali obali: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Dovoli oblikovanje terena pod objekti (tiri, hiše) (samonaklon): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Dovoli bolj resniÄni obmoÄni zajem postaj: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Dovoli odstanitev mestnih cest, mostov, itd.: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}OmogoÄi gradnjo zelo dolgih vlakov: {ORANGE}{STRING}
@@ -1145,9 +1146,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Premikaj zemljevid
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Izklopljeno
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Hitrost premika s kolescem miške: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Emulacija desnega gumba miške: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Ukaz-klik
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Kontrola-klik
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Izklop
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Avtomatsko pavziraj ob zagonu nove igre: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Uporabi napreden seznam vozil: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Izklop
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Lastno podjetje
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Vsa podjetja
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Uporabi pregledno polnenje: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Izklop
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Lastno podjetje
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Vsa podjetja
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}OmogoÄi Äasovne tabele vozil: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Prikaz Äasovnih tabel v pikah namesto dneh: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Privzeta vrsta železnice (ob zagonu nove igre): {ORANGE}{STRING}
--- a/src/lang/spanish.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/spanish.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1021,6 +1021,7 @@
STR_CONFIG_PATCHES_ON :SÃ
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Mostrar velocidad del vehÃculo en la barra de estado: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Permitir la construcción en cuestas y orillas: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Permitir pendientes bajo construcciones, carreteras, etc. (autopendiente): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Permitir tamaño del área de captación más realista: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Permitir demoler más propiedades de poblaciones: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Permitir la construcción de trenes muy largos: {ORANGE}{STRING}
@@ -1104,9 +1105,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Scroll sobre el mapa
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Nada
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Velocidad del scroll sobre el mapa: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Emulación del botón derecho: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Tecla Command
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Tecla Control
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Desactivado
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Automaticamente hace pausa cuando empieza un juego nuevo: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Usar la lista avanza de vehÃculos: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Apagado
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Propia empresa
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Todas las empresas
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Usar indicadores de carga: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Apagado
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Propia empresa
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Todas las empresas
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Activar horarios para vehÃculos: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Mostrar horario en ticks en vez de en dias: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Rail por defecto (juego nuevo/cargar juego): {ORANGE}{STRING}
@@ -1325,7 +1338,7 @@
STR_NETWORK_MULTIPLAYER :{WHITE}Multijugador
-STR_NETWORK_PLAYER_NAME :{BLACK}Nombre Jugad.:
+STR_NETWORK_PLAYER_NAME :{BLACK}Nombre del Jugador:
STR_NETWORK_ENTER_NAME_TIP :{BLACK}Este es el nombre con el que otros jugadores le identificarán
STR_NETWORK_CONNECTION :{BLACK}Conexión:
STR_NETWORK_CONNECTION_TIP :{BLACK}Seleccione entre un juego en Internet o en una Red de Ãrea Local
--- a/src/lang/swedish.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/swedish.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1103,9 +1103,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Scrolla kartan
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Avstängd
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Mushjulshastighet: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Högerklicksemulering: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Command-klick
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Control-klick
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Av
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Pausa automatiskt vid start av nytt spel: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Använd den avancerade fordonslistan: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Av
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Eget företag
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Alla företag
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Använd lastningsindikatörer: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Av
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Eget företag
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Alla företag
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Aktivera Tidtabeller för fordon: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Visa tidtabeller räknat i ticks istället för dagar: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Standard järnvägsräls (efter nytt/laddat spel): {ORANGE}{STRING}
@@ -1262,6 +1274,7 @@
STR_BUOY_IS_IN_USE :{WHITE}... bojen används!
+STR_LANDINFO_COORDS :{BLACK}Koordinater: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}Kan ej ta bort del av station...
STR_CANT_CONVERT_RAIL :{WHITE}Kan inte konvertera spårtyp här...
@@ -1372,18 +1385,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Skydda spelet med ett lösenord så att inte andra än dom som har lösenordet kan gå med i spelet
STR_NETWORK_SELECT_MAP :{BLACK}Välj karta:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Vilken karta vill du spela?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max antal tillåtna klienter:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Välj max antal tillåtna klienter. Alla platser måste inte fyllas.
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (publik)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} klient{P "" s}
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max antal tillåtna klienter:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Välj max antal tillåtna klienter. Alla platser måste inte fyllas.
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} företag{P y ies}
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max företag:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Begränsa antalet företag på servern
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} åskådare{P "" s}
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max observatörer:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Begränsa antalet observatörer på servern
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Språk som talas:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Andra spelare kommer vara medvetna vilket språk som talas på servern.
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Starta spelet
STR_NETWORK_START_GAME_TIP :{BLACK}Starta ett nytt spel med en slumpmässig karta eller från ett scenario
STR_NETWORK_LOAD_GAME :{BLACK}Ladda spel
@@ -1611,9 +1629,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Järnväg med vanliga signaler
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Järnväg med för-signaler
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Järnväg med utgående signaler
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Tågspår med kombinationsignaler
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Järnväg med normala signaler och för-signaler
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Järnväg med normala signaler och utfarts-signaler
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Tågspår med normal- och kombinationsignaler
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Järnväg med för- och utfarts-signaler
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Tågspår med för- och kombinationsignaler
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Tågspår med utgångs- och kombinationsignaler
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Måste ta bort tågstationen först
@@ -3311,6 +3333,10 @@
STR_GROUP_ALL_ROADS :Alla vägfordon
STR_GROUP_ALL_SHIPS :Alla skepp
STR_GROUP_ALL_AIRCRAFTS :Alla flygplan
+STR_GROUP_DEFAULT_TRAINS :Ogrupperade tåg
+STR_GROUP_DEFAULT_ROADS :Ogrupperade vägfordon
+STR_GROUP_DEFAULT_SHIPS :Ogrupperade skepp
+STR_GROUP_DEFAULT_AIRCRAFTS :Ogrupperade flygmaskiner
STR_GROUP_TINY_NUM :{TINYFONT}{COMMA}
STR_GROUP_ADD_SHARED_VEHICLE :Lägg till delade fordon
STR_GROUP_REMOVE_ALL_VEHICLES :Ta bort alla fordon
@@ -3335,7 +3361,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Döp om den valda gruppen
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Klicka för att skydda denna grupp från globalt autoutbyte
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/traditional_chinese.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/traditional_chinese.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1020,6 +1020,7 @@
STR_CONFIG_PATCHES_ON :é–‹
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}於狀態列顯示速度:{ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}於斜å¡å’Œå²¸é‚Šèˆˆå»ºï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}å…許在建物或是軌é“底下改變地形斜度 (autoslope):{ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}真實大å°çš„收集範åœï¼š{ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}å¯ç§»é™¤æ›´åŸŽéŽ®æ“有的é“路,橋樑ç‰ï¼š{ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}æ高列車長度é™åˆ¶ï¼š{ORANGE}{STRING}
@@ -1103,9 +1104,21 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :æ²å‹•åœ°åœ–
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :關閉
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}滾輪地圖æ²å‹•é€Ÿåº¦ï¼š {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}å³éµæ¨¡æ“¬ï¼š{ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :命令éµ
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :控制éµ
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :ç„¡
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}自動在開始新éŠæˆ²æ™‚æš«åœï¼š{ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}使用進階載具å單: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :ç„¡
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :自家公å¸
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :所有公å¸
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}使用載入指示:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :ç„¡
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :自家公å¸
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :所有公å¸
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}啟用é‹å…·æ™‚刻表功能:{ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}顯示時刻表時以 Tick 為單ä½è€Œä¸æ˜¯æ—¥ï¼š{ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}é è¨çš„路軌類型 (將在新éŠæˆ²æˆ–載入éŠæˆ²æ™‚生效):{ORANGE}{STRING}
@@ -1262,6 +1275,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...浮標æ£è¢«ä½¿ç”¨!
+STR_LANDINFO_COORDS :{BLACK}座標:{LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}ä¸èƒ½ç§»é™¤è»Šç«™éƒ¨ä»½...
STR_CANT_CONVERT_RAIL :{WHITE}無法轉æ›è»Œé“種類...
@@ -1372,18 +1386,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}如果您ä¸æƒ³è®“大眾連線的話,å¯ä»¥ç”¨å¯†ç¢¼ä¿è·éŠæˆ²
STR_NETWORK_SELECT_MAP :{BLACK}é¸æ“‡åœ°åœ–:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}您想玩哪個地圖?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}客戶端上é™ï¼š
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}é¸æ“‡é€£ç·šäººæ•¸ä¸Šé™ã€‚未必æ¯å€‹åé¡éƒ½éœ€é€£ç·š
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :局域網絡(LAN)
STR_NETWORK_INTERNET :互è¯ç¶²
STR_NETWORK_LAN_INTERNET :局域網/互è¯ç¶²
STR_NETWORK_INTERNET_ADVERTISE :Internet (廣告)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} 玩家
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}客戶端上é™ï¼š
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}é¸æ“‡é€£ç·šäººæ•¸ä¸Šé™ã€‚未必æ¯å€‹åé¡éƒ½éœ€é€£ç·š
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} å…¬å¸
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}å…¬å¸ä¸Šé™ï¼š
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}é™åˆ¶ä¼ºæœå™¨å¯ä»¥å»ºç«‹çš„å…¬å¸æ•¸
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} 觀戰
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}觀看者上é™ï¼š
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}é™åˆ¶å¯åŠ 入的觀察者數é‡
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}所用的語言:
STR_NETWORK_LANGUAGE_TIP :{BLACK}讓其他人知é“這個伺æœå™¨ä½¿ç”¨çš„交談語言
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}開始éŠæˆ²
STR_NETWORK_START_GAME_TIP :{BLACK}以隨機地圖或劇本開始新的網路éŠæˆ²
STR_NETWORK_LOAD_GAME :{BLACK}載入éŠæˆ²
@@ -1611,9 +1630,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :有一般號誌的éµè»Œ
STR_RAILROAD_TRACK_WITH_PRESIGNALS :有入å£è™ŸèªŒçš„éµè»Œ
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :有出å£è™ŸèªŒçš„éµè»Œ
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :有組åˆè™ŸèªŒçš„éµè»Œ
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :有一般號誌åŠå…¥å£è™ŸèªŒçš„éµè»Œ
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :有一般號誌åŠå‡ºå£è™ŸèªŒçš„éµè»Œ
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :有一般號誌åŠçµ„åˆè™ŸèªŒçš„éµè»Œ
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :有入å£è™ŸèªŒåŠå‡ºå£è™ŸèªŒçš„éµè»Œ
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :有入å£è™ŸèªŒåŠçµ„åˆè™ŸèªŒçš„éµè»Œ
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :有出å£è™ŸèªŒåŠçµ„åˆè™ŸèªŒçš„éµè»Œ
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}å¿…é ˆå…ˆç§»é™¤ç«è»Šç«™
@@ -3339,7 +3362,6 @@
STR_GROUP_RENAME_TIP :{BLACK}為群組é‡æ–°å‘½å
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}點æ¤å¯é¿å…æ¤ç¾¤çµ„內的è¨å‚™è¢«ä¾†è‡ªå…¨åŸŸçš„è¨å®šæ›¿æ›
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
--- a/src/lang/turkish.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/turkish.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1020,6 +1020,7 @@
STR_CONFIG_PATCHES_ON :Açık
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Durum çubuğunda arabanın hızını göster: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Sahile ve eÄŸimli araziye inÅŸaat: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}Binaların, yolların, vb. altında kazıya izin ver (otomatik betonlama): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Daha gerçekçi kapsama alanı: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Şehrin yollarını, köprülerini yıkma izinli: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Çok uzun trenlere izin ver: {ORANGE}{STRING}
@@ -1033,6 +1034,9 @@
STR_CONFIG_PATCHES_SELECTGOODS :{LTBLUE}Sadece istek varsa kargo kabul edilsin: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGBRIDGES :{LTBLUE}Çok uzun köprülere izin ver: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GOTODEPOT :{LTBLUE}Garaja git talimati etkin: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD :{LTBLUE}Üretim fabrikalarının yapım yöntemi: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :hiçbiri
+STR_CONFIG_PATCHES_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :diÄŸer fabrikalar gibi
STR_CONFIG_PATCHES_MULTIPINDTOWN :{LTBLUE}Bir şehirde birden fazla aynı fabrika olması izinli: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SAMEINDCLOSE :{LTBLUE}Aynı tür fabrikalar yan yana yapılabilir: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGDATE :{LTBLUE}Durum çubuğunda uzun tarih göster: {ORANGE}{STRING}
@@ -1099,9 +1103,20 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Haritayı kaydır
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Kapalı
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Tekerlek hızı: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}Sağ tıklama öykünümü: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_COMMAND :Komut-tıklama
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_CONTROL :Kontrol-tıklama
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Kapalı
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Yeni bir oyun başlatırken zamanı duraklat: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Gelişmiş araç listesini kullan: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Kendi ÅŸirketim
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Tüm şirketler
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}Araç yükleme bilgisini göster: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :Kapalı
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :Kendi ÅŸirketim
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :Tüm şirketler
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Araç zaman çizelgesi açık: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Normal Ray
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Elektrikli Ray
@@ -1111,6 +1126,7 @@
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :En yenisi
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :En çok kullanılan
+STR_CONFIG_PATCHES_ALWAYS_BUILD_INFRASTRUCTURE :{LTBLUE}Hiç uygun araç olmasa da inşa araçlarını göster: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Her oyuncu için en fazla tren: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Her oyuncu için en fazla araba: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_AIRCRAFT :{LTBLUE}Her oyuncu için en fazla uçak: {ORANGE}{STRING}
@@ -1145,6 +1161,7 @@
STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}Bu tarihten önce ışık yerine semafor kullan: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID :{WHITE}Senaryo düzenleyicisinde "yolsuz" şehir seçeneği kullanılamaz
+STR_CONFIG_PATCHES_TOWN_LAYOUT :{LTBLUE}Şehir yol yerleşimini seç: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOWN_LAYOUT_NO_ROADS :yolsuz
STR_CONFIG_PATCHES_TOWN_LAYOUT_DEFAULT :varsayılan
STR_CONFIG_PATCHES_TOWN_LAYOUT_BETTER_ROADS :daha iyi yollar
@@ -1164,6 +1181,7 @@
STR_CONFIG_PATCHES_TOWN_GROWTH_FAST :Hızlı
STR_CONFIG_PATCHES_TOWN_GROWTH_VERY_FAST :Çok Hızlı
STR_CONFIG_PATCHES_LARGER_TOWNS :{LTBLUE}Kasabaların şehir olması için gerekli nüfus: {ORANGE}1 in {STRING}
+STR_CONFIG_PATCHES_LARGER_TOWNS_DISABLED :{LTBLUE}Şehir olacak kasabaların oranı: {ORANGE}Hiçbiri
STR_CONFIG_PATCHES_CITY_SIZE_MULTIPLIER :{LTBLUE}Birincil şehir büyüklüğü çarpanı: {ORANGE}{STRING}
STR_CONFIG_PATCHES_GUI :{BLACK}Arayüz
@@ -1253,6 +1271,7 @@
STR_BUOY_IS_IN_USE :{WHITE}...samandıra kullanımda!
+STR_LANDINFO_COORDS :{BLACK}Koordinatlar: {LTBLUE}{NUM}x{NUM}x{NUM} ({STRING})
STR_CANT_REMOVE_PART_OF_STATION :{WHITE}İstasyonun parçasi kaldırılamaz...
STR_CANT_CONVERT_RAIL :{WHITE}Ray türü değiştirilemiyor...
@@ -1363,18 +1382,23 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Erişimi kısıtlamak için oyuna parola koy
STR_NETWORK_SELECT_MAP :{BLACK}Harita seç:
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Hangi haritada oynamak istiyorsun?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Ä°zin verilen en fazla oyuncu:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}İzin verilen en fazla oyuncu sayısını seç. Her yerin dolması gerekmez
+STR_NETWORK_LAN_INTERNET_COMBO :{BLACK}{SKIP}{STRING}
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Ä°nternet
STR_NETWORK_LAN_INTERNET :LAN / internet
STR_NETWORK_INTERNET_ADVERTISE :Ä°nternet (reklam vererek)
+STR_NETWORK_CLIENTS_SELECT :{BLACK}{SKIP}{SKIP}{NUM} istemci
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Ä°zin verilen en fazla oyuncu:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}İzin verilen en fazla oyuncu sayısını seç. Her yerin dolması gerekmez
+STR_NETWORK_COMPANIES_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{NUM} ÅŸirket
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}En fazla ÅŸirket:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Sunucudaki şirket sayısını sınırla
+STR_NETWORK_SPECTATORS_SELECT :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{NUM} seyirci
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}En fazla izleyici:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Sunucudaki izleyici sayısını sınırla
STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}KonuÅŸulan dil:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Diğer oyuncular sunucuda hangi dilin konuşulacağını bilecek
+STR_NETWORK_LANGUAGE_COMBO :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Oyunu BaÅŸlat
STR_NETWORK_START_GAME_TIP :{BLACK}Rastgele harita ya da senaryoda network oyunu aç
STR_NETWORK_LOAD_GAME :{BLACK}Oyun Yükle
@@ -1385,22 +1409,28 @@
STR_NETWORK_LANG_ENGLISH :Ä°ngilizce
STR_NETWORK_LANG_GERMAN :Almanca
STR_NETWORK_LANG_FRENCH :Fransızca
+STR_NETWORK_LANG_BRAZILIAN :Brezilyaca
STR_NETWORK_LANG_BULGARIAN :Bulgarca
STR_NETWORK_LANG_CHINESE :Çince
STR_NETWORK_LANG_CZECH :Çekce
+STR_NETWORK_LANG_DANISH :Danimarkaca
+STR_NETWORK_LANG_DUTCH :Hollandaca
STR_NETWORK_LANG_FINNISH :Fince
STR_NETWORK_LANG_HUNGARIAN :Bulgarca
+STR_NETWORK_LANG_ICELANDIC :Ä°zlandaca
STR_NETWORK_LANG_ITALIAN :Ä°talyanca
STR_NETWORK_LANG_JAPANESE :Japonca
STR_NETWORK_LANG_KOREAN :Korece
STR_NETWORK_LANG_LITHUANIAN :Litvanyaca
STR_NETWORK_LANG_NORWEGIAN :Norveççe
+STR_NETWORK_LANG_POLISH :Lehçe
STR_NETWORK_LANG_PORTUGUESE :Portekizce
STR_NETWORK_LANG_ROMANIAN :Romanca
STR_NETWORK_LANG_RUSSIAN :Rusça
STR_NETWORK_LANG_SLOVAK :Slovakça
STR_NETWORK_LANG_SLOVENIAN :Slovence
STR_NETWORK_LANG_SPANISH :Ä°spanyolca
+STR_NETWORK_LANG_SWEDISH :İsveççe
STR_NETWORK_LANG_TURKISH :Türkçe
STR_NETWORK_LANG_UKRAINIAN :Ukraynaca
############ End of leave-in-this-order
@@ -1595,9 +1625,13 @@
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Normal sinyalli ray
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Ön-sinayalli ray
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Çıkış-sinyalli ray
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :BirleÅŸik sinyalli ray
STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Normal ve ön sinyalli ray
STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Normal ve çıkış sinyalli ray
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Normal ve birleÅŸik sinyalli ray
STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Ön ve Çıkış sinyalli ray
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Ön ve birleşik sinyalli ray
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Çıkış ve birleşik sinyalli ray
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Önce tren istasyonu kaldırılmalı
@@ -1942,6 +1976,12 @@
STR_4829_REQUIRES :{BLACK}Ä°stenenler: {YELLOW}{STRING}, {STRING}, {STRING}
############ range for requires ends
+############ range for produces starts
+STR_INDUSTRY_WINDOW_WAITING_FOR_PROCESSING :{BLACK}Ä°ÅŸlenmeyi bekleyen kargo:
+STR_INDUSTRY_WINDOW_WAITING_STOCKPILE_CARGO :{YELLOW}{CARGO}{BLACK}
+STR_4827_PRODUCES :{BLACK}Ãœretir: {YELLOW}{STRING}
+STR_4828_PRODUCES :{BLACK}Ãœretir: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
STR_482A_PRODUCTION_LAST_MONTH :{BLACK}Geçen ayki üretim:
STR_482B_TRANSPORTED :{YELLOW}{CARGO}{BLACK} (%{COMMA} tasindi)
@@ -2704,7 +2744,7 @@
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Ağırlık: {LTBLUE}{WEIGHT_S} {BLACK}Güç: {LTBLUE}{POWER}{BLACK} Mak. hız: {LTBLUE}{VELOCITY}
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Ağırlık: {LTBLUE}{WEIGHT_S} {BLACK}Güç: {LTBLUE}{POWER}{BLACK} Mak. hız: {LTBLUE}{VELOCITY} {BLACK}Max. Ç.G.: {LTBLUE}{FORCE}
STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Bu seneki kâr: {LTBLUE}{CURRENCY} (geçen sene: {CURRENCY})
-STR_8860_RELIABILITY_BREAKDOWNS :{BLACK}güvenilirlik: {LTBLUE}%{COMMA} {BLACK}Son servisteki bozulmalar: {LTBLUE}{COMMA}
+STR_8860_RELIABILITY_BREAKDOWNS :{BLACK}Güvenilirlik: {LTBLUE}%{COMMA} {BLACK}Son servisteki bozulmalar: {LTBLUE}{COMMA}
STR_8861_STOPPED :{RED}Durdu
STR_8862_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Tehlikedeki tren sinyali geçemez...
STR_8863_CRASHED :{RED}Çarptı!
@@ -2756,7 +2796,7 @@
STR_900D_AGE_RUNNING_COST_YR :{BLACK}Yaş: {LTBLUE}{STRING}{BLACK} Bakım: {LTBLUE}{CURRENCY}/sene
STR_900E_MAX_SPEED :{BLACK}Mak. hız: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Bu seneki kâr: {LTBLUE}{CURRENCY} (geçen sene: {CURRENCY})
-STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}güvenilirlik: {LTBLUE}%{COMMA} {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
+STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Güvenilirlik: {LTBLUE}%{COMMA} {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Yapım yılı: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kapasite: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...bir araba garajında duruyor olmalı
@@ -3284,6 +3324,10 @@
STR_GROUP_ALL_ROADS :Bütün arabalar
STR_GROUP_ALL_SHIPS :Bütün Gemiler
STR_GROUP_ALL_AIRCRAFTS :Bütün uçaklar
+STR_GROUP_DEFAULT_TRAINS :Gruplanmamış trenler
+STR_GROUP_DEFAULT_ROADS :Gruplanmamış arabalar
+STR_GROUP_DEFAULT_SHIPS :Gruplanmamış gemiler
+STR_GROUP_DEFAULT_AIRCRAFTS :Gruplanmamış uçaklar
STR_GROUP_TINY_NUM :{TINYFONT}{COMMA}
STR_GROUP_ADD_SHARED_VEHICLE :Bütün paylaşılan araçlar
STR_GROUP_REMOVE_ALL_VEHICLES :Bütün araçları çıkar
@@ -3308,7 +3352,6 @@
STR_GROUP_RENAME_TIP :{BLACK}Seçili grubun ismini değiştir
STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Bu grubu otomatik yenilemeden ayrı tutmak için tıklayın
-
STR_COMPANY_NAME :{COMPANY}
STR_ENGINE_NAME :{ENGINE}
STR_GROUP_NAME :{GROUP}
@@ -3323,3 +3366,7 @@
STR_PREVIOUS_SIGN_TOOLTIP :{BLACK}Önceki tabelaya git
########
+
+STR_FUND_NEW_INDUSTRY :{BLACK}Parayla Yap
+STR_BUILD_NEW_INDUSTRY :{BLACK}Ä°nÅŸa et
+STR_INDUSTRY_SELECTION_HINT :{BLACK}Bu listeden uygun fabrikayı seçin
--- a/src/lang/ukrainian.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/ukrainian.txt Sun Sep 23 07:37:38 2007 +0000
@@ -1146,6 +1146,7 @@
STR_CONFIG_PATCHES_ON :Так
STR_CONFIG_PATCHES_VEHICLESPEED :{LTBLUE}Показувати швидкіÑÑ‚ÑŒ у Ñ€Ñдку Ñтану: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BUILDONSLOPES :{LTBLUE}Будувати на Ñхилах та узбережжÑÑ…: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_AUTOSLOPE :{LTBLUE}МінÑти Ñхили під будівлÑми, дорогами тощо (автоÑхил): {ORANGE}{STRING}
STR_CONFIG_PATCHES_CATCHMENT :{LTBLUE}Великий район обÑлуговуваннÑ: {ORANGE}{STRING}
STR_CONFIG_PATCHES_EXTRADYNAMITE :{LTBLUE}Переміщувати дороги, моÑти та іншу влаÑніÑÑ‚ÑŒ міÑта: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAMMOTHTRAINS :{LTBLUE}Будувати дуже довгі поїзди: {ORANGE}{STRING}
@@ -1229,9 +1230,19 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Прокрутка карти
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Відкл.
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}ШвидкіÑÑ‚ÑŒ прокрутки колеÑом миші: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU :{LTBLUE}ЕмулÑÑ†Ñ–Ñ Ð·Ð° правим клацом миші: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU_OFF :Відкл.
+
STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME :{LTBLUE}Ðвтоматично Ñтавити паузу при Ñтарті нової гри: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}ВикориÑтовувати покращений ÑпиÑок транÑпорту: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :відкл.
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :ВлаÑна компаніÑ
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :УÑÑ– компанії
STR_CONFIG_PATCHES_LOADING_INDICATORS :{LTBLUE}ВикориÑтовувати індикатори завантаженнÑ: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OFF :відкл.
+STR_CONFIG_PATCHES_LOADING_INDICATORS_OWN :ВлаÑна компаніÑ
+STR_CONFIG_PATCHES_LOADING_INDICATORS_ALL :УÑÑ– компанії
STR_CONFIG_PATCHES_TIMETABLE_ALLOW :{LTBLUE}Дозволити розклад руху Ð´Ð»Ñ Ñ‚Ñ€Ð°Ð½Ñпорту: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS :{LTBLUE}Показувати розклад в одиницÑÑ…, а не в днÑÑ…: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE :{LTBLUE}Тип колії за замовчаннÑм (при новій грі/завантаженні): {ORANGE}{STRING}
--- a/src/lang/unfinished/afrikaans.txt Sun Sep 09 21:14:29 2007 +0000
+++ b/src/lang/unfinished/afrikaans.txt Sun Sep 23 07:37:38 2007 +0000
@@ -3,6 +3,8 @@
##isocode af_ZA
##plural 0
+#
+
##id 0x0000
STR_NULL :
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Oor kant van kaart
@@ -10,10 +12,10 @@
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nie genoeg kontant nie - vereis {CURRENCY}
STR_0004 :{WHITE}{CURRENCY}
STR_EMPTY :
-STR_0007_FLAT_LAND_REQUIRED :{WHITE}Platte land vereis
+STR_0007_FLAT_LAND_REQUIRED :{WHITE}Vereis platte land
STR_0008_WAITING :{BLACK}Wagtend: {WHITE}{STRING}
STR_0009 :{WHITE}{CARGO}
-STR_000A_EN_ROUTE_FROM :{WHITE}{CARGO}{YELLOW} (onderweg van
+STR_000A_EN_ROUTE_FROM :{WHITE}{CARGO}{YELLOW} (op pad van
STR_000B :{YELLOW}{STATION})
STR_000C_ACCEPTS :{BLACK}Aanvaar: {WHITE}
STR_000D_ACCEPTS :{BLACK}Aanvaar: {GOLD}
@@ -219,7 +221,7 @@
STR_00FC_FOREST :{BLACK}{TINYFONT}Woud
STR_00FD_SAWMILL :{BLACK}{TINYFONT}Saagmeul
STR_00FE_OIL_REFINERY :{BLACK}{TINYFONT}Olie Raffineerdery
-STR_00FF_FARM :{BLACK}{TINYFONT}Plaas
+STR_00FF_FARM :{BLACK}{TINYFONT}Boerdery
STR_0100_FACTORY :{BLACK}{TINYFONT}Fabriek
STR_0101_PRINTING_WORKS :{BLACK}{TINYFONT}Drukwerke
STR_0102_OIL_WELLS :{BLACK}{TINYFONT}Olie Bron
@@ -268,7 +270,7 @@
STR_012D :{WHITE}{STRING}
STR_012E_CANCEL :{BLACK}Kanselleer
STR_012F_OK :{BLACK}OK
-STR_0130_RENAME :{BLACK}Hernaam
+STR_0130_RENAME :{BLACK}Hernoem
STR_0131_TOO_MANY_NAMES_DEFINED :{WHITE}Te veel naame bepaal
STR_0132_CHOSEN_NAME_IN_USE_ALREADY :{WHITE}Verkieste naam reeds in gebruik
@@ -307,7 +309,7 @@
STR_0148_GAME_OPTIONS :{BLACK}Spel Opsies
STR_0150_SOMEONE :iemand{SKIP}{SKIP}
-STR_0151_MAP_OF_WORLD :Kaart van die wereld
+STR_0151_MAP_OF_WORLD :Kaart van die wêreld
STR_0152_TOWN_DIRECTORY :Stad index
STR_0153_SUBSIDIES :Subsidiëe
@@ -391,6 +393,10 @@
STR_ENGINE_SORT_RUNNING_COST :Loopkoste
STR_ENGINE_SORT_CARGO_CAPACITY :Vrag Kapasiteit
STR_NO_WAITING_CARGO :{BLACK}Geen vrag van enige tipe is op wag
+STR_AVAILABLE_TRAINS :{BLACK}Beskikbaar Treine
+STR_AVAILABLE_ROAD_VEHICLES :{BLACK}Beskikbaar Voertuie
+STR_AVAILABLE_SHIPS :{BLACK}Beskikbaar Skepe
+STR_AVAILABLE_AIRCRAFT :{BLACK}Beskikbaar Vliegtuie
STR_AVAILABLE_ENGINES_TIP :{BLACK}Wys 'n lys van beskikbaare enjin tipes vir die voertiug tipe.
STR_MANAGE_LIST :{BLACK}Bestuur lys
STR_MANAGE_LIST_TIP :{BLACK}Stuur instruksies na alle voertuie in die lys
@@ -420,7 +426,7 @@
STR_016F :{TINYFONT}{STRING}{} {STRING}{}{NUM}
STR_0170 :{TINYFONT}{STRING}-
STR_0171_PAUSE_GAME :{BLACK}Pouseer spel
-STR_0172_SAVE_GAME_ABANDON_GAME :{BLACK}Bewaar spel. verlaat spel, verlaat
+STR_0172_SAVE_GAME_ABANDON_GAME :{BLACK}Bewaar spel. verlaat spel, uitgang
STR_0173_DISPLAY_LIST_OF_COMPANY :{BLACK}Vertoon lys van maatskappy se stasies
STR_0174_DISPLAY_MAP :{BLACK}Vertoon kaart
STR_0175_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Vertoon kaart, stad index
@@ -473,7 +479,7 @@
STR_019D_AIRCRAFT :Vliegtuig
STR_019E_SHIP :Skip
STR_019F_TRAIN :Trein
-STR_01A0_IS_GETTING_OLD :{WHITE}{STRING} {COMMA} is besig om out te word
+STR_01A0_IS_GETTING_OLD :{WHITE}{STRING} {COMMA} raak nou oud
STR_01A1_IS_GETTING_VERY_OLD :{WHITE}{STRING} {COMMA} is besig om baie oud te word
STR_01A2_IS_GETTING_VERY_OLD_AND :{WHITE}{STRING} {COMMA} is besig om baie oud te word en moet dringend vervang word
STR_01A3_LAND_AREA_INFORMATION :{WHITE}Land Area Inligting
@@ -561,11 +567,11 @@
STR_01F3_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Kies 'alle liedjies' musiek lys
STR_01F4_SELECT_OLD_STYLE_MUSIC :{BLACK}Kies 'ou styl musiek' musiek lys
STR_01F5_SELECT_NEW_STYLE_MUSIC :{BLACK}Kies 'nuwe styl musiek' musiek lys
-STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Kies 'Gewoonte 1' musiek lys
-STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Kies 'Gewoonte 2' musiek lys
-STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Reinig huidige musiek keuse (slegs Gewoonte 1 of Gewoonte 2)
+STR_01F6_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Kies 'Gewoonte 1' (gebruiker-gestel) musiek lys
+STR_01F7_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Kies 'Gewoonte 2' (gebruiker-gestel) musiek lys
+STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Reinig huidige musiek keuse (slegs Gewoonte1 of Gewoonte2)
STR_01F9_SAVE_MUSIC_SETTINGS :{BLACK}Bewaar musiek stellings
-STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Kliek op musiek liedjie om by huidige musiek lys in te sit (slegs Gewoonte 1 of Gewoonte 2)
+STR_01FA_CLICK_ON_MUSIC_TRACK_TO :{BLACK}Kliek op musiek liedjie om by huidige musiek lys in te sit (slegs Gewoonte1 of Gewoonte2)
STR_CLICK_ON_TRACK_TO_REMOVE :{BLACK}Kliek op musiek lied om te verwyder van huidige program (Slegs Gewoonte1 of Gewoonte2)
STR_01FB_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Skakel musiek lys skuifel aan/af
STR_01FC_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Vertoon musiek liedjie keuse venster
@@ -661,7 +667,7 @@
STR_0256_COPPER_ORE_MINE :{BLACK}Koper Erts Myn
STR_0257_COTTON_CANDY_FOREST :{BLACK}Spookasem Woud
STR_0258_CANDY_FACTORY :{BLACK}Lekker Fabriek
-STR_0259_BATTERY_FARM :{BLACK}Battery Plaas
+STR_0259_BATTERY_FARM :{BLACK}Battery Boerdery
STR_025A_COLA_WELLS :{BLACK}Cola Bron
STR_025B_TOY_SHOP :{BLACK}Speelgoed Winkel
STR_025C_TOY_FACTORY :{BLACK}Speelgoed Fabriek
@@ -678,7 +684,7 @@
STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY :{BLACK}Bou Olieboor (Kan slegs naby aan kante van kaart gebou word)
STR_0268_CONSTRUCT_FACTORY :{BLACK}Bou Fabriek
STR_0269_CONSTRUCT_STEEL_MILL :{BLACK}Bou Staalmeul
-STR_026A_CONSTRUCT_FARM :{BLACK}Bou Plaas
+STR_026A_CONSTRUCT_FARM :{BLACK}Bou Boerdery
STR_026B_CONSTRUCT_IRON_ORE_MINE :{BLACK}Bou Yster Erts Myn
STR_026C_CONSTRUCT_OIL_WELLS :{BLACK}Bou Olie Bron
STR_026D_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Bou Bank (kan slegs in stede met 'n populasie grooter as 1200 gebou word)
@@ -696,7 +702,7 @@
STR_0279_CONSTRUCT_COPPER_ORE_MINE :{BLACK}Bou Koper Erts Myn
STR_027A_PLANT_COTTON_CANDY_FOREST :{BLACK}Beplant Spookasem Woud
STR_027B_CONSTRUCT_CANDY_FACTORY :{BLACK}Bou Lekker Fabriek
-STR_027C_CONSTRUCT_BATTERY_FARM :{BLACK}Bou Battery Plaas
+STR_027C_CONSTRUCT_BATTERY_FARM :{BLACK}Bou Battery Boerdery
STR_027D_CONSTRUCT_COLA_WELLS :{BLACK}Bou Cola Bron
STR_027E_CONSTRUCT_TOY_SHOP :{BLACK}Bou Speelgoed Winkel
STR_027F_CONSTRUCT_TOY_FACTORY :{BLACK}Bou Speelgoed Fabriek
@@ -988,6 +994,7 @@
STR_CONFIG_PATCHES_AUTOSCROLL :{LTBLUE}Was skerm as muis by die kant is: {ORANGE}{STRING}
STR_CONFIG_PATCHES_BRIBE :{LTBLUE}Toelaat die omkooping van plaaslike gesag: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NONUNIFORM_STATIONS :{LTBLUE}Ongelyk stasies: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Toelaat gebou van teenstandige stasies: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Klein lughawe is altyd toegelaat: {ORANGE}{STRING}
@@ -1032,6 +1039,12 @@
STR_CONFIG_PATCHES_LIVERIES_ALL :Alle maatskappye
STR_CONFIG_PATCHES_PREFER_TEAMCHAT :{LTBLUE}Verkies span gesels met <ENTER>: {ORANGE}{STRING}
+
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS :{LTBLUE}Gebruik die voorloopende voertuiglys: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OFF :Af
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_OWN :Eie maatskappy
+STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS_ALL :Alle maatskappye
+
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Max treine per speler: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Max pad voertuie per speler: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_AIRCRAFT :{LTBLUE}Max vliegtuie per speler: {ORANGE}{STRING}
@@ -1064,6 +1077,8 @@
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Toelaat deele aankoop van ander maatskappye
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Wanneer sleeping, plaas seine elke: {ORANGE}{STRING} teel(e)
STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}Outomaties bou semaphores voor: {ORANGE}{STRING}
+
+
STR_CONFIG_PATCHES_TOOLBAR_POS :{LTBLUE}Posisie van hoof werktuigbaan: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOOLBAR_POS_LEFT :Links
STR_CONFIG_PATCHES_TOOLBAR_POS_CENTER :Senter
@@ -1089,7 +1104,7 @@
STR_CHEATS :{WHITE}Bedriege
-STR_CHEATS_TIP :{BLACK}tikblokkies aanwys as jy die bedreig vroe� gebruik het
+STR_CHEATS_TIP :{BLACK}Tikblokkies aanwys as jy die bedreig vroe� gebruik het
STR_CHEATS_WARNING :{BLACK}Waarskuwing! Jy gaan omtrent jou genoote mededingers verrai. Hou in gemoed dat so 'n skande sal vir ewig onhout word.
STR_CHEAT_MONEY :{LTBLUE}Vermeerder geld by {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Speel as speler: {ORANGE}{COMMA}
@@ -1133,6 +1148,7 @@
STR_CANT_BUILD_CANALS :{WHITE}Kan nie kanaale hier bou nie...
+STR_BUILD_CANALS_TIP :{BLACK}Bou kanaale.
STR_LANDINFO_CANAL :Kanaal
STR_CANT_BUILD_LOCKS :{WHITE}Kan nie sluite hier bou nie...
@@ -1239,12 +1255,12 @@
STR_NETWORK_PASSWORD_TIP :{BLACK}Beskerm jou spel met 'n wagwoord as jy wil dit nie publieke toepassing laat wees nie
STR_NETWORK_SELECT_MAP :{BLACK}Kies 'n kaart
STR_NETWORK_SELECT_MAP_TIP :{BLACK}Watter kaart wil jy speel?
-STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max kliente:
-STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Kies die maksimum nommer van kielnte. Alle gleufe hoef nie om vol te wees nie
STR_NETWORK_LAN :LAN
STR_NETWORK_INTERNET :Internet
STR_NETWORK_LAN_INTERNET :LAN / Internet
STR_NETWORK_INTERNET_ADVERTISE :Internet (adverteer)
+STR_NETWORK_NUMBER_OF_CLIENTS :{BLACK}Max kliente:
+STR_NETWORK_NUMBER_OF_CLIENTS_TIP :{BLACK}Kies die maksimum nommer van kielnte. Alle gleufe hoef nie om vol te wees nie
STR_NETWORK_NUMBER_OF_COMPANIES :{BLACK}Max maatskappye:
STR_NETWORK_NUMBER_OF_COMPANIES_TIP :{BLACK}Beperk die bedinder na 'n sekere bedrag van maatskappye
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Max aanskouers:
@@ -1452,22 +1468,37 @@
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan nie pad van hier verwyder nie...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Pad Depot Ori�tering
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Kan nie pad voertuig depot hier bou nie...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Kan nie trem voertuig depot hier bou nie...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Kan nie bus stasie hier bou nie...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Kan nie vraagmotor stasie bou nie...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Kan nie vrag trem stasie hier bou nie...
STR_180A_ROAD_CONSTRUCTION :Pad konstruksie
+STR_180A_TRAMWAY_CONSTRUCTION :Tremweg konstruksie
STR_180B_BUILD_ROAD_SECTION :{BLACK}Bou pad afdeling
+STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Bou tremweg gedeelte
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bou pad voertuig depot (vir bou en versiening van voertuie)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bou trem voertuig depot (vir bou en diens van voertuie)
STR_180D_BUILD_BUS_STATION :{BLACK}Bou bus stasie
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Bou vraagmotor laai area
+STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bou passasier trem stasie
+STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Bou vrag trem stasie
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Bou pad brug
+STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Bou tremweg brug
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Bou pad tonnel
+STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Bou tremweg tonnel
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Skakel bou/verwyder vir pad bou
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Skakel bou/verwyder vir tremweg konstruksie
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Kies pad voertuig depot ori�tering
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Kies trem voertuig depot ori�tering
STR_1814_ROAD :Pad
STR_1815_ROAD_WITH_STREETLIGHTS :Pad met straatligte
STR_1816_TREE_LINED_ROAD :Boom-belynde pad
STR_1817_ROAD_VEHICLE_DEPOT :Pad voertuig depot
-STR_1818_ROAD_RAIL_LEVEL_CROSSING :Pad/spoor oorgang
+STR_1818_ROAD_RAIL_LEVEL_CROSSING :Pad/spoor gelyk oorgang
+STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Kan nie bus stasie verwyder nie...
+STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Kan nie vraagmotor stasie verwyder stasie...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Kan nie passasier stasie verwyder nie...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Kan nie vrag stasie verwyder nie...
##id 0x2000
STR_2000_TOWNS :{WHITE}Stede
@@ -1475,8 +1506,8 @@
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Gebou moet eers afgebreek word
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Populasie: {ORANGE}{COMMA}{BLACK} Huise: {ORANGE}{COMMA}
-STR_2007_RENAME_TOWN :Hernaam Stad
-STR_2008_CAN_T_RENAME_TOWN :{WHITE}Kan nie stad hernaam nie...
+STR_2007_RENAME_TOWN :Hernoem Stad
+STR_2008_CAN_T_RENAME_TOWN :{WHITE}Kan nie stad hernoem nie...
STR_2009_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN} plaaslike raad weier om dit te toelaat
STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Stad naame - kliek naam om skerm op stad te senter
STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Senter skerm op stad
@@ -1600,8 +1631,8 @@
STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Te naby aan 'n ander lughawe
STR_300E_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Moet eers lughawe afbreek
-STR_3030_RENAME_STATION_LOADING :Hernaam stasie/laai area
-STR_3031_CAN_T_RENAME_STATION :{WHITE}Stasie kan nie hernaam word nie...
+STR_3030_RENAME_STATION_LOADING :Hernoem stasie/laai area
+STR_3031_CAN_T_RENAME_STATION :{WHITE}Stasie kan nie hernoem word nie...
STR_3032_RATINGS :{BLACK}Graderings
STR_3033_ACCEPTS :{BLACK}Aanvaar
STR_3034_LOCAL_RATING_OF_TRANSPORT :{BLACK}Plaaslike gradering van vervoer diens
@@ -1623,9 +1654,13 @@
STR_3040_NOW_ACCEPTS :{WHITE}{STATION} aanvaar nou {STRING}
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} aanvaar nou {STRING} en {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Bus Stasie Ori�tering
-STR_3043_TRUCK_STATION_ORIENT :{WHITE}Vraagmotor Stasie Ori�t.
+STR_3043_TRUCK_STATION_ORIENT :{WHITE}Vraagmotor Stasie Ori�tering
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Passasier Trem Ori�tering
+STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Vrag Trem Ori�tering
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Moet eers bus stasie afbreek
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Moet eers vraagmotor stasie afbreek
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Moet eers passasier trem stasie afbreek
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Moet eers vrag trem stasie afbreek
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Stasie{P "" s}
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Geen -
@@ -1637,6 +1672,8 @@
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Kies lengte van spoorweg stasie
STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Kies bus stasie ori�tering
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Kies vraagmotor laai area ori�tering
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Kies passasier trem stasie ori�tering
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Kies vrag trem stasie ori�tering
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Senter skerm op stasie
STR_3054_SHOW_STATION_RATINGS :{BLACK}Wys stasie graderings
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Verander naam van stasie
@@ -1702,7 +1739,7 @@
STR_4808_FACTORY :Fabriek
STR_4809_PRINTING_WORKS :Drukwerke
STR_480A_STEEL_MILL :Staalmeul
-STR_480B_FARM :Plaas
+STR_480B_FARM :Boerdery
STR_480C_COPPER_ORE_MINE :Koper Erts Myn
STR_480D_OIL_WELLS :Olie Bron
STR_480E_BANK :Bank
@@ -1717,11 +1754,11 @@
STR_4817_WATER_SUPPLY :Water Lewering
STR_4818_WATER_TOWER :Water Toring
STR_4819_FACTORY :Fabriek
-STR_481A_FARM :Plaas
+STR_481A_FARM :Boerdery
STR_481B_LUMBER_MILL :Timmerhoutmeul
STR_481C_COTTON_CANDY_FOREST :Spookasem Woud
STR_481D_CANDY_FACTORY :Lekker Fabriek
-STR_481E_BATTERY_FARM :Battery Plaas
+STR_481E_BATTERY_FARM :Battery Boerdery
STR_481F_COLA_WELLS :Cola Bron
STR_4820_TOY_SHOP :Speelgoed Winkel
STR_4821_TOY_FACTORY :Speelgoed Fabriek
@@ -1737,6 +1774,11 @@
STR_4829_REQUIRES :{BLACK}Vereis: {YELLOW}{STRING}, {STRING}, {STRING}
############ range for requires ends
+############ range for produces starts
+STR_4827_PRODUCES :{BLACK}Produseer: {YELLOW}{STRING}
+STR_4828_PRODUCES :{BLACK}Produseer: {YELLOW}{STRING}, {STRING}
+############ range for produces ends
+
STR_482A_PRODUCTION_LAST_MONTH :{BLACK}Produksie verlede maand:
STR_482B_TRANSPORTED :{YELLOW}{CARGO}{BLACK} ({COMMA}% uitgevoer)
STR_482C_CENTER_THE_MAIN_VIEW_ON :{BLACK}Senter skerm op nywerheid
@@ -1762,11 +1804,11 @@
STR_5000_TRAIN_IN_TUNNEL :{WHITE}Trein in tonnel
STR_5001_ROAD_VEHICLE_IN_TUNNEL :{WHITE}Pad voetuig in tonnel
STR_5003_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Ander tonnel in die pad
-STR_5005_UNABLE_TO_EXCAVATE_LAND :{WHITE}Onbekwaam om land vir ander einde van tonnel te uitgrawe
+STR_5005_UNABLE_TO_EXCAVATE_LAND :{WHITE}Kan nie land vir ander einde van tonnel te uitgrawe nie
STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Moet eers tonnel afbreek
STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Moet eers brug afbreek
STR_5008_CANNOT_START_AND_END_ON :{WHITE}Kan nie in die selfde plek begin en eindig nie
-STR_5009_LEVEL_LAND_OR_WATER_REQUIRED :{WHITE}Platte land of water nooding onder brug
+STR_5009_LEVEL_LAND_OR_WATER_REQUIRED :{WHITE}Platte land of water benooding onder brug
STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Begin en einde moet in lyn wees
STR_500B_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Plek ongeskik vir tonnel ingang
STR_500D :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY}
@@ -1804,7 +1846,7 @@
STR_5803_COMPANY_HEADQUARTERS :Maatskappy Hoofkwartiers
STR_5804_COMPANY_HEADQUARTERS_IN :{WHITE}...maatskappy hoofkwartiers in die pad
STR_5805_COMPANY_OWNED_LAND :Maatskappy-besitte land
-STR_5806_CAN_T_PURCHASE_THIS_LAND :{WHITE}Land area kan nie aangekoop word nie...
+STR_5806_CAN_T_PURCHASE_THIS_LAND :{WHITE}Die land area kan nie aangekoop word nie...
STR_5807_YOU_ALREADY_OWN_IT :{WHITE}...jy besit dit alreeds!
@@ -1844,7 +1886,7 @@
############ end of savegame specific region!
##id 0x6800
-STR_6800_DIFFICULTY_LEVEL :{WHITE}Moeilikheids Vlakte
+STR_6800_DIFFICULTY_LEVEL :{WHITE}Moeilikheid Vlak
STR_OPTIONS_SAVE_CHANGES :{BLACK}Bewaar
############ range for difficulty levels starts
@@ -1960,9 +2002,9 @@
STR_7028 :{BLACK}{CURRENCY}
STR_7029_BORROW :{BLACK}Leen {SKIP}{SKIP}{CURRENCY}
STR_702A_REPAY :{BLACK}Terugbetaal {SKIP}{SKIP}{CURRENCY}
-STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maksimum vergun lening groote is {CURRENCY}
+STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maksimum toegelaat lening groote is {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan nie meer geld leen nie...
-STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...geen lening om terugbetaal te word
+STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...geen lening om terug te betaal
STR_702E_REQUIRED :{WHITE}...{CURRENCY} vereis
STR_702F_CAN_T_REPAY_LOAN :{WHITE}Kan nie lening terugbetaal nie...
STR_INSUFFICIENT_FUNDS :{WHITE}Kan nie geld wat van die bank geleen is weggee nie...
@@ -2024,6 +2066,7 @@
STR_706B_CHIEF_EXECUTIVE :Hoofbestuursleier
STR_706C_CHAIRMAN :Voorsitter
STR_706D_PRESIDENT :President
+STR_706E_TYCOON :Tycoon
STR_706F_BUILD_HQ :{BLACK}Bou HK
STR_7070_BUILD_COMPANY_HEADQUARTERS :{BLACK}Bou maatskappy hoofkwartiers / wys maatskappy hoofkwartiers
STR_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Herbou maatskappy hoofkwartiers elders vir 1% koste van maatskappy waarde
@@ -2033,7 +2076,7 @@
STR_COMPANY_PASSWORD :{BLACK}Wagwoord
STR_COMPANY_PASSWORD_TOOLTIP :{BLACK}Wagwoord-beskerm jou maatskappy om onmagtig gebruikers te belet van verbinding
STR_SET_COMPANY_PASSWORD :Stel maatskappy wagwoord
-STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}W�eld Insinking!{}{}Finansieel eksperte vrees ergste as ekconomie inmekaar sak!
+STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}W�eld Insinking!{}{}Finansieel eksperte vrees ergste as ekonomie inmekaar sak!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Insinking Oor!{}{}Oplewing in sake gee vertroue na nywerheide as ekonomie versterk!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Skakel groot/klein venster groote
STR_7076_COMPANY_VALUE :{GOLD}Maatskappy waarde: {WHITE}{CURRENCY}
@@ -2045,7 +2088,7 @@
STR_707C_CAN_T_SELL_25_SHARE_IN :{WHITE}Kan nie 25% aandeel in die maatskappy verkoop nie...
STR_707D_OWNED_BY :{WHITE}({COMMA}% besit by {COMPANY})
STR_707E_OWNED_BY_OWNED_BY :{WHITE}({COMMA}% besit by {COMPANY}{} {COMMA}% besit by {COMPANY})
-STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{COMPANY} is deur {COMPANY}! oorgevat!
+STR_707F_HAS_BEEN_TAKEN_OVER_BY :{BLACK}{BIGFONT}{COMPANY} is deur {COMPANY} oorgevat!
STR_7080_PROTECTED :{WHITE}Die maatskappy is nie oud genoeg om aandeele te handel nie...
STR_LIVERY_DEFAULT :Standaard Lewery
@@ -2274,7 +2317,7 @@
STR_80C1_POWERNAUGHT_BATTERY_TRUCK :Powernaught Battery Trok
STR_80C2_WIZZOWOW_BATTERY_TRUCK :Wizzowow Battery Trok
STR_80C3_MIGHTYMOVER_FIZZY_DRINK :MightyMover Koeldrank Trok
-STR_80C4_POWERNAUGHT_FIZZY_DRINK :Powernaught KoeldrankTrok
+STR_80C4_POWERNAUGHT_FIZZY_DRINK :Powernaught Koeldrank Trok
STR_80C5_WIZZOWOW_FIZZY_DRINK_TRUCK :Wizzowow Fizzy Koeldrank Trok
STR_80C6_MIGHTYMOVER_PLASTIC_TRUCK :MightyMover Plastiek Trok
STR_80C7_POWERNAUGHT_PLASTIC_TRUCK :Powernaught Plastiek Trok
@@ -2367,6 +2410,7 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Gaan deurgaande na {TOWN} Trein Depot
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Diens deurgaande by {TOWN} Trein Depot
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Op pad na {TOWN} Trein Depot
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Op pad na {TOWN} Trein Depot, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Diens by {TOWN} Trein Depot
@@ -2398,7 +2442,7 @@
STR_CLONE_TRAIN :{BLACK}Kloon Trein
STR_CLONE_TRAIN_INFO :{BLACK}Dit sa 'n afskrywing van die trein bou insluitend alle trokke. Control-kliek sal die opdrae deel
STR_CLONE_TRAIN_DEPOT_INFO :{BLACK}Dit sal 'n afskrywing van 'n trein bou insluitend alle trokke. Kliek die knoppie en dan op 'n trein binne of buite die depot. Control-kliek sal die opdrae deel
-STR_8820_RENAME :{BLACK}Hername
+STR_8820_RENAME :{BLACK}Hernoem
STR_8823_SKIP :{BLACK}Sprong
STR_8824_DELETE :{BLACK}Uitwis
STR_8825_NON_STOP :{BLACK}Deurgaande
@@ -2422,8 +2466,11 @@
STR_8831_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Geen spasie vir nog opdrae
STR_8832_TOO_MANY_ORDERS :{WHITE}Te veel opdrae
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Kan nie nuwe opdrag invoeg nie...
-STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Die opdrag kan nie uitwis word nie...
+STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Kan nie die opdrag verwyder nie...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Die opdrag kan nie verander word nie...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Kan nie opdrag beweeg nie...
+STR_CAN_T_SKIP_ORDER :{WHITE}Kan nie huidige opdrag sprong nie...
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}Kan nie verkieste opdrag sprong nie...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Voertuig kan nie beweeg nie...
STR_8838_N_A :N/A{SKIP}
STR_8839_CAN_T_SELL_RAILROAD_VEHICLE :{WHITE}Kan nie spoorweg voertuig verkoop nie...
@@ -2439,7 +2486,7 @@
STR_8842_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Senter skerm op trein depot
STR_8843_TRAIN_VEHICLE_SELECTION :{BLACK}Trein voertuig keuse lys - kliek op voertuig vir inligting
STR_8844_BUILD_THE_HIGHLIGHTED_TRAIN :{BLACK}Bou die beklemtoonde trein voertuig
-STR_8845_RENAME_TRAIN_VEHICLE_TYPE :{BLACK}Hernaam trein voertuig tipe
+STR_8845_RENAME_TRAIN_VEHICLE_TYPE :{BLACK}Hernoem trein voertuig tipe
STR_8846_CURRENT_TRAIN_ACTION_CLICK :{BLACK}Huidige trein aksie - kliek hier om trein te stop/aanvang trein
STR_8847_SHOW_TRAIN_S_ORDERS :{BLACK}Wys trein se opdrae
STR_8848_CENTER_MAIN_VIEW_ON_TRAIN :{BLACK}Senter skerm op trein
@@ -2454,6 +2501,7 @@
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Wys kapasiteite van elke voertuig
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Wys totaale kapasitiet van trein, verdeel by vrag tipe
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Opdraglys - kliek op 'n opdrag om dit te beklemtoon. CTRL + kliek senter op stasie
+STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Sprong die huidige opdraag, en begin die volgende. CTRL + kliek sprong na verkieste opdrag
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Uitwis die beklemtoonde opdrag
STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Maak die beklemtoonde opdrag deurgaande
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Invoeg 'n nuwe opdrag voor die beklemtoonde opdrag, of byvoeg na einde van lys
@@ -2476,16 +2524,20 @@
STR_8867_NAME_TRAIN :{BLACK}Benaam trein
STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Trein Botsing!{}{COMMA} sterf in vuurbol na botsing
STR_8869_CAN_T_REVERSE_DIRECTION :{WHITE}Kan nie rigting van trein omkeer nie...
-STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Hernaam trein voertuig tipe
-STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Trein voertuig tipe kan nie hernaam word nie...
+STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Hernoem trein voertuig tipe
+STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Trein voertuig tipe kan nie hernoem word nie...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Maak die beklemtoonde opdrag dwing die voertuig om sy vrag te stort
STR_886F_TRANSFER :{BLACK}Oordrag
+STR_CLEAR_TIME :{BLACK}Reinig Tyd
STR_TRAIN_STOPPING :{RED}Ophou
STR_TRAIN_STOPPING_VEL :{RED}Ophou, {VELOCITY}
STR_INCOMPATIBLE_RAIL_TYPES :Onbestaaanbaar spoor tipes
STR_TRAIN_NO_POWER :{RED}Geen Krag
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan nie voertuig tydtafel nie...
+
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Pad voertuig in die pad
STR_9001_ROAD_VEHICLES :{WHITE}{COMPANY} - {COMMA} Pad voertuig{P "" s}
@@ -2518,7 +2570,7 @@
STR_901D_SHOW_VEHICLE_S_ORDERS :{BLACK}Wys voertuig se opdrae
STR_901E_CENTER_MAIN_VIEW_ON_VEHICLE :{BLACK}Senter skerm op voertuig
STR_901F_SEND_VEHICLE_TO_DEPOT :{BLACK}Stuur voertuig na depot. CTRL+kliek sal net diens
-STR_9020_FORCE_VEHICLE_TO_TURN_AROUND :{BLACK}Dwing voertuig om om te draai
+STR_9020_FORCE_VEHICLE_TO_TURN_AROUND :{BLACK}Dwing voertuig om te draai om
STR_9021_SHOW_ROAD_VEHICLE_DETAILS :{BLACK}Wys pad voertuig aanwyse
STR_9022_VEHICLES_CLICK_ON_VEHICLE :{BLACK}Voertuie - kliek op voertuig vir inligting
STR_9023_BUILD_NEW_ROAD_VEHICLE :{BLACK}Bou nuwe pad voertuig
@@ -2526,21 +2578,25 @@
STR_9025_CENTER_MAIN_VIEW_ON_ROAD :{BLACK}Senter skerm op pad voertuig depot
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Pad voertuig keuse lys - kliek op voertuig vir inligting
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Bou die beklemtoonde pad voertuig
-STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Koste: {CURRENCY}{}Spoed: {VELOCITY}{}Loopkoste: {CURRENCY}/yr{}Kapasitiet: {CARGO}
+STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Koste: {CURRENCY}{}Spoed: {VELOCITY}{}Loopkoste: {CURRENCY}/jr{}Kapasitiet: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Kapasiteit: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Benaam pad voertuig
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Pad voertuig kan nie benaam word nie...
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Benaam pad voertuig
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste bus arriveer by {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste trok arriveer by {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste passasier trein arriveer by {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste vrag trein arriveer by {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Pad Voertuig Botsing!{}Bestuurder sterf in vuurbol na botsing met trein
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Pad voertuig Botsing!{}{COMMA} sterf in vuurbol na botsing met trein
STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Kan nie voertuig dwing om te omdraai nie
STR_ONLY_TURN_SINGLE_UNIT :{WHITE}Kan nie voertuie van veel deele draai nie
-STR_9034_RENAME :{BLACK}Hernaam
-STR_9035_RENAME_ROAD_VEHICLE_TYPE :{BLACK}Hernaam pad voertuig tipe
-STR_9036_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Hernaam pad voertuig tipe
-STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Pad voertuig tipe kan nie hernaam word nie...
+STR_9034_RENAME :{BLACK}Hernoem
+STR_9035_RENAME_ROAD_VEHICLE_TYPE :{BLACK}Hernoem pad voertuig tipe
+STR_9036_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Hernoem pad voertuig tipe
+STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Pad voertuig tipe kan nie hernoem word nie...
STR_9038_GO_TO_ROADVEH_DEPOT :Gaan na {TOWN} Pad Voertuig Depot
STR_SERVICE_AT_ROADVEH_DEPOT :Versien by {TOWN} Pad Voertuig Depot
@@ -2603,10 +2659,10 @@
STR_9833_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste skip arriveer by {STATION}!
STR_9834_POSITION_BUOY_WHICH_CAN :{BLACK}Plaas baken wat kan as 'n wegpunt gebruik word
STR_9835_CAN_T_POSITION_BUOY_HERE :{WHITE}Kan nie baken hier plaas nie...
-STR_9836_RENAME :{BLACK}Hernaam
-STR_9837_RENAME_SHIP_TYPE :{BLACK}Hernaam skip tipe
-STR_9838_RENAME_SHIP_TYPE :{WHITE}Hernaam skip tipe
-STR_9839_CAN_T_RENAME_SHIP_TYPE :{WHITE}Kan nie skip tipe hernaam nie...
+STR_9836_RENAME :{BLACK}Hernoem
+STR_9837_RENAME_SHIP_TYPE :{BLACK}Hernoem skip tipe
+STR_9838_RENAME_SHIP_TYPE :{WHITE}Hernoem skip tipe
+STR_9839_CAN_T_RENAME_SHIP_TYPE :{WHITE}Kan nie skip tipe hernoem nie...
STR_983A_REFIT_CARGO_SHIP_TO_CARRY :{BLACK}Herstel vrag skip om 'n ander vrag tipe te ontvoer
STR_983B_REFIT :{WHITE}{VEHICLE} (Herstel)
STR_983C_REFIT_SHIP :{BLACK}Herstel skip
@@ -2675,10 +2731,10 @@
STR_A033_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Burgers herdenk . . .{}Eerste vliegtuig arriveer by {STATION}!
STR_A034_PLANE_CRASH_DIE_IN_FIREBALL :{BLACK}{BIGFONT}Vliegtuig Botsing!{}{COMMA} stef in die vuurbol by {STATION}
STR_A036 :{TINYFONT}{BLACK}{STATION}
-STR_A037_RENAME :{BLACK}Hernaam
-STR_A038_RENAME_AIRCRAFT_TYPE :{BLACK}Hernaam vliegtuig tipe
-STR_A039_RENAME_AIRCRAFT_TYPE :{WHITE}Hernaam vliegtuig tipe
-STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Kan nie vliegtuig tipe hernaam nie...
+STR_A037_RENAME :{BLACK}Hernoem
+STR_A038_RENAME_AIRCRAFT_TYPE :{BLACK}Hernoem vliegtuig tipe
+STR_A039_RENAME_AIRCRAFT_TYPE :{WHITE}Hernoem vliegtuig tipe
+STR_A03A_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Kan nie vliegtuig tipe hernoem nie...
STR_A03B_REFIT_AIRCRAFT_TO_CARRY :{BLACK}Hestel vliegtuig om 'n ander vrag tipe te ontvoer
STR_A03C_REFIT :{WHITE}{VEHICLE} (Herstel)
STR_A03D_REFIT_AIRCRAFT :{BLACK}Herstel vliegtuig
@@ -2690,6 +2746,7 @@
STR_GO_TO_AIRPORT_HANGAR :Gaan na {STATION} Hangar
SERVICE_AT_AIRPORT_HANGAR :Versiening by {STATION} Hangar
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelin ramp by {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Pad voertuig vernietig in 'VVV' botsing!
@@ -2776,6 +2833,7 @@
STR_NOT_REPLACING :{BLACK}Word nie vervang nie
STR_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Geen voertuig gekies
+STR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Vliegtuig is nie beskikbaar nie
STR_ENGINES :Enjine
@@ -2853,3 +2911,20 @@
############ Date formatting
########
+
+
+
+
+##### Mass Order
+
+
+
+
+STR_COMPANY_NAME :{COMPANY}
+
+
+#### Improved sign GUI
+
+########
+
+STR_BUILD_NEW_INDUSTRY :{BLACK}Bou
--- a/src/main_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/main_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -1086,7 +1086,7 @@
StringID msg =
mode ? STR_0808_CAN_T_RAISE_LAND_HERE : STR_0809_CAN_T_LOWER_LAND_HERE;
- DoCommandP(tile, SLOPE_N, (uint32)mode, CcTerraform, CMD_TERRAFORM_LAND | CMD_AUTO | CMD_MSG(msg));
+ DoCommandP(tile, SLOPE_N, (uint32)mode, CcTerraform, CMD_TERRAFORM_LAND | CMD_MSG(msg));
} else {
SndPlayTileFx(SND_1F_SPLAT, tile);
@@ -1113,7 +1113,7 @@
BEGIN_TILE_LOOP(tile2, sizex, sizey, tile) {
if (TileHeight(tile2) == h) {
- DoCommandP(tile2, SLOPE_N, (uint32)mode, NULL, CMD_TERRAFORM_LAND | CMD_AUTO);
+ DoCommandP(tile2, SLOPE_N, (uint32)mode, NULL, CMD_TERRAFORM_LAND);
}
} END_TILE_LOOP(tile2, sizex, sizey, tile)
}
--- a/src/map.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/map.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -26,7 +26,7 @@
TileExtended *_me = NULL; ///< Extended Tiles of the map
-/**
+/*!
* (Re)allocates a map with the given dimension
* @param size_x the width of the map along the NE/SW edge
* @param size_y the 'height' of the map along the SE/NW edge
@@ -97,9 +97,9 @@
}
#endif
-/**
+/*!
* Scales the given value by the map size, where the given value is
- * for a 256 by 256 map
+ * for a 256 by 256 map.
* @param n the value to scale
* @return the scaled size
*/
@@ -112,7 +112,7 @@
}
-/**
+/*!
* Scales the given value by the maps circumference, where the given
* value is for a 256 by 256 map
* @param n the value to scale
@@ -128,13 +128,14 @@
}
-/**
+/*!
* This function checks if we add addx/addy to tile, if we
- * do wrap around the edges. For example, tile = (10,2) and
- * addx = +3 and addy = -4. This function will now return
- * INVALID_TILE, because the y is wrapped. This is needed in
- * for example, farmland. When the tile is not wrapped,
- * the result will be tile + TileDiffXY(addx, addy)
+ * do wrap around the edges. For example, tile = (10,2) and
+ * addx = +3 and addy = -4. This function will now return
+ * INVALID_TILE, because the y is wrapped. This is needed in
+ * for example, farmland. When the tile is not wrapped,
+ * the result will be tile + TileDiffXY(addx, addy)
+ *
* @param tile the 'starting' point of the adding
* @param addx the amount of tiles in the X direction to add
* @param addy the amount of tiles in the Y direction to add
@@ -172,7 +173,7 @@
{ 0, -1} ///< DIR_NW
};
-/**
+/*!
* Gets the Manhattan distance between the two given tiles.
* The Manhattan distance is the sum of the delta of both the
* X and Y component.
@@ -189,7 +190,7 @@
}
-/**
+/*!
* Gets the 'Square' distance between the two given tiles.
* The 'Square' distance is the square of the shortest (straight line)
* distance between the two tiles.
@@ -206,7 +207,7 @@
}
-/**
+/*!
* Gets the biggest distance component (x or y) between the two given tiles.
* Also known as L-Infinity-Norm.
* @param t0 the start tile
@@ -221,7 +222,7 @@
}
-/**
+/*!
* Gets the biggest distance component (x or y) between the two given tiles
* plus the Manhattan distance, i.e. two times the biggest distance component
* and once the smallest component.
@@ -236,7 +237,7 @@
return dx > dy ? 2 * dx + dy : 2 * dy + dx;
}
-/**
+/*!
* Param the minimum distance to an edge
* @param tile the tile to get the distance from
* @return the distance from the edge in tiles
@@ -252,7 +253,7 @@
return minl < minh ? minl : minh;
}
-/**
+/*!
* Function performing a search around a center tile and going outward, thus in circle.
* Although it really is a square search...
* Every tile will be tested by means of the callback function proc,
--- a/src/map.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/map.h Sun Sep 23 07:37:38 2007 +0000
@@ -45,9 +45,25 @@
byte m7; ///< Primarily used for newgrf support
};
+/**
+ * Pointer to the tile-array.
+ *
+ * This variable points to the tile-array which contains the tiles of
+ * the map.
+ */
extern Tile *_m;
+
+/**
+ * Pointer to the extended tile-array.
+ *
+ * This variable points to the extended tile-array which contains the tiles
+ * of the map.
+ */
extern TileExtended *_me;
+/**
+ * Allocate a new map with the given size.
+ */
void AllocateMap(uint size_x, uint size_y);
/**
@@ -109,18 +125,56 @@
return MapSizeY() - 1;
}
-/* Scale a number relative to the map size */
-uint ScaleByMapSize(uint); // Scale relative to the number of tiles
-uint ScaleByMapSize1D(uint); // Scale relative to the circumference of the map
+/**
+ * Scales relative to the number of tiles.
+ */
+uint ScaleByMapSize(uint);
+/**
+ * Scale relative to the circumference of the map.
+ */
+uint ScaleByMapSize1D(uint);
+
+/**
+ * The index/ID of a Tile.
+ */
typedef uint32 TileIndex;
+
+/**
+ * An offset value between to tiles.
+ *
+ * This value is used fro the difference between
+ * to tiles. It can be added to a tileindex to get
+ * the resulting tileindex of the start tile applied
+ * with this saved difference.
+ *
+ * @see TileDiffXY(int, int)
+ */
typedef int32 TileIndexDiff;
+/**
+ * Returns the TileIndex of a coordinate.
+ *
+ * @param x The x coordinate of the tile
+ * @param y The y coordinate of the tile
+ * @return The TileIndex calculated by the coordinate
+ */
static inline TileIndex TileXY(uint x, uint y)
{
return (y * MapSizeX()) + x;
}
+/**
+ * Calculates an offset for the given coordinate(-offset).
+ *
+ * This function calculate an offset value which can be added to an
+ * #TileIndex. The coordinates can be negative.
+ *
+ * @param x The offset in x direction
+ * @param y The offset in y direction
+ * @return The resulting offset value of the given coordinate
+ * @see ToTileIndexDiff(TileIndexDiffC)
+ */
static inline TileIndexDiff TileDiffXY(int x, int y)
{
/* Multiplication gives much better optimization on MSVC than shifting.
@@ -167,12 +221,27 @@
return tile >> MapLogX();
}
-
+/**
+ * A pair-construct of a TileIndexDiff.
+ *
+ * This can be used to save the difference between to
+ * tiles as a pair of x and y value.
+ */
struct TileIndexDiffC {
- int16 x;
- int16 y;
+ int16 x; ///< The x value of the coordinate
+ int16 y; ///< The y value of the coordinate
};
+/**
+ * Return the offset between to tiles from a TileIndexDiffC struct.
+ *
+ * This function works like #TileDiffXY(int, int) and returns the
+ * difference between two tiles.
+ *
+ * @param tidc The coordinate of the offset as TileIndexDiffC
+ * @return The difference between two tiles.
+ * @see TileDiffXY(int, int)
+ */
static inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc)
{
return (tidc.y << MapLogX()) + tidc.x;
@@ -180,6 +249,13 @@
#ifndef _DEBUG
+ /**
+ * Adds to tiles together.
+ *
+ * @param x One tile
+ * @param y An other tile to add
+ * @return The resulting tile(index)
+ */
#define TILE_ADD(x,y) ((x) + (y))
#else
extern TileIndex TileAdd(TileIndex tile, TileIndexDiff add,
@@ -187,10 +263,26 @@
#define TILE_ADD(x, y) (TileAdd((x), (y), #x " + " #y, __FILE__, __LINE__))
#endif
+/**
+ * Adds a given offset to a tile.
+ *
+ * @param tile The tile to add an offset on it
+ * @param x The x offset to add to the tile
+ * @param y The y offset to add to the tile
+ */
#define TILE_ADDXY(tile, x, y) TILE_ADD(tile, TileDiffXY(x, y))
+/**
+ * Adds an offset to a tile and check if we are still on the map.
+ */
uint TileAddWrap(TileIndex tile, int addx, int addy);
+/**
+ * Returns the TileIndexDiffC offset from a DiagDirection.
+ *
+ * @param dir The given direction
+ * @return The offset as TileIndexDiffC value
+ */
static inline TileIndexDiffC TileIndexDiffCByDiagDir(DiagDirection dir)
{
extern const TileIndexDiffC _tileoffs_by_diagdir[DIAGDIR_END];
@@ -198,9 +290,15 @@
assert(IsValidDiagDirection(dir));
return _tileoffs_by_diagdir[dir];
}
-
-/* Returns tile + the diff given in diff. If the result tile would end up
+/**
+ * Add a TileIndexDiffC to a TileIndex and returns the new one.
+ *
+ * Returns tile + the diff given in diff. If the result tile would end up
* outside of the map, INVALID_TILE is returned instead.
+ *
+ * @param tile The base tile to add the offset on
+ * @param diff The offset to add on the tile
+ * @return The resulting TileIndex
*/
static inline TileIndex AddTileIndexDiffCWrap(TileIndex tile, TileIndexDiffC diff)
{
@@ -236,7 +334,16 @@
uint DistanceMaxPlusManhattan(TileIndex, TileIndex); ///< Max + Manhattan
uint DistanceFromEdge(TileIndex); ///< shortest distance from any edge of the map
-
+/**
+ * Starts a loop which iterates to a square of tiles
+ *
+ * This macro starts 2 nested loops which iterates over a square of tiles.
+ *
+ * @param var The name of the variable which contains the current tile
+ * @param w The width (x-width) of the square
+ * @param h The heigth (y-width) of the square
+ * @param tile The start tile of the square
+ */
#define BEGIN_TILE_LOOP(var, w, h, tile) \
{ \
int h_cur = h; \
@@ -244,12 +351,22 @@
do { \
int w_cur = w; \
do {
-
+/**
+ * Ends the square-loop used before
+ *
+ * @see BEGIN_TILE_LOOP
+ */
#define END_TILE_LOOP(var, w, h, tile) \
} while (++var, --w_cur != 0); \
} while (var += TileDiffXY(0, 1) - (w), --h_cur != 0); \
}
-
+/**
+ * Convert a DiagDirection to a TileIndexDiff
+ *
+ * @param dir The DiagDirection
+ * @return The resulting TileIndexDiff
+ * @see TileIndexDiffCByDiagDir
+ */
static inline TileIndexDiff TileOffsByDiagDir(DiagDirection dir)
{
extern const TileIndexDiffC _tileoffs_by_diagdir[DIAGDIR_END];
@@ -258,6 +375,12 @@
return ToTileIndexDiff(_tileoffs_by_diagdir[dir]);
}
+/**
+ * Convert a Direction to a TileIndexDiff.
+ *
+ * @param dir The direction to convert from
+ * @return The resulting TileIndexDiff
+ */
static inline TileIndexDiff TileOffsByDir(Direction dir)
{
extern const TileIndexDiffC _tileoffs_by_dir[DIR_END];
@@ -266,11 +389,24 @@
return ToTileIndexDiff(_tileoffs_by_dir[dir]);
}
+/**
+ * A callback function type for searching tiles.
+ *
+ * @param tile The tile to test
+ * @param data additional data for the callback function to use
+ * @return A boolean value, depend on the definition of the function.
+ */
typedef bool TestTileOnSearchProc(TileIndex tile, uint32 data);
+
+/**
+ * Searches for some cirumstances of a tile around a given tile with a helper function.
+ */
bool CircularTileSearch(TileIndex tile, uint size, TestTileOnSearchProc proc, uint32 data);
-/* Approximation of the length of a straight track, relative to a diagonal
- * track (ie the size of a tile side). #defined instead of const so it can
+/** Approximation of the length of a straight track, relative to a diagonal
+ * track (ie the size of a tile side).
+ *
+ * #defined instead of const so it can
* stay integer. (no runtime float operations) Is this needed?
* Watch out! There are _no_ brackets around here, to prevent intermediate
* rounding! Be careful when using this!
--- a/src/misc_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/misc_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -396,7 +396,7 @@
case WE_PLACE_MOUSEUP:
if (e->we.place.pt.x != -1 && e->we.place.select_proc == DDSP_PLANT_TREES) {
DoCommandP(e->we.place.tile, _tree_to_plant, e->we.place.starttile, NULL,
- CMD_PLANT_TREE | CMD_AUTO | CMD_MSG(STR_2805_CAN_T_PLANT_TREE_HERE));
+ CMD_PLANT_TREE | CMD_MSG(STR_2805_CAN_T_PLANT_TREE_HERE));
}
break;
--- a/src/network/network.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/network/network.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -3,15 +3,7 @@
#include "../stdafx.h"
#include "network_data.h"
-#if defined(WITH_REV)
- extern const char _openttd_revision[];
-#elif defined(WITH_REV_HACK)
- #define WITH_REV
- extern const char _openttd_revision[] = WITH_REV_HACK;
-#else
- extern const char _openttd_revision[] = NOREV_STRING;
-#endif
-
+extern const char _openttd_revision[];
#ifdef ENABLE_NETWORK
@@ -1463,8 +1455,6 @@
/**
* Checks whether the given version string is compatible with our version.
- * It'll check the first NETWORK_REVISION_LENGTH - 1 characters (-1 for '\0')
- * against the current version and the NOREV_STRING.
* @param other the version string to compare to
*/
bool IsNetworkCompatibleVersion(const char *other)
--- a/src/network/network.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/network/network.h Sun Sep 23 07:37:38 2007 +0000
@@ -3,8 +3,6 @@
#ifndef NETWORK_H
#define NETWORK_H
-#define NOREV_STRING "norev000"
-
#ifdef ENABLE_NETWORK
#include "../player.h"
--- a/src/newgrf.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -244,7 +244,7 @@
* @param str StringID that we want to have the equivalent in OoenTTD
* @return the properly adjusted StringID
*/
-static StringID MapGRFStringID(uint32 grfid, StringID str)
+StringID MapGRFStringID(uint32 grfid, StringID str)
{
/* 0xD0 and 0xDC stand for all the TextIDs in the range
* of 0xD000 (misc graphics texts) and 0xDC00 (misc persistent texts).
@@ -253,17 +253,26 @@
if (GB(str, 8, 8) == 0xD0 || GB(str, 8, 8) == 0xDC) {
return GetGRFStringID(grfid, str);
}
-
+#define TEXID_TO_STRINGID(begin, end, stringid) if (str >= begin && str <= end) return str + (stringid - begin)
/* We have some changes in our cargo strings, resulting in some missing. */
- if (str >= 0x006E && str <= 0x008D) return str - 0x20;
- if (str >= 0x008E && str <= 0x00AD) return str - 0x20;
+ TEXID_TO_STRINGID(0x000E, 0x002D, STR_000E);
+ TEXID_TO_STRINGID(0x002E, 0x004D, STR_002E);
+ TEXID_TO_STRINGID(0x004E, 0x006D, STR_QUANTITY_NOTHING);
+ TEXID_TO_STRINGID(0x006E, 0x008D, STR_QUANTITY_NOTHING);
+ TEXID_TO_STRINGID(0x008E, 0x00AD, STR_ABBREV_NOTHING);
/* Map building names according to our lang file changes
* 0x200F = Tall Office Block, first house name in the original data, the one that TTDPatch stil uses
* 0x201F = Old houses is the last house name.
* OpenTTD does not have exactly the same order aymore, so, the code below allows
* to compensate for the difference */
- if (str >= 0x200F && str <= 0x201F) return str + (STR_200F_TALL_OFFICE_BLOCK - 0x200F);
+ TEXID_TO_STRINGID(0x200F, 0x201F, STR_200F_TALL_OFFICE_BLOCK);
+
+ /* Same thing for industries, since the introduction of 4 new strings above STR_482A_PRODUCTION_LAST_MONTH */
+ TEXID_TO_STRINGID(0x482A, 0x483B, STR_482A_PRODUCTION_LAST_MONTH);
+#undef TEXTID_TO_STRINGID
+
+ if (str == STR_NULL) return STR_EMPTY;
return str;
}
@@ -4506,9 +4515,9 @@
break;
case 'atad': // 'data'
- se->file_size = size;
- se->file_offset = FioGetPos() - (len - (buf - buf_start)) + 1;
- se->file_offset |= _file_index << 24;
+ se->file_size = size;
+ se->file_offset = FioGetPos() - (len - (buf - buf_start)) + 1;
+ se->file_slot = _file_index;
/* Set default volume and priority */
se->volume = 0x80;
--- a/src/newgrf_callbacks.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_callbacks.h Sun Sep 23 07:37:38 2007 +0000
@@ -13,6 +13,9 @@
* bit is set in the callback flags/trigger for a vehicle, house,
* industry, etc.
* Names are formatted as CBID_<CLASS>_<CALLBACK>
+ *
+ * @note Do not forget to add 15 bits callbacks to the switch in
+ * newgrf_spritegroup.cpp (search for "15 bits callback").
*/
enum CallbackID {
/** Set when using the callback resolve system, but not to resolve a callback. */
@@ -100,7 +103,7 @@
CBID_INDUSTRY_LOCATION = 0x28,
/** Called on production changes, so it can be adjusted. */
- CBID_INDUSTRY_PRODUCTION_CHANGE = 0x29, // not implemented
+ CBID_INDUSTRY_PRODUCTION_CHANGE = 0x29,
/** Called to determine which cargoes a town building should accept. */
CBID_HOUSE_ACCEPT_CARGO = 0x2A,
@@ -138,7 +141,7 @@
CBID_VEHICLE_AUTOREPLACE_SELECTION = 0x34,
/** Called monthly on production changes, so it can be adjusted more frequently */
- CBID_INDUSTRY_MONTHLYPROD_CHANGE = 0x35, // not implemented
+ CBID_INDUSTRY_MONTHLYPROD_CHANGE = 0x35,
/** Called to modify various vehicle properties. Callback parameter 1
* specifies the property index, as used in Action 0, to change. */
@@ -160,7 +163,7 @@
CBID_INDUSTRY_SPECIAL_EFFECT = 0x3B,
/** Called to determine if industry can alter the ground below industry tile */
- CBID_INDUSTRY_AUTOSLOPE = 0x3C, // not implemented
+ CBID_INDUSTRY_AUTOSLOPE = 0x3C,
/** Called to determine if the industry can still accept or refuse more cargo arrival */
CBID_INDUSTRY_REFUSE_CARGO = 0x3D,
--- a/src/newgrf_canal.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_canal.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -42,7 +42,7 @@
switch (variable) {
case 0x80:
- return TileHeight(tile);
+ return GetTileZ(tile) / TILE_HEIGHT;
case 0x81:
return GetTerrainType(tile);
--- a/src/newgrf_commons.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_commons.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -252,7 +252,7 @@
{
switch (_opt.landscape) {
case LT_TROPIC: return GetTropicZone(tile) == TROPICZONE_DESERT ? 1 : 2;
- case LT_ARCTIC: return GetTileZ(tile) >= GetSnowLine() ? 4 : 0;
+ case LT_ARCTIC: return GetTileZ(tile) > GetSnowLine() ? 4 : 0;
default: return 0;
}
}
--- a/src/newgrf_config.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_config.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -37,20 +37,21 @@
FILE *f;
md5_state_t md5state;
md5_byte_t buffer[1024];
- size_t len;
+ size_t len, size;
/* open the file */
- f = FioFOpenFile(config->filename);
+ f = FioFOpenFile(config->filename, "rb", DATA_DIR, &size);
if (f == NULL) return false;
/* calculate md5sum */
md5_init(&md5state);
- while ((len = fread(buffer, 1, sizeof(buffer), f)) != 0) {
+ while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, f)) != 0 && size != 0) {
+ size -= len;
md5_append(&md5state, buffer, len);
}
md5_finish(&md5state, config->md5sum);
- fclose(f);
+ FioFCloseFile(f);
return true;
}
@@ -270,12 +271,54 @@
return res;
}
+static bool ScanPathAddGrf(const char *filename)
+{
+ GRFConfig *c = CallocT<GRFConfig>(1);
+ c->filename = strdup(filename);
-extern bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb);
+ bool added = true;
+ if (FillGRFDetails(c, false)) {
+ if (_all_grfs == NULL) {
+ _all_grfs = c;
+ } else {
+ /* Insert file into list at a position determined by its
+ * name, so the list is sorted as we go along */
+ GRFConfig **pd, *d;
+ bool stop = false;
+ for (pd = &_all_grfs; (d = *pd) != NULL; pd = &d->next) {
+ if (c->grfid == d->grfid && memcmp(c->md5sum, d->md5sum, sizeof(c->md5sum)) == 0) added = false;
+ /* Because there can be multiple grfs with the same name, make sure we checked all grfs with the same name,
+ * before inserting the entry. So insert a new grf at the end of all grfs with the same name, instead of
+ * just after the first with the same name. Avoids doubles in the list. */
+ if (strcasecmp(c->name, d->name) <= 0) stop = true;
+ else if (stop) break;
+ }
+ if (added) {
+ c->next = d;
+ *pd = c;
+ }
+ }
+ } else {
+ added = false;
+ }
+
+ if (!added) {
+ /* File couldn't be opened, or is either not a NewGRF or is a
+ * 'system' NewGRF or it's already known, so forget about it. */
+ free(c->filename);
+ free(c->name);
+ free(c->info);
+ free(c);
+ }
+
+ return added;
+}
/* Scan a path for NewGRFs */
static uint ScanPath(const char *path, int basepath_length)
{
+ extern bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb);
+
uint num = 0;
struct stat sb;
struct dirent *dirent;
@@ -304,40 +347,7 @@
if (ext == NULL) continue;
if (strcasecmp(ext, ".grf") != 0) continue;
- GRFConfig *c = CallocT<GRFConfig>(1);
- c->filename = strdup(filename + basepath_length);
-
- bool added = true;
- if (FillGRFDetails(c, false)) {
- if (_all_grfs == NULL) {
- _all_grfs = c;
- } else {
- /* Insert file into list at a position determined by its
- * name, so the list is sorted as we go along */
- GRFConfig **pd, *d;
- for (pd = &_all_grfs; (d = *pd) != NULL; pd = &d->next) {
- if (c->grfid == d->grfid && memcmp(c->md5sum, d->md5sum, sizeof(c->md5sum)) == 0) added = false;
- if (strcasecmp(c->name, d->name) <= 0) break;
- }
- if (added) {
- c->next = d;
- *pd = c;
- }
- }
- } else {
- added = false;
- }
-
- if (!added) {
- /* File couldn't be opened, or is either not a NewGRF or is a
- * 'system' NewGRF or it's already known, so forget about it. */
- free(c->filename);
- free(c->name);
- free(c->info);
- free(c);
- } else {
- num++;
- }
+ if (ScanPathAddGrf(filename + basepath_length)) num++;
}
}
@@ -346,12 +356,27 @@
return num;
}
+static uint ScanTar(TarFileList::iterator tar)
+{
+ uint num = 0;
+ const char *filename = (*tar).first.c_str();
+ const char *ext = strrchr(filename, '.');
+
+ /* If no extension or extension isn't .grf, skip the file */
+ if (ext == NULL) return false;
+ if (strcasecmp(ext, ".grf") != 0) return false;
+
+ if (ScanPathAddGrf(filename)) num++;
+
+ return num;
+}
/* Scan for all NewGRFs */
void ScanNewGRFFiles()
{
Searchpath sp;
char path[MAX_PATH];
+ TarFileList::iterator tar;
uint num = 0;
ClearGRFConfigList(&_all_grfs);
@@ -361,6 +386,9 @@
FioAppendDirectory(path, MAX_PATH, sp, DATA_DIR);
num += ScanPath(path, strlen(path));
}
+ FOR_ALL_TARS(tar) {
+ num += ScanTar(tar);
+ }
DEBUG(grf, 1, "Scan complete, found %d files", num);
}
--- a/src/newgrf_engine.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_engine.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -509,8 +509,6 @@
switch (variable) {
case 0x40: // Get length of consist
case 0x41: // Get length of same consecutive wagons
- if (!v->HasFront()) return 1;
-
{
const Vehicle* u;
byte chain_before = 0;
@@ -550,7 +548,7 @@
cargo_classes |= GetCargo(u->cargo_type)->classes;
common_cargos[u->cargo_type]++;
- user_def_data |= RailVehInfo(u->engine_type)->user_def_data;
+ if (v->type == VEH_TRAIN) user_def_data |= RailVehInfo(u->engine_type)->user_def_data;
common_subtypes[u->cargo_subtype]++;
}
@@ -799,15 +797,10 @@
const Vehicle *v = object->u.vehicle.self;
uint totalsets;
uint set;
- bool in_motion;
if (v == NULL) return group->g.real.loading[0];
- if (v->type == VEH_TRAIN) {
- in_motion = v->First()->current_order.type != OT_LOADING;
- } else {
- in_motion = v->current_order.type != OT_LOADING;
- }
+ bool in_motion = v->First()->current_order.type != OT_LOADING;
totalsets = in_motion ? group->g.real.num_loaded : group->g.real.num_loading;
@@ -832,7 +825,7 @@
res->ResolveReal = &VehicleResolveReal;
res->u.vehicle.self = v;
- res->u.vehicle.parent = (v != NULL && v->HasFront()) ? v->First() : v;
+ res->u.vehicle.parent = (v != NULL) ? v->First() : v;
res->u.vehicle.self_type = engine_type;
@@ -1033,7 +1026,7 @@
* i.e.), so we give them all the NEW_CARGO triggered
* vehicle's portion of random bits. */
assert(first);
- DoTriggerVehicle((v->type == VEH_TRAIN) ? v->First() : v, VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false);
+ DoTriggerVehicle(v->First(), VEHICLE_TRIGGER_ANY_NEW_CARGO, new_random_bits, false);
break;
case VEHICLE_TRIGGER_DEPOT:
--- a/src/newgrf_house.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_house.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -185,7 +185,9 @@
tile = GetNearbyTile(parameter, tile);
tile_type = GetTerrainType(tile) << 2 | (IsTileType(tile, MP_WATER) ? 1 : 0) << 1;
- return GetTileType(tile) << 24 | (TileHeight(tile) * 8) << 16 | tile_type << 8 | GetTileSlope(tile, NULL);
+ uint z;
+ Slope tileh = GetTileSlope(tile, &z);
+ return GetTileType(tile) << 24 | z << 16 | tile_type << 8 | tileh;
}
/**
--- a/src/newgrf_industries.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_industries.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -48,6 +48,7 @@
for (t = 0; t < MapSize(); t++) {
if (IsTileType(t, MP_WATER) == water) break;
}
+ if (t == MapSize() && !water) return 0x200;
best_dist = DistanceManhattan(tile, t);
for (; t < MapSize(); t++) {
@@ -58,12 +59,12 @@
/* When the Y distance between the current row and the 'source' tile
* is larger than the best distance, we've found the best distance */
if ((int)TileY(t) - (int)TileY(tile) > best_dist) break;
- if (TileX(tile) > TileX(t)) {
+ if ((int)TileX(t) - (int)TileX(tile) > best_dist) {
/* We can safely skip this many tiles; from here all tiles have a
* higher or equal distance than the best distance */
t |= MapMaxX();
continue;
- } else {
+ } else if (TileX(tile) < TileX(t)) {
/* We can safely skip this many tiles; up to here all tiles have a
* higher or equal distance than the best distance */
t += max(best_dist - dist, 0);
@@ -72,7 +73,7 @@
}
}
- return best_dist;
+ return min(best_dist, water ? 0x7F : 0x1FF);
}
/** Make an analysis of a tile and check for its belonging to the same
@@ -242,6 +243,9 @@
case 0x67:
case 0x68: return GetCountAndDistanceOfClosestInstance(parameter, variable == 0x68 ? GB(GetRegister(0x101), 0, 8) : 0, industry);
+ /* Get a variable from the persistent storage */
+ case 0x7C: return industry->psa.Get(parameter);
+
/* Industry structure access*/
case 0x80: return industry->xy;
case 0x81: return GB(industry->xy, 8, 8);
@@ -322,6 +326,7 @@
res->GetVariable = IndustryGetVariable;
res->ResolveReal = IndustryResolveReal;
+ res->psa = &indus->psa;
res->u.industry.tile = tile;
res->u.industry.ind = indus;
res->u.industry.gfx = INVALID_INDUSTRYTILE;
@@ -457,13 +462,15 @@
*/
void IndustryProductionCallback(Industry *ind, int reason)
{
+ const IndustrySpec *spec = GetIndustrySpec(ind->type);
ResolverObject object;
NewIndustryResolver(&object, ind->xy, ind);
+ if ((spec->behaviour & INDUSTRYBEH_PRODCALLBACK_RANDOM) != 0) object.callback_param1 = Random();
object.callback_param2 = reason;
for (uint loop = 0;; loop++) {
SB(object.callback_param2, 8, 16, loop);
- const SpriteGroup *group = Resolve(GetIndustrySpec(ind->type)->grf_prop.spritegroup, &object);
+ const SpriteGroup *group = Resolve(spec->grf_prop.spritegroup, &object);
if (group == NULL || group->type != SGT_INDUSTRY_PRODUCTION) break;
bool deref = (group->g.indprod.version == 1);
--- a/src/newgrf_industrytiles.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_industrytiles.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -39,7 +39,9 @@
is_same_industry = (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == index);
tile_type = GetTerrainType(tile) << 2 | (IsTileType(tile, MP_WATER) ? 1 : 0) << 1 | (is_same_industry ? 1 : 0);
- return GetTileType(tile) << 24 | (TileHeight(tile) * 8) << 16 | tile_type << 8 | GetTileSlope(tile, NULL);
+ uint z;
+ Slope tileh = GetTileSlope(tile, &z);
+ return GetTileType(tile) << 24 | z << 16 | tile_type << 8 | tileh;
}
/** This is the position of the tile relative to the northernmost tile of the industry.
@@ -138,6 +140,7 @@
res->GetVariable = IndustryTileGetVariable;
res->ResolveReal = IndustryTileResolveReal;
+ res->psa = &indus->psa;
res->u.industry.tile = tile;
res->u.industry.ind = indus;
res->u.industry.gfx = gfx;
--- a/src/newgrf_spritegroup.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_spritegroup.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -76,7 +76,7 @@
_spritegroup_count = 0;
}
-uint32 _temp_store[0x110];
+TemporaryStorageArray<uint32, 0x110> _temp_store;
static inline uint32 GetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
@@ -98,7 +98,7 @@
case 0x1C: return object->last_value;
case 0x20: return _opt.landscape == LT_ARCTIC ? GetSnowLine() : 0xFF;
- case 0x7D: return _temp_store[parameter];
+ case 0x7D: return _temp_store.Get(parameter);
/* Not a common variable, so evalute the feature specific variables */
default: return object->GetVariable(object, variable, parameter, available);
@@ -106,10 +106,25 @@
}
+/**
+ * Rotate val rot times to the right
+ * @param val the value to rotate
+ * @param rot the amount of times to rotate
+ * @return the rotated value
+ */
+static uint32 RotateRight(uint32 val, uint32 rot)
+{
+ /* Do not rotate more than necessary */
+ rot %= 32;
+
+ return (val >> rot) | (val << (32 - rot));
+}
+
+
/* Evaluate an adjustment for a variable of the given size.
* U is the unsigned type and S is the signed type to use. */
template <typename U, typename S>
-static U EvalAdjustT(const DeterministicSpriteGroupAdjust *adjust, U last_value, uint32 value)
+static U EvalAdjustT(const DeterministicSpriteGroupAdjust *adjust, ResolverObject *object, U last_value, uint32 value)
{
value >>= adjust->shift_num;
value &= adjust->and_mask;
@@ -137,10 +152,12 @@
case DSGA_OP_AND: return last_value & value;
case DSGA_OP_OR: return last_value | value;
case DSGA_OP_XOR: return last_value ^ value;
- case DSGA_OP_STO:
- if (value < lengthof(_temp_store)) _temp_store[value] = last_value;
- return last_value;
+ case DSGA_OP_STO: _temp_store.Store(value, last_value); return last_value;
case DSGA_OP_RST: return value;
+ case DSGA_OP_STOP: if (object->psa != NULL) object->psa->Store(value, last_value); return last_value;
+ case DSGA_OP_ROR: return RotateRight(last_value, value);
+ case DSGA_OP_SCMP: return ((S)last_value == (S)value) ? 1 : ((S)last_value < (S)value ? 0 : 2);
+ case DSGA_OP_UCMP: return ((U)last_value == (U)value) ? 1 : ((U)last_value < (U)value ? 0 : 2);
default: return value;
}
}
@@ -179,9 +196,9 @@
}
switch (group->g.determ.size) {
- case DSG_SIZE_BYTE: value = EvalAdjustT<uint8, int8>(adjust, last_value, value); break;
- case DSG_SIZE_WORD: value = EvalAdjustT<uint16, int16>(adjust, last_value, value); break;
- case DSG_SIZE_DWORD: value = EvalAdjustT<uint32, int32>(adjust, last_value, value); break;
+ case DSG_SIZE_BYTE: value = EvalAdjustT<uint8, int8> (adjust, object, last_value, value); break;
+ case DSG_SIZE_WORD: value = EvalAdjustT<uint16, int16>(adjust, object, last_value, value); break;
+ case DSG_SIZE_DWORD: value = EvalAdjustT<uint32, int32>(adjust, object, last_value, value); break;
default: NOT_REACHED(); break;
}
last_value = value;
@@ -192,7 +209,25 @@
if (group->g.determ.num_ranges == 0) {
/* nvar == 0 is a special case -- we turn our value into a callback result */
nvarzero.type = SGT_CALLBACK;
- nvarzero.g.callback.result = GB(value, 0, 15);
+ switch (object->callback) {
+ /* All these functions are 15 bit callbacks */
+ case CBID_VEHICLE_REFIT_CAPACITY:
+ case CBID_BUILDING_COLOUR:
+ case CBID_HOUSE_CARGO_ACCEPTANCE:
+ case CBID_INDUSTRY_LOCATION:
+ case CBID_INDTILE_CARGO_ACCEPTANCE:
+ case CBID_VEHICLE_COLOUR_MAPPING:
+ case CBID_HOUSE_PRODUCE_CARGO:
+ case CBID_VEHICLE_SOUND_EFFECT:
+ case CBID_SOUNDS_AMBIENT_EFFECT:
+ nvarzero.g.callback.result = GB(value, 0, 15);
+ break;
+
+ /* The rest is a 8 bit callback, which should be truncated properly */
+ default:
+ nvarzero.g.callback.result = GB(value, 0, 8);
+ break;
+ }
return &nvarzero;
}
--- a/src/newgrf_spritegroup.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_spritegroup.h Sun Sep 23 07:37:38 2007 +0000
@@ -7,6 +7,7 @@
#include "town.h"
#include "industry.h"
+#include "newgrf_storage.h"
/**
* Gets the value of a so-called newgrf "register".
@@ -16,9 +17,8 @@
*/
static inline uint32 GetRegister(uint i)
{
- assert(i < 0x110);
- extern uint32 _temp_store[0x110];
- return _temp_store[i];
+ extern TemporaryStorageArray<uint32, 0x110> _temp_store;
+ return _temp_store.Get(i);
}
struct SpriteGroup;
@@ -76,6 +76,10 @@
DSGA_OP_XOR, ///< a ^ b
DSGA_OP_STO, ///< store a into temporary storage, indexed by b. return a
DSGA_OP_RST, ///< return b
+ DSGA_OP_STOP, ///< store a into persistent storage, indexed by b, return a
+ DSGA_OP_ROR, ///< rotate a b positions to the right
+ DSGA_OP_SCMP, ///< (signed) comparision (a < b -> 0, a == b = 1, a > b = 2)
+ DSGA_OP_UCMP, ///< (unsigned) comparision (a < b -> 0, a == b = 1, a > b = 2)
};
@@ -199,6 +203,8 @@
bool info_view; ///< Indicates if the item is being drawn in an info window
+ BaseStorageArray *psa; ///< The persistent storage array of this resolved object.
+
union {
struct {
const struct Vehicle *self;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_storage.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -0,0 +1,27 @@
+/* $Id$ */
+
+/** @file newgrf_storage.cpp Functionality related to the temporary and persistent storage arrays for NewGRFs. */
+
+#include "stdafx.h"
+#include "helpers.hpp"
+#include "newgrf_storage.h"
+#include <set>
+
+/** The changed storage arrays */
+static std::set<BaseStorageArray*> _changed_storage_arrays;
+
+void AddChangedStorage(BaseStorageArray *storage)
+{
+ _changed_storage_arrays.insert(storage);
+}
+
+void ClearStorageChanges(bool keep_changes)
+{
+ /* Loop over all changes arrays */
+ for (std::set<BaseStorageArray*>::iterator it = _changed_storage_arrays.begin(); it != _changed_storage_arrays.end(); it++) {
+ (*it)->ClearChanges(keep_changes);
+ }
+
+ /* And then clear that array */
+ _changed_storage_arrays.clear();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_storage.h Sun Sep 23 07:37:38 2007 +0000
@@ -0,0 +1,183 @@
+/* $Id$ */
+
+/** @file newgrf_storage.h Functionality related to the temporary and persistent storage arrays for NewGRFs. */
+
+#ifndef NEWGRF_STORAGE_H
+#define NEWGRF_STORAGE_H
+
+/**
+ * Base class for all NewGRF storage arrays. Nothing fancy, only here
+ * so we have a generalised class to use.
+ */
+struct BaseStorageArray
+{
+ /** The needed destructor */
+ virtual ~BaseStorageArray() {}
+
+ /**
+ * Clear the changes made since the last ClearChanges.
+ * This can be done in two ways:
+ * - saving the changes permanently
+ * - reverting to the previous version
+ * @param keep_changes do we save or revert the changes since the last ClearChanges?
+ */
+ virtual void ClearChanges(bool keep_changes) = 0;
+
+ /**
+ * Stores some value at a given position.
+ * @param pos the position to write at
+ * @param value the value to write
+ */
+ virtual void Store(uint pos, uint32 value) = 0;
+};
+
+/**
+ * Class for persistent storage of data.
+ * On ClearChanges that data is either reverted or saved.
+ * @param TYPE the type of variable to store.
+ * @param SIZE the size of the array.
+ */
+template <typename TYPE, uint SIZE>
+struct PersistentStorageArray : BaseStorageArray {
+ TYPE storage[SIZE]; ///< Memory to for the storage array
+ TYPE *prev_storage; ///< Memory to store "old" states so we can revert them on the performance of test cases for commands etc.
+
+ /** Simply construct the array */
+ PersistentStorageArray() : prev_storage(NULL)
+ {
+ memset(this->storage, 0, sizeof(this->storage));
+ }
+
+ /** And free all data related to it */
+ ~PersistentStorageArray()
+ {
+ free(this->prev_storage);
+ }
+
+ /**
+ * Stores some value at a given position.
+ * If there is no backup of the data that backup is made and then
+ * we write the data.
+ * @param pos the position to write at
+ * @param value the value to write
+ */
+ void Store(uint pos, uint32 value)
+ {
+ /* Out of the scope of the array */
+ if (pos >= SIZE) return;
+
+ /* The value hasn't changed, so we pretend nothing happened.
+ * Saves a few cycles and such and it's pretty easy to check. */
+ if (this->storage[pos] == value) return;
+
+ /* We do not have made a backup; lets do so */
+ if (this->prev_storage != NULL) {
+ this->prev_storage = MallocT<TYPE>(SIZE);
+ if (this->prev_storage == NULL) return;
+
+ memcpy(this->prev_storage, this->storage, sizeof(this->storage));
+
+ /* We only need to register ourselves when we made the backup
+ * as that is the only time something will have changed */
+ AddChangedStorage(this);
+ }
+
+ this->storage[pos] = value;
+ }
+
+ /**
+ * Gets the value from a given position.
+ * @param pos the position to get the data from
+ * @return the data from that position
+ */
+ TYPE Get(uint pos) const
+ {
+ /* Out of the scope of the array */
+ if (pos >= SIZE) return 0;
+
+ return this->storage[pos];
+ }
+
+ void ClearChanges(bool keep_changes)
+ {
+ assert(this->prev_storage != NULL);
+
+ if (!keep_changes) {
+ memcpy(this->storage, this->prev_storage, sizeof(this->storage));
+ }
+ free(this->prev_storage);
+ }
+};
+
+
+/**
+ * Class for temporary storage of data.
+ * On ClearChanges that data is always zero-ed.
+ * @param TYPE the type of variable to store.
+ * @param SIZE the size of the array.
+ */
+template <typename TYPE, uint SIZE>
+struct TemporaryStorageArray : BaseStorageArray {
+ TYPE storage[SIZE]; ///< Memory to for the storage array
+
+ /** Simply construct the array */
+ TemporaryStorageArray()
+ {
+ memset(this->storage, 0, sizeof(this->storage));
+ }
+
+ /**
+ * Stores some value at a given position.
+ * @param pos the position to write at
+ * @param value the value to write
+ */
+ void Store(uint pos, uint32 value)
+ {
+ /* Out of the scope of the array */
+ if (pos >= SIZE) return;
+
+ this->storage[pos] = value;
+ AddChangedStorage(this);
+ }
+
+ /**
+ * Gets the value from a given position.
+ * @param pos the position to get the data from
+ * @return the data from that position
+ */
+ TYPE Get(uint pos) const
+ {
+ /* Out of the scope of the array */
+ if (pos >= SIZE) return 0;
+
+ return this->storage[pos];
+ }
+
+ void ClearChanges(bool keep_changes)
+ {
+ memset(this->storage, 0, sizeof(this->storage));
+ }
+};
+
+/**
+ * Add the changed storage array to the list of changed arrays.
+ * This is done so we only have to revert/save the changed
+ * arrays, which saves quite a few clears, etc. after callbacks.
+ * @param storage the array that has changed
+ */
+void AddChangedStorage(BaseStorageArray *storage);
+
+
+/**
+ * Clear the changes made since the last ClearStorageChanges.
+ * This is done for *all* storages that have been registered to with
+ * AddChangedStorage since the previous ClearStorageChanges.
+ *
+ * This can be done in two ways:
+ * - saving the changes permanently
+ * - reverting to the previous version
+ * @param keep_changes do we save or revert the changes since the last ClearChanges?
+ */
+void ClearStorageChanges(bool keep_changes);
+
+#endif /* NEWGRF_STORAGE_H */
--- a/src/newgrf_text.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_text.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -21,6 +21,7 @@
#include "newgrf_text.h"
#include "table/control_codes.h"
#include "helpers.hpp"
+#include "date.h"
#define GRFTAB 28
#define TABSIZE 11
@@ -228,9 +229,9 @@
case 0x7B:
case 0x7C:
case 0x7D:
- case 0x7E: d += Utf8Encode(d, SCC_NUM); break;
- case 0x7F: d += Utf8Encode(d, SCC_CURRENCY); break;
- case 0x80: d += Utf8Encode(d, SCC_STRING); break;
+ case 0x7E:
+ case 0x7F:
+ case 0x80: d += Utf8Encode(d, SCC_NEWGRF_PRINT_DWORD + c - 0x7B); break;
case 0x81: {
StringID string;
string = *str++;
@@ -239,12 +240,12 @@
d += Utf8Encode(d, string);
break;
}
- case 0x82: d += Utf8Encode(d, SCC_DATE_TINY); break;
- case 0x83: d += Utf8Encode(d, SCC_DATE_SHORT); break;
- case 0x84: d += Utf8Encode(d, SCC_VELOCITY); break;
- case 0x85: d += Utf8Encode(d, SCC_SKIP); break;
- case 0x86: /* "Rotate down top 4 words on stack" */ break;
- case 0x87: d += Utf8Encode(d, SCC_VOLUME); break;
+ case 0x82:
+ case 0x83:
+ case 0x84: d += Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_SPEED + c - 0x82); break;
+ case 0x85: d += Utf8Encode(d, SCC_NEWGRF_DISCARD_WORD); break;
+ case 0x86: d += Utf8Encode(d, SCC_NEWGRF_ROTATE_TOP_4_WORDS); break;
+ case 0x87: d += Utf8Encode(d, SCC_NEWGRF_PRINT_WORD_LITRES); break;
case 0x88: d += Utf8Encode(d, SCC_BLUE); break;
case 0x89: d += Utf8Encode(d, SCC_SILVER); break;
case 0x8A: d += Utf8Encode(d, SCC_GOLD); break;
@@ -262,6 +263,20 @@
case 0x96: d += Utf8Encode(d, SCC_GRAY); break;
case 0x97: d += Utf8Encode(d, SCC_DKBLUE); break;
case 0x98: d += Utf8Encode(d, SCC_BLACK); break;
+ case 0x9A:
+ switch (*str++) {
+ case 0: /* FALL THROUGH */
+ case 1: d += Utf8Encode(d, SCC_NEWGRF_PRINT_QWORD_CURRENCY); break;
+ case 3: {
+ uint16 tmp = *str++;
+ tmp |= (*str++) << 8;
+ d += Utf8Encode(d, SCC_NEWGRF_PUSH_WORD); d += Utf8Encode(d, tmp);
+ } break;
+ case 4: d += Utf8Encode(d, SCC_NEWGRF_UNPRINT); d += Utf8Encode(d, *str++); break;
+ default: grfmsg(1, "missing handler for extended format code"); break;
+ }
+ break;
+
case 0x9E: d += Utf8Encode(d, 0x20AC); break; // Euro
case 0x9F: d += Utf8Encode(d, 0x0178); break; // Y with diaeresis
case 0xA0: d += Utf8Encode(d, SCC_UPARROW); break;
@@ -481,3 +496,142 @@
_num_grf_texts = 0;
}
+
+struct TextRefStack {
+ byte stack[0x30];
+ byte position;
+ bool used;
+
+ TextRefStack() : used(false) {}
+
+ uint8 PopUnsignedByte() { assert(this->position < lengthof(this->stack)); return this->stack[this->position++]; }
+ int8 PopSignedByte() { return (int8)this->PopUnsignedByte(); }
+
+ uint16 PopUnsignedWord() { return this->PopUnsignedByte() | (((uint16)this->PopUnsignedByte()) << 8); }
+ int16 PopSignedWord() { return (int32)this->PopUnsignedWord(); }
+
+ uint32 PopUnsignedDWord() { return this->PopUnsignedWord() | (((uint32)this->PopUnsignedWord()) << 16); }
+ int32 PopSignedDWord() { return (int32)this->PopUnsignedDWord(); }
+
+ uint64 PopUnsignedQWord() { return this->PopUnsignedDWord() | (((uint64)this->PopUnsignedDWord()) << 32); }
+ int64 PopSignedQWord() { return (int64)this->PopUnsignedQWord(); }
+
+ /** Rotate the top four words down: W1, W2, W3, W4 -> W4, W1, W2, W3 */
+ void RotateTop4Words()
+ {
+ byte tmp[2];
+ for (int i = 0; i < 2; i++) tmp[i] = this->stack[this->position + i + 6];
+ for (int i = 5; i >= 0; i--) this->stack[this->position + i + 2] = this->stack[this->position + i];
+ for (int i = 0; i < 2; i++) this->stack[this->position + i] = tmp[i];
+ }
+
+ void PushWord(uint16 word)
+ {
+ if (this->position >= 2) {
+ this->position -= 2;
+ } else {
+ for (uint i = lengthof(stack) - 3; i >= this->position; i--) {
+ this->stack[this->position + 2] = this->stack[this->position];
+ }
+ }
+ this->stack[this->position] = GB(word, 0, 8);
+ this->stack[this->position + 1] = GB(word, 8, 8);
+ }
+
+ void ResetStack() { this->used = true; this->position = 0; }
+};
+
+/** The stack that is used for TTDP compatible string code parsing */
+static TextRefStack _newgrf_textrefstack;
+
+/** Prepare the TTDP compatible string code parsing */
+void PrepareTextRefStackUsage()
+{
+ extern TemporaryStorageArray<uint32, 0x110> _temp_store;
+
+ _newgrf_textrefstack.ResetStack();
+
+ byte *p = _newgrf_textrefstack.stack;
+ for (uint i = 0; i < 6; i++) {
+ for (uint j = 0; j < 32; j += 8) {
+ *p = GB(_temp_store.Get(0x100 + i), 32 - j, 8);
+ p++;
+ }
+ }
+}
+
+/** Stop using the TTDP compatible string code parsing */
+void StopTextRefStackUsage() { _newgrf_textrefstack.used = false; }
+
+/**
+ * FormatString for NewGRF specific "magic" string control codes
+ * @param scc the string control code that has been read
+ * @param stack the current "stack"
+ * @return the string control code to "execute" now
+ */
+uint RemapNewGRFStringControlCode(uint scc, char **buff, const char **str, int64 *argv)
+{
+ if (_newgrf_textrefstack.used) {
+ switch (scc) {
+ default: NOT_REACHED();
+ case SCC_NEWGRF_PRINT_SIGNED_BYTE: *argv = _newgrf_textrefstack.PopSignedByte(); break;
+ case SCC_NEWGRF_PRINT_SIGNED_WORD: *argv = _newgrf_textrefstack.PopSignedWord(); break;
+ case SCC_NEWGRF_PRINT_QWORD_CURRENCY: *argv = _newgrf_textrefstack.PopUnsignedQWord(); break;
+
+ case SCC_NEWGRF_PRINT_DWORD_CURRENCY:
+ case SCC_NEWGRF_PRINT_DWORD: *argv = _newgrf_textrefstack.PopSignedDWord(); break;
+
+ case SCC_NEWGRF_PRINT_WORD_SPEED:
+ case SCC_NEWGRF_PRINT_WORD_LITRES:
+ case SCC_NEWGRF_PRINT_UNSIGNED_WORD: *argv = _newgrf_textrefstack.PopUnsignedWord(); break;
+
+ case SCC_NEWGRF_PRINT_DATE:
+ case SCC_NEWGRF_PRINT_MONTH_YEAR: *argv = _newgrf_textrefstack.PopSignedWord() + DAYS_TILL_ORIGINAL_BASE_YEAR; break;
+
+ case SCC_NEWGRF_DISCARD_WORD: _newgrf_textrefstack.PopUnsignedWord(); break;
+
+ case SCC_NEWGRF_ROTATE_TOP_4_WORDS: _newgrf_textrefstack.RotateTop4Words(); break;
+ case SCC_NEWGRF_PUSH_WORD: _newgrf_textrefstack.PushWord(Utf8Consume(str)); break;
+ case SCC_NEWGRF_UNPRINT: *buff -= Utf8Consume(str); break;
+
+ case SCC_NEWGRF_PRINT_STRING_ID:
+ *argv = _newgrf_textrefstack.PopUnsignedWord();
+ if (*argv == STR_NULL) *argv = STR_EMPTY;
+ break;
+ }
+ }
+
+ switch (scc) {
+ default: NOT_REACHED();
+ case SCC_NEWGRF_PRINT_DWORD:
+ case SCC_NEWGRF_PRINT_SIGNED_WORD:
+ case SCC_NEWGRF_PRINT_SIGNED_BYTE:
+ case SCC_NEWGRF_PRINT_UNSIGNED_WORD:
+ return SCC_NUM;
+
+ case SCC_NEWGRF_PRINT_DWORD_CURRENCY:
+ case SCC_NEWGRF_PRINT_QWORD_CURRENCY:
+ return SCC_CURRENCY;
+
+ case SCC_NEWGRF_PRINT_STRING_ID:
+ return SCC_STRING;
+
+ case SCC_NEWGRF_PRINT_DATE:
+ return SCC_DATE_LONG;
+
+ case SCC_NEWGRF_PRINT_MONTH_YEAR:
+ return SCC_DATE_TINY;
+
+ case SCC_NEWGRF_PRINT_WORD_SPEED:
+ return SCC_VELOCITY;
+
+ case SCC_NEWGRF_PRINT_WORD_LITRES:
+ return SCC_VOLUME;
+
+ case SCC_NEWGRF_DISCARD_WORD:
+ case SCC_NEWGRF_ROTATE_TOP_4_WORDS:
+ case SCC_NEWGRF_PUSH_WORD:
+ case SCC_NEWGRF_UNPRINT:
+ return 0;
+ }
+}
--- a/src/newgrf_text.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/newgrf_text.h Sun Sep 23 07:37:38 2007 +0000
@@ -15,4 +15,8 @@
bool CheckGrfLangID(byte lang_id, byte grf_version);
+void PrepareTextRefStackUsage();
+void StopTextRefStackUsage();
+uint RemapNewGRFStringControlCode(uint scc, char **buff, const char **str, int64 *argv);
+
#endif /* NEWGRF_TEXT_H */
--- a/src/news.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/news.h Sun Sep 23 07:37:38 2007 +0000
@@ -6,16 +6,16 @@
#define NEWS_H
struct NewsItem {
- StringID string_id;
- uint16 duration;
- Date date;
- byte flags;
- byte display_mode;
- byte type;
- byte callback;
+ StringID string_id; ///< Message text (sometimes also used for storing other info)
+ uint16 duration; ///< Remaining time for showing this news message
+ Date date; ///< Date of the news
+ byte flags; ///< NewsFlags bits @see NewsFlags
+ byte display_mode; ///< Display mode value @see NewsMode
+ byte type; ///< News category @see NewsType
+ byte callback; ///< Call-back function
- TileIndex data_a;
- TileIndex data_b;
+ TileIndex data_a; ///< Reference to tile or vehicle
+ TileIndex data_b; ///< Reference to second tile or vehicle
uint64 params[10];
};
@@ -24,7 +24,20 @@
typedef void DrawNewsCallbackProc(Window *w);
typedef StringID GetNewsStringCallbackProc(const NewsItem *ni);
+/**
+ * Macro for creating news flags.
+ * @param mode (bits 0 - 7) Display_mode, one of the NewsMode enums (NM_)
+ * @param flag (bits 8 - 15) OR-able news flags, any of the NewsFlags enums (NF_)
+ * @param type (bits 16-23) News category, one of the NewsType enums (NT_)
+ * @param cb (bits 24-31) Call-back function, one of the NewsCallback enums (DNC_) or 0 if no callback
+ * @see NewsMode
+ * @see NewsFlags
+ * @see NewsType
+ * @see NewsCallback
+ * @see AddNewsItem
+ */
#define NEWS_FLAGS(mode, flag, type, cb) ((cb) << 24 | (type) << 16 | (flag) << 8 | (mode))
+
void AddNewsItem(StringID string, uint32 flags, uint data_a, uint data_b);
void NewsLoop();
void DrawNewsBorder(const Window *w);
@@ -32,23 +45,28 @@
VARDEF NewsItem _statusbar_news_item;
+/** Type of news. */
enum NewsType {
- NT_ARRIVAL_PLAYER,
- NT_ARRIVAL_OTHER,
- NT_ACCIDENT,
- NT_COMPANY_INFO,
- NT_OPENCLOSE,
- NT_ECONOMY,
- NT_ADVICE,
- NT_NEW_VEHICLES,
- NT_ACCEPTANCE,
- NT_SUBSIDIES,
- NT_GENERAL,
- NT_END,
+ NT_ARRIVAL_PLAYER, ///< Cargo arrived for player
+ NT_ARRIVAL_OTHER, ///< Cargo arrived for competitor
+ NT_ACCIDENT, ///< An accident or disaster has occurred
+ NT_COMPANY_INFO, ///< Company info (new companies, bankrupcy messages)
+ NT_OPENCLOSE, ///< Opening and closing of industries
+ NT_ECONOMY, ///< Economic changes (recession, industry up/dowm)
+ NT_ADVICE, ///< Bits of news about vehicles of the player
+ NT_NEW_VEHICLES, ///< New vehicle has become available
+ NT_ACCEPTANCE, ///< A type of cargo is (no longer) accepted
+ NT_SUBSIDIES, ///< News about subsidies (announcements, expirations, acceptance)
+ NT_GENERAL, ///< General news (from towns)
+ NT_END, ///< end-of-array marker
};
extern const char *_news_display_name[NT_END];
+/**
+ * News mode.
+ * @see NEWS_FLAGS
+ */
enum NewsMode {
NM_SMALL = 0, ///< Show only a small popup informing us about vehicle age for example
NM_NORMAL = 1, ///< Show a simple news message (height 170 pixels)
@@ -56,6 +74,11 @@
NM_CALLBACK = 3, ///< Do some special processing before displaying news message. Which callback to call is in NewsCallback
};
+/**
+ * Various OR-able news-item flags.
+ * note: NF_INCOLOR is set automatically if needed
+ * @see NEWS_FLAGS
+ */
enum NewsFlags {
NF_VIEWPORT = (1 << 1), ///< Does the news message have a viewport? (ingame picture of happening)
NF_TILE = (1 << 2), ///< When clicked on the news message scroll to a given tile? Tile is in data_a/data_b
@@ -64,11 +87,13 @@
NF_INCOLOR = (1 << 5), ///< Show the newsmessage in colour, otherwise it defaults to black & white
};
+/** Special news items */
enum NewsCallback {
DNC_VEHICLEAVAIL = 0, ///< Show new vehicle available message. StringID is EngineID
DNC_BANKRUPCY = 1, ///< Show bankrupcy message. StringID is PlayerID (0-3) and NewsBankrupcy (4-7)
};
+/** Kinds of bankrupcy */
enum NewsBankrupcy {
NB_BTROUBLE = (1 << 4), ///< Company is in trouble (warning)
NB_BMERGER = (2 << 4), ///< Company has been bought by another company
--- a/src/news_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/news_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -1,6 +1,5 @@
/* $Id$ */
-/** @file news_gui.cpp */
#include "stdafx.h"
#include "openttd.h"
@@ -19,42 +18,50 @@
#include "date.h"
#include "string.h"
-/* News system
+/** @file news_gui.cpp
+ *
* News system is realized as a FIFO queue (in an array)
* The positions in the queue can't be rearranged, we only access
* the array elements through pointers to the elements. Once the
- * array is full, the oldest entry (_oldest_news) is being overwritten
- * by the newest (_latest news).
+ * array is full, the oldest entry (\a _oldest_news) is being overwritten
+ * by the newest (\a _latest_news).
*
+ * \verbatim
* oldest current lastest
* | | |
* [O------------F-------------C---------L ]
* |
* forced
+ * \endverbatim
*
* Of course by using an array we can have situations like
*
+ * \verbatim
* [----L O-----F---------C-----------------]
* This is where we have wrapped around the array and have
* (MAX_NEWS - O) + L news items
+ * \endverbatim
*/
+/** Number of news items in the FIFO queue */
#define MAX_NEWS 30
#define NB_WIDG_PER_SETTING 4
typedef byte NewsID;
#define INVALID_NEWS 255
-static NewsItem _news_items[MAX_NEWS];
-static NewsID _current_news = INVALID_NEWS; // points to news item that should be shown next
-static NewsID _oldest_news = 0; // points to first item in fifo queue
-static NewsID _latest_news = INVALID_NEWS; // points to last item in fifo queue
-/* if the message being shown was forced by the user, its index is stored in
- * _forced_news. forced_news is INVALID_NEWS otherwise.
- * (Users can force messages through history or "last message") */
+static NewsItem _news_items[MAX_NEWS]; ///< The news FIFO queue
+static NewsID _current_news = INVALID_NEWS; ///< points to news item that should be shown next
+static NewsID _oldest_news = 0; ///< points to first item in fifo queue
+static NewsID _latest_news = INVALID_NEWS; ///< points to last item in fifo queue
+
+/** Forced news item.
+ * Users can force an item by accessing the history or "last message".
+ * If the message being shown was forced by the user, its index is stored in
+ * _forced_news. Otherwise, \a _forced_news variable is INVALID_NEWS. */
static NewsID _forced_news = INVALID_NEWS;
-static byte _total_news = 0; // total news count
+static byte _total_news = 0; ///< Number of news items in FIFO queue @see _news_items
void DrawNewsNewVehicleAvail(Window *w);
void DrawNewsBankrupcy(Window *w);
@@ -64,8 +71,8 @@
StringID GetNewsStringBankrupcy(const NewsItem *ni);
static DrawNewsCallbackProc * const _draw_news_callback[] = {
- DrawNewsNewVehicleAvail, //< DNC_VEHICLEAVAIL
- DrawNewsBankrupcy, //< DNC_BANKRUPCY
+ DrawNewsNewVehicleAvail, ///< DNC_VEHICLEAVAIL
+ DrawNewsBankrupcy, ///< DNC_BANKRUPCY
};
extern GetNewsStringCallbackProc * const _get_news_string_callback[];
@@ -74,6 +81,7 @@
GetNewsStringBankrupcy, ///< DNC_BANKRUPCY
};
+/** Initialize the news-items data structures */
void InitNewsItemStructs()
{
memset(_news_items, 0, sizeof(_news_items));
@@ -219,42 +227,52 @@
}
}
-/** Return the correct index in the pseudo-fifo
- * queue and deals with overflows when increasing the index */
+/**
+ * Return the correct index in the pseudo-fifo
+ * queue and deals with overflows when increasing the index
+ */
static inline NewsID increaseIndex(NewsID i)
{
assert(i != INVALID_NEWS);
return (i + 1) % MAX_NEWS;
}
-/** Return the correct index in the pseudo-fifo
- * queue and deals with overflows when decreasing the index */
+/**
+ * Return the correct index in the pseudo-fifo
+ * queue and deals with overflows when decreasing the index
+ */
static inline NewsID decreaseIndex(NewsID i)
{
assert(i != INVALID_NEWS);
return (i + MAX_NEWS - 1) % MAX_NEWS;
}
-/** Add a new newsitem to be shown.
- * @param string String to display, can have special values based on parameter 'flags'
+/**
+ * Add a new newsitem to be shown.
+ * @param string String to display, can have special values based on parameter \a flags
* @param flags various control bits that will show various news-types. See macro NEWS_FLAGS()
* @param data_a news-specific value based on news type
* @param data_b news-specific value based on news type
* @note flags exists of 4 byte-sized extra parameters.
- * 1. 0 - 7 display_mode, any of the NewsMode enums (NM_)
- * 2. 8 - 15 news flags, any of the NewsFlags enums (NF_) NF_INCOLOR are set automatically if needed
- * 3. 16 - 23 news category, any of the NewsType enums (NT_)
- * 4. 24 - 31 news callback function, any of the NewsCallback enums (DNC_)
- * If the display mode is NM_CALLBACK special news is shown and parameter
- * stringid has a special meaning.
- * DNC_TRAINAVAIL, DNC_ROADAVAIL, DNC_SHIPAVAIL, DNC_AIRCRAFTAVAIL: StringID is
- * the index of the engine that is shown
- * DNC_BANKRUPCY: bytes 0-3 of StringID contains the player that is in trouble,
- * and 4-7 contains what kind of bankrupcy message is shown, NewsBankrupcy enum (NB_)
+ * -# Bits 0 - 7 display_mode, any of the NewsMode enums (NM_)
+ * -# Bits 8 - 15 news flags, any of the NewsFlags enums (NF_)
+ * -# Bits 16 - 23 news category, any of the NewsType enums (NT_)
+ * -# Bits 24 - 31 news callback function, any of the NewsCallback enums (DNC_)
+ *
+ * If the display mode is NM_CALLBACK, special news is shown and parameter
+ * \a string has a special meaning.
+ * - For DNC_TRAINAVAIL, DNC_ROADAVAIL, DNC_SHIPAVAIL, DNC_AIRCRAFTAVAIL messages: StringID is
+ * the index of the engine that is shown
+ *
+ * - For DNC_BANKRUPCY: bytes 0-3 of StringID contains the player that is in trouble,
+ * and 4-7 contains what kind of bankrupcy message is shown.
+ * @see NewsBankrupcy
+ *
* @see NewsMode
* @see NewsFlags
* @see NewsType
- * @see NewsCallback */
+ * @see NewsCallback
+ */
void AddNewsItem(StringID string, uint32 flags, uint data_a, uint data_b)
{
NewsID l_news;
@@ -310,8 +328,25 @@
}
-/* Don't show item if it's older than x days, corresponds with NewsType in news.h */
-static const byte _news_items_age[] = {60, 60, 90, 60, 90, 30, 150, 30, 90, 180};
+/**
+ * Maximum age of news items.
+ * Don't show item if it's older than x days, corresponds with NewsType in news.h
+ * @see NewsType
+ */
+static const byte _news_items_age[NT_END] = {
+ 60, ///< NT_ARRIVAL_PLAYER
+ 60, ///< NT_ARRIVAL_OTHER
+ 90, ///< NT_ACCIDENT
+ 60, ///< NT_COMPANY_INFO
+ 90, ///< NT_OPENCLOSE
+ 30, ///< NT_ECONOMY
+ 150, ///< NT_ADVICE
+ 30, ///< NT_NEW_VEHICLES
+ 90, ///< NT_ACCEPTANCE
+ 180, ///< NT_SUBSIDIES
+ 60 ///< NT_GENERAL
+};
+
static const Widget _news_type13_widgets[] = {
{ WWT_PANEL, RESIZE_NONE, 15, 0, 429, 0, 169, 0x0, STR_NULL},
@@ -385,7 +420,8 @@
"general",
};
-/** Get the value of an item of the news-display settings. This is
+/**
+ * Get the value of an item of the news-display settings. This is
* a little tricky since on/off/summary must use 2 bits to store the value
* @param item the item whose value is requested
* @return return the found value which is between 0-2
@@ -396,7 +432,8 @@
return GB(_news_display_opt, item * 2, 2);
}
-/** Set the value of an item in the news-display settings. This is
+/**
+ * Set the value of an item in the news-display settings. This is
* a little tricky since on/off/summary must use 2 bits to store the value
* @param item the item whose value is being set
* @param val new value
@@ -407,7 +444,7 @@
SB(_news_display_opt, item * 2, 2, val);
}
-/* open up an own newspaper window for the news item */
+/** Open up an own newspaper window for the news item */
static void ShowNewspaper(NewsItem *ni)
{
Window *w;
@@ -457,7 +494,7 @@
w->flags4 |= WF_DISABLE_VP_SCROLL;
}
-/* show news item in the ticker */
+/** Show news item in the ticker */
static void ShowTicker(const NewsItem *ni)
{
Window *w;
@@ -470,8 +507,10 @@
}
-/** Are we ready to show another news item?
- * Only if nothing is in the newsticker and no newspaper is displayed */
+/**
+ * Are we ready to show another news item?
+ * Only if nothing is in the newsticker and no newspaper is displayed
+ */
static bool ReadyForNextItem()
{
const Window *w;
@@ -493,6 +532,7 @@
return (ni->duration == 0 || FindWindowById(WC_NEWS_WINDOW, 0) == NULL);
}
+/** Move to the next news item */
static void MoveToNextItem()
{
DeleteWindowById(WC_NEWS_WINDOW, 0);
@@ -509,26 +549,27 @@
if (_date - _news_items_age[ni->type] > ni->date) return;
switch (GetNewsDisplayValue(ni->type)) {
- case 0: { // Off - show nothing only a small reminder in the status bar
- Window *w = FindWindowById(WC_STATUS_BAR, 0);
+ default: NOT_REACHED();
+ case 0: { // Off - show nothing only a small reminder in the status bar
+ Window *w = FindWindowById(WC_STATUS_BAR, 0);
- if (w != NULL) {
- WP(w, def_d).data_2 = 91;
- SetWindowDirty(w);
- }
- break;
- }
-
- case 1: // Summary - show ticker, but if forced big, cascade to full
- if (!(ni->flags & NF_FORCE_BIG)) {
- ShowTicker(ni);
+ if (w != NULL) {
+ WP(w, def_d).data_2 = 91;
+ SetWindowDirty(w);
+ }
break;
}
- /* Fallthrough */
- case 2: // Full - show newspaper
- ShowNewspaper(ni);
- break;
+ case 1: // Summary - show ticker, but if forced big, cascade to full
+ if (!(ni->flags & NF_FORCE_BIG)) {
+ ShowTicker(ni);
+ break;
+ }
+ /* Fallthrough */
+
+ case 2: // Full - show newspaper
+ ShowNewspaper(ni);
+ break;
}
}
}
@@ -541,7 +582,7 @@
if (ReadyForNextItem()) MoveToNextItem();
}
-/* Do a forced show of a specific message */
+/** Do a forced show of a specific message */
static void ShowNewsMessage(NewsID i)
{
if (_total_news == 0) return;
@@ -561,6 +602,7 @@
}
}
+/** Show previous news item */
void ShowLastNewsMessage()
{
if (_forced_news == INVALID_NEWS) {
@@ -594,7 +636,8 @@
return i;
}
-/** Draw an unformatted news message truncated to a maximum length. If
+/**
+ * Draw an unformatted news message truncated to a maximum length. If
* length exceeds maximum length it will be postfixed by '...'
* @param x,y position of the string
* @param color the color the string will be shown in
@@ -707,6 +750,7 @@
MessageHistoryWndProc
};
+/** Display window with news messages history */
void ShowMessageHistory()
{
Window *w;
@@ -733,7 +777,8 @@
WIDGET_NEWSOPT_START_OPTION = 9, ///< First widget that is part of a group [<] .. [.]
};
-/** Setup the disabled/enabled buttons in the message window
+/**
+ * Setup the disabled/enabled buttons in the message window
* If the value is 'off' disable the [<] widget, and enable the [>] one
* Same-wise for all the others. Starting value of 4 is the first widget
* group. These are grouped as [<][>] .. [<][>], etc.
--- a/src/oldloader.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/oldloader.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -1028,7 +1028,7 @@
OCL_END()
};
-static bool LoadOldVehicle(LoadgameState *ls, int num)
+bool LoadOldVehicle(LoadgameState *ls, int num)
{
uint i;
@@ -1059,7 +1059,7 @@
default: v->spritenum >>= 1; break;
}
- if (_old_next_ptr != 0xFFFF) v->SetNext(GetVehicle(_old_next_ptr));
+ if (_old_next_ptr != 0xFFFF) v->next = GetVehicle(_old_next_ptr);
v->string_id = RemapOldStringID(_old_string_id);
--- a/src/openttd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/openttd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -62,6 +62,7 @@
#include "newgrf_config.h"
#include "newgrf_house.h"
#include "newgrf_commons.h"
+#include "newgrf_storage.h"
#include "player_face.h"
#include "group.h"
#include "blitter/factory.hpp"
@@ -90,8 +91,6 @@
extern void ShowOSErrorBox(const char *buf);
extern void SetDefaultRailGui();
-const char *_default_blitter = "8bpp-optimized";
-
/* TODO: usrerror() for errors which are not of an internal nature but
* caused by the user, i.e. missing files or fatal configuration errors.
* Post-0.4.0 since Celestar doesn't want this in SVN before. --pasky */
@@ -482,7 +481,7 @@
if (!StrEmpty(musicdriver)) ttd_strlcpy(_ini_musicdriver, musicdriver, sizeof(_ini_musicdriver));
if (!StrEmpty(sounddriver)) ttd_strlcpy(_ini_sounddriver, sounddriver, sizeof(_ini_sounddriver));
if (!StrEmpty(videodriver)) ttd_strlcpy(_ini_videodriver, videodriver, sizeof(_ini_videodriver));
- if (StrEmpty(blitter)) ttd_strlcpy(blitter, _default_blitter, sizeof(blitter));
+ if (!StrEmpty(blitter)) ttd_strlcpy(_ini_blitter, blitter, sizeof(_ini_blitter));
if (!StrEmpty(ai)) AI_ForceAI(ai);
if (resolution[0] != 0) { _cur_resolution[0] = resolution[0]; _cur_resolution[1] = resolution[1]; }
if (startyear != INVALID_YEAR) _patches_newgame.starting_year = startyear;
@@ -528,9 +527,11 @@
/* Initialize game palette */
GfxInitPalettes();
- DEBUG(misc, 1, "Loading blitter '%s'...", blitter);
- if (BlitterFactoryBase::SelectBlitter(blitter) == NULL)
- error("Failed to select requested blitter '%s'; does it exist?", blitter);
+ DEBUG(misc, 1, "Loading blitter...");
+ if (BlitterFactoryBase::SelectBlitter(_ini_blitter) == NULL)
+ StrEmpty(_ini_blitter) ?
+ error("Failed to autoprobe blitter") :
+ error("Failed to select requested blitter '%s'; does it exist?", _ini_blitter);
DEBUG(driver, 1, "Loading drivers...");
@@ -986,6 +987,8 @@
* That check is enforced in DoCommand. */
void StateGameLoop()
{
+ ClearStorageChanges(false);
+
/* dont execute the state loop during pause */
if (_pause_game) return;
if (IsGeneratingWorld()) return;
--- a/src/order_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/order_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -355,7 +355,7 @@
{
if (u->type != v->type) return false;
- if (u->HasFront() && !u->IsPrimaryVehicle()) {
+ if (!u->IsPrimaryVehicle()) {
u = u->First();
if (!u->IsPrimaryVehicle()) return false;
}
--- a/src/ottdres.rc Sun Sep 09 21:14:29 2007 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-//Microsoft Developer Studio generated resource script.
-//
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "resource.h"
-#define APSTUDIO_HIDDEN_SYMBOLS
-#include "windows.h"
-#undef APSTUDIO_HIDDEN_SYMBOLS
-#ifdef MSVC
-#include "winres.h"
-#else
-#include "afxres.h"
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// Neutral (Default) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEUD)
-#ifdef _WIN32
-LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT
-#pragma code_page(1252)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-100 ICON DISCARDABLE "../media/openttd.ico"
-101 ICON DISCARDABLE "../media/mainicon.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-100 DIALOG DISCARDABLE 0, 0, 305, 77
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Fatal Application Failure"
-FONT 8, "MS Sans Serif"
-BEGIN
- PUSHBUTTON "&Close",12,7,58,50,14
- PUSHBUTTON "&Submit report",14,81,58,68,14,WS_DISABLED
- PUSHBUTTON "&Emergency save",13,155,58,68,14
- PUSHBUTTON "",15,243,58,55,14
- EDITTEXT 11,7,79,291,118,ES_MULTILINE | ES_READONLY | WS_VSCROLL |
- WS_HSCROLL | NOT WS_TABSTOP
- LTEXT "",10,36,7,262,43
- ICON 100,IDC_STATIC,9,9,20,20
-END
-
-
-#ifndef _MAC
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,5,99,0
- PRODUCTVERSION 0,5,99,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "000004b0"
- BEGIN
- VALUE "Comments", "This program is licensed under the GNU General Public License.\0"
- VALUE "CompanyName", "OpenTTD Development Team\0"
- VALUE "FileDescription", "OpenTTD\0"
- VALUE "FileVersion", "Development Version\0"
- VALUE "InternalName", "openttd\0"
- VALUE "LegalCopyright", "Copyright © OpenTTD Developers 2002-2007. All Rights Reserved.\0"
- VALUE "LegalTrademarks", "\0"
- VALUE "OriginalFilename", "openttd.exe\0"
- VALUE "PrivateBuild", "\0"
- VALUE "ProductName", "OpenTTD\0"
- VALUE "ProductVersion", "Development Version\0"
- VALUE "SpecialBuild", "-\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x0, 1200
- END
-END
-
-#endif // !_MAC
-
-#endif // Neutral (Default) resources
-/////////////////////////////////////////////////////////////////////////////
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ottdres.rc.in Sun Sep 23 07:37:38 2007 +0000
@@ -0,0 +1,107 @@
+//Microsoft Developer Studio generated resource script.
+//
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "resource.h"
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+#ifdef MSVC
+#include "winres.h"
+#else
+#include "afxres.h"
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral (Default) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEUD)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+100 ICON DISCARDABLE "../media/openttd.ico"
+101 ICON DISCARDABLE "../media/mainicon.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+100 DIALOG DISCARDABLE 0, 0, 305, 77
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Fatal Application Failure"
+FONT 8, "MS Sans Serif"
+BEGIN
+ PUSHBUTTON "&Close",12,7,58,50,14
+ PUSHBUTTON "&Submit report",14,81,58,68,14,WS_DISABLED
+ PUSHBUTTON "&Emergency save",13,155,58,68,14
+ PUSHBUTTON "",15,243,58,55,14
+ EDITTEXT 11,7,79,291,118,ES_MULTILINE | ES_READONLY | WS_VSCROLL |
+ WS_HSCROLL | NOT WS_TABSTOP
+ LTEXT "",10,36,7,262,43
+ ICON 100,IDC_STATIC,9,9,20,20
+END
+
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 0,5,99,0
+ PRODUCTVERSION 0,5,99,0
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "000004b0"
+ BEGIN
+ VALUE "Comments", "This program is licensed under the GNU General Public License.\0"
+ VALUE "CompanyName", "OpenTTD Development Team\0"
+ VALUE "FileDescription", "OpenTTD\0"
+ VALUE "FileVersion", "Development @@VERSION@@\0"
+ VALUE "InternalName", "openttd\0"
+ VALUE "LegalCopyright", "Copyright © OpenTTD Developers 2002-2007. All Rights Reserved.\0"
+ VALUE "LegalTrademarks", "\0"
+ VALUE "OriginalFilename", "openttd.exe\0"
+ VALUE "PrivateBuild", "\0"
+ VALUE "ProductName", "OpenTTD\0"
+ VALUE "ProductVersion", "Development @@VERSION@@\0"
+ VALUE "SpecialBuild", "-\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0, 1200
+ END
+END
+
+#endif // !_MAC
+
+#endif // Neutral (Default) resources
+/////////////////////////////////////////////////////////////////////////////
--- a/src/player_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/player_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -834,7 +834,7 @@
break;
case WE_PLACE_OBJ:
- if (DoCommandP(e->we.place.tile, 0, 0, NULL, CMD_BUILD_COMPANY_HQ | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS)))
+ if (DoCommandP(e->we.place.tile, 0, 0, NULL, CMD_BUILD_COMPANY_HQ | CMD_NO_WATER | CMD_MSG(STR_7071_CAN_T_BUILD_COMPANY_HEADQUARTERS)))
ResetObjectToPlace();
w->widget[PCW_WIDGET_BUILD_VIEW_HQ].type = WWT_PUSHTXTBTN; // this button can now behave as a normal push button
RaiseWindowButtons(w);
--- a/src/rail.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/rail.h Sun Sep 23 07:37:38 2007 +0000
@@ -778,6 +778,7 @@
return bits != TRACK_BIT_HORZ && bits != TRACK_BIT_VERT;
}
+void *UpdateTrainPowerProc(Vehicle *v, void *data);
void DrawTrainDepotSprite(int x, int y, int image, RailType railtype);
void DrawDefaultWaypointSprite(int x, int y, RailType railtype);
@@ -787,6 +788,7 @@
* @see DrawCatenaryRailway
*/
void DrawCatenary(const TileInfo *ti);
+void DrawCatenaryOnTunnel(const TileInfo *ti);
Foundation GetRailFoundation(Slope tileh, TrackBits bits);
--- a/src/rail_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/rail_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -34,10 +34,12 @@
#include "railtypes.h" // include table for railtypes
#include "newgrf.h"
#include "yapf/yapf.h"
+#include "newgrf_engine.h"
#include "newgrf_callbacks.h"
#include "newgrf_station.h"
#include "train.h"
#include "misc/autoptr.hpp"
+#include "autoslope.h"
const byte _track_sloped_sprites[14] = {
14, 15, 22, 13,
@@ -218,8 +220,11 @@
{
if (IsSteepSlope(tileh)) {
if (_patches.build_on_slopes && existing == 0) {
- TrackBits valid = TRACK_BIT_CROSS | (HASBIT(1 << SLOPE_STEEP_W | 1 << SLOPE_STEEP_E, tileh) ? TRACK_BIT_VERT : TRACK_BIT_HORZ);
- if (valid & rail_bits) return _price.terraform;
+ /* There may only be one track on steep slopes. (Autoslope calls with multiple bits in rail_bits) */
+ if (KILL_FIRST_BIT(rail_bits & TRACK_BIT_MASK) == 0) {
+ TrackBits valid = TRACK_BIT_CROSS | (HASBIT(1 << SLOPE_STEEP_W | 1 << SLOPE_STEEP_E, tileh) ? TRACK_BIT_VERT : TRACK_BIT_HORZ);
+ if (valid & rail_bits) return _price.terraform;
+ }
}
} else {
rail_bits |= existing;
@@ -1023,6 +1028,18 @@
typedef CommandCost DoConvertRailProc(TileIndex tile, RailType totype, bool exec);
+void *UpdateTrainPowerProc(Vehicle *v, void *data)
+{
+ /* Similiar checks as in TrainPowerChanged() */
+
+ if (v->type == VEH_TRAIN && v->tile == *(TileIndex*)data && !IsArticulatedPart(v)) {
+ const RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
+ if (GetVehicleProperty(v, 0x0B, rvi->power) != 0) TrainPowerChanged(v->First());
+ }
+
+ return NULL;
+}
+
/**
* Switches the rail type.
* Railtypes are stored on a per-tile basis, not on a per-track basis, so
@@ -1035,15 +1052,6 @@
*/
static CommandCost DoConvertRail(TileIndex tile, RailType totype, bool exec)
{
- if (!CheckTileOwnership(tile)) return CMD_ERROR;
-
- if (GetRailType(tile) == totype) return CMD_ERROR;
-
- if (!EnsureNoVehicleOnGround(tile) && (!IsCompatibleRail(GetRailType(tile), totype) || IsPlainRailTile(tile))) return CMD_ERROR;
-
- /* 'hidden' elrails can't be downgraded to normal rail when elrails are disabled */
- if (_patches.disable_elrails && totype == RAILTYPE_RAIL && GetRailType(tile) == RAILTYPE_ELECTRIC) return CMD_ERROR;
-
/* change type. */
if (exec) {
SetRailType(tile, totype);
@@ -1056,18 +1064,12 @@
}
if (IsTileDepotType(tile, TRANSPORT_RAIL)) {
- Vehicle *v;
-
/* Update build vehicle window related to this depot */
InvalidateWindowData(WC_BUILD_VEHICLE, tile);
+ }
- /* update power of trains in this depot */
- FOR_ALL_VEHICLES(v) {
- if (v->type == VEH_TRAIN && IsFrontEngine(v) && v->tile == tile && v->u.rail.track == 0x80) {
- TrainPowerChanged(v);
- }
- }
- }
+ /* update power of train engines on this tile */
+ VehicleFromPos(tile, &tile, UpdateTrainPowerProc);
}
return CommandCost(_price.build_rail / 2);
@@ -1110,7 +1112,8 @@
for (x = sx; x <= ex; ++x) {
for (y = sy; y <= ey; ++y) {
TileIndex tile = TileXY(x, y);
- DoConvertRailProc* proc;
+ DoConvertRailProc *proc;
+ RailType totype = (RailType)p2;
switch (GetTileType(tile)) {
case MP_RAILWAY: proc = DoConvertRail; break;
@@ -1120,7 +1123,22 @@
default: continue;
}
- ret = proc(tile, (RailType)p2, false);
+ /* It is possible that 'type' is invalid when there is no rail on the tile,
+ * but this situation will be detected in proc()
+ */
+ RailType type = GetRailType(tile);
+
+ /* Not own tile or track is already converted */
+ if ((!CheckTileOwnership(tile) || type == totype) ||
+ /* 'hidden' elrails can't be downgraded to normal rail when elrails are disabled */
+ (_patches.disable_elrails && totype == RAILTYPE_RAIL && type == RAILTYPE_ELECTRIC) ||
+ /* Vehicle on a tile while not converting Rail <-> ElRail */
+ (!IsCompatibleRail(type, totype) && !EnsureNoVehicleOnGround(tile))) {
+ ret = CMD_ERROR;
+ continue;
+ }
+
+ ret = proc(tile, totype, false);
if (CmdFailed(ret)) continue;
if (flags & DC_EXEC) {
@@ -1129,7 +1147,7 @@
_additional_cash_required = ret.GetCost();
return cost;
}
- proc(tile, (RailType)p2, true);
+ proc(tile, totype, true);
}
cost.AddCost(ret);
}
@@ -1243,7 +1261,7 @@
sprite = _signal_base + (GetSignalType(tile, track) - 1) * 16 + GetSignalVariant(tile, track) * 64 + image + condition;
}
- AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, 1, 1, 10, GetSlopeZ(x,y));
+ AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSlopeZ(x,y));
}
static uint32 _drawtile_track_palette;
@@ -2174,15 +2192,62 @@
return VETSB_CONTINUE;
}
+/**
+ * Tests if autoslope is allowed.
+ *
+ * @param tile The tile.
+ * @param flags Terraform command flags.
+ * @param z_old Old TileZ.
+ * @param tileh_old Old TileSlope.
+ * @param z_new New TileZ.
+ * @param tileh_new New TileSlope.
+ * @param rail_bits Trackbits.
+ */
+static CommandCost TestAutoslopeOnRailTile(TileIndex tile, uint flags, uint z_old, Slope tileh_old, uint z_new, Slope tileh_new, TrackBits rail_bits)
+{
+ if (!_patches.build_on_slopes || !AutoslopeEnabled()) return CMD_ERROR;
+
+ /* Is the slope-rail_bits combination valid in general? I.e. is it save to call GetRailFoundation() ? */
+ if (CmdFailed(CheckRailSlope(tileh_new, rail_bits, TRACK_BIT_NONE, tile))) return CMD_ERROR;
+
+ /* Get the slopes on top of the foundations */
+ z_old += ApplyFoundationToSlope(GetRailFoundation(tileh_old, rail_bits), &tileh_old);
+ z_new += ApplyFoundationToSlope(GetRailFoundation(tileh_new, rail_bits), &tileh_new);
+
+ Slope track_corner;
+ switch (rail_bits) {
+ case TRACK_BIT_LEFT: track_corner = SLOPE_W; break;
+ case TRACK_BIT_LOWER: track_corner = SLOPE_S; break;
+ case TRACK_BIT_RIGHT: track_corner = SLOPE_E; break;
+ case TRACK_BIT_UPPER: track_corner = SLOPE_N; break;
+
+ /* Surface slope must not be changed */
+ default: return (((z_old != z_new) || (tileh_old != tileh_new)) ? CMD_ERROR : _price.terraform);
+ }
+
+ /* The height of the track_corner must not be changed. The rest ensures GetRailFoundation() already. */
+ if ((tileh_old & track_corner) != 0) z_old += TILE_HEIGHT;
+ if ((tileh_new & track_corner) != 0) z_new += TILE_HEIGHT;
+ if (z_old != z_new) return CMD_ERROR;
+
+ /* Make the ground dirty, if surface slope has changed */
+ if ((tileh_old != tileh_new) && ((flags & DC_EXEC) != 0)) SetRailGroundType(tile, RAIL_GROUND_BARREN);
+
+ return _price.terraform;
+}
+
static CommandCost TerraformTile_Track(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
{
+ uint z_old;
+ Slope tileh_old = GetTileSlope(tile, &z_old);
if (IsPlainRailTile(tile)) {
- uint z_old;
- Slope tileh_old = GetTileSlope(tile, &z_old);
TrackBits rail_bits = GetTrackBits(tile);
_error_message = STR_1008_MUST_REMOVE_RAILROAD_TRACK;
+ /* First test autoslope. However if it succeeds we still have to test the rest, because non-autoslope terraforming is cheaper. */
+ CommandCost autoslope_result = TestAutoslopeOnRailTile(tile, flags, z_old, tileh_old, z_new, tileh_new, rail_bits);
+
/* When there is only a single horizontal/vertical track, one corner can be terraformed. */
Slope allowed_corner;
switch (rail_bits) {
@@ -2190,7 +2255,7 @@
case TRACK_BIT_UPPER: allowed_corner = SLOPE_S; break;
case TRACK_BIT_LEFT: allowed_corner = SLOPE_E; break;
case TRACK_BIT_LOWER: allowed_corner = SLOPE_N; break;
- default: return CMD_ERROR;
+ default: return autoslope_result;
}
Slope track_corners = ComplementSlope(allowed_corner);
@@ -2206,28 +2271,28 @@
z_new += TILE_HEIGHT;
} else {
/* do not build a foundation */
- if ((tileh_new != SLOPE_FLAT) && (tileh_new != allowed_corner)) return CMD_ERROR;
+ if ((tileh_new != SLOPE_FLAT) && (tileh_new != allowed_corner)) return autoslope_result;
}
/* Track height must remain unchanged */
- if (z_old != z_new) return CMD_ERROR;
+ if (z_old != z_new) return autoslope_result;
break;
case FOUNDATION_LEVELED:
/* Is allowed_corner covered by the foundation? */
- if ((tileh_old & allowed_corner) == 0) return CMD_ERROR;
+ if ((tileh_old & allowed_corner) == 0) return autoslope_result;
/* allowed_corner may only be raised -> steep slope */
- if ((z_old != z_new) || (tileh_new != (tileh_old | SLOPE_STEEP))) return CMD_ERROR;
+ if ((z_old != z_new) || (tileh_new != (tileh_old | SLOPE_STEEP))) return autoslope_result;
break;
case FOUNDATION_STEEP_LOWER:
/* Only allow to lower highest corner */
- if ((z_old != z_new) || (tileh_new != (tileh_old & ~SLOPE_STEEP))) return CMD_ERROR;
+ if ((z_old != z_new) || (tileh_new != (tileh_old & ~SLOPE_STEEP))) return autoslope_result;
break;
case FOUNDATION_STEEP_HIGHER:
- return CMD_ERROR;
+ return autoslope_result;
default: NOT_REACHED();
}
@@ -2237,6 +2302,22 @@
/* allow terraforming, no extra costs */
return CommandCost();
+ } else {
+ if (_patches.build_on_slopes && AutoslopeEnabled()) {
+ switch (GetRailTileType(tile)) {
+ case RAIL_TILE_WAYPOINT: {
+ CommandCost cost = TestAutoslopeOnRailTile(tile, flags, z_old, tileh_old, z_new, tileh_new, GetRailWaypointBits(tile));
+ if (!CmdFailed(cost)) return cost; // allow autoslope
+ break;
+ }
+
+ case RAIL_TILE_DEPOT:
+ if (AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, GetRailDepotDirection(tile))) return _price.terraform;
+ break;
+
+ default: NOT_REACHED();
+ }
+ }
}
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
}
--- a/src/rail_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/rail_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -66,8 +66,8 @@
{
DoCommandP(tile, _cur_railtype, cmd, CcPlaySound1E,
_remove_button_clicked ?
- CMD_REMOVE_SINGLE_RAIL | CMD_MSG(STR_1012_CAN_T_REMOVE_RAILROAD_TRACK) | CMD_AUTO | CMD_NO_WATER :
- CMD_BUILD_SINGLE_RAIL | CMD_MSG(STR_1011_CAN_T_BUILD_RAILROAD_TRACK) | CMD_AUTO | CMD_NO_WATER
+ CMD_REMOVE_SINGLE_RAIL | CMD_MSG(STR_1012_CAN_T_REMOVE_RAILROAD_TRACK) | CMD_NO_WATER :
+ CMD_BUILD_SINGLE_RAIL | CMD_MSG(STR_1011_CAN_T_BUILD_RAILROAD_TRACK) | CMD_NO_WATER
);
}
@@ -103,7 +103,7 @@
if (GetRailTileType(tile) != RAIL_TILE_NORMAL) return;
if ((GetTrackBits(tile) & GB(extra, 8, 8)) == 0) return;
- DoCommandP(tile, _cur_railtype, extra & 0xFF, NULL, CMD_BUILD_SINGLE_RAIL | CMD_AUTO | CMD_NO_WATER);
+ DoCommandP(tile, _cur_railtype, extra & 0xFF, NULL, CMD_BUILD_SINGLE_RAIL | CMD_NO_WATER);
}
static const uint16 _place_depot_extra[12] = {
@@ -134,7 +134,7 @@
static void PlaceRail_Depot(TileIndex tile)
{
DoCommandP(tile, _cur_railtype, _build_depot_direction, CcRailDepot,
- CMD_BUILD_TRAIN_DEPOT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_100E_CAN_T_BUILD_TRAIN_DEPOT));
+ CMD_BUILD_TRAIN_DEPOT | CMD_NO_WATER | CMD_MSG(STR_100E_CAN_T_BUILD_TRAIN_DEPOT));
}
static void PlaceRail_Waypoint(TileIndex tile)
@@ -166,7 +166,7 @@
DoCommandP(tile,
_railstation.orientation | (_railstation.numtracks << 8) | (_railstation.platlength << 16) | (_ctrl_pressed << 24),
_cur_railtype | (_railstation.station_class << 8) | (_railstation.station_type << 16), CcStation,
- CMD_BUILD_RAILROAD_STATION | CMD_NO_WATER | CMD_AUTO | CMD_MSG(STR_100F_CAN_T_BUILD_RAILROAD_STATION));
+ CMD_BUILD_RAILROAD_STATION | CMD_NO_WATER | CMD_MSG(STR_100F_CAN_T_BUILD_RAILROAD_STATION));
}
}
@@ -190,10 +190,10 @@
SB(p1, 4, 1, _cur_year < _patches.semaphore_build_before);
DoCommandP(tile, p1, 0, CcPlaySound1E,
- CMD_BUILD_SIGNALS | CMD_AUTO | CMD_MSG(STR_1010_CAN_T_BUILD_SIGNALS_HERE));
+ CMD_BUILD_SIGNALS | CMD_MSG(STR_1010_CAN_T_BUILD_SIGNALS_HERE));
} else {
DoCommandP(tile, track, 0, CcPlaySound1E,
- CMD_REMOVE_SIGNALS | CMD_AUTO | CMD_MSG(STR_1013_CAN_T_REMOVE_SIGNALS_FROM));
+ CMD_REMOVE_SIGNALS | CMD_MSG(STR_1013_CAN_T_REMOVE_SIGNALS_FROM));
}
}
@@ -215,12 +215,12 @@
static void PlaceRail_Tunnel(TileIndex tile)
{
DoCommandP(tile, _cur_railtype, 0, CcBuildRailTunnel,
- CMD_BUILD_TUNNEL | CMD_AUTO | CMD_MSG(STR_5016_CAN_T_BUILD_TUNNEL_HERE));
+ CMD_BUILD_TUNNEL | CMD_MSG(STR_5016_CAN_T_BUILD_TUNNEL_HERE));
}
void PlaceProc_BuyLand(TileIndex tile)
{
- DoCommandP(tile, 0, 0, CcPlaySound1E, CMD_PURCHASE_LAND_AREA | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_5806_CAN_T_PURCHASE_THIS_LAND));
+ DoCommandP(tile, 0, 0, CcPlaySound1E, CMD_PURCHASE_LAND_AREA | CMD_NO_WATER | CMD_MSG(STR_5806_CAN_T_PURCHASE_THIS_LAND));
}
static void PlaceRail_ConvertRail(TileIndex tile)
@@ -346,8 +346,8 @@
{
DoCommandP(TileVirtXY(_thd.selstart.x, _thd.selstart.y), TileVirtXY(_thd.selend.x, _thd.selend.y), _cur_railtype | (mode << 4), NULL,
_remove_button_clicked ?
- CMD_REMOVE_RAILROAD_TRACK | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1012_CAN_T_REMOVE_RAILROAD_TRACK) :
- CMD_BUILD_RAILROAD_TRACK | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1011_CAN_T_BUILD_RAILROAD_TRACK)
+ CMD_REMOVE_RAILROAD_TRACK | CMD_NO_WATER | CMD_MSG(STR_1012_CAN_T_REMOVE_RAILROAD_TRACK) :
+ CMD_BUILD_RAILROAD_TRACK | CMD_NO_WATER | CMD_MSG(STR_1011_CAN_T_BUILD_RAILROAD_TRACK)
);
}
@@ -388,8 +388,8 @@
p2,
CcPlaySound1E,
_remove_button_clicked ?
- CMD_REMOVE_SIGNAL_TRACK | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1013_CAN_T_REMOVE_SIGNALS_FROM) :
- CMD_BUILD_SIGNAL_TRACK | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1010_CAN_T_BUILD_SIGNALS_HERE)
+ CMD_REMOVE_SIGNAL_TRACK | CMD_NO_WATER | CMD_MSG(STR_1013_CAN_T_REMOVE_SIGNALS_FROM) :
+ CMD_BUILD_SIGNAL_TRACK | CMD_NO_WATER | CMD_MSG(STR_1010_CAN_T_BUILD_SIGNALS_HERE)
);
}
@@ -671,7 +671,7 @@
DoCommandP(TileXY(sx, sy),
_railstation.orientation | (w << 8) | (h << 16) | (_ctrl_pressed << 24),
_cur_railtype | (_railstation.station_class << 8) | (_railstation.station_type << 16), CcStation,
- CMD_BUILD_RAILROAD_STATION | CMD_NO_WATER | CMD_AUTO | CMD_MSG(STR_100F_CAN_T_BUILD_RAILROAD_STATION));
+ CMD_BUILD_RAILROAD_STATION | CMD_NO_WATER | CMD_MSG(STR_100F_CAN_T_BUILD_RAILROAD_STATION));
}
/* Check if the currently selected station size is allowed */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/rev.cpp.in Sun Sep 23 07:37:38 2007 +0000
@@ -0,0 +1,4 @@
+extern const char _openttd_revision[] = "@@VERSION@@";
+#ifdef __MORPHOS__
+extern const char morphos_versions_tag[] = "\\0$VER: OpenTTD @@VERSION@@ (@@DATE@@) OpenTTD Team [MorphOS, PowerPC]";
+#endif
--- a/src/road.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/road.h Sun Sep 23 07:37:38 2007 +0000
@@ -126,7 +126,7 @@
*/
static inline RoadBits DiagDirToRoadBits(DiagDirection d)
{
- return (RoadBits)(1U << (3 ^ d));
+ return (RoadBits)(ROAD_NW << (3 ^ d));
}
/**
--- a/src/road_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/road_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -32,6 +32,12 @@
#include "station_map.h"
#include "tunnel_map.h"
#include "misc/autoptr.hpp"
+#include "autoslope.h"
+
+#define M(x) (1 << (x))
+/* Level crossings may only be built on these slopes */
+static const uint32 VALID_LEVEL_CROSSING_SLOPES = (M(SLOPE_SEN) | M(SLOPE_ENW) | M(SLOPE_NWS) | M(SLOPE_NS) | M(SLOPE_WSE) | M(SLOPE_EW) | M(SLOPE_FLAT));
+#undef M
bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, Owner owner, bool *edge_road, RoadType rt)
{
@@ -198,10 +204,12 @@
if (present == ROAD_NONE) {
RoadTypes rts = GetRoadTypes(tile) & ComplementRoadTypes(RoadTypeToRoadTypes(rt));
if (rts == ROADTYPES_NONE) {
+ /* Includes MarkTileDirtyByTile() */
DoClearSquare(tile);
} else {
SetRoadBits(tile, ROAD_NONE, rt);
SetRoadTypes(tile, rts);
+ MarkTileDirtyByTile(tile);
}
} else {
/* When bits are removed, you *always* end up with something that
@@ -403,12 +411,10 @@
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
}
-#define M(x) (1 << (x))
/* Level crossings may only be built on these slopes */
- if (!HASBIT(M(SLOPE_SEN) | M(SLOPE_ENW) | M(SLOPE_NWS) | M(SLOPE_NS) | M(SLOPE_WSE) | M(SLOPE_EW) | M(SLOPE_FLAT), tileh)) {
+ if (!HASBIT(VALID_LEVEL_CROSSING_SLOPES, tileh)) {
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
}
-#undef M
if (GetRailTileType(tile) != RAIL_TILE_NORMAL) goto do_clear;
switch (GetTrackBits(tile)) {
@@ -541,18 +547,11 @@
/* not a railroad crossing? */
if (!IsLevelCrossing(tile)) return CMD_ERROR;
- /* not owned by me? */
- if (!CheckTileOwnership(tile) || !EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
-
- if (GetRailType(tile) == totype) return CMD_ERROR;
-
- /* 'hidden' elrails can't be downgraded to normal rail when elrails are disabled */
- if (_patches.disable_elrails && totype == RAILTYPE_RAIL && GetRailType(tile) == RAILTYPE_ELECTRIC) return CMD_ERROR;
-
if (exec) {
SetRailType(tile, totype);
MarkTileDirtyByTile(tile);
YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetCrossingRailBits(tile)));
+ VehicleFromPos(tile, &tile, UpdateTrainPowerProc);
}
return CommandCost(_price.build_rail / 2);
@@ -912,8 +911,8 @@
front = SPR_TRAMWAY_BASE + _road_frontwire_sprites_1[tram];
}
- AddSortableSpriteToDraw(back, PAL_NONE, ti->x, ti->y, 16, 16, 0x1F, ti->z, HASBIT(_transparent_opt, TO_BUILDINGS));
- AddSortableSpriteToDraw(front, PAL_NONE, ti->x, ti->y, 16, 16, 0x1F, ti->z, HASBIT(_transparent_opt, TO_BUILDINGS));
+ AddSortableSpriteToDraw(back, PAL_NONE, ti->x, ti->y, 16, 16, TILE_HEIGHT + BB_HEIGHT_UNDER_BRIDGE, ti->z, HASBIT(_transparent_opt, TO_BUILDINGS));
+ AddSortableSpriteToDraw(front, PAL_NONE, ti->x, ti->y, 16, 16, TILE_HEIGHT + BB_HEIGHT_UNDER_BRIDGE, ti->z, HASBIT(_transparent_opt, TO_BUILDINGS));
}
/**
@@ -1374,6 +1373,41 @@
static CommandCost TerraformTile_Road(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
{
+ if (_patches.build_on_slopes && AutoslopeEnabled()) {
+ switch (GetRoadTileType(tile)) {
+ case ROAD_TILE_CROSSING:
+ if (!IsSteepSlope(tileh_new) && (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new)) && HASBIT(VALID_LEVEL_CROSSING_SLOPES, tileh_new)) return _price.terraform;
+ break;
+
+ case ROAD_TILE_DEPOT:
+ if (AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, GetRoadDepotDirection(tile))) return _price.terraform;
+ break;
+
+ case ROAD_TILE_NORMAL: {
+ RoadBits bits = GetAllRoadBits(tile);
+ RoadBits bits_copy = bits;
+ /* Check if the slope-road_bits combination is valid at all, i.e. it is save to call GetRoadFoundation(). */
+ if (!CmdFailed(CheckRoadSlope(tileh_new, &bits_copy, ROAD_NONE))) {
+ /* CheckRoadSlope() sometimes changes the road_bits, if it does not agree with them. */
+ if (bits == bits_copy) {
+ uint z_old;
+ Slope tileh_old = GetTileSlope(tile, &z_old);
+
+ /* Get the slope on top of the foundation */
+ z_old += ApplyFoundationToSlope(GetRoadFoundation(tileh_old, bits), &tileh_old);
+ z_new += ApplyFoundationToSlope(GetRoadFoundation(tileh_new, bits), &tileh_new);
+
+ /* The surface slope must not be changed */
+ if ((z_old == z_new) && (tileh_old == tileh_new)) return _price.terraform;
+ }
+ }
+ break;
+ }
+
+ default: NOT_REACHED();
+ }
+ }
+
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
}
--- a/src/road_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/road_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -115,7 +115,7 @@
static void PlaceRoad_Tunnel(TileIndex tile)
{
- DoCommandP(tile, 0x200 | RoadTypeToRoadTypes(_cur_roadtype), 0, CcBuildRoadTunnel, CMD_BUILD_TUNNEL | CMD_AUTO | CMD_MSG(STR_5016_CAN_T_BUILD_TUNNEL_HERE));
+ DoCommandP(tile, 0x200 | RoadTypeToRoadTypes(_cur_roadtype), 0, CcBuildRoadTunnel, CMD_BUILD_TUNNEL | CMD_MSG(STR_5016_CAN_T_BUILD_TUNNEL_HERE));
}
static void BuildRoadOutsideStation(TileIndex tile, DiagDirection direction)
@@ -143,7 +143,7 @@
static void PlaceRoad_Depot(TileIndex tile)
{
- DoCommandP(tile, _cur_roadtype << 2 | _road_depot_orientation, 0, CcRoadDepot, CMD_BUILD_ROAD_DEPOT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_depot));
+ DoCommandP(tile, _cur_roadtype << 2 | _road_depot_orientation, 0, CcRoadDepot, CMD_BUILD_ROAD_DEPOT | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_depot));
}
static void PlaceRoadStop(TileIndex tile, uint32 p2, uint32 cmd)
@@ -162,7 +162,7 @@
if (_remove_button_clicked) {
DoCommandP(tile, 0, RoadStop::BUS, CcPlaySound1D, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[RoadStop::BUS]));
} else {
- PlaceRoadStop(tile, (_ctrl_pressed << 5) | RoadTypeToRoadTypes(_cur_roadtype) << 2 | RoadStop::BUS, CMD_BUILD_ROAD_STOP | CMD_AUTO | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_station[RoadStop::BUS]));
+ PlaceRoadStop(tile, (_ctrl_pressed << 5) | RoadTypeToRoadTypes(_cur_roadtype) << 2 | RoadStop::BUS, CMD_BUILD_ROAD_STOP | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_station[RoadStop::BUS]));
}
}
@@ -171,7 +171,7 @@
if (_remove_button_clicked) {
DoCommandP(tile, 0, RoadStop::TRUCK, CcPlaySound1D, CMD_REMOVE_ROAD_STOP | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_station[RoadStop::TRUCK]));
} else {
- PlaceRoadStop(tile, (_ctrl_pressed << 5) | RoadTypeToRoadTypes(_cur_roadtype) << 2 | RoadStop::TRUCK, CMD_BUILD_ROAD_STOP | CMD_AUTO | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_station[RoadStop::TRUCK]));
+ PlaceRoadStop(tile, (_ctrl_pressed << 5) | RoadTypeToRoadTypes(_cur_roadtype) << 2 | RoadStop::TRUCK, CMD_BUILD_ROAD_STOP | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_station[RoadStop::TRUCK]));
}
}
@@ -347,8 +347,8 @@
case DDSP_PLACE_ROAD_NW:
DoCommandP(end_tile, start_tile, _place_road_flag | (_cur_roadtype << 3) | _ctrl_pressed << 5, CcPlaySound1D,
_remove_button_clicked ?
- CMD_REMOVE_LONG_ROAD | CMD_AUTO | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_road) :
- CMD_BUILD_LONG_ROAD | CMD_AUTO | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_road));
+ CMD_REMOVE_LONG_ROAD | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_remove_road) :
+ CMD_BUILD_LONG_ROAD | CMD_NO_WATER | CMD_MSG(_road_type_infos[_cur_roadtype].err_build_road));
break;
}
}
--- a/src/roadveh.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/roadveh.h Sun Sep 23 07:37:38 2007 +0000
@@ -69,7 +69,6 @@
ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_ROADVEH_INC : EXPENSES_ROADVEH_RUN; }
WindowClass GetVehicleListWindowClass() const { return WC_ROADVEH_LIST; }
bool IsPrimaryVehicle() const { return IsRoadVehFront(this); }
- bool HasFront() const { return true; }
int GetImage(Direction direction) const;
int GetDisplaySpeed() const { return this->cur_speed * 10 / 32; }
int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 32; }
--- a/src/roadveh_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/roadveh_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -180,11 +180,11 @@
if (HASBIT(GetRoadTypes(tile), ROADTYPE_TRAM) != HASBIT(EngInfo(p1)->misc_flags, EF_ROAD_TRAM)) return_cmd_error(STR_DEPOT_WRONG_DEPOT_TYPE);
- uint num_vehicles = 1 + CountArticulatedParts(p1);
+ uint num_vehicles = 1 + CountArticulatedParts(p1, false);
- /* Allow for the front and up to 10 articulated parts. */
- Vehicle *vl[11];
- memset(&vl, 0, sizeof(vl));
+ /* Allow for the front and the articulated parts, plus one to "terminate" the list. */
+ Vehicle **vl = (Vehicle**)alloca(sizeof(*vl) * (num_vehicles + 1));
+ memset(vl, 0, sizeof(*vl) * (num_vehicles + 1));
if (!Vehicle::AllocateList(vl, num_vehicles)) {
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
@@ -478,6 +478,7 @@
* Now we change the setting to apply the new one and let the vehicle head for the same depot.
* Note: the if is (true for requesting service == true for ordered to stop in depot) */
if (flags & DC_EXEC) {
+ CLRBIT(v->current_order.flags, OFB_PART_OF_ORDERS);
TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
--- a/src/roadveh_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/roadveh_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -19,6 +19,82 @@
#include "vehicle_gui.h"
#include "newgrf_engine.h"
+
+void DrawRoadVehDetails(const Vehicle *v, int x, int y)
+{
+ uint y_offset = RoadVehHasArticPart(v) ? 15 :0;
+ StringID str;
+
+ SetDParam(0, v->engine_type);
+ SetDParam(1, v->build_year);
+ SetDParam(2, v->value);
+ DrawString(x, y + y_offset, STR_9011_BUILT_VALUE, 0);
+
+ if (RoadVehHasArticPart(v)) {
+ AcceptedCargo max_cargo;
+ char capacity[512];
+
+ memset(max_cargo, 0, sizeof(max_cargo));
+
+ for (const Vehicle *u = v; u != NULL; u = u->Next()) {
+ max_cargo[u->cargo_type] += u->cargo_cap;
+ }
+
+ GetString(capacity, STR_ARTICULATED_RV_CAPACITY, lastof(capacity));
+
+ bool first = true;
+ for (CargoID i = 0; i < NUM_CARGO; i++) {
+ if (max_cargo[i] > 0) {
+ char buffer[128];
+
+ SetDParam(0, i);
+ SetDParam(1, max_cargo[i]);
+ GetString(buffer, STR_BARE_CARGO, lastof(buffer));
+
+ if (!first) strecat(capacity, ", ", lastof(capacity));
+ strecat(capacity, buffer, lastof(capacity));
+ first = false;
+ }
+ }
+
+ SetDParamStr(0, capacity);
+ DrawStringTruncated(x, y + 10 + y_offset, STR_JUST_STRING, 0, 380 - x);
+
+ for (const Vehicle *u = v; u != NULL; u = u->Next()) {
+ str = STR_8812_EMPTY;
+ if (!u->cargo.Empty()) {
+ SetDParam(0, u->cargo_type);
+ SetDParam(1, u->cargo.Count());
+ SetDParam(2, u->cargo.Source());
+ str = STR_8813_FROM;
+ }
+ DrawString(x, y + 21 + y_offset, str, 0);
+
+ y_offset += 11;
+ }
+
+ y_offset -= 11;
+ } else {
+ SetDParam(0, v->cargo_type);
+ SetDParam(1, v->cargo_cap);
+ DrawString(x, y + 10 + y_offset, STR_9012_CAPACITY, 0);
+
+ str = STR_8812_EMPTY;
+ if (!v->cargo.Empty()) {
+ SetDParam(0, v->cargo_type);
+ SetDParam(1, v->cargo.Count());
+ SetDParam(2, v->cargo.Source());
+ str = STR_8813_FROM;
+ }
+ DrawString(x, y + 21 + y_offset, str, 0);
+ }
+
+ /* Draw Transfer credits text */
+ SetDParam(0, v->cargo.FeederShare());
+ DrawString(x, y + 33 + y_offset, STR_FEEDER_CARGO_VALUE, 0);
+}
+
+
static inline int RoadVehLengthToPixels(int length)
{
return (length * 28) / 8;
@@ -26,17 +102,13 @@
void DrawRoadVehImage(const Vehicle *v, int x, int y, int count, VehicleID selection)
{
- int dx = 0;
-
/* Road vehicle lengths are measured in eighths of the standard length, so
* count is the number of standard vehicles that should be drawn. If it is
* 0, we draw enough vehicles for 10 standard vehicle lengths. */
int max_length = (count == 0) ? 80 : count * 8;
- do {
- int length = v->u.road.cached_veh_length;
-
- if (dx + length > 0 && dx <= max_length) {
+ for (int dx = 0 ; v != NULL && dx < max_length ; dx += v->u.road.cached_veh_length, v = v->Next()) {
+ if (dx + v->u.road.cached_veh_length > 0 && dx <= max_length) {
SpriteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v);
DrawSprite(v->GetImage(DIR_W), pal, x + 14 + RoadVehLengthToPixels(dx), y + 6);
@@ -44,226 +116,9 @@
DrawFrameRect(x - 1, y - 1, x + 28, y + 12, 15, FR_BORDERONLY);
}
}
-
- dx += length;
- v = v->Next();
- } while (v != NULL && dx < max_length);
-}
-
-static void RoadVehDetailsWndProc(Window *w, WindowEvent *e)
-{
- switch (e->event) {
- case WE_CREATE: {
- const Vehicle *v = GetVehicle(w->window_number);
-
- if (!RoadVehHasArticPart(v)) break;
-
- /* Draw the text under the vehicle instead of next to it, minus the
- * height already allocated for the cargo of the first vehicle. */
- uint height_extension = 15 - 11;
-
- /* Add space for the cargo amount for each part. */
- do {
- height_extension += 11;
- } while ((v = v->Next()) != NULL);
-
- ResizeWindow(w, 0, height_extension);
- } break;
-
- case WE_PAINT: {
- const Vehicle *v = GetVehicle(w->window_number);
- StringID str;
- uint y_offset = RoadVehHasArticPart(v) ? 15 :0;
-
- SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
- /* disable service-scroller when interval is set to disabled */
- SetWindowWidgetDisabledState(w, 5, !_patches.servint_roadveh);
- SetWindowWidgetDisabledState(w, 6, !_patches.servint_roadveh);
-
- SetDParam(0, v->index);
- DrawWindowWidgets(w);
-
- /* Draw running cost */
- {
- int year = v->age / 366;
-
- SetDParam(1, year);
-
- SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
- SetDParam(2, v->max_age / 366);
- SetDParam(3, v->GetDisplayRunningCost());
- DrawString(2, 15, STR_900D_AGE_RUNNING_COST_YR, 0);
- }
-
- /* Draw max speed */
- {
- SetDParam(0, v->GetDisplayMaxSpeed());
- DrawString(2, 25, STR_900E_MAX_SPEED, 0);
- }
-
- /* Draw profit */
- {
- SetDParam(0, v->profit_this_year);
- SetDParam(1, v->profit_last_year);
- DrawString(2, 35, STR_900F_PROFIT_THIS_YEAR_LAST_YEAR, 0);
- }
-
- /* Draw breakdown & reliability */
- {
- SetDParam(0, v->reliability * 100 >> 16);
- SetDParam(1, v->breakdowns_since_last_service);
- DrawString(2, 45, STR_9010_RELIABILITY_BREAKDOWNS, 0);
- }
-
- DrawRoadVehImage(v, 3, 57, 0, INVALID_VEHICLE);
-
- SetDParam(0, v->engine_type);
- SetDParam(1, v->build_year);
- SetDParam(2, v->value);
- DrawString(34, 57 + y_offset, STR_9011_BUILT_VALUE, 0);
-
- if (RoadVehHasArticPart(v)) {
- AcceptedCargo max_cargo;
- char capacity[512];
-
- memset(max_cargo, 0, sizeof(max_cargo));
-
- for (const Vehicle *u = v; u != NULL; u = u->Next()) {
- max_cargo[u->cargo_type] += u->cargo_cap;
- }
-
- GetString(capacity, STR_ARTICULATED_RV_CAPACITY, lastof(capacity));
-
- bool first = true;
- for (CargoID i = 0; i < NUM_CARGO; i++) {
- if (max_cargo[i] > 0) {
- char buffer[128];
-
- SetDParam(0, i);
- SetDParam(1, max_cargo[i]);
- GetString(buffer, STR_BARE_CARGO, lastof(buffer));
-
- if (!first) strecat(capacity, ", ", lastof(capacity));
- strecat(capacity, buffer, lastof(capacity));
-
- first = false;
- }
- }
-
- SetDParamStr(0, capacity);
- DrawStringTruncated(34, 67 + y_offset, STR_JUST_STRING, 0, w->width - 34);
-
- for (const Vehicle *u = v; u != NULL; u = u->Next()) {
- str = STR_8812_EMPTY;
- if (!u->cargo.Empty()) {
- SetDParam(0, u->cargo_type);
- SetDParam(1, u->cargo.Count());
- SetDParam(2, u->cargo.Source());
- str = STR_8813_FROM;
- }
- DrawString(34, 78 + y_offset, str, 0);
-
- y_offset += 11;
- }
-
- y_offset -= 11;
- } else {
- SetDParam(0, v->cargo_type);
- SetDParam(1, v->cargo_cap);
- DrawString(34, 67 + y_offset, STR_9012_CAPACITY, 0);
-
- str = STR_8812_EMPTY;
- if (!v->cargo.Empty()) {
- SetDParam(0, v->cargo_type);
- SetDParam(1, v->cargo.Count());
- SetDParam(2, v->cargo.Source());
- str = STR_8813_FROM;
- }
- DrawString(34, 78 + y_offset, str, 0);
- }
-
- /* Draw Transfer credits text */
- SetDParam(0, v->cargo.FeederShare());
- DrawString(34, 90 + y_offset, STR_FEEDER_CARGO_VALUE, 0);
-
- /* Draw service interval text */
- {
- SetDParam(0, v->service_interval);
- SetDParam(1, v->date_of_last_service);
- DrawString(13, 102 + y_offset, _patches.servint_ispercent ? STR_SERVICING_INTERVAL_PERCENT : STR_883C_SERVICING_INTERVAL_DAYS, 0);
- }
- } break;
-
- case WE_CLICK: {
- int mod;
- const Vehicle *v;
- switch (e->we.click.widget) {
- case 2: /* rename */
- v = GetVehicle(w->window_number);
- SetDParam(0, v->index);
- ShowQueryString(STR_VEHICLE_NAME, STR_902C_NAME_ROAD_VEHICLE, 31, 150, w, CS_ALPHANUMERAL);
- break;
-
- case 5: /* increase int */
- mod = _ctrl_pressed? 5 : 10;
- goto do_change_service_int;
- case 6: /* decrease int */
- mod = _ctrl_pressed? -5 : -10;
-do_change_service_int:
- v = GetVehicle(w->window_number);
-
- mod = GetServiceIntervalClamped(mod + v->service_interval);
- if (mod == v->service_interval) return;
-
- DoCommandP(v->tile, v->index, mod, NULL, CMD_CHANGE_SERVICE_INT | CMD_MSG(STR_018A_CAN_T_CHANGE_SERVICING));
- break;
- }
- } break;
-
- case WE_ON_EDIT_TEXT: {
- if (e->we.edittext.str[0] != '\0') {
- _cmd_text = e->we.edittext.str;
- DoCommandP(0, w->window_number, 0, NULL,
- CMD_NAME_VEHICLE | CMD_MSG(STR_902D_CAN_T_NAME_ROAD_VEHICLE));
- }
- } break;
-
}
}
-static const Widget _roadveh_details_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_NONE, 14, 11, 339, 0, 13, STR_900C_DETAILS, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 340, 379, 0, 13, STR_01AA_NAME, STR_902E_NAME_ROAD_VEHICLE},
-{ WWT_PANEL, RESIZE_NONE, 14, 0, 379, 14, 55, 0x0, STR_NULL},
-{ WWT_PANEL, RESIZE_BOTTOM, 14, 0, 379, 56, 100, 0x0, STR_NULL},
-{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 10, 101, 106, STR_0188, STR_884D_INCREASE_SERVICING_INTERVAL},
-{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 10, 107, 112, STR_0189, STR_884E_DECREASE_SERVICING_INTERVAL},
-{ WWT_PANEL, RESIZE_TB, 14, 11, 379, 101, 112, 0x0, STR_NULL},
-{ WIDGETS_END},
-};
-
-static const WindowDesc _roadveh_details_desc = {
- WDP_AUTO, WDP_AUTO, 380, 113, 380, 113,
- WC_VEHICLE_DETAILS,WC_VEHICLE_VIEW,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
- _roadveh_details_widgets,
- RoadVehDetailsWndProc
-};
-
-
-void ShowRoadVehDetailsWindow(const Vehicle *v)
-{
- Window *w;
- VehicleID veh = v->index;
-
- DeleteWindowById(WC_VEHICLE_ORDERS, veh);
- DeleteWindowById(WC_VEHICLE_DETAILS, veh);
-
- w = AllocateWindowDescFront(&_roadveh_details_desc, veh);
- w->caption_color = v->owner;
-}
-
void CcBuildRoadVeh(bool success, TileIndex tile, uint32 p1, uint32 p2)
{
const Vehicle *v;
--- a/src/saveload.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/saveload.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -29,7 +29,7 @@
#include "strings.h"
#include <list>
-extern const uint16 SAVEGAME_VERSION = 74;
+extern const uint16 SAVEGAME_VERSION = 76;
uint16 _sl_version; ///< the major savegame version identifier
byte _sl_minor_version; ///< the minor savegame version, DO NOT USE!
--- a/src/saveload.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/saveload.h Sun Sep 23 07:37:38 2007 +0000
@@ -212,15 +212,16 @@
#define SLE_WRITEBYTE(base, variable, value) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, value, value)
/* The same as the ones at the top, only the offset is given directly; used for unions */
-#define SLE_GENERALX(cmd, offset, type, param1, param2) {false, cmd, type, 0, param1, param2, (void*)(offset)}
-#define SLE_CONDVARX(offset, type, from, to) SLE_GENERALX(SL_VAR, offset, type, from, to)
-#define SLE_CONDREFX(offset, type, from, to) SLE_GENERALX(SL_REF, offset, type, from, to)
+#define SLE_GENERALX(cmd, offset, type, length, param1, param2) {false, cmd, type, length, param1, param2, (void*)(offset)}
+#define SLE_CONDVARX(offset, type, from, to) SLE_GENERALX(SL_VAR, offset, type, 0, from, to)
+#define SLE_CONDARRX(offset, type, length, from, to) SLE_GENERALX(SL_ARR, offset, type, length, from, to)
+#define SLE_CONDREFX(offset, type, from, to) SLE_GENERALX(SL_REF, offset, type, 0, from, to)
#define SLE_VARX(offset, type) SLE_CONDVARX(offset, type, 0, SL_MAX_VERSION)
#define SLE_REFX(offset, type) SLE_CONDREFX(offset, type, 0, SL_MAX_VERSION)
-#define SLE_WRITEBYTEX(offset, something) SLE_GENERALX(SL_WRITEBYTE, offset, 0, something, 0)
-#define SLE_VEH_INCLUDEX() SLE_GENERALX(SL_VEH_INCLUDE, 0, 0, 0, SL_MAX_VERSION)
+#define SLE_WRITEBYTEX(offset, something) SLE_GENERALX(SL_WRITEBYTE, offset, 0, 0, something, 0)
+#define SLE_VEH_INCLUDEX() SLE_GENERALX(SL_VEH_INCLUDE, 0, 0, 0, 0, SL_MAX_VERSION)
/* End marker */
#define SLE_END() {false, SL_END, 0, 0, 0, 0, NULL}
--- a/src/settings.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/settings.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -1239,6 +1239,7 @@
SDTG_STR("videodriver", SLE_STRB,C|S,0, _ini_videodriver, NULL, STR_NULL, NULL),
SDTG_STR("musicdriver", SLE_STRB,C|S,0, _ini_musicdriver, NULL, STR_NULL, NULL),
SDTG_STR("sounddriver", SLE_STRB,C|S,0, _ini_sounddriver, NULL, STR_NULL, NULL),
+ SDTG_STR("blitter", SLE_STRB,C|S,0, _ini_blitter, NULL, STR_NULL, NULL),
SDTG_STR("language", SLE_STRB, S, 0, _dynlang.curr_file, NULL, STR_NULL, NULL),
SDTG_LIST("resolution", SLE_UINT16, S, 0, _cur_resolution, "640,480", STR_NULL, NULL),
SDTG_STR("screenshot_format",SLE_STRB, S, 0, _screenshot_format_name,NULL, STR_NULL, NULL),
@@ -1347,14 +1348,15 @@
SDT_VAR(Patches,right_mouse_btn_emulation,SLE_UINT8,S,MS,0, 0, 2, 0, STR_CONFIG_PATCHES_RIGHT_MOUSE_BTN_EMU, NULL),
#endif
SDT_BOOL(Patches, pause_on_newgame, S, 0, false, STR_CONFIG_PATCHES_PAUSE_ON_NEW_GAME, NULL),
- SDT_BOOL(Patches, advanced_vehicle_list, S, 0, true, STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS, NULL),
+ SDT_VAR(Patches,advanced_vehicle_list,SLE_UINT8,S,MS, 1, 0, 2, 0, STR_CONFIG_PATCHES_ADVANCED_VEHICLE_LISTS,NULL),
SDT_BOOL(Patches, timetable_in_ticks, S, 0, false, STR_CONFIG_PATCHES_TIMETABLE_IN_TICKS, NULL),
- SDT_BOOL(Patches, loading_indicators, S, 0, true, STR_CONFIG_PATCHES_LOADING_INDICATORS, RedrawScreen),
+ SDT_VAR(Patches, loading_indicators, SLE_UINT8, S,MS, 1, 0, 2, 0, STR_CONFIG_PATCHES_LOADING_INDICATORS, RedrawScreen),
SDT_VAR(Patches, default_rail_type, SLE_UINT8, S,MS, 4, 0, 6, 0, STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE, NULL),
/***************************************************************************/
/* Construction section of the GUI-configure patches window */
SDT_BOOL(Patches, build_on_slopes, 0, 0, true, STR_CONFIG_PATCHES_BUILDONSLOPES, NULL),
+ SDT_CONDBOOL(Patches, autoslope, 75, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_AUTOSLOPE, NULL),
SDT_BOOL(Patches, extra_dynamite, 0, 0, false, STR_CONFIG_PATCHES_EXTRADYNAMITE, NULL),
SDT_BOOL(Patches, longbridges, 0, 0, true, STR_CONFIG_PATCHES_LONGBRIDGES, NULL),
SDT_BOOL(Patches, signal_side, N, 0, true, STR_CONFIG_PATCHES_SIGNALSIDE, RedrawScreen),
--- a/src/settings_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/settings_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -664,6 +664,7 @@
static const char *_patches_construction[] = {
"build_on_slopes",
+ "autoslope",
"extra_dynamite",
"longbridges",
"signal_side",
--- a/src/ship_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/ship_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -1004,6 +1004,7 @@
* Now we change the setting to apply the new one and let the vehicle head for the same depot.
* Note: the if is (true for requesting service == true for ordered to stop in depot) */
if (flags & DC_EXEC) {
+ CLRBIT(v->current_order.flags, OFB_PART_OF_ORDERS);
TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
--- a/src/ship_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/ship_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -27,153 +27,6 @@
}
}
-static void ShipDetailsWndProc(Window *w, WindowEvent *e)
-{
- switch (e->event) {
- case WE_PAINT: {
- const Vehicle *v = GetVehicle(w->window_number);
- StringID str;
-
- SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
- /* disable service-scroller when interval is set to disabled */
- SetWindowWidgetDisabledState(w, 5, !_patches.servint_ships);
- SetWindowWidgetDisabledState(w, 6, !_patches.servint_ships);
-
- SetDParam(0, v->index);
- DrawWindowWidgets(w);
-
- /* Draw running cost */
- {
- int year = v->age / 366;
-
- SetDParam(1, year);
-
- SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
- SetDParam(2, v->max_age / 366);
- SetDParam(3, v->GetDisplayRunningCost());
- DrawString(2, 15, STR_9812_AGE_RUNNING_COST_YR, 0);
- }
-
- /* Draw max speed */
- {
- SetDParam(0, v->GetDisplayMaxSpeed());
- DrawString(2, 25, STR_9813_MAX_SPEED, 0);
- }
-
- /* Draw profit */
- {
- SetDParam(0, v->profit_this_year);
- SetDParam(1, v->profit_last_year);
- DrawString(2, 35, STR_9814_PROFIT_THIS_YEAR_LAST_YEAR, 0);
- }
-
- /* Draw breakdown & reliability */
- {
- SetDParam(0, v->reliability * 100 >> 16);
- SetDParam(1, v->breakdowns_since_last_service);
- DrawString(2, 45, STR_9815_RELIABILITY_BREAKDOWNS, 0);
- }
-
- /* Draw service interval text */
- {
- SetDParam(0, v->service_interval);
- SetDParam(1, v->date_of_last_service);
- DrawString(13, 102, _patches.servint_ispercent ? STR_SERVICING_INTERVAL_PERCENT : STR_883C_SERVICING_INTERVAL_DAYS, 0);
- }
-
- DrawShipImage(v, 3, 57, INVALID_VEHICLE);
-
- SetDParam(0, v->engine_type);
- SetDParam(1, v->build_year);
- SetDParam(2, v->value);
- DrawString(74, 57, STR_9816_BUILT_VALUE, 0);
-
- SetDParam(0, v->cargo_type);
- SetDParam(1, v->cargo_cap);
- DrawString(74, 67, STR_9817_CAPACITY, 0);
-
- str = STR_8812_EMPTY;
- if (!v->cargo.Empty()) {
- SetDParam(0, v->cargo_type);
- SetDParam(1, v->cargo.Count());
- SetDParam(2, v->cargo.Source());
- str = STR_8813_FROM;
- }
- DrawString(74, 78, str, 0);
-
- /* Draw Transfer credits text */
- SetDParam(0, v->cargo.FeederShare());
- DrawString(74, 89, STR_FEEDER_CARGO_VALUE, 0);
-
- } break;
-
- case WE_CLICK: {
- int mod;
- const Vehicle *v;
- switch (e->we.click.widget) {
- case 2: /* rename */
- v = GetVehicle(w->window_number);
- SetDParam(0, v->index);
- ShowQueryString(STR_VEHICLE_NAME, STR_9831_NAME_SHIP, 31, 150, w, CS_ALPHANUMERAL);
- break;
- case 5: /* increase int */
- mod = _ctrl_pressed? 5 : 10;
- goto do_change_service_int;
- case 6: /* decrease int */
- mod = _ctrl_pressed ? - 5 : -10;
-do_change_service_int:
- v = GetVehicle(w->window_number);
-
- mod = GetServiceIntervalClamped(mod + v->service_interval);
- if (mod == v->service_interval) return;
-
- DoCommandP(v->tile, v->index, mod, NULL, CMD_CHANGE_SERVICE_INT | CMD_MSG(STR_018A_CAN_T_CHANGE_SERVICING));
- break;
- }
- } break;
-
- case WE_ON_EDIT_TEXT:
- if (e->we.edittext.str[0] != '\0') {
- _cmd_text = e->we.edittext.str;
- DoCommandP(0, w->window_number, 0, NULL,
- CMD_NAME_VEHICLE | CMD_MSG(STR_9832_CAN_T_NAME_SHIP));
- }
- break;
- }
-}
-
-
-static const Widget _ship_details_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_NONE, 14, 11, 364, 0, 13, STR_9811_DETAILS, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 365, 404, 0, 13, STR_01AA_NAME, STR_982F_NAME_SHIP},
-{ WWT_PANEL, RESIZE_NONE, 14, 0, 404, 14, 55, 0x0, STR_NULL},
-{ WWT_PANEL, RESIZE_NONE, 14, 0, 404, 56, 100, 0x0, STR_NULL},
-{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 10, 101, 106, STR_0188, STR_884D_INCREASE_SERVICING_INTERVAL},
-{ WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 10, 107, 112, STR_0189, STR_884E_DECREASE_SERVICING_INTERVAL},
-{ WWT_PANEL, RESIZE_NONE, 14, 11, 404, 101, 112, 0x0, STR_NULL},
-{ WIDGETS_END},
-};
-
-static const WindowDesc _ship_details_desc = {
- WDP_AUTO, WDP_AUTO, 405, 113, 405, 113,
- WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
- _ship_details_widgets,
- ShipDetailsWndProc
-};
-
-void ShowShipDetailsWindow(const Vehicle *v)
-{
- Window *w;
- VehicleID veh = v->index;
-
- DeleteWindowById(WC_VEHICLE_ORDERS, veh);
- DeleteWindowById(WC_VEHICLE_DETAILS, veh);
- w = AllocateWindowDescFront(&_ship_details_desc, veh);
- w->caption_color = v->owner;
-}
-
void CcBuildShip(bool success, TileIndex tile, uint32 p1, uint32 p2)
{
const Vehicle *v;
@@ -186,3 +39,35 @@
}
ShowVehicleViewWindow(v);
}
+
+/**
+* Draw the details for the given vehicle at the position (x,y)
+*
+* @param v current vehicle
+* @param x The x coordinate
+* @param y The y coordinate
+*/
+void DrawShipDetails(const Vehicle *v, int x, int y)
+{
+ SetDParam(0, v->engine_type);
+ SetDParam(1, v->build_year);
+ SetDParam(2, v->value);
+ DrawString(x, y, STR_9816_BUILT_VALUE, 0);
+
+ SetDParam(0, v->cargo_type);
+ SetDParam(1, v->cargo_cap);
+ DrawString(x, y + 10, STR_9817_CAPACITY, 0);
+
+ StringID str = STR_8812_EMPTY;
+ if (!v->cargo.Empty()) {
+ SetDParam(0, v->cargo_type);
+ SetDParam(1, v->cargo.Count());
+ SetDParam(2, v->cargo.Source());
+ str = STR_8813_FROM;
+ }
+ DrawString(x, y + 21, str, 0);
+
+ /* Draw Transfer credits text */
+ SetDParam(0, v->cargo.FeederShare());
+ DrawString(x, y + 33, STR_FEEDER_CARGO_VALUE, 0);
+}
--- a/src/signs.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/signs.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -60,10 +60,12 @@
}
/**
+ * Marks the region of a sign as dirty.
*
- * Marks the region of a sign as dirty
+ * This function marks the sign in all viewports as dirty for repaint.
*
* @param si Pointer to the Sign
+ * @ingroup dirty
*/
static void MarkSignDirty(Sign *si)
{
--- a/src/slope.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/slope.h Sun Sep 23 07:37:38 2007 +0000
@@ -90,6 +90,19 @@
}
}
+/**
+ * Returns the height of the highest corner of a slope relative to TileZ (= minimal height)
+ *
+ * @param s The #Slope.
+ * @return Relative height of highest corner.
+ */
+static inline uint GetSlopeMaxZ(Slope s)
+{
+ if (s == SLOPE_FLAT) return 0;
+ if (IsSteepSlope(s)) return 2 * TILE_HEIGHT;
+ return TILE_HEIGHT;
+}
+
/**
* Enumeration for Foundations.
--- a/src/sound.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/sound.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -30,6 +30,7 @@
uint i;
FioOpenFile(SOUND_SLOT, filename);
+ uint pos = FioGetPos();
count = FioReadDword() / 8;
FileEntry *fe = CallocT<FileEntry>(count);
@@ -42,10 +43,11 @@
_file_count = count;
_files = fe;
- FioSeekTo(0, SEEK_SET);
+ FioSeekTo(pos, SEEK_SET);
for (i = 0; i != count; i++) {
- fe[i].file_offset = FioReadDword();
+ fe[i].file_slot = SOUND_SLOT;
+ fe[i].file_offset = FioReadDword() + pos;
fe[i].file_size = FioReadDword();
}
@@ -75,7 +77,8 @@
FioSeekTo(size - (2 + 2 + 4 + 4 + 2 + 1), SEEK_CUR);
} else if (tag == 'atad') {
fe->file_size = size;
- fe->file_offset = FioGetPos() | (SOUND_SLOT << 24);
+ fe->file_slot = SOUND_SLOT;
+ fe->file_offset = FioGetPos();
break;
} else {
fe->file_size = 0;
@@ -91,7 +94,8 @@
fe->channels = 1;
fe->rate = 11025;
fe->bits_per_sample = 8;
- fe->file_offset = FioGetPos() | (SOUND_SLOT << 24);
+ fe->file_slot = SOUND_SLOT;
+ fe->file_offset = FioGetPos();
}
}
}
@@ -114,7 +118,7 @@
int8 *mem = MallocT<int8>(fe->file_size);
if (mem == NULL) return false;
- FioSeekToFile(fe->file_offset);
+ FioSeekToFile(fe->file_slot, fe->file_offset);
FioReadBlock(mem, fe->file_size);
for (i = 0; i != fe->file_size; i++)
--- a/src/sound.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/sound.h Sun Sep 23 07:37:38 2007 +0000
@@ -21,6 +21,7 @@
VARDEF MusicFileSettings msf;
struct FileEntry {
+ uint8 file_slot;
uint32 file_offset;
uint32 file_size;
uint16 rate;
--- a/src/sprite.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/sprite.h Sun Sep 23 07:37:38 2007 +0000
@@ -34,10 +34,10 @@
struct DrawBuildingsTileStruct {
PalSpriteID ground;
PalSpriteID building;
- byte subtile_x:4;
- byte subtile_y:4;
- byte width:4;
- byte height:4;
+ byte subtile_x;
+ byte subtile_y;
+ byte width;
+ byte height;
byte dz;
byte draw_proc; /* this allows to specify a special drawing procedure.*/
};
--- a/src/spritecache.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/spritecache.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -25,6 +25,7 @@
struct SpriteCache {
void *ptr;
+ uint8 file_slot;
uint32 file_pos;
int16 lru;
uint32 id;
@@ -120,13 +121,14 @@
/* Special case for Sprite ID zero -- its position is also 0... */
if (id == 0) return true;
if (id >= _spritecache_items) return false;
- return GetSpriteCache(id)->file_pos != 0;
+ return !(GetSpriteCache(id)->file_pos == 0 && GetSpriteCache(id)->file_slot == 0);
}
void* AllocSprite(size_t);
static void* ReadSprite(SpriteCache *sc, SpriteID id, bool real_sprite)
{
+ uint8 file_slot = sc->file_slot;
uint32 file_pos = sc->file_pos;
DEBUG(sprite, 9, "Load sprite %d", id);
@@ -136,7 +138,8 @@
/* SPR_IMG_QUERY is a BIG FAT RED ? */
id = SPR_IMG_QUERY;
- file_pos = GetSpriteCache(SPR_IMG_QUERY)->file_pos;
+ file_slot = GetSpriteCache(SPR_IMG_QUERY)->file_slot;
+ file_pos = GetSpriteCache(SPR_IMG_QUERY)->file_pos;
}
if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() == 32) {
@@ -145,7 +148,7 @@
SpriteLoaderPNG sprite_loader;
SpriteLoader::Sprite sprite;
- if (sprite_loader.LoadSprite(&sprite, sc->grf_name, sc->id)) {
+ if (sprite_loader.LoadSprite(&sprite, sc->grf_name, 0, sc->id)) {
sc->ptr = BlitterFactoryBase::GetCurrentBlitter()->Encode(&sprite, &AllocSprite);
free(sprite.data);
@@ -161,7 +164,7 @@
#endif /* WITH_PNG */
}
- FioSeekToFile(file_pos);
+ FioSeekToFile(file_slot, file_pos);
/* Read the size and type */
int num = FioReadWord();
@@ -232,7 +235,7 @@
SpriteLoaderGrf sprite_loader;
SpriteLoader::Sprite sprite;
- if (!sprite_loader.LoadSprite(&sprite, sc->grf_name, file_pos)) return NULL;
+ if (!sprite_loader.LoadSprite(&sprite, sc->grf_name, file_slot, file_pos)) return NULL;
if (id == 142) sprite.height = 10; // Compensate for a TTD bug
sc->ptr = BlitterFactoryBase::GetCurrentBlitter()->Encode(&sprite, &AllocSprite);
free(sprite.data);
@@ -241,10 +244,10 @@
}
-bool LoadNextSprite(int load_index, byte file_index, uint file_sprite_id)
+bool LoadNextSprite(int load_index, byte file_slot, uint file_sprite_id)
{
SpriteCache *sc;
- uint32 file_pos = FioGetPos() | (file_index << 24);
+ uint32 file_pos = FioGetPos();
if (!ReadSpriteHeaderSkipData()) return false;
@@ -253,6 +256,7 @@
}
sc = AllocateSpriteCache(load_index);
+ sc->file_slot = file_slot;
sc->file_pos = file_pos;
sc->ptr = NULL;
sc->lru = 0;
@@ -280,6 +284,7 @@
SpriteCache *scold = GetSpriteCache(old_spr);
SpriteCache *scnew = AllocateSpriteCache(new_spr);
+ scnew->file_slot = scold->file_slot;
scnew->file_pos = scold->file_pos;
scnew->ptr = NULL;
scnew->id = scold->id;
--- a/src/spriteloader/grf.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/spriteloader/grf.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -8,10 +8,10 @@
#include "../debug.h"
#include "grf.hpp"
-bool SpriteLoaderGrf::LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos)
+bool SpriteLoaderGrf::LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint8 file_slot, uint32 file_pos)
{
/* Open the right file and go to the correct position */
- FioSeekToFile(file_pos);
+ FioSeekToFile(file_slot, file_pos);
/* Read the size and type */
int num = FioReadWord();
--- a/src/spriteloader/grf.hpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/spriteloader/grf.hpp Sun Sep 23 07:37:38 2007 +0000
@@ -12,7 +12,7 @@
/**
* Load a sprite from the disk and return a sprite struct which is the same for all loaders.
*/
- bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos);
+ bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint8 file_slot, uint32 file_pos);
};
#endif /* SPRITELOADER_GRF_HPP */
--- a/src/spriteloader/png.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/spriteloader/png.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -180,7 +180,7 @@
return true;
}
-bool SpriteLoaderPNG::LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos)
+bool SpriteLoaderPNG::LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint8 file_slot, uint32 file_pos)
{
if (!LoadPNG(sprite, filename, file_pos, false)) return false;
if (!LoadPNG(sprite, filename, file_pos, true)) return false;
--- a/src/spriteloader/png.hpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/spriteloader/png.hpp Sun Sep 23 07:37:38 2007 +0000
@@ -12,7 +12,7 @@
/**
* Load a sprite from the disk and return a sprite struct which is the same for all loaders.
*/
- bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos);
+ bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint8 file_slot, uint32 file_pos);
};
#endif /* SPRITELOADER_PNG_HPP */
--- a/src/spriteloader/spriteloader.hpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/spriteloader/spriteloader.hpp Sun Sep 23 07:37:38 2007 +0000
@@ -26,7 +26,7 @@
/**
* Load a sprite from the disk and return a sprite struct which is the same for all loaders.
*/
- virtual bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint32 file_pos) = 0;
+ virtual bool LoadSprite(SpriteLoader::Sprite *sprite, const char *filename, uint8 file_slot, uint32 file_pos) = 0;
virtual ~SpriteLoader() { }
};
--- a/src/station.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/station.h Sun Sep 23 07:37:38 2007 +0000
@@ -173,7 +173,19 @@
virtual ~Station();
void AddFacility(byte new_facility_bit, TileIndex facil_xy);
+
+ /**
+ * Mark the sign of a station dirty for repaint.
+ *
+ * @ingroup dirty
+ */
void MarkDirty() const;
+
+ /**
+ * Marks the tiles of the station as dirty.
+ *
+ * @ingroup dirty
+ */
void MarkTilesDirty(bool cargo_change) const;
bool TileBelongsToRailStation(TileIndex tile) const;
uint GetPlatformLength(TileIndex tile, DiagDirection dir) const;
--- a/src/station_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/station_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -42,6 +42,7 @@
#include "road.h"
#include "cargotype.h"
#include "strings.h"
+#include "autoslope.h"
DEFINE_OLD_POOL_GENERIC(Station, Station)
DEFINE_OLD_POOL_GENERIC(RoadStop, RoadStop)
@@ -375,7 +376,14 @@
}
}
-// Update the station virt coords while making the modified parts dirty.
+/**
+ * Update the station virt coords while making the modified parts dirty.
+ *
+ * This function updates the virt coords and mark the modified parts as dirty
+ *
+ * @param st The station to update the virt coords
+ * @ingroup dirty
+ */
static void UpdateStationVirtCoordDirty(Station *st)
{
st->MarkDirty();
@@ -1227,22 +1235,14 @@
*/
CommandCost DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
{
- const Station* st = GetStationByTile(tile);
-
- if (!CheckOwnership(st->owner) || !EnsureNoVehicle(tile)) return CMD_ERROR;
-
- // tile is not a railroad station?
+ /* Tile is not a railroad station? */
if (!IsRailwayStation(tile)) return CMD_ERROR;
- if (GetRailType(tile) == totype) return CMD_ERROR;
-
- // 'hidden' elrails can't be downgraded to normal rail when elrails are disabled
- if (_patches.disable_elrails && totype == RAILTYPE_RAIL && GetRailType(tile) == RAILTYPE_ELECTRIC) return CMD_ERROR;
-
if (exec) {
SetRailType(tile, totype);
MarkTileDirtyByTile(tile);
YapfNotifyTrackLayoutChange(tile, GetRailStationTrack(tile));
+ VehicleFromPos(tile, &tile, UpdateTrainPowerProc);
}
return CommandCost(_price.build_rail / 2);
@@ -2881,6 +2881,36 @@
static CommandCost TerraformTile_Station(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
{
+ if (_patches.build_on_slopes && AutoslopeEnabled()) {
+ /* TODO: If you implement newgrf callback 149 'land slope check', you have to decide what to do with it here.
+ * TTDP does not call it.
+ */
+ if (!IsSteepSlope(tileh_new) && (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new))) {
+ switch (GetStationType(tile)) {
+ case STATION_RAIL: {
+ DiagDirection direction = AxisToDiagDir(GetRailStationAxis(tile));
+ if (!AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, direction)) break;
+ if (!AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, ReverseDiagDir(direction))) break;
+ return _price.terraform;
+ }
+
+ case STATION_AIRPORT:
+ return _price.terraform;
+
+ case STATION_TRUCK:
+ case STATION_BUS: {
+ DiagDirection direction = GetRoadStopDir(tile);
+ if (!AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, direction)) break;
+ if (IsDriveThroughStopTile(tile)) {
+ if (!AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, ReverseDiagDir(direction))) break;
+ }
+ return _price.terraform;
+ }
+
+ default: break;
+ }
+ }
+ }
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
}
--- a/src/strings.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/strings.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -531,6 +531,12 @@
uint modifier = 0;
while ((b = Utf8Consume(&str)) != '\0') {
+ if (SCC_NEWGRF_FIRST <= b && b <= SCC_NEWGRF_LAST) {
+ /* We need to pass some stuff as it might be modified; oh boy. */
+ b = RemapNewGRFStringControlCode(b, &buff, &str, (int64*)argv);
+ if (b == 0) continue;
+ }
+
switch (b) {
case SCC_SETX: // {SETX}
if (buff + Utf8CharLen(SCC_SETX) + 1 < last) {
--- a/src/table/control_codes.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/table/control_codes.h Sun Sep 23 07:37:38 2007 +0000
@@ -6,7 +6,7 @@
/* List of string control codes used for string formatting, displaying, and
* by strgen to generate the language files. */
-enum {
+enum StringControlCode {
SCC_CONTROL_START = 0xE000,
SCC_CONTROL_END = 0xE1FF,
@@ -90,6 +90,28 @@
SCC_BLACK,
SCC_PREVIOUS_COLOUR,
+ /**
+ * The next variables are part of a NewGRF subsystem for creating text strings.
+ * It uses a "stack" of bytes and reads from there.
+ */
+ SCC_NEWGRF_FIRST,
+ SCC_NEWGRF_PRINT_DWORD = SCC_NEWGRF_FIRST, ///< Read 4 bytes from the stack
+ SCC_NEWGRF_PRINT_SIGNED_WORD, ///< Read 2 bytes from the stack as signed value
+ SCC_NEWGRF_PRINT_SIGNED_BYTE, ///< Read 1 bytes from the stack as signed value
+ SCC_NEWGRF_PRINT_UNSIGNED_WORD, ///< Read 2 bytes from the stack as unsigned value
+ SCC_NEWGRF_PRINT_DWORD_CURRENCY, ///< Read 4 bytes from the stack as currency
+ SCC_NEWGRF_PRINT_STRING_ID, ///< Read 2 bytes from the stack as String ID
+ SCC_NEWGRF_PRINT_DATE, ///< Read 2 bytes from the stack as base 1920 date
+ SCC_NEWGRF_PRINT_MONTH_YEAR, ///< Read 2 bytes from the stack as base 1920 date
+ SCC_NEWGRF_PRINT_WORD_SPEED, ///< Read 2 bytes from the stack as signed speed
+ SCC_NEWGRF_PRINT_WORD_LITRES, ///< Read 2 bytes from the stack as signed litres
+ SCC_NEWGRF_PRINT_QWORD_CURRENCY, ///< Read 8 bytes from the stack as currency
+ SCC_NEWGRF_PUSH_WORD, ///< Pushes 2 bytes onto the stack
+ SCC_NEWGRF_UNPRINT, ///< "Unprints" the given number of bytes from the string
+ SCC_NEWGRF_DISCARD_WORD, ///< Discard the next two bytes
+ SCC_NEWGRF_ROTATE_TOP_4_WORDS, ///< Rotate the top 4 words of the stack (W4 W1 W2 W3)
+ SCC_NEWGRF_LAST = SCC_NEWGRF_ROTATE_TOP_4_WORDS,
+
/* Special printable symbols.
* These are mapped to the original glyphs */
SCC_LESSTHAN = SCC_SPRITE_START + 0x3C,
--- a/src/table/elrail_data.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/table/elrail_data.h Sun Sep 23 07:37:38 2007 +0000
@@ -229,13 +229,13 @@
}
};
/* Geometric placement of the PCP relative to the tile origin */
-static const int8 x_pcp_offsets[DIAGDIR_END] = {0, 8, 15, 8};
-static const int8 y_pcp_offsets[DIAGDIR_END] = {8, 15, 8, 0};
+static const int8 x_pcp_offsets[DIAGDIR_END] = {0, 8, 16, 8};
+static const int8 y_pcp_offsets[DIAGDIR_END] = {8, 16, 8, 0};
/* Geometric placement of the PPP relative to the PCP*/
-static const int8 x_ppp_offsets[DIR_END] = {-3, -4, -3, 0, 3, 4, 3, 0};
-static const int8 y_ppp_offsets[DIR_END] = {-3, 0, 3, 4, 3, 0, -3, -4};
+static const int8 x_ppp_offsets[DIR_END] = {-2, -4, -2, 0, 2, 4, 2, 0};
+static const int8 y_ppp_offsets[DIR_END] = {-2, 0, 2, 4, 2, 0, -2, -4};
/* The type of pylon to draw at each PPP */
-static const SpriteID pylons_normal[] = {
+static const SpriteID pylon_sprites[] = {
SPR_PYLON_EW_N,
SPR_PYLON_Y_NE,
SPR_PYLON_NS_E,
@@ -246,13 +246,6 @@
SPR_PYLON_X_NW
};
-static const SpriteID pylons_bridge[] = {
- SPR_PYLON_X_NW,
- SPR_PYLON_X_SE,
- SPR_PYLON_Y_NE,
- SPR_PYLON_Y_SW
-};
-
struct SortableSpriteStruct {
SpriteID image;
int8 x_offset;
@@ -265,9 +258,7 @@
enum {
/** Distance between wire and rail */
- ELRAIL_ELEVATION = 8,
- /** Corrects an off-by-one error in some places (tileh 12 and 9) (TODO -- find source of error) */
- ELRAIL_ELEV_CORR = ELRAIL_ELEVATION + 1,
+ ELRAIL_ELEVATION = 10,
/** Wires that a draw one level higher than the north corner. */
ELRAIL_ELEVRAISE = ELRAIL_ELEVATION + TILE_HEIGHT
};
@@ -276,41 +267,41 @@
/* X direction */
/* Flat tiles: */
/* Wires */
- { SPR_WIRE_X_SW, 0, 8, 16, 1, 1, ELRAIL_ELEVATION }, //! 0: Wire in X direction, pylon on the SW end only
- { SPR_WIRE_X_NE, 0, 8, 16, 1, 1, ELRAIL_ELEVATION }, //! 1: Wire in X direction, pylon on the NE end
- { SPR_WIRE_X_SHORT, 0, 8, 16, 1, 1, ELRAIL_ELEVATION }, //! 2: Wire in X direction, pylon on both ends
+ { SPR_WIRE_X_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! 0: Wire in X direction, pylon on the SW end only
+ { SPR_WIRE_X_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! 1: Wire in X direction, pylon on the NE end
+ { SPR_WIRE_X_SHORT, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! 2: Wire in X direction, pylon on both ends
/* "up" tiles */
/* Wires */
- { SPR_WIRE_X_SW_UP, 0, 8, 16, 8, 1, ELRAIL_ELEVRAISE }, //! 3: Wire in X pitch up, pylon on the SW end only
- { SPR_WIRE_X_NE_UP, 0, 8, 16, 8, 1, ELRAIL_ELEVRAISE }, //! 4: Wire in X pitch up, pylon on the NE end
- { SPR_WIRE_X_SHORT_UP, 0, 8, 16, 8, 1, ELRAIL_ELEVRAISE }, //! 5: Wire in X pitch up, pylon on both ends
+ { SPR_WIRE_X_SW_UP, 0, 7, 15, 8, 1, ELRAIL_ELEVRAISE }, //! 3: Wire in X pitch up, pylon on the SW end only
+ { SPR_WIRE_X_NE_UP, 0, 7, 15, 8, 1, ELRAIL_ELEVRAISE }, //! 4: Wire in X pitch up, pylon on the NE end
+ { SPR_WIRE_X_SHORT_UP, 0, 7, 15, 8, 1, ELRAIL_ELEVRAISE }, //! 5: Wire in X pitch up, pylon on both ends
/* "down" tiles */
/* Wires */
- { SPR_WIRE_X_SW_DOWN, 0, 8, 16, 8, 1, ELRAIL_ELEV_CORR }, //! 6: Wire in X pitch down, pylon on the SW end
- { SPR_WIRE_X_NE_DOWN, 0, 8, 16, 8, 1, ELRAIL_ELEV_CORR }, //! 7: Wire in X pitch down, pylon on the NE end
- { SPR_WIRE_X_SHORT_DOWN, 0, 8, 16, 8, 1, ELRAIL_ELEV_CORR }, //! 8: Wire in X pitch down, pylon on both ends
+ { SPR_WIRE_X_SW_DOWN, 0, 7, 15, 8, 1, ELRAIL_ELEVATION }, //! 6: Wire in X pitch down, pylon on the SW end
+ { SPR_WIRE_X_NE_DOWN, 0, 7, 15, 8, 1, ELRAIL_ELEVATION }, //! 7: Wire in X pitch down, pylon on the NE end
+ { SPR_WIRE_X_SHORT_DOWN, 0, 7, 15, 8, 1, ELRAIL_ELEVATION }, //! 8: Wire in X pitch down, pylon on both ends
/* Y direction */
/* Flat tiles: */
/* Wires */
- { SPR_WIRE_Y_SE, 8, 0, 1, 16, 1, ELRAIL_ELEVATION }, //! 9: Wire in Y direction, pylon on the SE end only
- { SPR_WIRE_Y_NW, 8, 0, 1, 16, 1, ELRAIL_ELEVATION }, //!10: Wire in Y direction, pylon on the NW end
- { SPR_WIRE_Y_SHORT, 8, 0, 1, 16, 1, ELRAIL_ELEVATION }, //!11: Wire in Y direction, pylon on both ends
+ { SPR_WIRE_Y_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! 9: Wire in Y direction, pylon on the SE end only
+ { SPR_WIRE_Y_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //!10: Wire in Y direction, pylon on the NW end
+ { SPR_WIRE_Y_SHORT, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //!11: Wire in Y direction, pylon on both ends
/* "up" tiles */
/* Wires */
- { SPR_WIRE_Y_SE_UP, 8, 0, 8, 16, 1, ELRAIL_ELEVRAISE }, //!12: Wire in Y pitch up, pylon on the SE end only
- { SPR_WIRE_Y_NW_UP, 8, 0, 8, 16, 1, ELRAIL_ELEVRAISE }, //!13: Wire in Y pitch up, pylon on the NW end
- { SPR_WIRE_Y_SHORT_UP, 8, 0, 8, 16, 1, ELRAIL_ELEVRAISE }, //!14: Wire in Y pitch up, pylon on both ends
+ { SPR_WIRE_Y_SE_UP, 7, 0, 8, 15, 1, ELRAIL_ELEVRAISE }, //!12: Wire in Y pitch up, pylon on the SE end only
+ { SPR_WIRE_Y_NW_UP, 7, 0, 8, 15, 1, ELRAIL_ELEVRAISE }, //!13: Wire in Y pitch up, pylon on the NW end
+ { SPR_WIRE_Y_SHORT_UP, 7, 0, 8, 15, 1, ELRAIL_ELEVRAISE }, //!14: Wire in Y pitch up, pylon on both ends
/* "down" tiles */
/* Wires */
- { SPR_WIRE_Y_SE_DOWN, 8, 0, 8, 16, 1, ELRAIL_ELEV_CORR }, //!15: Wire in Y pitch down, pylon on the SE end
- { SPR_WIRE_Y_NW_DOWN, 8, 0, 8, 16, 1, ELRAIL_ELEV_CORR }, //!16: Wire in Y pitch down, pylon on the NW end
- { SPR_WIRE_Y_SHORT_DOWN, 8, 0, 8, 16, 1, ELRAIL_ELEV_CORR }, //!17: Wire in Y pitch down, pylon on both ends
+ { SPR_WIRE_Y_SE_DOWN, 7, 0, 8, 15, 1, ELRAIL_ELEVATION }, //!15: Wire in Y pitch down, pylon on the SE end
+ { SPR_WIRE_Y_NW_DOWN, 7, 0, 8, 15, 1, ELRAIL_ELEVATION }, //!16: Wire in Y pitch down, pylon on the NW end
+ { SPR_WIRE_Y_SHORT_DOWN, 7, 0, 8, 15, 1, ELRAIL_ELEVATION }, //!17: Wire in Y pitch down, pylon on both ends
/* NS Direction */
{ SPR_WIRE_NS_SHORT, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!18: LEFT trackbit wire, pylon on both ends
@@ -323,28 +314,28 @@
{ SPR_WIRE_NS_S, 0, 8, 8, 8, 1, ELRAIL_ELEVATION }, //!23: RIGHT trackbit wire, pylon on S end
/* EW Direction */
- { SPR_WIRE_EW_SHORT, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!24: UPPER trackbit wire, pylon on both ends
- { SPR_WIRE_EW_SHORT, 16, 8, 8, 8, 1, ELRAIL_ELEVATION }, //!25: LOWER trackbit wire, pylon on both ends
+ { SPR_WIRE_EW_SHORT, 7, 0, 1, 1, 1, ELRAIL_ELEVATION }, //!24: UPPER trackbit wire, pylon on both ends
+ { SPR_WIRE_EW_SHORT, 15, 8, 3, 3, 1, ELRAIL_ELEVATION }, //!25: LOWER trackbit wire, pylon on both ends
- { SPR_WIRE_EW_W, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!28: UPPER trackbit wire, pylon on both ends
- { SPR_WIRE_EW_W, 16, 8, 8, 8, 1, ELRAIL_ELEVATION }, //!29: LOWER trackbit wire, pylon on both ends
+ { SPR_WIRE_EW_W, 7, 0, 1, 1, 1, ELRAIL_ELEVATION }, //!28: UPPER trackbit wire, pylon on both ends
+ { SPR_WIRE_EW_W, 15, 8, 3, 3, 1, ELRAIL_ELEVATION }, //!29: LOWER trackbit wire, pylon on both ends
- { SPR_WIRE_EW_E, 8, 0, 8, 8, 1, ELRAIL_ELEVATION }, //!32: UPPER trackbit wire, pylon on both ends
- { SPR_WIRE_EW_E, 16, 8, 8, 8, 1, ELRAIL_ELEVATION } //!33: LOWER trackbit wire, pylon on both ends
+ { SPR_WIRE_EW_E, 7, 0, 1, 1, 1, ELRAIL_ELEVATION }, //!32: UPPER trackbit wire, pylon on both ends
+ { SPR_WIRE_EW_E, 15, 8, 3, 3, 1, ELRAIL_ELEVATION } //!33: LOWER trackbit wire, pylon on both ends
};
static const SortableSpriteStruct CatenarySpriteData_Depot[] = {
- { SPR_WIRE_DEPOT_NE, 0, 8, 8, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE depot exit
- { SPR_WIRE_DEPOT_SE, 8, 0, 1, 8, 1, ELRAIL_ELEVATION }, //! Wire for SE depot exit
- { SPR_WIRE_DEPOT_SW, 0, 8, 8, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW depot exit
- { SPR_WIRE_DEPOT_NW, 8, 0, 1, 8, 1, ELRAIL_ELEVATION } //! Wire for NW depot exit
+ { SPR_WIRE_DEPOT_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE depot exit
+ { SPR_WIRE_DEPOT_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! Wire for SE depot exit
+ { SPR_WIRE_DEPOT_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW depot exit
+ { SPR_WIRE_DEPOT_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION } //! Wire for NW depot exit
};
static const SortableSpriteStruct CatenarySpriteData_Tunnel[] = {
- { SPR_WIRE_TUNNEL_NE, 0, 8, 8, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE tunnel exit
- { SPR_WIRE_TUNNEL_SE, 8, 0, 1, 8, 1, ELRAIL_ELEVATION }, //! Wire for SE tunnel exit
- { SPR_WIRE_TUNNEL_SW, 0, 8, 8, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW tunnel exit
- { SPR_WIRE_TUNNEL_NW, 8, 0, 1, 8, 1, ELRAIL_ELEVATION } //! Wire for NW tunnel exit
+ { SPR_WIRE_TUNNEL_NE, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for NE tunnel exit
+ { SPR_WIRE_TUNNEL_SE, 7, 0, 1, 15, 1, ELRAIL_ELEVATION }, //! Wire for SE tunnel exit
+ { SPR_WIRE_TUNNEL_SW, 0, 7, 15, 1, 1, ELRAIL_ELEVATION }, //! Wire for SW tunnel exit
+ { SPR_WIRE_TUNNEL_NW, 7, 0, 1, 15, 1, ELRAIL_ELEVATION } //! Wire for NW tunnel exit
};
--- a/src/table/industry_land.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/table/industry_land.h Sun Sep 23 07:37:38 2007 +0000
@@ -39,7 +39,7 @@
* @param dz virtual height of the sprite
* @param p this allows to specify a special drawing procedure.
* @see DrawBuildingsTileStruct */
-#define M(s1, p1, s2, p2, sx, sy, w, h, dz, p) { { s1, p1 }, { s2, p2 }, sx, sy, w - 1, h - 1, dz, p }
+#define M(s1, p1, s2, p2, sx, sy, w, h, dz, p) { { s1, p1 }, { s2, p2 }, sx, sy, w, h, dz, p }
/** Structure for industry tiles drawing */
static const DrawBuildingsTileStruct _industry_draw_tile_data[NEW_INDUSTRYTILEOFFSET * 4] = {
--- a/src/table/sprites.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/table/sprites.h Sun Sep 23 07:37:38 2007 +0000
@@ -176,8 +176,11 @@
/* One way road sprites */
SPR_ONEWAY_BASE = SPR_TRAMWAY_BASE + 113,
+ /* Not really a sprite, but an empty bounding box. Used to construct bounding boxes, that help sorting the sprites, but do not have a sprite associated. */
+ SPR_EMPTY_BOUNDING_BOX = SPR_ONEWAY_BASE + 6,
+
/* Flags sprites (in same order as enum NetworkLanguage) */
- SPR_FLAGS_BASE = SPR_ONEWAY_BASE + 6,
+ SPR_FLAGS_BASE = SPR_EMPTY_BOUNDING_BOX + 1,
/* Manager face sprites */
SPR_GRADIENT = 874, // background gradient behind manager face
--- a/src/table/town_land.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/table/town_land.h Sun Sep 23 07:37:38 2007 +0000
@@ -15,7 +15,7 @@
* @param dz the virtual height of the sprite
* @param p set to 1 if a lift is present ()
* @see DrawBuildingsTileStruct */
-#define M(s1, p1, s2, p2, sx, sy, w, h, dz, p) { { s1, p1 }, { s2, p2 }, sx, sy, w - 1, h - 1, dz, p}
+#define M(s1, p1, s2, p2, sx, sy, w, h, dz, p) { { s1, p1 }, { s2, p2 }, sx, sy, w, h, dz, p}
/** structure of houses graphics*/
static const DrawBuildingsTileStruct _town_draw_tile_data[] = {
--- a/src/terraform_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/terraform_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -109,7 +109,7 @@
DoCommandP(end_tile, start_tile, 0, CcPlaySound10, CMD_CLEAR_AREA | CMD_MSG(STR_00B5_CAN_T_CLEAR_THIS_AREA));
break;
case DDSP_LEVEL_AREA:
- DoCommandP(end_tile, start_tile, 0, CcPlaySound10, CMD_LEVEL_LAND | CMD_AUTO);
+ DoCommandP(end_tile, start_tile, 0, CcPlaySound10, CMD_LEVEL_LAND);
break;
case DDSP_CREATE_ROCKS:
GenerateRockyArea(end_tile, start_tile);
@@ -118,7 +118,7 @@
GenerateDesertArea(end_tile, start_tile);
break;
case DDSP_CREATE_WATER:
- DoCommandP(end_tile, start_tile, _ctrl_pressed, CcBuildCanal, CMD_BUILD_CANAL | CMD_AUTO | CMD_MSG(STR_CANT_BUILD_CANALS));
+ DoCommandP(end_tile, start_tile, _ctrl_pressed, CcBuildCanal, CMD_BUILD_CANAL | CMD_MSG(STR_CANT_BUILD_CANALS));
break;
default:
return false;
@@ -148,7 +148,7 @@
{
DoCommandP(
tile, SLOPE_N, 1, CcTerraform,
- CMD_TERRAFORM_LAND | CMD_AUTO | CMD_MSG(STR_0808_CAN_T_RAISE_LAND_HERE)
+ CMD_TERRAFORM_LAND | CMD_MSG(STR_0808_CAN_T_RAISE_LAND_HERE)
);
}
@@ -156,7 +156,7 @@
{
DoCommandP(
tile, SLOPE_N, 0, CcTerraform,
- CMD_TERRAFORM_LAND | CMD_AUTO | CMD_MSG(STR_0809_CAN_T_LOWER_LAND_HERE)
+ CMD_TERRAFORM_LAND | CMD_MSG(STR_0809_CAN_T_LOWER_LAND_HERE)
);
}
--- a/src/texteff.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/texteff.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -256,9 +256,18 @@
_chatmessage_dirty = false;
}
-/** Text Effects */
+/* Text Effects */
+/**
+ * Mark the area of the text effect as dirty.
+ *
+ * This function marks the area of a text effect as dirty for repaint.
+ *
+ * @param te The TextEffect to mark the area dirty
+ * @ingroup dirty
+ */
static void MarkTextEffectAreaDirty(TextEffect *te)
{
+ /* Width and height of the text effect are doubled, so they are correct in both zoom out levels 1x and 2x. */
MarkAllViewportsDirty(
te->x,
te->y - 1,
@@ -321,6 +330,15 @@
te->params_1 = GetDParam(0);
te->params_2 = GetDParam(4);
+ /* Update width of text effect */
+ char buffer[100];
+ GetString(buffer, msg, lastof(buffer));
+ int w = GetStringBoundingBox(buffer).width;
+
+ /* Only allow to make it broader, so it completely covers the old text. That avoids remnants of the old text. */
+ int right_new = te->x + w;
+ if (te->right < right_new) te->right = right_new;
+
MarkTextEffectAreaDirty(te);
}
--- a/src/town_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/town_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -41,6 +41,7 @@
#include "newgrf_commons.h"
#include "newgrf_townname.h"
#include "misc/autoptr.hpp"
+#include "autoslope.h"
/* Initialize the town-pool */
DEFINE_OLD_POOL_GENERIC(Town, Town)
@@ -122,6 +123,28 @@
}
/**
+ * Return a random direction
+ *
+ * @return a random direction
+ */
+static inline DiagDirection RandomDiagDir()
+{
+ return (DiagDirection)(3 & Random());
+}
+
+/**
+ * Move a TileIndex into a diagonal direction.
+ *
+ * @param tile The current tile
+ * @param dir The direction in which we want to step
+ * @return the moved tile
+ */
+static inline TileIndex AddDiagDirToTileIndex(TileIndex tile, DiagDirection dir)
+{
+ return TILE_ADD(tile, TileOffsByDiagDir(dir));
+}
+
+/**
* House Tile drawing handler.
* Part of the tile loop process
* @param ti TileInfo of the tile to draw
@@ -160,8 +183,8 @@
AddSortableSpriteToDraw(image, dcts->building.pal,
ti->x + dcts->subtile_x,
ti->y + dcts->subtile_y,
- dcts->width + 1,
- dcts->height + 1,
+ dcts->width,
+ dcts->height,
dcts->dz,
ti->z,
HASBIT(_transparent_opt, TO_HOUSES)
@@ -256,8 +279,12 @@
}
/**
- * Marks the town sign as needing a repaint
- * @param t Town requesting repaint
+ * Marks the town sign as needing a repaint.
+ *
+ * This function marks the area of the sign of a town as dirty for repaint.
+ *
+ * @param t Town requesting town sign for repaint
+ * @ingroup dirty
*/
static void MarkTownSignDirty(Town *t)
{
@@ -563,29 +590,6 @@
/* not used */
}
-
-static const TileIndexDiffC _roadblock_tileadd[] = {
- { 0, -1},
- { 1, 0},
- { 0, 1},
- {-1, 0},
-
- /* Store the first 3 elements again.
- * Lets us rotate without using &3. */
- { 0, -1},
- { 1, 0},
- { 0, 1}
-};
-
-/**
- * Distance multiplyer
- * Defines the possible distances between 2 road tiles
- */
-enum RoadBlockTitleDistance {
- RB_TILE_DIST1 = 1, ///< 1 tile between
- RB_TILE_DIST2, ///< 2 tiles between
-};
-
static bool GrowTown(Town *t);
static void TownTickHandler(Town *t)
@@ -623,7 +627,15 @@
}
}
-static RoadBits GetTownRoadMask(TileIndex tile)
+/**
+ * Return the RoadBits of a tile
+ *
+ * @note There are many other functions doing things like that.
+ * @note Needs to be checked for needlessness.
+ * @param tile The tile we want to analyse
+ * @return The roadbits of the given tile
+ */
+static RoadBits GetTownRoadBits(TileIndex tile)
{
TrackBits b = GetAnyRoadTrackBits(tile, ROADTYPE_ROAD);
RoadBits r = ROAD_NONE;
@@ -645,22 +657,48 @@
* @param dir target direction
* @param dist_multi distance multiplyer
* @return true if one of the neighboring tiles at the
- * given distance is a road tile else
+ * given distance is a road tile else false
*/
-static bool IsNeighborRoadTile(TileIndex tile, int dir, RoadBlockTitleDistance dist_multi)
+static bool IsNeighborRoadTile(TileIndex tile, DiagDirection dir, uint dist_multi)
{
- return (HASBIT(GetTownRoadMask(TILE_ADD(tile, dist_multi * ToTileIndexDiff(_roadblock_tileadd[dir + 1]))), dir ^ 2) ||
- HASBIT(GetTownRoadMask(TILE_ADD(tile, dist_multi * ToTileIndexDiff(_roadblock_tileadd[dir + 3]))), dir ^ 2) ||
- HASBIT(GetTownRoadMask(TILE_ADD(tile, dist_multi * (ToTileIndexDiff(_roadblock_tileadd[dir + 1]) + ToTileIndexDiff(_roadblock_tileadd[dir + 2])))), dir) ||
- HASBIT(GetTownRoadMask(TILE_ADD(tile, dist_multi * (ToTileIndexDiff(_roadblock_tileadd[dir + 3]) + ToTileIndexDiff(_roadblock_tileadd[dir + 2])))), dir));
+ static TileIndexDiff tid_lt[3]; ///< lookup table for the used diff values
+ tid_lt[0] = TileOffsByDiagDir(ChangeDiagDir(dir, DIAGDIRDIFF_90RIGHT));
+ tid_lt[1] = TileOffsByDiagDir(ChangeDiagDir(dir, DIAGDIRDIFF_90LEFT));
+ tid_lt[2] = TileOffsByDiagDir(ReverseDiagDir(dir));
+
+ /* We add 1 to the distance because we want to get 1 for
+ * the min distance multiplyer and not 0.
+ * Therefore we start at 4. The 4 is used because
+ * there are 4 tiles per distance step to check.
+ */
+ dist_multi = (dist_multi + 1) * 4;
+ for (uint pos = 4; pos < dist_multi; pos++) {
+ TileIndexDiff cur = 0;
+ /* For each even value of pos add the right TileIndexDiff
+ * for each uneven value the left TileIndexDiff
+ * for each with 2nd bit set (2,3,6,7,..) add the reversed TileIndexDiff
+ */
+ cur += tid_lt[(pos & 1) ? 0 : 1];
+ if (pos & 2) cur += tid_lt[2];
+
+ cur = (uint)(pos / 4) * cur; ///< Multiply for the fitting distance
+ if (GetTownRoadBits(TILE_ADD(tile, cur)) & DiagDirToRoadBits((pos & 2) ? dir : ReverseDiagDir(dir))) return true;
+ }
+ return false;
}
-static bool IsRoadAllowedHere(TileIndex tile, int dir)
+/**
+ * Check if a Road is allowed on a given tile
+ *
+ * @param tile The target tile
+ * @param dir The direction in which we want to extend the town
+ * @return true if it is allowed else false
+ */
+static bool IsRoadAllowedHere(TileIndex tile, DiagDirection dir)
{
if (TileX(tile) < 2 || TileY(tile) < 2 || MapMaxX() <= TileX(tile) || MapMaxY() <= TileY(tile)) return false;
- Slope k;
- Slope slope;
+ Slope cur_slope, desired_slope;
/* If this assertion fails, it might be because the world contains
* land at the edges. This is not ok. */
@@ -668,47 +706,44 @@
for (;;) {
/* Check if there already is a road at this point? */
- if (GetAnyRoadTrackBits(tile, ROADTYPE_ROAD) == 0) {
+ if (GetTownRoadBits(tile) == ROAD_NONE) {
/* No, try to build one in the direction.
* if that fails clear the land, and if that fails exit.
* This is to make sure that we can build a road here later. */
- if (CmdFailed(DoCommand(tile, (dir & ROAD_NW ? ROAD_X : ROAD_Y), 0, DC_AUTO, CMD_BUILD_ROAD)) &&
+ if (CmdFailed(DoCommand(tile, ((dir == DIAGDIR_NW || dir == DIAGDIR_SE) ? ROAD_X : ROAD_Y), 0, DC_AUTO, CMD_BUILD_ROAD)) &&
CmdFailed(DoCommand(tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR)))
return false;
}
- slope = GetTileSlope(tile, NULL);
- if (slope == SLOPE_FLAT) {
+ cur_slope = GetTileSlope(tile, NULL);
+ if (cur_slope == SLOPE_FLAT) {
no_slope:
/* Tile has no slope */
switch (_patches.town_layout) {
default: NOT_REACHED();
case TL_ORIGINAL: /* Disallow the road if any neighboring tile has a road (distance: 1) */
- return !IsNeighborRoadTile(tile, dir, RB_TILE_DIST1);
+ return !IsNeighborRoadTile(tile, dir, 1);
case TL_BETTER_ROADS: /* Disallow the road if any neighboring tile has a road (distance: 1 and 2). */
- return !(IsNeighborRoadTile(tile, dir, RB_TILE_DIST1) ||
- IsNeighborRoadTile(tile, dir, RB_TILE_DIST2));
+ return !IsNeighborRoadTile(tile, dir, 2);
}
}
/* If the tile is not a slope in the right direction, then
* maybe terraform some. */
- k = (dir & ROAD_NW) ? SLOPE_NE : SLOPE_NW;
- if (k != slope && ComplementSlope(k) != slope) {
+ desired_slope = (dir == DIAGDIR_NW || dir == DIAGDIR_SE) ? SLOPE_NE : SLOPE_NW;
+ if (desired_slope != cur_slope && ComplementSlope(desired_slope) != cur_slope) {
uint32 r = Random();
if (CHANCE16I(1, 8, r) && !_generating_world) {
CommandCost res;
if (CHANCE16I(1, 16, r)) {
- res = DoCommand(tile, slope, 0, DC_EXEC | DC_AUTO | DC_NO_WATER,
- CMD_TERRAFORM_LAND);
+ res = DoCommand(tile, cur_slope, 0, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_TERRAFORM_LAND);
} else {
/* Note: Do not replace " ^ 0xF" with ComplementSlope(). The slope might be steep. */
- res = DoCommand(tile, slope ^ 0xF, 1, DC_EXEC | DC_AUTO | DC_NO_WATER,
- CMD_TERRAFORM_LAND);
+ res = DoCommand(tile, cur_slope ^ 0xF, 1, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_TERRAFORM_LAND);
}
if (CmdFailed(res) && CHANCE16I(1, 3, r)) {
/* We can consider building on the slope, though. */
@@ -755,76 +790,66 @@
*
* @param t current town
* @param tile tile in reference to the town
+ * @param dir The direction to which we are growing ATM
* @return the RoadBit of the current tile regarding
* the selected town layout
*/
-static RoadBits GetTownRoadGridElement(Town* t, TileIndex tile)
+static RoadBits GetTownRoadGridElement(Town* t, TileIndex tile, DiagDirection dir)
{
/* align the grid to the downtown */
TileIndexDiffC grid_pos = TileIndexToTileIndexDiffC(t->xy, tile); ///< Vector from downtown to the tile
-
- /* lx, ly description:
- * @li lx and ly are true if the tile is a crossing tile.
- * @li lx xor ly are true if the tile is a straight road tile.
- * @li lx and ly are false if the tile is a house tile.
- */
- bool lx, ly;
+ RoadBits rcmd = ROAD_NONE;
switch (_patches.town_layout) {
default: NOT_REACHED();
case TL_2X2_GRID:
- lx = ((grid_pos.x % 3) == 0);
- ly = ((grid_pos.y % 3) == 0);
+ if ((grid_pos.x % 3) == 0) rcmd |= ROAD_Y;
+ if ((grid_pos.y % 3) == 0) rcmd |= ROAD_X;
break;
case TL_3X3_GRID:
- lx = ((grid_pos.x % 4) == 0);
- ly = ((grid_pos.y % 4) == 0);
+ if ((grid_pos.x % 4) == 0) rcmd |= ROAD_Y;
+ if ((grid_pos.y % 4) == 0) rcmd |= ROAD_X;
break;
}
- /* generate the basic grid structure */
- if (!lx && !ly) { ///< It is a house tile
- return ROAD_NONE;
- } else if (lx && !ly) { ///< It is a Y-dir road tile
- return ROAD_Y;
- } else if (!lx && ly) { ///< It is a X-dir road tile
- return ROAD_X;
- } else { ///< It is a crossing tile
- /* Presets for junctions on slopes
- * not nice :( */
+ /* Stop if the tile is not a part of the grid lines */
+ if (rcmd == ROAD_NONE) return rcmd;
+
+ /* Optimise only X-junctions */
+ if (COUNTBITS(rcmd) != 2) {
+ RoadBits rb_template;
+
switch (GetTileSlope(tile, NULL)) {
- case SLOPE_W:
- return ROAD_NW | ROAD_SW;
- case SLOPE_S:
- return ROAD_SE | ROAD_SW;
- case SLOPE_SW:
- return ROAD_Y | ROAD_SW;
- case SLOPE_E:
- return ROAD_NE | ROAD_SE;
- case SLOPE_SE:
- return ROAD_X | ROAD_SE;
- case SLOPE_N:
- return ROAD_NW | ROAD_NE;
- case SLOPE_NW:
- return ROAD_X | ROAD_NW;
- case SLOPE_NE:
- return ROAD_Y | ROAD_NE;
+ default: rb_template = ROAD_ALL; break;
+ case SLOPE_W: rb_template = ROAD_NW | ROAD_SW; break;
+ case SLOPE_SW: rb_template = ROAD_Y | ROAD_SW; break;
+ case SLOPE_S: rb_template = ROAD_SW | ROAD_SE; break;
+ case SLOPE_SE: rb_template = ROAD_X | ROAD_SE; break;
+ case SLOPE_E: rb_template = ROAD_SE | ROAD_NE; break;
+ case SLOPE_NE: rb_template = ROAD_Y | ROAD_NE; break;
+ case SLOPE_N: rb_template = ROAD_NE | ROAD_NW; break;
+ case SLOPE_NW: rb_template = ROAD_X | ROAD_NW; break;
case SLOPE_STEEP_W:
- case SLOPE_STEEP_N:
- return ROAD_X;
case SLOPE_STEEP_S:
case SLOPE_STEEP_E:
- return ROAD_Y;
- default:
- return ROAD_ALL;
+ case SLOPE_STEEP_N:
+ rb_template = ROAD_NONE;
+ break;
}
+
+ /* Stop if the template is compatible to the growth dir */
+ if (DiagDirToRoadBits(ReverseDiagDir(dir)) & rb_template) return rb_template;
+ /* If not generate a straight road in the direction of the growth */
+ return DiagDirToRoadBits(dir) | DiagDirToRoadBits(ReverseDiagDir(dir));
}
+
+ return rcmd;
}
/**
- * Check there are enougth neighbor house tiles next to the current tile
+ * Check there are enough neighbor house tiles next to the current tile
*
* @param tile current tile
* @return true if there are more than 2 house tiles next
@@ -840,8 +865,8 @@
}
/* Check the tiles E,N,W and S of the current tile. */
- for (uint i = 0; i < 4; i++) {
- if (IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[i])), MP_HOUSE)) {
+ for (DiagDirection i = DIAGDIR_BEGIN; i < DIAGDIR_END; i++) {
+ if (IsTileType(AddDiagDirToTileIndex(tile, i), MP_HOUSE)) {
counter++;
}
@@ -866,25 +891,20 @@
* @li Forbid roads, only build houses
* @li TL_NO_ROADS
*
- * @param tile_ptr current tile
- * @param mask current tiles RoadBits
- * @param block road block
- * @param t1 current town
+ * @param tile_ptr The current tile
+ * @param cur_rb The current tiles RoadBits
+ * @param target_dir The target road dir
+ * @param t1 The current town
*/
-static void GrowTownInTile(TileIndex* tile_ptr, RoadBits mask, int block, Town* t1)
+static void GrowTownInTile(TileIndex* tile_ptr, RoadBits cur_rb, DiagDirection target_dir, Town* t1)
{
- RoadBits rcmd;
- TileIndex tmptile;
- DiagDirection i;
- int j;
- TileIndex tile = *tile_ptr;
+ RoadBits rcmd = ROAD_NONE; ///< RoadBits for the road construction command
+ TileIndex tmptile; ///< Dummy tile for various things
+ TileIndex tile = *tile_ptr; ///< The main tile on which we base our growth
TILE_ASSERT(tile);
- if (mask == 0) {
- int a;
- int b;
-
+ if (cur_rb == ROAD_NONE) {
/* Tile has no road. First reset the status counter
* to say that this is the last iteration. */
_grow_town_result = 0;
@@ -901,37 +921,29 @@
case TL_3X3_GRID:
case TL_2X2_GRID:
- rcmd = GetTownRoadGridElement(t1, tile);
- if (rcmd == ROAD_NONE) {
- return;
- }
+ rcmd = GetTownRoadGridElement(t1, tile, target_dir);
+ if (rcmd == ROAD_NONE) return;
break;
case TL_BETTER_ROADS:
case TL_ORIGINAL:
- if (!IsRoadAllowedHere(tile, block)) {
- return;
- }
-
- /* Randomize new road block numbers */
- a = block;
- b = block ^ 2;
+ if (!IsRoadAllowedHere(tile, target_dir)) return;
+
+ DiagDirection source_dir = ReverseDiagDir(target_dir);
+
if (CHANCE16(1, 4)) {
- do {
- a = GB(Random(), 0, 2);
- } while (a == b);
+ /* Randomize a new target dir */
+ do target_dir = RandomDiagDir(); while (target_dir == source_dir);
}
- if (!IsRoadAllowedHere(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a])), a)) {
+ if (!IsRoadAllowedHere(AddDiagDirToTileIndex(tile, target_dir), target_dir)) {
/* A road is not allowed to continue the randomized road,
- * return if the road we're trying to build is curved. */
- if (a != (b ^ 2)) {
- return;
- }
+ * return if the road we're trying to build is curved. */
+ if (target_dir != ReverseDiagDir(source_dir)) return;
/* Return if neither side of the new road is a house */
- if (!IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 1])), MP_HOUSE) &&
- !IsTileType(TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[a + 3])), MP_HOUSE)) {
+ if (!IsTileType(AddDiagDirToTileIndex(tile, ChangeDiagDir(target_dir, DIAGDIRDIFF_90RIGHT)), MP_HOUSE) &&
+ !IsTileType(AddDiagDirToTileIndex(tile, ChangeDiagDir(target_dir, DIAGDIRDIFF_90LEFT)), MP_HOUSE)) {
return;
}
@@ -939,13 +951,14 @@
* at any side of the new road. */
}
- rcmd = (RoadBits)((ROAD_NW << a) + (ROAD_NW << b));
+ rcmd = DiagDirToRoadBits(target_dir) | DiagDirToRoadBits(source_dir);
break;
}
- } else if (block < 5 && !HASBIT(mask, block ^ 2)) {
+ } else if (target_dir < (DiagDirection)5 && !(cur_rb & DiagDirToRoadBits(ReverseDiagDir(target_dir)))) {
/* Continue building on a partial road.
- * Always OK. */
+ * Should be allways OK, so we only generate
+ * the fitting RoadBits */
_grow_town_result = 0;
switch (_patches.town_layout) {
@@ -956,18 +969,17 @@
case TL_3X3_GRID:
case TL_2X2_GRID:
- rcmd = GetTownRoadGridElement(t1, tile);
+ rcmd = GetTownRoadGridElement(t1, tile, target_dir);
break;
case TL_BETTER_ROADS:
case TL_ORIGINAL:
- rcmd = (RoadBits)(ROAD_NW << (block ^ 2));
+ rcmd = DiagDirToRoadBits(ReverseDiagDir(target_dir));
break;
}
} else {
- int i;
- bool allow_house = false;
- TileIndex tmptile2;
+ bool allow_house = false; ///< Value which decides if we want to construct a house
+ TileIndex tmptile2; ///< Yet another dummy tile
/* Reached a tunnel/bridge? Then continue at the other side of it. */
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
@@ -981,13 +993,13 @@
/* Possibly extend the road in a direction.
* Randomize a direction and if it has a road, bail out. */
- i = GB(Random(), 0, 2);
- if (HASBIT(mask, i)) return;
+ target_dir = RandomDiagDir();
+ if (cur_rb & DiagDirToRoadBits(target_dir)) return;
/* This is the tile we will reach if we extend to this direction. */
- tmptile = TILE_ADD(tile, ToTileIndexDiff(_roadblock_tileadd[i]));
-
- /* Don't do it if it reaches to water. */
+ tmptile = AddDiagDirToTileIndex(tile, target_dir);
+
+ /* Don't walk into water. */
if (IsClearWaterTile(tmptile)) return;
switch (_patches.town_layout) {
@@ -999,19 +1011,19 @@
case TL_3X3_GRID: /* Use 2x2 grid afterwards! */
/* Fill gap if house has enougth neighbors */
- tmptile2 = TILE_ADD(tmptile, ToTileIndexDiff(_roadblock_tileadd[i]));
+ tmptile2 = AddDiagDirToTileIndex(tmptile, target_dir);
if (AreNeighborsHouseTiles(tmptile2) && BuildTownHouse(t1, tmptile2)) {
_grow_town_result = -1;
}
case TL_2X2_GRID:
- rcmd = GetTownRoadGridElement(t1, tmptile);
+ rcmd = GetTownRoadGridElement(t1, tmptile, target_dir);
allow_house = (rcmd == ROAD_NONE);
break;
case TL_BETTER_ROADS: /* Use original afterwards! */
/* Fill gap if house has enougth neighbors */
- tmptile2 = TILE_ADD(tmptile, ToTileIndexDiff(_roadblock_tileadd[i]));
+ tmptile2 = AddDiagDirToTileIndex(tmptile, target_dir);
if (AreNeighborsHouseTiles(tmptile2) && BuildTownHouse(t1, tmptile2)) {
_grow_town_result = -1;
}
@@ -1019,11 +1031,11 @@
case TL_ORIGINAL:
/* Allow a house at the edge. 60% chance or
* always ok if no road allowed. */
- allow_house = (!IsRoadAllowedHere(tmptile, i) || CHANCE16(6, 10));
+ rcmd = DiagDirToRoadBits(target_dir);
+ allow_house = (!IsRoadAllowedHere(tmptile, target_dir) || CHANCE16(6, 10));
break;
}
-
if (allow_house) {
/* Build a house, but not if there already is a house there. */
if (!IsTileType(tmptile, MP_HOUSE)) {
@@ -1040,19 +1052,19 @@
}
_grow_town_result = 0;
- rcmd = (RoadBits)(ROAD_NW << i);
}
/* Return if a water tile */
if (IsClearWaterTile(tile)) return;
+ DiagDirection bridge_dir; ///< The direction of a bridge we maybe want to build
/* Determine direction of slope,
* and build a road if not a special slope. */
switch (GetTileSlope(tile, NULL)) {
- case SLOPE_SW: i = DIAGDIR_NE; break;
- case SLOPE_SE: i = DIAGDIR_NW; break;
- case SLOPE_NW: i = DIAGDIR_SE; break;
- case SLOPE_NE: i = DIAGDIR_SW; break;
+ case SLOPE_SW: bridge_dir = DIAGDIR_NE; break;
+ case SLOPE_SE: bridge_dir = DIAGDIR_NW; break;
+ case SLOPE_NW: bridge_dir = DIAGDIR_SE; break;
+ case SLOPE_NE: bridge_dir = DIAGDIR_SW; break;
default:
build_road_and_exit:
@@ -1063,38 +1075,33 @@
}
/* Check if the bridge is in the right direction */
- if ((rcmd == ROAD_X && (i == DIAGDIR_NW || i == DIAGDIR_SE)) ||
- (rcmd == ROAD_Y && (i == DIAGDIR_NE || i == DIAGDIR_SW))) {
- goto build_road_and_exit;
- }
-
- tmptile = tile;
-
- /* Now it contains the direction of the slope */
- j = -11; // max 11 tile long bridges
+ if (!(rcmd & DiagDirToRoadBits(bridge_dir))) goto build_road_and_exit;
+
+ /* We are in the right direction */
+ uint32 bridge_length = 0; ///< This value stores the length of the possible bridge
+ tmptile = tile; ///< Now we use this dummy to store the other waterside
do {
- if (++j == 0)
+ if (bridge_length++ >= 11) {
+ /* Max 11 tile long bridges */
goto build_road_and_exit;
- tmptile = TILE_MASK(tmptile + TileOffsByDiagDir(i));
+ }
+ tmptile = TILE_MASK(tmptile + TileOffsByDiagDir(bridge_dir));
} while (IsClearWaterTile(tmptile));
/* no water tiles in between? */
- if (j == -10)
- goto build_road_and_exit;
-
- /* Quit if it selecting an appropiate bridge type fails a large number of times. */
- j = 22;
- do {
+ if (bridge_length == 1) goto build_road_and_exit;
+
+ for (uint times = 0; times <= 22; times++) {
byte bridge_type = RandomRange(MAX_BRIDGES - 1);
+
/* Can we actually build the bridge? */
if (CmdSucceeded(DoCommand(tile, tmptile, bridge_type | ((0x80 | ROADTYPES_ROAD) << 8), DC_AUTO, CMD_BUILD_BRIDGE))) {
DoCommand(tile, tmptile, bridge_type | ((0x80 | ROADTYPES_ROAD) << 8), DC_EXEC | DC_AUTO, CMD_BUILD_BRIDGE);
- _grow_town_result = -1;
-
- /* obviously, if building any bridge would fail, there is no need to try other bridge-types */
+ _grow_town_result = -1;
return;
}
- } while (--j != 0);
+ }
+ /* Quit if it selecting an appropiate bridge type fails a large number of times. */
}
/** Returns "growth" if a house was built, or no if the build failed.
@@ -1104,7 +1111,10 @@
*/
static int GrowTownAtRoad(Town *t, TileIndex tile)
{
- int block = 5; // special case
+ /* Special case.
+ * @see GrowTownInTile Check the else if
+ */
+ DiagDirection target_dir = (DiagDirection)5; ///< The direction in which we want to extend the town
TILE_ASSERT(tile);
@@ -1127,22 +1137,21 @@
}
do {
- /* Get a bitmask of the road blocks on a tile */
- RoadBits mask = GetTownRoadMask(tile);
+ RoadBits cur_rb = GetTownRoadBits(tile); ///< The RoadBits of the current tile
/* Try to grow the town from this point */
- GrowTownInTile(&tile, mask, block, t);
+ GrowTownInTile(&tile, cur_rb, target_dir, t);
/* Exclude the source position from the bitmask
* and return if no more road blocks available */
- ClrBitT(mask, (block ^ 2));
- if (mask == ROAD_NONE)
+ cur_rb &= ~DiagDirToRoadBits(ReverseDiagDir(target_dir));
+ if (cur_rb == ROAD_NONE)
return _grow_town_result;
/* Select a random bit from the blockmask, walk a step
* and continue the search from there. */
- do block = Random() & 3; while (!HASBIT(mask, block));
- tile += ToTileIndexDiff(_roadblock_tileadd[block]);
+ do target_dir = RandomDiagDir(); while (!(cur_rb & DiagDirToRoadBits(target_dir)));
+ tile = AddDiagDirToTileIndex(tile, target_dir);
if (IsTileType(tile, MP_ROAD)) {
/* Don't allow building over roads of other cities */
@@ -1162,25 +1171,33 @@
return (_grow_town_result == -2);
}
-/** Generate a random road block
+/**
+ * Generate a random road block.
* The probability of a straight road
- * is somewhat higher than a curved. */
+ * is somewhat higher than a curved.
+ *
+ * @return A RoadBits value with 2 bits set
+ */
static RoadBits GenRandomRoadBits()
{
uint32 r = Random();
uint a = GB(r, 0, 2);
uint b = GB(r, 8, 2);
if (a == b) b ^= 2;
- return (RoadBits)((1 << a) + (1 << b));
+ return (RoadBits)((ROAD_NW << a) + (ROAD_NW << b));
}
/** Grow the town
* @Return true if a house was built, or no if the build failed. */
static bool GrowTown(Town *t)
{
- TileIndex tile;
- const TileIndexDiffC *ptr;
- PlayerID old_player;
+
+ /* Let the town be a ghost town
+ * The player wanted it in such a way. Thus there he has it. ;)
+ * Never reached in editor mode. */
+ if (_patches.town_layout == TL_NO_ROADS && _generating_world) {
+ return false;
+ }
static const TileIndexDiffC _town_coord_mod[] = {
{-1, 0},
@@ -1197,22 +1214,17 @@
{ 2, -2},
{ 0, 0}
};
-
- /* Let the town be a ghost town
- * The player wanted it in such a way. Thus there he has it. ;)
- * Never reached in editor mode. */
- if (_patches.town_layout == TL_NO_ROADS && _generating_world) {
- return false;
- }
+ const TileIndexDiffC *ptr;
/* Current player is a town */
- old_player = _current_player;
+ PlayerID old_player = _current_player;
_current_player = OWNER_TOWN;
+ TileIndex tile = t->xy; ///< The tile we are working with ATM
+
/* Find a road that we can base the construction on. */
- tile = t->xy;
for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) {
- if (GetAnyRoadTrackBits(tile, ROADTYPE_ROAD) != 0) {
+ if (GetTownRoadBits(tile) != ROAD_NONE) {
int r = GrowTownAtRoad(t, tile);
_current_player = old_player;
return r != 0;
@@ -1924,7 +1936,8 @@
PlayerID old;
CommandCost r;
- if (GetTileSlope(tile, NULL) != SLOPE_FLAT) return false;
+ /* Statues can be build on slopes, just like houses. Only the steep slopes is a no go. */
+ if (IsSteepSlope(GetTileSlope(tile, NULL))) return false;
if (!IsTileType(tile, MP_HOUSE) &&
!IsTileType(tile, MP_CLEAR) &&
@@ -2303,6 +2316,15 @@
static CommandCost TerraformTile_Town(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
{
+ if (AutoslopeEnabled()) {
+ HouseID house = GetHouseType(tile);
+ HouseSpec *hs = GetHouseSpecs(house);
+
+ /* Here we differ from TTDP by checking TILE_NOT_SLOPED */
+ if (((hs->building_flags & TILE_NOT_SLOPED) == 0) && !IsSteepSlope(tileh_new) &&
+ (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new))) return _price.terraform;
+ }
+
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
}
--- a/src/train.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/train.h Sun Sep 23 07:37:38 2007 +0000
@@ -225,6 +225,16 @@
return v;
}
+/** Tell if we are dealing with the rear end of a multiheaded engine.
+ * @param v Vehicle.
+ * @return True if the engine is the rear part of a dualheaded engine.
+ */
+static inline bool IsRearDualheaded(const Vehicle *v)
+{
+ assert(v->type == VEH_TRAIN);
+ return (IsMultiheaded(v) && !IsTrainEngine(v));
+}
+
/** Get the next real (non-articulated part) vehicle in the consist.
* @param v Vehicle.
* @return Next vehicle in the consist.
@@ -238,6 +248,19 @@
return v->Next();
}
+/** Get the next real (non-articulated part and non rear part of dualheaded engine) vehicle in the consist.
+ * @param v Vehicle.
+ * @return Next vehicle in the consist.
+ */
+static inline Vehicle *GetNextUnit(Vehicle *v)
+{
+ assert(v->type == VEH_TRAIN);
+ v = GetNextVehicle(v);
+ if (v != NULL && IsRearDualheaded(v)) v = v->Next();
+
+ return v;
+}
+
void ConvertOldMultiheadToNew();
void ConnectMultiheadedTrains();
uint CountArticulatedParts(EngineID engine_type);
@@ -273,9 +296,8 @@
WindowClass GetVehicleListWindowClass() const { return WC_TRAINS_LIST; }
void PlayLeaveStationSound() const;
bool IsPrimaryVehicle() const { return IsFrontEngine(this); }
- bool HasFront() const { return true; }
int GetImage(Direction direction) const;
- int GetDisplaySpeed() const { return this->cur_speed * 10 / 16; }
+ int GetDisplaySpeed() const { return this->u.rail.last_speed * 10 / 16; }
int GetDisplayMaxSpeed() const { return this->u.rail.cached_max_speed * 10 / 16; }
Money GetRunningCost() const;
bool IsInDepot() const { return CheckTrainInDepot(this, false) != -1; }
--- a/src/train_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/train_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -96,6 +96,9 @@
}
if (v->u.rail.cached_power != total_power || v->u.rail.cached_max_te != max_te) {
+ /* If it has no power (no catenary), stop the train */
+ if (total_power == 0) v->vehstatus |= VS_STOPPED;
+
v->u.rail.cached_power = total_power;
v->u.rail.cached_max_te = max_te;
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
@@ -302,7 +305,7 @@
static int GetTrainAcceleration(Vehicle *v, bool mode)
{
int max_speed = 2000;
- int speed = v->GetDisplaySpeed(); //[mph]
+ int speed = v->cur_speed * 10 / 16; // km-ish/h -> mp/h
int curvecount[2] = {0, 0};
/*first find the curve speed limit */
@@ -512,12 +515,12 @@
const RailVehicleInfo *rvi = RailVehInfo(engine);
CommandCost value((GetEngineProperty(engine, 0x17, rvi->base_cost) * _price.build_railwagon) >> 8);
- uint num_vehicles = 1 + CountArticulatedParts(engine);
+ uint num_vehicles = 1 + CountArticulatedParts(engine, false);
if (!(flags & DC_QUERY_COST)) {
- Vehicle *vl[11]; // Allow for wagon and upto 10 artic parts.
-
- memset(&vl, 0, sizeof(vl));
+ /* Allow for the wagon and the articulated parts, plus one to "terminate" the list. */
+ Vehicle **vl = (Vehicle**)alloca(sizeof(*vl) * (num_vehicles + 1));
+ memset(vl, 0, sizeof(*vl) * (num_vehicles + 1));
if (!Vehicle::AllocateList(vl, num_vehicles))
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
@@ -680,12 +683,12 @@
uint num_vehicles =
(rvi->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1) +
- CountArticulatedParts(p1);
+ CountArticulatedParts(p1, false);
if (!(flags & DC_QUERY_COST)) {
- Vehicle *vl[12]; // Allow for upto 10 artic parts and dual-heads
-
- memset(&vl, 0, sizeof(vl));
+ /* Allow for the dual-heads and the articulated parts, plus one to "terminate" the list. */
+ Vehicle **vl = (Vehicle**)alloca(sizeof(*vl) * (num_vehicles + 1));
+ memset(vl, 0, sizeof(*vl) * (num_vehicles + 1));
if (!Vehicle::AllocateList(vl, num_vehicles))
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
@@ -799,7 +802,7 @@
* engines with more articulated parts than before works correctly.
*
* Also skip counting rear ends of multiheaded engines */
- if (!IsArticulatedPart(v) && !(!IsTrainEngine(v) && IsMultiheaded(v))) count++;
+ if (!IsArticulatedPart(v) && !IsRearDualheaded(v)) count++;
if (v->u.rail.track != TRACK_BIT_DEPOT || v->tile != tile ||
(IsFrontEngine(v) && needs_to_be_stopped && !(v->vehstatus & VS_STOPPED))) {
return -1;
@@ -954,7 +957,7 @@
dst_head = NULL;
}
- if (IsMultiheaded(src) && !IsTrainEngine(src)) return_cmd_error(STR_REAR_ENGINE_FOLLOW_FRONT_ERROR);
+ if (IsRearDualheaded(src)) return_cmd_error(STR_REAR_ENGINE_FOLLOW_FRONT_ERROR);
/* when moving all wagons, we can't have the same src_head and dst_head */
if (HASBIT(p2, 0) && src_head == dst_head) return CommandCost();
@@ -1026,10 +1029,11 @@
/* If we move the front Engine and if the second vehicle is not an engine
add the whole vehicle to the DEFAULT_GROUP */
if (IsFrontEngine(src) && !IsDefaultGroupID(src->group_id)) {
- const Vehicle *v = GetNextVehicle(src);
-
- if (v != NULL && !IsTrainEngine(v)) {
- DoCommand(tile, DEFAULT_GROUP, v->index, flags, CMD_ADD_VEHICLE_GROUP);
+ Vehicle *v = GetNextVehicle(src);
+
+ if (v != NULL && IsTrainEngine(v)) {
+ v->group_id = src->group_id;
+ src->group_id = DEFAULT_GROUP;
}
}
@@ -1080,6 +1084,7 @@
/* the vehicle was previously a loco. need to free the order list and delete vehicle windows etc. */
DeleteWindowById(WC_VEHICLE_VIEW, src->index);
DeleteVehicleOrders(src);
+ RemoveVehicleFromGroup(src);
}
if (IsFrontEngine(src) || IsFreeWagon(src)) {
@@ -1222,7 +1227,7 @@
return_cmd_error(STR_881A_TRAINS_CAN_ONLY_BE_ALTERED);
}
- if (IsMultiheaded(v) && !IsTrainEngine(v)) return_cmd_error(STR_REAR_ENGINE_FOLLOW_FRONT_ERROR);
+ if (IsRearDualheaded(v)) return_cmd_error(STR_REAR_ENGINE_FOLLOW_FRONT_ERROR);
if (flags & DC_EXEC) {
if (v == first && IsFrontEngine(first)) {
@@ -1269,6 +1274,7 @@
new_f->cur_order_index = first->cur_order_index;
new_f->orders = first->orders;
new_f->num_orders = first->num_orders;
+ new_f->group_id = first->group_id;
if (first->prev_shared != NULL) {
first->prev_shared->next_shared = new_f;
@@ -1278,8 +1284,6 @@
if (first->next_shared != NULL) {
first->next_shared->prev_shared = new_f;
new_f->next_shared = first->next_shared;
- } else {
- RemoveVehicleFromGroup(v);
}
/*
@@ -1290,6 +1294,7 @@
first->orders = NULL;
first->prev_shared = NULL;
first->next_shared = NULL;
+ first->group_id = DEFAULT_GROUP;
/* If we deleted a window then open a new one for the 'new' train */
if (IsLocalPlayer() && w != NULL) ShowVehicleViewWindow(new_f);
@@ -1374,7 +1379,6 @@
first = UnlinkWagon(v, first);
DeleteDepotHighlightOfVehicle(v);
delete v;
- RemoveVehicleFromGroup(v);
}
}
@@ -1889,6 +1893,7 @@
* Now we change the setting to apply the new one and let the vehicle head for the same depot.
* Note: the if is (true for requesting service == true for ordered to stop in depot) */
if (flags & DC_EXEC) {
+ CLRBIT(v->current_order.flags, OFB_PART_OF_ORDERS);
TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
--- a/src/train_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/train_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -152,32 +152,21 @@
}
}
-
-static void DrawTrainDetailsWindow(Window *w)
+int GetTrainDetailsWndVScroll(VehicleID veh_id, byte det_tab)
{
- byte det_tab = WP(w, traindetails_d).tab;
- const Vehicle *v;
- const Vehicle *u;
AcceptedCargo act_cargo;
AcceptedCargo max_cargo;
- int num;
- int x;
- int y;
- int sel;
+ int num = 0;
- num = 0;
- u = v = GetVehicle(w->window_number);
if (det_tab == 3) { // Total cargo tab
- for (CargoID i = 0; i < lengthof(act_cargo); i++) {
- act_cargo[i] = 0;
- max_cargo[i] = 0;
+ memset(max_cargo, 0, sizeof(max_cargo));
+ memset(act_cargo, 0, sizeof(act_cargo));
+
+ for (const Vehicle *v = GetVehicle(veh_id) ; v != NULL ; v = v->Next()) {
+ act_cargo[v->cargo_type] += v->cargo.Count();
+ max_cargo[v->cargo_type] += v->cargo_cap;
}
- do {
- act_cargo[u->cargo_type] += u->cargo.Count();
- max_cargo[u->cargo_type] += u->cargo_cap;
- } while ((u = u->Next()) != NULL);
-
/* Set scroll-amount seperately from counting, as to not compute num double
* for more carriages of the same type
*/
@@ -186,60 +175,22 @@
}
num++; // needs one more because first line is description string
} else {
- do {
- if (!IsArticulatedPart(u) || u->cargo_cap != 0) num++;
- } while ((u = u->Next()) != NULL);
+ for (const Vehicle *v = GetVehicle(veh_id) ; v != NULL ; v = v->Next()) {
+ if (!IsArticulatedPart(v) || v->cargo_cap != 0) num++;
+ }
}
- SetVScrollCount(w, num);
-
- DisableWindowWidget(w, det_tab + 9);
- SetWindowWidgetDisabledState(w, 2, v->owner != _local_player);
-
- /* disable service-scroller when interval is set to disabled */
- SetWindowWidgetDisabledState(w, 6, !_patches.servint_trains);
- SetWindowWidgetDisabledState(w, 7, !_patches.servint_trains);
-
- SetDParam(0, v->index);
- DrawWindowWidgets(w);
-
- SetDParam(1, v->age / 366);
-
- x = 2;
-
- SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
- SetDParam(2, v->max_age / 366);
- SetDParam(3, v->GetDisplayRunningCost());
- DrawString(x, 15, STR_885D_AGE_RUNNING_COST_YR, 0);
+ return num;
+}
- SetDParam(2, v->GetDisplayMaxSpeed());
- SetDParam(1, v->u.rail.cached_power);
- SetDParam(0, v->u.rail.cached_weight);
- SetDParam(3, v->u.rail.cached_max_te / 1000);
- DrawString(x, 25, (_patches.realistic_acceleration && v->u.rail.railtype != RAILTYPE_MAGLEV) ?
- STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :
- STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED, 0);
-
- SetDParam(0, v->profit_this_year);
- SetDParam(1, v->profit_last_year);
- DrawString(x, 35, STR_885F_PROFIT_THIS_YEAR_LAST_YEAR, 0);
-
- SetDParam(0, 100 * (v->reliability>>8) >> 8);
- SetDParam(1, v->breakdowns_since_last_service);
- DrawString(x, 45, STR_8860_RELIABILITY_BREAKDOWNS, 0);
-
- SetDParam(0, v->service_interval);
- SetDParam(1, v->date_of_last_service);
- DrawString(x + 11, 57 + (w->vscroll.cap * 14), _patches.servint_ispercent ? STR_SERVICING_INTERVAL_PERCENT : STR_883C_SERVICING_INTERVAL_DAYS, 0);
-
- y = 57;
- sel = w->vscroll.pos;
-
+void DrawTrainDetails(const Vehicle *v, int x, int y, int vscroll_pos, uint16 vscroll_cap, byte det_tab)
+{
/* draw the first 3 details tabs */
if (det_tab != 3) {
+ const Vehicle *u = v;
x = 1;
for (;;) {
- if (--sel < 0 && sel >= -w->vscroll.cap) {
+ if (--vscroll_pos < 0 && vscroll_pos >= -vscroll_cap) {
int dx = 0;
int px;
int py;
@@ -277,10 +228,21 @@
if (v == NULL) return;
}
} else {
+ AcceptedCargo act_cargo;
+ AcceptedCargo max_cargo;
+
+ memset(max_cargo, 0, sizeof(max_cargo));
+ memset(act_cargo, 0, sizeof(act_cargo));
+
+ for (const Vehicle *u = v; u != NULL ; u = u->Next()) {
+ act_cargo[u->cargo_type] += u->cargo.Count();
+ max_cargo[u->cargo_type] += u->cargo_cap;
+ }
+
/* draw total cargo tab */
DrawString(x, y + 2, STR_013F_TOTAL_CAPACITY_TEXT, 0);
for (CargoID i = 0; i < NUM_CARGO; i++) {
- if (max_cargo[i] > 0 && --sel < 0 && sel > -w->vscroll.cap) {
+ if (max_cargo[i] > 0 && --vscroll_pos < 0 && vscroll_pos > -vscroll_cap) {
y += 14;
SetDParam(0, i); // {CARGO} #1
SetDParam(1, act_cargo[i]); // {CARGO} #2
@@ -294,114 +256,3 @@
DrawString(x, y + 15, STR_FEEDER_CARGO_VALUE, 0);
}
}
-
-static void TrainDetailsWndProc(Window *w, WindowEvent *e)
-{
- switch (e->event) {
- case WE_PAINT:
- DrawTrainDetailsWindow(w);
- break;
- case WE_CLICK: {
- int mod;
- const Vehicle *v;
- switch (e->we.click.widget) {
- case 2: /* name train */
- v = GetVehicle(w->window_number);
- SetDParam(0, v->index);
- ShowQueryString(STR_VEHICLE_NAME, STR_8865_NAME_TRAIN, 31, 150, w, CS_ALPHANUMERAL);
- break;
- case 6: /* inc serv interval */
- mod = _ctrl_pressed? 5 : 10;
- goto do_change_service_int;
-
- case 7: /* dec serv interval */
- mod = _ctrl_pressed? -5 : -10;
-do_change_service_int:
- v = GetVehicle(w->window_number);
-
- mod = GetServiceIntervalClamped(mod + v->service_interval);
- if (mod == v->service_interval) return;
-
- DoCommandP(v->tile, v->index, mod, NULL, CMD_CHANGE_SERVICE_INT | CMD_MSG(STR_018A_CAN_T_CHANGE_SERVICING));
- break;
- /* details buttons*/
- case 9: // Cargo
- case 10: // Information
- case 11: // Capacities
- case 12: // Total cargo
- EnableWindowWidget(w, 9);
- EnableWindowWidget(w, 10);
- EnableWindowWidget(w, 11);
- EnableWindowWidget(w, 12);
- EnableWindowWidget(w, e->we.click.widget);
- WP(w,traindetails_d).tab = e->we.click.widget - 9;
- SetWindowDirty(w);
- break;
- }
- } break;
-
- case WE_ON_EDIT_TEXT:
- if (e->we.edittext.str[0] != '\0') {
- _cmd_text = e->we.edittext.str;
- DoCommandP(0, w->window_number, 0, NULL,
- CMD_NAME_VEHICLE | CMD_MSG(STR_8866_CAN_T_NAME_TRAIN));
- }
- break;
-
- case WE_RESIZE:
- if (e->we.sizing.diff.x != 0) ResizeButtons(w, 9, 12);
- if (e->we.sizing.diff.y == 0) break;
-
- w->vscroll.cap += e->we.sizing.diff.y / 14;
- w->widget[4].data = (w->vscroll.cap << 8) + 1;
- break;
- }
-}
-
-static const Widget _train_details_widgets[] = {
-{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 329, 0, 13, STR_8802_DETAILS, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{ WWT_PUSHTXTBTN, RESIZE_LR, 14, 330, 369, 0, 13, STR_01AA_NAME, STR_8867_NAME_TRAIN},
-{ WWT_PANEL, RESIZE_RIGHT, 14, 0, 369, 14, 55, 0x0, STR_NULL},
-{ WWT_MATRIX, RESIZE_RB, 14, 0, 357, 56, 139, 0x601, STR_NULL},
-{ WWT_SCROLLBAR, RESIZE_LRB, 14, 358, 369, 56, 139, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST},
-{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 10, 140, 145, STR_0188, STR_884D_INCREASE_SERVICING_INTERVAL},
-{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 10, 146, 151, STR_0189, STR_884E_DECREASE_SERVICING_INTERVAL},
-{ WWT_PANEL, RESIZE_RTB, 14, 11, 369, 140, 151, 0x0, STR_NULL},
-{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 89, 152, 163, STR_013C_CARGO, STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED},
-{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 90, 178, 152, 163, STR_013D_INFORMATION, STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES},
-{ WWT_PUSHTXTBTN, RESIZE_TB, 14, 179, 268, 152, 163, STR_013E_CAPACITIES, STR_8851_SHOW_CAPACITIES_OF_EACH},
-{ WWT_PUSHTXTBTN, RESIZE_RTB, 14, 269, 357, 152, 163, STR_013E_TOTAL_CARGO, STR_8852_SHOW_TOTAL_CARGO},
-{ WWT_RESIZEBOX, RESIZE_LRTB, 14, 358, 369, 152, 163, 0x0, STR_RESIZE_BUTTON},
-{ WIDGETS_END},
-};
-
-
-static const WindowDesc _train_details_desc = {
- WDP_AUTO, WDP_AUTO, 370, 164, 370, 164,
- WC_VEHICLE_DETAILS,WC_VEHICLE_VIEW,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE,
- _train_details_widgets,
- TrainDetailsWndProc
-};
-
-
-void ShowTrainDetailsWindow(const Vehicle *v)
-{
- Window *w;
- VehicleID veh = v->index;
-
- DeleteWindowById(WC_VEHICLE_ORDERS, veh);
- DeleteWindowById(WC_VEHICLE_DETAILS, veh);
-
- w = AllocateWindowDescFront(&_train_details_desc, veh);
-
- w->caption_color = v->owner;
- w->vscroll.cap = 6;
- w->widget[4].data = (w->vscroll.cap << 8) + 1;
-
- w->resize.step_height = 14;
- w->resize.height = w->height - 14 * 2; /* Minimum of 4 wagons in the display */
-
- WP(w,traindetails_d).tab = 0;
-}
--- a/src/tree_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/tree_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -21,12 +21,28 @@
#include "variables.h"
#include "genworld.h"
+/**
+ * List of tree placer algorithm.
+ *
+ * This enumeration defines all possible tree placer algorithm in the game.
+ */
enum TreePlacer {
- TP_NONE,
- TP_ORIGINAL,
- TP_IMPROVED,
+ TP_NONE, ///< No tree placer algorithm
+ TP_ORIGINAL, ///< The original algorithm
+ TP_IMPROVED, ///< A 'improved' algorithm
};
+/**
+ * Get a random TreeType for the given tile based on a given seed
+ *
+ * This function returns a random TreeType which can be placed on the given tile.
+ * The seed for randomness must be less or equal 256, use #GB on the value of Random()
+ * to get such a value.
+ *
+ * @param tile The tile to get a random TreeType from
+ * @param seed The seed for randomness, must be less or equal 256
+ * @return The random tree type
+ */
static TreeType GetRandomTreeType(TileIndex tile, uint seed)
{
switch (_opt.landscape) {
@@ -48,6 +64,15 @@
}
}
+/**
+ * Make a random tree tile of the given tile
+ *
+ * Create a new tree-tile for the given tile. The second parameter is used for
+ * randomness like type and number of trees.
+ *
+ * @param tile The tile to make a tree-tile from
+ * @param r The randomness value from a Random() value
+ */
static void PlaceTree(TileIndex tile, uint32 r)
{
TreeType tree = GetRandomTreeType(tile, GB(r, 24, 8));
@@ -66,6 +91,15 @@
}
}
+/**
+ * Place some amount of trees around a given tile.
+ *
+ * This function adds some trees around a given tile. As this function use
+ * the Random() call it depends on the random how many trees are actually placed
+ * around the given tile.
+ *
+ * @param tile The center of the trees to add
+ */
static void DoPlaceMoreTrees(TileIndex tile)
{
uint i;
@@ -87,6 +121,11 @@
}
}
+/**
+ * Place more trees on the map.
+ *
+ * This function add more trees to the map.
+ */
static void PlaceMoreTrees()
{
uint i = ScaleByMapSize(GB(Random(), 0, 5) + 25);
@@ -97,7 +136,12 @@
/**
* Place a tree at the same height as an existing tree.
- * This gives cool effects to the map.
+ *
+ * Add a new tree around the given tile which is at the same
+ * height or at some offset (2 units) of it.
+ *
+ * @param tile The base tile to add a new tree somewhere around
+ * @param height The height (like the one from the tile)
*/
void PlaceTreeAtSameHeight(TileIndex tile, uint height)
{
@@ -127,6 +171,11 @@
}
}
+/**
+ * Place some trees randomly
+ *
+ * This function just place some trees randomly on the map.
+ */
void PlaceTreesRandomly()
{
uint i, j, ht;
@@ -183,6 +232,12 @@
}
}
+/**
+ * Place new trees.
+ *
+ * This function takes care of the selected tree placer algorithm and
+ * place randomly the trees for a new game.
+ */
void GenerateTrees()
{
uint i, total;
@@ -404,7 +459,7 @@
if (tep == NULL) break;
- AddSortableSpriteToDraw(tep->image, tep->pal, ti->x + tep->x, ti->y + tep->y, 5, 5, 0x10, z, HASBIT(_transparent_opt, TO_TREES));
+ AddSortableSpriteToDraw(tep->image, tep->pal, ti->x + tep->x, ti->y + tep->y, 16 - tep->x, 16 - tep->y, 0x30, z, HASBIT(_transparent_opt, TO_TREES), -tep->x, -tep->y);
tep->image = 0;
}
}
--- a/src/tree_map.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/tree_map.h Sun Sep 23 07:37:38 2007 +0000
@@ -7,54 +7,123 @@
#include "macros.h"
+/**
+ * List of tree types along all landscape types.
+ *
+ * This enumeration contains a list of the different tree types along
+ * all landscape types. The values for the enumerations may be used for
+ * offsets from the grfs files. These points to the start of
+ * the tree list for a landscape. See the TREE_COUNT_* enumerations
+ * for the amount of different trees for a specific landscape.
+ *
+ * @note TREE_INVALID may be 0xFF according to the coding style, not -1 (Progman)
+ */
enum TreeType {
- TREE_INVALID = -1,
- TREE_TEMPERATE = 0,
- TREE_SUB_ARCTIC = 12,
- TREE_RAINFOREST = 20,
- TREE_CACTUS = 27,
- TREE_SUB_TROPICAL = 28,
- TREE_TOYLAND = 32
+ TREE_INVALID = -1, ///< An invalid tree
+ TREE_TEMPERATE = 0x00, ///< temperate tree
+ TREE_SUB_ARCTIC = 0x0C, ///< tree on a sub_arctic landscape
+ TREE_RAINFOREST = 0x14, ///< tree on the 'green part' on a sub-tropical map
+ TREE_CACTUS = 0x1B, ///< a catus for the 'desert part' on a sub-tropical map
+ TREE_SUB_TROPICAL = 0x1C, ///< tree on a sub-tropical map, non-rainforest, non-desert
+ TREE_TOYLAND = 0x20, ///< tree on a toyland map
};
+/**
+ * Counts the number of treetypes for each landscape.
+ *
+ * This list contains the counts of different treetypes for each landscape. This list contains
+ * 5 entries instead of 4 (as there are only 4 landscape types) as the sub tropic landscape
+ * got two types of area, one for normal trees and one only for cacti.
+ */
enum {
- TREE_COUNT_TEMPERATE = TREE_SUB_ARCTIC - TREE_TEMPERATE,
- TREE_COUNT_SUB_ARCTIC = TREE_RAINFOREST - TREE_SUB_ARCTIC,
- TREE_COUNT_RAINFOREST = TREE_CACTUS - TREE_RAINFOREST,
- TREE_COUNT_SUB_TROPICAL = TREE_SUB_TROPICAL - TREE_CACTUS,
- TREE_COUNT_TOYLAND = 9
+ TREE_COUNT_TEMPERATE = TREE_SUB_ARCTIC - TREE_TEMPERATE, ///< number of treetypes on a temperate map
+ TREE_COUNT_SUB_ARCTIC = TREE_RAINFOREST - TREE_SUB_ARCTIC, ///< number of treetypes on a sub arctic map
+ TREE_COUNT_RAINFOREST = TREE_CACTUS - TREE_RAINFOREST, ///< number of treetypes for the 'green part' of a sub tropic map
+ TREE_COUNT_SUB_TROPICAL = TREE_SUB_TROPICAL - TREE_CACTUS, ///< number of treetypes for the 'desert part' of a sub tropic map
+ TREE_COUNT_TOYLAND = 9 ///< number of treetypes on a toyland map
};
-/* ground type, m2 bits 4...5
- * valid densities (bits 6...7) in comments after the enum */
+/**
+ * Enumeration for ground types of tiles with trees.
+ *
+ * This enumeration defines the ground types for tiles with trees on it.
+ */
enum TreeGround {
- TREE_GROUND_GRASS = 0, ///< 0
- TREE_GROUND_ROUGH = 1, ///< 0
- TREE_GROUND_SNOW_DESERT = 2 ///< 0-3 for snow, 3 for desert
+ TREE_GROUND_GRASS = 0, ///< normal grass
+ TREE_GROUND_ROUGH = 1, ///< some rough tile
+ TREE_GROUND_SNOW_DESERT = 2 ///< a desert or snow tile, depend on landscape
};
+/**
+ * Returns the treetype of a tile.
+ *
+ * This function returns the treetype of a given tile. As there are more
+ * possible treetypes for a tile in a game as the enumeration #TreeType defines
+ * this function may be return a value which isn't catch by an entry of the
+ * enumeration #TreeType. But there is no problem known about it.
+ *
+ * @param t The tile to get the treetype from
+ * @return The treetype of the given tile with trees
+ * @pre Tile t must be of type MP_TREES
+ */
static inline TreeType GetTreeType(TileIndex t)
{
assert(IsTileType(t, MP_TREES));
return (TreeType)_m[t].m3;
}
-
+/**
+ * Returns the groundtype for tree tiles.
+ *
+ * This function returns the groundtype of a tile with trees.
+ *
+ * @param t The tile to get the groundtype from
+ * @return The groundtype of the tile
+ * @pre Tile must be of type MP_TREES
+ */
static inline TreeGround GetTreeGround(TileIndex t)
{
assert(IsTileType(t, MP_TREES));
return (TreeGround)GB(_m[t].m2, 4, 2);
}
-
+/**
+ * Returns the 'density' of a tile with trees.
+ *
+ * This function returns the density of a tile which got trees. Note
+ * that this value doesn't count the number of trees on a tile, use
+ * #GetTreeCount instead. This function instead returns some kind of
+ * groundtype of the tile. As the map-array is finite in size and
+ * the informations about the trees must be saved somehow other
+ * informations about a tile must be saved somewhere encoded in the
+ * tile. So this function returns the density of a tile for sub arctic
+ * and sub tropical games. This means for sub arctic the type of snowline
+ * (0 to 3 for all 4 types of snowtiles) and for sub tropical the value
+ * 3 for a desert (and 0 for non-desert). The functionname is not read as
+ * "get the tree density of a tile" but "get the density of a tile which got trees".
+ *
+ * @param t The tile to get the 'density'
+ * @pre Tile must be of type MP_TREES
+ * @see GetTreeCount
+ */
static inline uint GetTreeDensity(TileIndex t)
{
assert(IsTileType(t, MP_TREES));
return GB(_m[t].m2, 6, 2);
}
-
+/**
+ * Set the density and ground type of a tile with trees.
+ *
+ * This functions saves the ground type and the density which belongs to it
+ * for a given tile.
+ *
+ * @param t The tile to set the density and ground type
+ * @param g The ground type to save
+ * @param d The density to save with
+ * @pre Tile must be of type MP_TREES
+ */
static inline void SetTreeGroundDensity(TileIndex t, TreeGround g, uint d)
{
assert(IsTileType(t, MP_TREES)); // XXX incomplete
@@ -62,64 +131,157 @@
SB(_m[t].m2, 6, 2, d);
}
-
+/**
+ * Returns the number of trees on a tile.
+ *
+ * This function returns the number of trees of a tile (1-4).
+ * The tile must be contains at least one tree or be more specific: it must be
+ * of type MP_TREES.
+ *
+ * @param t The index to get the number of trees
+ * @return The number of trees (1-4)
+ * @pre Tile must be of type MP_TREES
+ */
static inline uint GetTreeCount(TileIndex t)
{
assert(IsTileType(t, MP_TREES));
return GB(_m[t].m5, 6, 2);
}
+/**
+ * Add a amount to the tree-count value of a tile with trees.
+ *
+ * This function add a value to the tree-count value of a tile. This
+ * value may be negative to reduce the tree-counter. If the resulting
+ * value reach 0 it doesn't get converted to a "normal" tile.
+ *
+ * @param t The tile to change the tree amount
+ * @param c The value to add (or reduce) on the tree-count value
+ * @pre Tile must be of type MP_TREES
+ */
static inline void AddTreeCount(TileIndex t, int c)
{
assert(IsTileType(t, MP_TREES)); // XXX incomplete
_m[t].m5 += c << 6;
}
+/**
+ * Sets the tree amount of a tile.
+ *
+ * This function directly sets the amount of trees of a tile.
+ *
+ * @param t The tile to set the amount of trees
+ * @param c The number of trees
+ * @pre Tile must be of type MP_TREES
+ */
static inline void SetTreeCount(TileIndex t, uint c)
{
assert(IsTileType(t, MP_TREES)); // XXX incomplete
SB(_m[t].m5, 6, 2, c);
}
-
+/**
+ * Returns the tree growth status.
+ *
+ * This function returns the tree growth status of a tile with trees.
+ *
+ * @param t The tile to get the tree growth status
+ * @return The tree growth status
+ * @pre Tile must be of type MP_TREES
+ */
static inline uint GetTreeGrowth(TileIndex t)
{
assert(IsTileType(t, MP_TREES));
return GB(_m[t].m5, 0, 3);
}
+/**
+ * Add a value to the tree growth status.
+ *
+ * This function adds a value to the tree grow status of a tile.
+ *
+ * @param t The tile to add the value on
+ * @param a The value to add on the tree growth status
+ * @pre Tile must be of type MP_TREES
+ */
static inline void AddTreeGrowth(TileIndex t, int a)
{
assert(IsTileType(t, MP_TREES)); // XXX incomplete
_m[t].m5 += a;
}
+/**
+ * Sets the tree growth status of a tile.
+ *
+ * This function sets the tree growth status of a tile directly with
+ * the given value.
+ *
+ * @param t The tile to change the tree growth status
+ * @param g The new value
+ * @pre Tile must be of type MP_TREES
+ */
static inline void SetTreeGrowth(TileIndex t, uint g)
{
assert(IsTileType(t, MP_TREES)); // XXX incomplete
SB(_m[t].m5, 0, 3, g);
}
-
+/**
+ * Get the tick counter of a tree tile.
+ *
+ * Returns the saved tick counter of a given tile.
+ *
+ * @param t The tile to get the counter value from
+ * @pre Tile must be of type MP_TREES
+ */
static inline uint GetTreeCounter(TileIndex t)
{
assert(IsTileType(t, MP_TREES));
return GB(_m[t].m2, 0, 4);
}
+/**
+ * Add a value on the tick counter of a tree-tile
+ *
+ * This function adds a value on the tick counter of a tree-tile.
+ *
+ * @param t The tile to add the value on
+ * @param a The value to add on the tick counter
+ * @pre Tile must be of type MP_TREES
+ */
static inline void AddTreeCounter(TileIndex t, int a)
{
assert(IsTileType(t, MP_TREES)); // XXX incomplete
_m[t].m2 += a;
}
+/**
+ * Set the tick counter for a tree-tile
+ *
+ * This function sets directly the tick counter for a tree-tile.
+ *
+ * @param t The tile to set the tick counter
+ * @param c The new tick counter value
+ * @pre Tile must be of type MP_TREES
+ */
static inline void SetTreeCounter(TileIndex t, uint c)
{
assert(IsTileType(t, MP_TREES)); // XXX incomplete
SB(_m[t].m2, 0, 4, c);
}
-
+/**
+ * Make a tree-tile.
+ *
+ * This functions change the tile to a tile with trees and all informations which belongs to it.
+ *
+ * @param t The tile to make a tree-tile from
+ * @param type The type of the tree
+ * @param set the number of trees
+ * @param growth the growth status
+ * @param ground the ground type
+ * @param density the density (not the number of trees)
+ */
static inline void MakeTree(TileIndex t, TreeType type, uint count, uint growth, TreeGround ground, uint density)
{
SetTileType(t, MP_TREES);
--- a/src/tunnelbridge_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/tunnelbridge_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -32,6 +32,7 @@
#include "yapf/yapf.h"
#include "date.h"
#include "newgrf_sound.h"
+#include "autoslope.h"
#include "table/bridge_land.h"
@@ -530,17 +531,29 @@
/* slope of end tile must be complementary to the slope of the start tile */
if (end_tileh != ComplementSlope(start_tileh)) {
- /* Some (rail) track bits might be terraformed into the correct direction,
- * but that would still leave tracks on foundation. Therefor excavation will
- * always fail for rail tiles. On the other hand, for road tiles it might
- * succeed when there is only one road bit on the tile, but then that road
- * bit is removed leaving a clear tile.
- * This therefor preserves the behaviour that half road tiles are always removable.
+ /*
+ * A lot of things can be autosloped, but then there is still a structure with
+ * on top of a tunnel entrance which is bad. Therefor we disallow those.
+ * Furthermore half road bits (not tram bits) can always be removed, so we
+ * need to preserve that behaviour here too.
*/
- if (IsTileType(end_tile, MP_RAILWAY)) return_cmd_error(STR_1008_MUST_REMOVE_RAILROAD_TRACK);
+ switch (GetTileType(end_tile)) {
+ default: return_cmd_error(STR_5005_UNABLE_TO_EXCAVATE_LAND);
- ret = DoCommand(end_tile, end_tileh & start_tileh, 0, flags, CMD_TERRAFORM_LAND);
- if (CmdFailed(ret)) return_cmd_error(STR_5005_UNABLE_TO_EXCAVATE_LAND);
+ /* Tiles that can be (safely) "auto" terraformed for tunnels */
+ case MP_ROAD:
+ if (GetRoadTileType(end_tile) != ROAD_TILE_NORMAL || // Depots and crossings can't be removed
+ (GetRoadTypes(end_tile) & ROADTYPES_TRAMHWAY) != 0 || // Half tram bits must not be removed
+ COUNTBITS(GetRoadBits(end_tile, ROADTYPE_ROAD)) > 1) { // Non-half road bits must not be removed either
+ return_cmd_error(STR_5005_UNABLE_TO_EXCAVATE_LAND);
+ }
+ /* FALL THROUGH */
+ case MP_CLEAR:
+ case MP_TREES:
+ ret = DoCommand(end_tile, end_tileh & start_tileh, 0, flags, CMD_TERRAFORM_LAND);
+ if (CmdFailed(ret)) return_cmd_error(STR_5005_UNABLE_TO_EXCAVATE_LAND);
+ break;
+ }
} else {
ret = DoCommand(end_tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) return ret;
@@ -748,68 +761,67 @@
*/
CommandCost DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
{
- TileIndex endtile;
-
if (IsTunnel(tile) && GetTunnelTransportType(tile) == TRANSPORT_RAIL) {
uint length;
-
- if (!CheckTileOwnership(tile)) return CMD_ERROR;
-
- if (GetRailType(tile) == totype) return CMD_ERROR;
+ TileIndex endtile;
- /* 'hidden' elrails can't be downgraded to normal rail when elrails are disabled */
- if (_patches.disable_elrails && totype == RAILTYPE_RAIL && GetRailType(tile) == RAILTYPE_ELECTRIC) return CMD_ERROR;
-
- endtile = CheckTunnelBusy(tile, &length);
- if (endtile == INVALID_TILE) return CMD_ERROR;
+ /* If not coverting rail <-> el. rail, any vehicle cannot be in tunnel */
+ if (!IsCompatibleRail(GetRailType(tile), totype)) {
+ endtile = CheckTunnelBusy(tile, &length);
+ if (endtile == INVALID_TILE) return CMD_ERROR;
+ } else {
+ endtile = GetOtherTunnelEnd(tile);
+ length = DistanceManhattan(tile, endtile);
+ }
if (exec) {
- Track track;
SetRailType(tile, totype);
SetRailType(endtile, totype);
MarkTileDirtyByTile(tile);
MarkTileDirtyByTile(endtile);
- track = AxisToTrack(DiagDirToAxis(GetTunnelDirection(tile)));
+ Track track = AxisToTrack(DiagDirToAxis(GetTunnelDirection(tile)));
+
YapfNotifyTrackLayoutChange(tile, track);
YapfNotifyTrackLayoutChange(endtile, track);
+
+ VehicleFromPos(tile, &tile, UpdateTrainPowerProc);
+ VehicleFromPos(endtile, &endtile, UpdateTrainPowerProc);
}
- return CommandCost((length + 1) * (_price.build_rail / 2));
+
+ return CommandCost((length + 1) * (_price.build_rail >> 1));
} else if (IsBridge(tile) && GetBridgeTransportType(tile) == TRANSPORT_RAIL) {
-
- if (!CheckTileOwnership(tile)) return CMD_ERROR;
-
- endtile = GetOtherBridgeEnd(tile);
+ TileIndex endtile = GetOtherBridgeEnd(tile);
byte bridge_height = GetBridgeHeight(tile);
- if (FindVehicleOnTileZ(tile, bridge_height) != NULL ||
+ if (!IsCompatibleRail(GetRailType(tile), totype) &&
+ (FindVehicleOnTileZ(tile, bridge_height) != NULL ||
FindVehicleOnTileZ(endtile, bridge_height) != NULL ||
- IsVehicleOnBridge(tile, endtile, bridge_height)) {
+ IsVehicleOnBridge(tile, endtile, bridge_height))) {
return CMD_ERROR;
}
- if (GetRailType(tile) == totype) return CMD_ERROR;
-
if (exec) {
- TileIndexDiff delta;
- Track track;
-
SetRailType(tile, totype);
SetRailType(endtile, totype);
MarkTileDirtyByTile(tile);
MarkTileDirtyByTile(endtile);
- track = AxisToTrack(DiagDirToAxis(GetBridgeRampDirection(tile)));
+ Track track = AxisToTrack(DiagDirToAxis(GetBridgeRampDirection(tile)));
+ TileIndexDiff delta = TileOffsByDiagDir(GetBridgeRampDirection(tile));
+
YapfNotifyTrackLayoutChange(tile, track);
YapfNotifyTrackLayoutChange(endtile, track);
- delta = TileOffsByDiagDir(GetBridgeRampDirection(tile));
+ VehicleFromPos(tile, &tile, UpdateTrainPowerProc);
+ VehicleFromPos(endtile, &endtile, UpdateTrainPowerProc);
+
for (tile += delta; tile != endtile; tile += delta) {
MarkTileDirtyByTile(tile); // TODO encapsulate this into a function
}
}
- return CommandCost((DistanceManhattan(tile, endtile) + 1) * (_price.build_rail / 2));
+ return CommandCost((DistanceManhattan(tile, endtile) + 1) * (_price.build_rail >> 1));
} else {
return CMD_ERROR;
}
@@ -846,11 +858,11 @@
* sprites is at the top
*/
if (z >= front_height) { // front facing pillar
- AddSortableSpriteToDraw(image, psid->pal, x, y, p[4], p[5], 1, z, HASBIT(_transparent_opt, TO_BRIDGES));
+ AddSortableSpriteToDraw(image, psid->pal, x, y, p[4], p[5], BB_HEIGHT_UNDER_BRIDGE - 5, z, HASBIT(_transparent_opt, TO_BRIDGES), 0, 0, -5);
}
if (drawfarpillar && z >= back_height && z < i - TILE_HEIGHT) { // back facing pillar
- AddSortableSpriteToDraw(image, psid->pal, x - p[6], y - p[7], p[4], p[5], 1, z, HASBIT(_transparent_opt, TO_BRIDGES));
+ AddSortableSpriteToDraw(image, psid->pal, x - p[6], y - p[7], p[4], p[5], BB_HEIGHT_UNDER_BRIDGE - 5, z, HASBIT(_transparent_opt, TO_BRIDGES), 0, 0, -5);
}
}
}
@@ -877,14 +889,23 @@
static const SpriteID back_offsets[6] = { 95, 96, 99, 102, 100, 101 };
static const SpriteID front_offsets[6] = { 97, 98, 103, 106, 104, 105 };
- static const uint size_x[6] = { 11, 16, 16, 16, 16, 16 };
- static const uint size_y[6] = { 16, 11, 16, 16, 16, 16 };
+ static const uint size_x[6] = { 1, 16, 16, 1, 16, 1 };
+ static const uint size_y[6] = { 16, 1, 1, 16, 1, 16 };
+ static const uint front_bb_offset_x[6] = { 15, 0, 0, 15, 0, 15 };
+ static const uint front_bb_offset_y[6] = { 0, 15, 15, 0, 15, 0 };
- AddSortableSpriteToDraw(SPR_TRAMWAY_BASE + tram_offsets[overlay][offset], PAL_NONE, x, y, size_x[offset], size_y[offset], offset >= 2 ? 1 : 0, z, HASBIT(_transparent_opt, TO_BRIDGES));
+ /* The sprites under the vehicles are drawn as SpriteCombine. StartSpriteCombine() has already been called
+ * The bounding boxes here are the same as for bridge front/roof */
+ AddSortableSpriteToDraw(SPR_TRAMWAY_BASE + tram_offsets[overlay][offset], PAL_NONE, x, y, size_x[offset], size_y[offset], 0x28, z, HASBIT(_transparent_opt, TO_BRIDGES));
- AddSortableSpriteToDraw(SPR_TRAMWAY_BASE + back_offsets[offset], PAL_NONE, x, y, size_x[offset], size_y[offset], 0, z, HASBIT(_transparent_opt, TO_BUILDINGS));
+ AddSortableSpriteToDraw(SPR_TRAMWAY_BASE + back_offsets[offset], PAL_NONE, x, y, size_x[offset], size_y[offset], 0x28, z, HASBIT(_transparent_opt, TO_BUILDINGS));
+
+ /* Start a new SpriteCombine for the front part */
+ EndSpriteCombine();
+ StartSpriteCombine();
+
/* For sloped sprites the bounding box needs to be higher, as the pylons stop on a higher point */
- AddSortableSpriteToDraw(SPR_TRAMWAY_BASE + front_offsets[offset], PAL_NONE, x, y, size_x[offset], size_y[offset], offset >= 2 ? 0x30 : 0x10, z, HASBIT(_transparent_opt, TO_BUILDINGS));
+ AddSortableSpriteToDraw(SPR_TRAMWAY_BASE + front_offsets[offset], PAL_NONE, x, y, size_x[offset] + front_bb_offset_x[offset], size_y[offset] + front_bb_offset_y[offset], 0x28, z, HASBIT(_transparent_opt, TO_BUILDINGS), front_bb_offset_x[offset], front_bb_offset_y[offset]);
}
/**
@@ -905,6 +926,27 @@
SpriteID image;
if (IsTunnel(ti->tile)) {
+ /* Front view of tunnel bounding boxes:
+ *
+ * 122223 <- BB_Z_SEPARATOR
+ * 1 3
+ * 1 3 1,3 = empty helper BB
+ * 1 3 2 = SpriteCombine of tunnel-roof and catenary (tram & elrail)
+ *
+ */
+
+ static const int _tunnel_BB[4][12] = {
+ /* tunnnel-roof | Z-separator | tram-catenary
+ * w h bb_x bb_y| x y w h |bb_x bb_y w h */
+ { 1, 0, -15, -14, 0, 15, 16, 1, 0, 1, 16, 15 }, // NE
+ { 0, 1, -14, -15, 15, 0, 1, 16, 1, 0, 15, 16 }, // SE
+ { 1, 0, -15, -14, 0, 15, 16, 1, 0, 1, 16, 15 }, // SW
+ { 0, 1, -14, -15, 15, 0, 1, 16, 1, 0, 15, 16 }, // NW
+ };
+ static const int *BB_data = _tunnel_BB[GetTunnelDirection(ti->tile)];
+
+ bool catenary = false;
+
if (GetTunnelTransportType(ti->tile) == TRANSPORT_RAIL) {
image = GetRailTypeInfo(GetRailType(ti->tile))->base_sprites.tunnel;
} else {
@@ -923,13 +965,27 @@
static const SpriteID tunnel_sprites[2][4] = { { 28, 78, 79, 27 }, { 5, 76, 77, 4 } };
DrawGroundSprite(SPR_TRAMWAY_BASE + tunnel_sprites[rts - ROADTYPES_TRAM][dir], PAL_NONE);
- AddSortableSpriteToDraw(SPR_TRAMWAY_TUNNEL_WIRES + dir, PAL_NONE, ti->x, ti->y, 16, 16, 16, (byte)ti->z, HASBIT(_transparent_opt, TO_BUILDINGS));
+
+ catenary = true;
+ StartSpriteCombine();
+ AddSortableSpriteToDraw(SPR_TRAMWAY_TUNNEL_WIRES + dir, PAL_NONE, ti->x, ti->y, BB_data[10], BB_data[11], TILE_HEIGHT, ti->z, HASBIT(_transparent_opt, TO_BUILDINGS), BB_data[8], BB_data[9], BB_Z_SEPARATOR);
}
} else if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) {
DrawCatenary(ti);
+
+ catenary = true;
+ StartSpriteCombine();
+ DrawCatenaryOnTunnel(ti);
}
- AddSortableSpriteToDraw(image + 1, PAL_NONE, ti->x + TILE_SIZE - 1, ti->y + TILE_SIZE - 1, 1, 1, 8, (byte)ti->z);
+ AddSortableSpriteToDraw(image + 1, PAL_NONE, ti->x + TILE_SIZE - 1, ti->y + TILE_SIZE - 1, BB_data[0], BB_data[1], TILE_HEIGHT, ti->z, false, BB_data[2], BB_data[3], BB_Z_SEPARATOR);
+
+ if (catenary) EndSpriteCombine();
+
+ /* Add helper BB for sprite sorting, that separate the tunnel from things beside of it */
+ AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, ti->x , ti->y , BB_data[6], BB_data[7], TILE_HEIGHT, ti->z);
+ AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, ti->x + BB_data[4], ti->y + BB_data[5], BB_data[6], BB_data[7], TILE_HEIGHT, ti->z);
+
DrawBridgeMiddle(ti);
} else if (IsBridge(ti->tile)) { // XXX is this necessary?
const PalSpriteID *psid;
@@ -964,6 +1020,9 @@
/* draw ramp */
+ /* Draw Trambits as SpriteCombine */
+ if (GetBridgeTransportType(ti->tile) == TRANSPORT_ROAD) StartSpriteCombine();
+
/* HACK set the height of the BB of a sloped ramp to 1 so a vehicle on
* it doesn't disappear behind it
*/
@@ -983,8 +1042,10 @@
} else {
offset += 2;
}
+ /* DrawBridgeTramBits() calls EndSpriteCombine() and StartSpriteCombine() */
DrawBridgeTramBits(ti->x, ti->y, z, offset, HASBIT(rts, ROADTYPE_ROAD));
}
+ EndSpriteCombine();
} else if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) {
DrawCatenary(ti);
}
@@ -1030,6 +1091,25 @@
void DrawBridgeMiddle(const TileInfo* ti)
{
+ /* Sectional view of bridge bounding boxes:
+ *
+ * 1 2 1,2 = SpriteCombine of Bridge front/(back&floor) and TramCatenary
+ * 1 2 3 = empty helper BB
+ * 1 7 2 4,5 = pillars under higher bridges
+ * 1 6 88888 6 2 6 = elrail-pylons
+ * 1 6 88888 6 2 7 = elrail-wire
+ * 1 6 88888 6 2 <- TILE_HEIGHT 8 = rail-vehicle on bridge
+ * 3333333333333 <- BB_Z_SEPARATOR
+ * <- unused
+ * 4 5 <- BB_HEIGHT_UNDER_BRIDGE
+ * 4 5
+ * 4 5
+ *
+ */
+
+ /* Z position of the bridge sprites relative to bridge height (downwards) */
+ static const int BRIDGE_Z_START = 3;
+
const PalSpriteID* psid;
uint base_offset;
TileIndex rampnorth;
@@ -1065,12 +1145,19 @@
x = ti->x;
y = ti->y;
uint bridge_z = GetBridgeHeight(rampsouth);
- z = bridge_z - 3;
+ z = bridge_z - BRIDGE_Z_START;
+ /* Add a bounding box, that separates the bridge from things below it. */
+ AddSortableSpriteToDraw(SPR_EMPTY_BOUNDING_BOX, PAL_NONE, x, y, 16, 16, 1, bridge_z - TILE_HEIGHT + BB_Z_SEPARATOR);
+
+ /* Draw Trambits as SpriteCombine */
+ if (GetBridgeTransportType(rampsouth) == TRANSPORT_ROAD) StartSpriteCombine();
+
+ /* Draw floor and far part of bridge*/
if (axis == AXIS_X) {
- AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 11, 1, z, HASBIT(_transparent_opt, TO_BRIDGES));
+ AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 1, 0x28, z, HASBIT(_transparent_opt, TO_BRIDGES), 0, 0, BRIDGE_Z_START);
} else {
- AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 11, 16, 1, z, HASBIT(_transparent_opt, TO_BRIDGES));
+ AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 1, 16, 0x28, z, HASBIT(_transparent_opt, TO_BRIDGES), 0, 0, BRIDGE_Z_START);
}
psid++;
@@ -1079,7 +1166,11 @@
RoadTypes rts = GetRoadTypes(rampsouth);
if (HASBIT(rts, ROADTYPE_TRAM)) {
+ /* DrawBridgeTramBits() calls EndSpriteCombine() and StartSpriteCombine() */
DrawBridgeTramBits(x, y, bridge_z, axis ^ 1, HASBIT(rts, ROADTYPE_ROAD));
+ } else {
+ EndSpriteCombine();
+ StartSpriteCombine();
}
} else if (GetRailType(rampsouth) == RAILTYPE_ELECTRIC) {
DrawCatenary(ti);
@@ -1088,12 +1179,15 @@
/* draw roof, the component of the bridge which is logically between the vehicle and the camera */
if (axis == AXIS_X) {
y += 12;
- if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 1, 0x28, z, HASBIT(_transparent_opt, TO_BRIDGES));
+ if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 16, 4, 0x28, z, HASBIT(_transparent_opt, TO_BRIDGES), 0, 3, BRIDGE_Z_START);
} else {
x += 12;
- if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 1, 16, 0x28, z, HASBIT(_transparent_opt, TO_BRIDGES));
+ if (psid->sprite & SPRITE_MASK) AddSortableSpriteToDraw(psid->sprite, psid->pal, x, y, 4, 16, 0x28, z, HASBIT(_transparent_opt, TO_BRIDGES), 3, 0, BRIDGE_Z_START);
}
+ /* Draw TramFront as SpriteCombine */
+ if (GetBridgeTransportType(rampsouth) == TRANSPORT_ROAD) EndSpriteCombine();
+
psid++;
if (ti->z + 5 == z) {
/* draw poles below for small bridges */
@@ -1369,7 +1463,7 @@
} else if (IsBridge(tile)) { // XXX is this necessary?
DiagDirection dir;
- if (v->HasFront() && v->IsPrimaryVehicle()) {
+ if (v->IsPrimaryVehicle()) {
/* modify speed of vehicle */
uint16 spd = _bridge[GetBridgeType(tile)].speed;
@@ -1416,6 +1510,30 @@
static CommandCost TerraformTile_TunnelBridge(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new)
{
+ if (_patches.build_on_slopes && AutoslopeEnabled() && IsBridge(tile)) {
+ DiagDirection direction = GetBridgeRampDirection(tile);
+ Axis axis = DiagDirToAxis(direction);
+ CommandCost res;
+
+ /* Check if new slope is valid for bridges in general (so we can savely call GetBridgeFoundation()) */
+ if ((direction == DIAGDIR_NW) || (direction == DIAGDIR_NE)) {
+ res = CheckBridgeSlopeSouth(axis, tileh_new);
+ } else {
+ res = CheckBridgeSlopeNorth(axis, tileh_new);
+ }
+
+ if (!CmdFailed(res)) {
+ uint z_old;
+ Slope tileh_old = GetTileSlope(tile, &z_old);
+
+ z_old += ApplyFoundationToSlope(GetBridgeFoundation(tileh_old, axis), &tileh_old);
+ z_new += ApplyFoundationToSlope(GetBridgeFoundation(tileh_new, axis), &tileh_new);
+
+ /* Surface slope remains unchanged? */
+ if ((z_old == z_new) && (tileh_old == tileh_new)) return _price.terraform;
+ }
+ }
+
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
}
--- a/src/unmovable_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/unmovable_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -24,6 +24,7 @@
#include "table/unmovable_land.h"
#include "genworld.h"
#include "bridge.h"
+#include "autoslope.h"
/** Destroy a HQ.
* During normal gameplay you can only implicitely destroy a HQ when you are
@@ -110,6 +111,8 @@
return cost;
}
+static Foundation GetFoundation_Unmovable(TileIndex tile, Slope tileh);
+
static void DrawTile_Unmovable(TileInfo *ti)
{
@@ -132,6 +135,9 @@
}
case UNMOVABLE_STATUE:
+ /* This should prevent statues from sinking into the ground when on a slope. */
+ if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, GetFoundation_Unmovable(ti->tile, ti->tileh));
+
DrawGroundSprite(SPR_CONCRETE_GROUND, PAL_NONE);
AddSortableSpriteToDraw(SPR_STATUE_COMPANY, PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)), ti->x, ti->y, 16, 16, 25, ti->z, HASBIT(_transparent_opt, TO_STRUCTURES));
@@ -142,7 +148,7 @@
AddSortableSpriteToDraw(
SPR_BOUGHT_LAND, PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)),
- ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, 10, GetSlopeZ(ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2)
+ ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSlopeZ(ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2)
);
DrawBridgeMiddle(ti);
break;
@@ -403,6 +409,10 @@
/* Owned land remains unsold */
if (IsOwnedLand(tile) && CheckTileOwnership(tile)) return CommandCost();
+ if (AutoslopeEnabled() && (IsStatue(tile) || IsCompanyHQ(tile))) {
+ if (!IsSteepSlope(tileh_new) && (z_new + GetSlopeMaxZ(tileh_new) == GetTileMaxZ(tile))) return _price.terraform;
+ }
+
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
}
--- a/src/variables.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/variables.h Sun Sep 23 07:37:38 2007 +0000
@@ -129,8 +129,8 @@
bool measure_tooltip; // Show a permanent tooltip when dragging tools
byte liveries; // Options for displaying company liveries, 0=none, 1=self, 2=all
bool prefer_teamchat; // Choose the chat message target with <ENTER>, true=all players, false=your team
- bool advanced_vehicle_list; // Use the "advanced" vehicle list
- bool loading_indicators; // Show loading indicators
+ uint8 advanced_vehicle_list; // Use the "advanced" vehicle list
+ uint8 loading_indicators; // Show loading indicators
uint8 default_rail_type; ///< The default rail type for the rail GUI
uint8 toolbar_pos; // position of toolbars, 0=left, 1=center, 2=right
@@ -239,6 +239,8 @@
bool timetabling; ///< Whether to allow timetabling.
bool timetable_in_ticks; ///< Whether to show the timetable in ticks rather than days.
+
+ bool autoslope; ///< Allow terraforming under things.
};
VARDEF Patches _patches;
@@ -312,7 +314,7 @@
VARDEF Vehicle *_place_clicked_vehicle;
-VARDEF char _ini_videodriver[32], _ini_musicdriver[32], _ini_sounddriver[32];
+VARDEF char _ini_videodriver[32], _ini_musicdriver[32], _ini_sounddriver[32], _ini_blitter[32];
VARDEF int _num_resolutions;
VARDEF uint16 _resolutions[32][2];
--- a/src/vehicle.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/vehicle.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -92,9 +92,11 @@
bool VehicleNeedsService(const Vehicle *v)
{
if (v->vehstatus & (VS_STOPPED | VS_CRASHED)) return false;
- if (_patches.gotodepot && VehicleHasDepotOrders(v)) return false;
- if (v->current_order.type == OT_LOADING) return false;
- if (v->current_order.type == OT_GOTO_DEPOT && v->current_order.flags & OF_HALT_IN_DEPOT) return false;
+ if (v->current_order.type != OT_GOTO_DEPOT || !(v->current_order.flags & OF_PART_OF_ORDERS)) { // Don't interfere with a depot visit by the order list
+ if (_patches.gotodepot && VehicleHasDepotOrders(v)) return false;
+ if (v->current_order.type == OT_LOADING) return false;
+ if (v->current_order.type == OT_GOTO_DEPOT && v->current_order.flags & OF_HALT_IN_DEPOT) return false;
+ }
if (_patches.no_servicing_if_no_breakdowns && _opt.diff.vehicle_breakdowns == 0) {
return EngineHasReplacementForPlayer(GetPlayer(v->owner), v->engine_type, v->group_id); /* Vehicles set for autoreplacing needs to go to a depot even if breakdowns are turned off */
@@ -500,7 +502,7 @@
case VEH_AIRCRAFT: return IsNormalAircraft(v); // don't count plane shadows and helicopter rotors
case VEH_TRAIN:
return !IsArticulatedPart(v) && // tenders and other articulated parts
- (!IsMultiheaded(v) || IsTrainEngine(v)); // rear parts of multiheaded engines
+ !IsRearDualheaded(v); // rear parts of multiheaded engines
case VEH_ROAD: return IsRoadVehFront(v);
case VEH_SHIP: return true;
default: return false; // Only count player buildable vehicles
@@ -1468,8 +1470,8 @@
{
if (v->owner != _local_player) return;
- /* Do not show getting-old message if autorenew is active */
- if (GetPlayer(v->owner)->engine_renew) return;
+ /* Do not show getting-old message if autorenew is active (and it can replace the vehicle) */
+ if (GetPlayer(v->owner)->engine_renew && GetEngine(v->engine_type)->player_avail != 0) return;
SetDParam(0, _vehicle_type_names[v->type]);
SetDParam(1, v->unitnumber);
@@ -1478,14 +1480,10 @@
void AgeVehicle(Vehicle *v)
{
- int age;
-
- if (v->age < 65535)
- v->age++;
-
- age = v->age - v->max_age;
- if (age == 366*0 || age == 366*1 || age == 366*2 || age == 366*3 || age == 366*4)
- v->reliability_spd_dec <<= 1;
+ if (v->age < 65535) v->age++;
+
+ int age = v->age - v->max_age;
+ if (age == 366*0 || age == 366*1 || age == 366*2 || age == 366*3 || age == 366*4) v->reliability_spd_dec <<= 1;
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
@@ -1493,7 +1491,7 @@
ShowVehicleGettingOld(v, STR_01A0_IS_GETTING_OLD);
} else if (age == 0) {
ShowVehicleGettingOld(v, STR_01A1_IS_GETTING_VERY_OLD);
- } else if (age == 366*1 || age == 366*2 || age == 366*3 || age == 366*4 || age == 366*5) {
+ } else if (age > 0 && (age % 366) == 0) {
ShowVehicleGettingOld(v, STR_01A2_IS_GETTING_VERY_OLD_AND);
}
}
@@ -1733,7 +1731,7 @@
v = v_front;
do {
- if (v->type == VEH_TRAIN && IsMultiheaded(v) && !IsTrainEngine(v)) {
+ if (v->type == VEH_TRAIN && IsRearDualheaded(v)) {
/* we build the rear ends of multiheaded trains with the front ones */
continue;
}
--- a/src/vehicle.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/vehicle.h Sun Sep 23 07:37:38 2007 +0000
@@ -218,9 +218,12 @@
struct Vehicle;
DECLARE_OLD_POOL(Vehicle, Vehicle, 9, 125)
+/* Some declarations of functions, so we can make them friendly */
struct SaveLoad;
-const SaveLoad *GetVehicleDescription(VehicleType vt);
-void AfterLoadVehicles();
+extern const SaveLoad *GetVehicleDescription(VehicleType vt);
+extern void AfterLoadVehicles();
+struct LoadgameState;
+extern bool LoadOldVehicle(LoadgameState *ls, int num);
struct Vehicle : PoolItem<Vehicle, VehicleID, &_Vehicle_pool> {
VehicleTypeByte type; ///< Type of vehicle
@@ -232,7 +235,8 @@
Vehicle *first; // NOSAVE: pointer to the first vehicle in the chain
public:
friend const SaveLoad *GetVehicleDescription(VehicleType vt); // So we can use private/protected variables in the saveload code
- friend void AfterLoadVehicles();
+ friend void AfterLoadVehicles(); // So we can set the previous and first pointers while loading
+ friend bool LoadOldVehicle(LoadgameState *ls, int num); // So we can set the proper next pointer while loading
Vehicle *depot_list; // NOSAVE: linked list to tell what vehicles entered a depot during the last tick. Used by autoreplace
@@ -380,6 +384,11 @@
/**
* Marks the vehicles to be redrawn and updates cached variables
+ *
+ * This method marks the area of the vehicle on the screen as dirty.
+ * It can be use to repaint the vehicle.
+ *
+ * @ingroup dirty
*/
virtual void MarkDirty() {}
@@ -412,12 +421,6 @@
virtual bool IsPrimaryVehicle() const { return false; }
/**
- * Whether this vehicle understands the concept of a front engine, so
- * basically, if GetFirstVehicleInChain() can be called for it.
- */
- virtual bool HasFront() const { return false; }
-
- /**
* Gets the sprite to show for the given direction
* @param direction the direction the vehicle is facing
* @return the sprite for the given vehicle in the given direction
--- a/src/vehicle_gui.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/vehicle_gui.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -1240,7 +1240,12 @@
void ShowVehicleListWindow(PlayerID player, VehicleType vehicle_type)
{
- if (player == _local_player && _patches.advanced_vehicle_list) {
+ /* If _patches.advanced_vehicle_list > 1, display the Advanced list
+ * if _patches.advanced_vehicle_list == 1, display Advanced list only for local player
+ * if _ctrl_pressed, do the opposite action (Advanced list x Normal list)
+ */
+
+ if ((_patches.advanced_vehicle_list > (uint)(player != _local_player)) != _ctrl_pressed) {
ShowPlayerGroup(player, vehicle_type);
} else {
ShowVehicleListWindowLocal(player, VLW_STANDARD, vehicle_type, 0);
@@ -1273,6 +1278,374 @@
}
+/* Unified vehicle GUI - Vehicle Details Window */
+
+/** Constants of vehicle details widget indices */
+enum VehicleDetailsWindowWidgets {
+ VLD_WIDGET_CLOSEBOX = 0,
+ VLD_WIDGET_CAPTION,
+ VLD_WIDGET_RENAME_VEHICLE,
+ VLD_WIDGET_TOP_DETAILS,
+ VLD_WIDGET_INCREASE_SERVICING_INTERVAL,
+ VLD_WIDGET_DECREASE_SERVICING_INTERVAL,
+ VLD_WIDGET_BOTTOM_RIGHT,
+ VLD_WIDGET_MIDDLE_DETAILS,
+ VLD_WIDGET_SCROLLBAR,
+ VLD_WIDGET_DETAILS_CARGO_CARRIED,
+ VLD_WIDGET_DETAILS_TRAIN_VEHICLES,
+ VLD_WIDGET_DETAILS_CAPACITY_OF_EACH,
+ VLD_WIDGET_DETAILS_TOTAL_CARGO,
+ VLD_WIDGET_RESIZE,
+};
+
+/** Vehicle details widgets. */
+static const Widget _vehicle_details_widgets[] = {
+ { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // VLD_WIDGET_CLOSEBOX
+ { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 364, 0, 13, 0x0, STR_018C_WINDOW_TITLE_DRAG_THIS}, // VLD_WIDGET_CAPTION
+ { WWT_PUSHTXTBTN, RESIZE_LR, 14, 365, 404, 0, 13, STR_01AA_NAME, STR_NULL /* filled in later */}, // VLD_WIDGET_RENAME_VEHICLE
+ { WWT_PANEL, RESIZE_RIGHT, 14, 0, 404, 14, 55, 0x0, STR_NULL}, // VLD_WIDGET_TOP_DETAILS
+ { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 10, 101, 106, STR_0188, STR_884D_INCREASE_SERVICING_INTERVAL}, // VLD_WIDGET_INCREASE_SERVICING_INTERVAL
+ { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 10, 107, 112, STR_0189, STR_884E_DECREASE_SERVICING_INTERVAL}, // VLD_WIDGET_DECREASE_SERVICING_INTERVAL
+ { WWT_PANEL, RESIZE_RTB, 14, 11, 404, 101, 112, 0x0, STR_NULL}, // VLD_WIDGET_BOTTOM_RIGHT
+ { WWT_MATRIX, RESIZE_RB, 14, 0, 392, 56, 100, 0x701, STR_NULL}, // VLD_WIDGET_MIDDLE_DETAILS
+ { WWT_SCROLLBAR, RESIZE_LRB, 14, 393, 404, 56, 100, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // VLD_WIDGET_SCROLLBAR
+ { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 95, 113, 124, STR_013C_CARGO, STR_884F_SHOW_DETAILS_OF_CARGO_CARRIED}, // VLD_WIDGET_DETAILS_CARGO_CARRIED
+ { WWT_PUSHTXTBTN, RESIZE_TB, 14, 96, 194, 113, 124, STR_013D_INFORMATION, STR_8850_SHOW_DETAILS_OF_TRAIN_VEHICLES},// VLD_WIDGET_DETAILS_TRAIN_VEHICLES
+ { WWT_PUSHTXTBTN, RESIZE_TB, 14, 195, 293, 113, 124, STR_013E_CAPACITIES, STR_8851_SHOW_CAPACITIES_OF_EACH}, // VLD_WIDGET_DETAILS_CAPACITY_OF_EACH
+ { WWT_PUSHTXTBTN, RESIZE_RTB, 14, 294, 392, 113, 124, STR_013E_TOTAL_CARGO, STR_8852_SHOW_TOTAL_CARGO}, // VLD_WIDGET_DETAILS_TOTAL_CARGO
+ { WWT_RESIZEBOX, RESIZE_LRTB, 14, 393, 404, 113, 124, 0x0, STR_RESIZE_BUTTON}, // VLD_RESIZE
+ { WIDGETS_END},
+};
+
+
+/** Command indices for the _vehicle_command_translation_table. */
+enum VehicleStringTranslation {
+ VST_VEHICLE_AGE_RUNNING_COST_YR,
+ VST_VEHICLE_MAX_SPEED,
+ VST_VEHICLE_PROFIT_THIS_YEAR_LAST_YEAR,
+ VST_VEHICLE_RELIABILITY_BREAKDOWNS,
+};
+
+/** Command codes for the shared buttons indexed by VehicleCommandTranslation and vehicle type. */
+static const StringID _vehicle_translation_table[][4] = {
+ { // VST_VEHICLE_AGE_RUNNING_COST_YR
+ STR_885D_AGE_RUNNING_COST_YR,
+ STR_900D_AGE_RUNNING_COST_YR,
+ STR_9812_AGE_RUNNING_COST_YR,
+ STR_A00D_AGE_RUNNING_COST_YR,
+ },
+ { // VST_VEHICLE_MAX_SPEED
+ STR_NULL,
+ STR_900E_MAX_SPEED,
+ STR_9813_MAX_SPEED,
+ STR_A00E_MAX_SPEED,
+ },
+ { // VST_VEHICLE_PROFIT_THIS_YEAR_LAST_YEAR
+ STR_885F_PROFIT_THIS_YEAR_LAST_YEAR,
+ STR_900F_PROFIT_THIS_YEAR_LAST_YEAR,
+ STR_9814_PROFIT_THIS_YEAR_LAST_YEAR,
+ STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR,
+ },
+ { // VST_VEHICLE_RELIABILITY_BREAKDOWNS
+ STR_8860_RELIABILITY_BREAKDOWNS,
+ STR_9010_RELIABILITY_BREAKDOWNS,
+ STR_9815_RELIABILITY_BREAKDOWNS,
+ STR_A010_RELIABILITY_BREAKDOWNS,
+ },
+};
+
+/** Initialize a newly created vehicle details window */
+void CreateVehicleDetailsWindow(Window *w)
+{
+ const Vehicle *v = GetVehicle(w->window_number);
+
+ switch (v->type) {
+ case VEH_TRAIN:
+ ResizeWindow(w, 0, 39);
+
+ w->vscroll.cap = 6;
+ w->height += 12;
+ w->resize.step_height = 14;
+ w->resize.height = w->height - 14 * 2; // Minimum of 4 wagons in the display
+
+ w->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_8867_NAME_TRAIN;
+ w->widget[VLD_WIDGET_CAPTION].data = STR_8802_DETAILS;
+ break;
+
+ case VEH_ROAD: {
+ w->widget[VLD_WIDGET_CAPTION].data = STR_900C_DETAILS;
+ w->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_902E_NAME_ROAD_VEHICLE;
+
+ if (!RoadVehHasArticPart(v)) break;
+
+ /* Draw the text under the vehicle instead of next to it, minus the
+ * height already allocated for the cargo of the first vehicle. */
+ uint height_extension = 15 - 11;
+
+ /* Add space for the cargo amount for each part. */
+ for (const Vehicle *u = v; u != NULL; u = u->Next()) {
+ height_extension += 11;
+ }
+
+ ResizeWindow(w, 0, height_extension);
+ } break;
+
+ case VEH_SHIP:
+ w->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_982F_NAME_SHIP;
+ w->widget[VLD_WIDGET_CAPTION].data = STR_9811_DETAILS;
+ break;
+
+ case VEH_AIRCRAFT:
+ ResizeWindow(w, 0, 11);
+ w->widget[VLD_WIDGET_RENAME_VEHICLE].tooltips = STR_A032_NAME_AIRCRAFT;
+ w->widget[VLD_WIDGET_CAPTION].data = STR_A00C_DETAILS;
+ break;
+ default: NOT_REACHED();
+ }
+
+ if (v->type != VEH_TRAIN) {
+ w->vscroll.cap = 1;
+ w->widget[VLD_WIDGET_MIDDLE_DETAILS].right += 12;
+ }
+
+ w->widget[VLD_WIDGET_MIDDLE_DETAILS].data = (w->vscroll.cap << 8) + 1;
+ w->caption_color = v->owner;
+
+ WP(w, vehicledetails_d).tab = 0;
+}
+
+/** Checks whether service interval is enabled for the vehicle. */
+static bool inline IsVehicleServiceIntervalEnabled(const VehicleType vehicle_type)
+{
+ switch (vehicle_type) {
+ case VEH_TRAIN: return _patches.servint_trains != 0; break;
+ case VEH_ROAD: return _patches.servint_roadveh != 0; break;
+ case VEH_SHIP: return _patches.servint_ships != 0; break;
+ case VEH_AIRCRAFT: return _patches.servint_aircraft != 0; break;
+ default: NOT_REACHED();
+ }
+}
+
+extern int GetTrainDetailsWndVScroll(VehicleID veh_id, byte det_tab);
+extern void DrawTrainDetails(const Vehicle *v, int x, int y, int vscroll_pos, uint16 vscroll_cap, byte det_tab);
+extern void DrawRoadVehDetails(const Vehicle *v, int x, int y);
+extern void DrawShipDetails(const Vehicle *v, int x, int y);
+extern void DrawAircraftDetails(const Vehicle *v, int x, int y);
+
+/**
+* Draw the details for the given vehicle at the position (x,y) of the Details windows
+*
+* @param v current vehicle
+* @param x The x coordinate
+* @param y The y coordinate
+* @param vscroll_pos (train only)
+* @param vscroll_cap (train only)
+* @param det_tab (train only)
+*/
+static inline void DrawVehicleDetails(const Vehicle *v, int x, int y, int vscroll_pos, uint vscroll_cap, byte det_tab)
+{
+ switch (v->type) {
+ case VEH_TRAIN: DrawTrainDetails(v, x, y, vscroll_pos, vscroll_cap, det_tab); break;
+ case VEH_ROAD: DrawRoadVehDetails(v, x, y); break;
+ case VEH_SHIP: DrawShipDetails(v, x, y); break;
+ case VEH_AIRCRAFT: DrawAircraftDetails(v, x, y); break;
+ default: NOT_REACHED();
+ }
+}
+
+/** Repaint vehicle details window. */
+static void DrawVehicleDetailsWindow(Window *w)
+{
+ const Vehicle *v = GetVehicle(w->window_number);
+ byte det_tab = WP(w, vehicledetails_d).tab;
+
+ SetWindowWidgetDisabledState(w, VLD_WIDGET_RENAME_VEHICLE, v->owner != _local_player);
+
+ if (v->type == VEH_TRAIN) {
+ DisableWindowWidget(w, det_tab + VLD_WIDGET_DETAILS_CARGO_CARRIED);
+ SetVScrollCount(w, GetTrainDetailsWndVScroll(v->index, det_tab));
+ }
+
+ SetWindowWidgetsHiddenState(w, v->type != VEH_TRAIN,
+ VLD_WIDGET_SCROLLBAR,
+ VLD_WIDGET_DETAILS_CARGO_CARRIED,
+ VLD_WIDGET_DETAILS_TRAIN_VEHICLES,
+ VLD_WIDGET_DETAILS_CAPACITY_OF_EACH,
+ VLD_WIDGET_DETAILS_TOTAL_CARGO,
+ VLD_WIDGET_RESIZE,
+ WIDGET_LIST_END);
+
+ /* Disable service-scroller when interval is set to disabled */
+ SetWindowWidgetsDisabledState(w, !IsVehicleServiceIntervalEnabled(v->type),
+ VLD_WIDGET_INCREASE_SERVICING_INTERVAL,
+ VLD_WIDGET_DECREASE_SERVICING_INTERVAL,
+ WIDGET_LIST_END);
+
+
+ SetDParam(0, v->index);
+ DrawWindowWidgets(w);
+
+ /* Draw running cost */
+ SetDParam(1, v->age / 366);
+ SetDParam(0, (v->age + 365 < v->max_age) ? STR_AGE : STR_AGE_RED);
+ SetDParam(2, v->max_age / 366);
+ SetDParam(3, v->GetDisplayRunningCost());
+ DrawString(2, 15, _vehicle_translation_table[VST_VEHICLE_AGE_RUNNING_COST_YR][v->type], 0);
+
+ /* Draw max speed */
+ switch (v->type) {
+ case VEH_TRAIN:
+ SetDParam(2, v->GetDisplayMaxSpeed());
+ SetDParam(1, v->u.rail.cached_power);
+ SetDParam(0, v->u.rail.cached_weight);
+ SetDParam(3, v->u.rail.cached_max_te / 1000);
+ DrawString(2, 25, (_patches.realistic_acceleration && v->u.rail.railtype != RAILTYPE_MAGLEV) ?
+ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :
+ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED, 0);
+ break;
+
+ case VEH_ROAD:
+ case VEH_SHIP:
+ case VEH_AIRCRAFT:
+ SetDParam(0, v->GetDisplayMaxSpeed());
+ DrawString(2, 25, _vehicle_translation_table[VST_VEHICLE_MAX_SPEED][v->type], 0);
+ break;
+
+ default: NOT_REACHED();
+ }
+
+ /* Draw profit */
+ SetDParam(0, v->profit_this_year);
+ SetDParam(1, v->profit_last_year);
+ DrawString(2, 35, _vehicle_translation_table[VST_VEHICLE_PROFIT_THIS_YEAR_LAST_YEAR][v->type], 0);
+
+ /* Draw breakdown & reliability */
+ SetDParam(0, v->reliability * 100 >> 16);
+ SetDParam(1, v->breakdowns_since_last_service);
+ DrawString(2, 45, _vehicle_translation_table[VST_VEHICLE_RELIABILITY_BREAKDOWNS][v->type], 0);
+
+ /* Draw service interval text */
+ SetDParam(0, v->service_interval);
+ SetDParam(1, v->date_of_last_service);
+ DrawString(13, w->height - (v->type != VEH_TRAIN ? 11 : 23), _patches.servint_ispercent ? STR_SERVICING_INTERVAL_PERCENT : STR_883C_SERVICING_INTERVAL_DAYS, 0);
+
+ switch (v->type) {
+ case VEH_TRAIN:
+ DrawVehicleDetails(v, 2, 57, w->vscroll.pos, w->vscroll.cap, det_tab);
+ break;
+
+ case VEH_ROAD:
+ case VEH_SHIP:
+ case VEH_AIRCRAFT:
+ DrawVehicleImage(v, 3, 57, 0, 0, INVALID_VEHICLE);
+ DrawVehicleDetails(v, 75, 57, w->vscroll.pos, w->vscroll.cap, det_tab);
+ break;
+
+ default: NOT_REACHED();
+ }
+}
+
+/** Message strings for renaming vehicles indexed by vehicle type. */
+static const StringID _name_vehicle_title[] = {
+ STR_8865_NAME_TRAIN,
+ STR_902C_NAME_ROAD_VEHICLE,
+ STR_9831_NAME_SHIP,
+ STR_A030_NAME_AIRCRAFT
+};
+
+/** Message strings for error while renaming indexed by vehicle type. */
+static const StringID _name_vehicle_error[] = {
+ STR_8866_CAN_T_NAME_TRAIN,
+ STR_902D_CAN_T_NAME_ROAD_VEHICLE,
+ STR_9832_CAN_T_NAME_SHIP,
+ STR_A031_CAN_T_NAME_AIRCRAFT
+};
+
+/** Window event hook for vehicle details. */
+static void VehicleDetailsWndProc(Window *w, WindowEvent *e)
+{
+ switch (e->event) {
+ case WE_CREATE:
+ CreateVehicleDetailsWindow(w);
+ break;
+
+ case WE_PAINT:
+ DrawVehicleDetailsWindow(w);
+ break;
+
+ case WE_CLICK: {
+ switch (e->we.click.widget) {
+ case VLD_WIDGET_RENAME_VEHICLE: {// rename
+ const Vehicle *v = GetVehicle(w->window_number);
+ SetDParam(0, v->index);
+ ShowQueryString(STR_VEHICLE_NAME, _name_vehicle_title[v->type], 31, 150, w, CS_ALPHANUMERAL);
+ } break;
+
+ case VLD_WIDGET_INCREASE_SERVICING_INTERVAL: // increase int
+ case VLD_WIDGET_DECREASE_SERVICING_INTERVAL: { // decrease int
+ int mod = _ctrl_pressed ? 5 : 10;
+ const Vehicle *v = GetVehicle(w->window_number);
+
+ mod = (e->we.click.widget == VLD_WIDGET_DECREASE_SERVICING_INTERVAL) ? -mod : mod;
+ mod = GetServiceIntervalClamped(mod + v->service_interval);
+ if (mod == v->service_interval) return;
+
+ DoCommandP(v->tile, v->index, mod, NULL, CMD_CHANGE_SERVICE_INT | CMD_MSG(STR_018A_CAN_T_CHANGE_SERVICING));
+ } break;
+
+ case VLD_WIDGET_DETAILS_CARGO_CARRIED:
+ case VLD_WIDGET_DETAILS_TRAIN_VEHICLES:
+ case VLD_WIDGET_DETAILS_CAPACITY_OF_EACH:
+ case VLD_WIDGET_DETAILS_TOTAL_CARGO:
+ SetWindowWidgetsDisabledState(w, false,
+ VLD_WIDGET_DETAILS_CARGO_CARRIED,
+ VLD_WIDGET_DETAILS_TRAIN_VEHICLES,
+ VLD_WIDGET_DETAILS_CAPACITY_OF_EACH,
+ VLD_WIDGET_DETAILS_TOTAL_CARGO,
+ e->we.click.widget,
+ WIDGET_LIST_END);
+
+ WP(w, vehicledetails_d).tab = e->we.click.widget - VLD_WIDGET_DETAILS_CARGO_CARRIED;
+ SetWindowDirty(w);
+ break;
+ }
+ } break;
+
+ case WE_ON_EDIT_TEXT:
+ if (!StrEmpty(e->we.edittext.str)) {
+ _cmd_text = e->we.edittext.str;
+ DoCommandP(0, w->window_number, 0, NULL, CMD_NAME_VEHICLE | CMD_MSG(_name_vehicle_error[GetVehicle(w->window_number)->type]));
+ }
+ break;
+
+ case WE_RESIZE:
+ if (e->we.sizing.diff.x != 0) ResizeButtons(w, VLD_WIDGET_DETAILS_CARGO_CARRIED, VLD_WIDGET_DETAILS_TOTAL_CARGO);
+ if (e->we.sizing.diff.y == 0) break;
+
+ w->vscroll.cap += e->we.sizing.diff.y / 14;
+ w->widget[VLD_WIDGET_MIDDLE_DETAILS].data = (w->vscroll.cap << 8) + 1;
+ break;
+ }
+}
+
+/** Vehicle details window descriptor. */
+static const WindowDesc _vehicle_details_desc = {
+ WDP_AUTO, WDP_AUTO, 405, 113, 405, 113,
+ WC_VEHICLE_DETAILS, WC_VEHICLE_VIEW,
+ WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE,
+ _vehicle_details_widgets,
+ VehicleDetailsWndProc
+};
+
+/** Shows the vehicle details window of the given vehicle. */
+static void ShowVehicleDetailsWindow(const Vehicle *v)
+{
+ DeleteWindowById(WC_VEHICLE_ORDERS, v->index);
+ DeleteWindowById(WC_VEHICLE_DETAILS, v->index);
+ AllocateWindowDescFront(&_vehicle_details_desc, v->index);
+}
+
+
/* Unified vehicle GUI - Vehicle View Window */
/** Constants of vehicle view widget indices */
@@ -1509,27 +1882,6 @@
}
}
-
-/* When unified GUI is complete these functions will also be unified to one
- * function in this module */
-void ShowAircraftDetailsWindow(const Vehicle *v);
-void ShowShipDetailsWindow(const Vehicle *v);
-void ShowRoadVehDetailsWindow(const Vehicle *v);
-void ShowTrainDetailsWindow(const Vehicle *v);
-
-
-/** Provisional dispatch to vehicle-specific detail window functions. */
-static void ShowVehicleDetailsWindow(const Vehicle *v)
-{
- switch (v->type) {
- case VEH_TRAIN: ShowTrainDetailsWindow(v); break;
- case VEH_ROAD: ShowRoadVehDetailsWindow(v); break;
- case VEH_SHIP: ShowShipDetailsWindow(v); break;
- case VEH_AIRCRAFT: ShowAircraftDetailsWindow(v); break;
- default: NOT_REACHED();
- }
-}
-
/** Checks whether the vehicle may be refitted at the moment.*/
static bool IsVehicleRefitable(const Vehicle *v)
{
--- a/src/video/win32_v.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/video/win32_v.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -494,6 +494,9 @@
* WM_KEYDOWN only handles CTRL+ commands and special keys like VK_LEFT, etc. */
if (keycode == 0 || (keycode > WKC_PAUSE && GB(keycode, 13, 4) == 0)) return 0;
+ /* Keys handled in WM_CHAR */
+ if ((uint)(GB(keycode, 0, 12) - WKC_NUM_DIV) <= WKC_MINUS - WKC_NUM_DIV) return 0;
+
HandleKeypress(0 | (keycode << 16));
return 0;
}
--- a/src/viewport.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/viewport.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -81,25 +81,33 @@
};
struct ParentSpriteToDraw {
- SpriteID image;
- SpriteID pal;
- int32 left;
- int32 top;
- int32 right;
- int32 bottom;
- int32 xmin;
- int32 ymin;
- int32 xmax;
- int32 ymax;
- ChildScreenSpriteToDraw *child;
- byte unk16;
- byte zmin;
- byte zmax;
+ SpriteID image; ///< sprite to draw
+ SpriteID pal; ///< palette to use
+
+ int32 x; ///< screen X coordinate of sprite
+ int32 y; ///< screen Y coordinate of sprite
+
+ int32 left; ///< minimal screen X coordinate of sprite (= x + sprite->x_offs), reference point for child sprites
+ int32 top; ///< minimal screen Y coordinate of sprite (= y + sprite->y_offs), reference point for child sprites
+
+ int32 xmin; ///< minimal world X coordinate of bounding box
+ int32 xmax; ///< maximal world X coordinate of bounding box
+ int32 ymin; ///< minimal world Y coordinate of bounding box
+ int32 ymax; ///< maximal world Y coordinate of bounding box
+ int zmin; ///< minimal world Z coordinate of bounding box
+ int zmax; ///< maximal world Z coordinate of bounding box
+
+ ChildScreenSpriteToDraw *child; ///< head of child list;
+ bool comparison_done; ///< Used during sprite sorting: true if sprite has been compared with all other sprites
};
/* Quick hack to know how much memory to reserve when allocating from the spritelist
* to prevent a buffer overflow. */
#define LARGEST_SPRITELIST_STRUCT ParentSpriteToDraw
+assert_compile(sizeof(LARGEST_SPRITELIST_STRUCT) >= sizeof(StringSpriteToDraw));
+assert_compile(sizeof(LARGEST_SPRITELIST_STRUCT) >= sizeof(TileSpriteToDraw));
+assert_compile(sizeof(LARGEST_SPRITELIST_STRUCT) >= sizeof(ChildScreenSpriteToDraw));
+assert_compile(sizeof(LARGEST_SPRITELIST_STRUCT) >= sizeof(ParentSpriteToDraw));
struct ViewportDrawer {
DrawPixelInfo dpi;
@@ -479,23 +487,34 @@
AddChildSpriteScreen(image, pal, pt.x - vd->parent_list[-1]->left, pt.y - vd->parent_list[-1]->top);
}
-/** Draw a (transparent) sprite at given coordinates
+/** Draw a (transparent) sprite at given coordinates with a given bounding box.
+ * The bounding box extends from (x + bb_offset_x, y + bb_offset_y, z + bb_offset_z) to (x + w - 1, y + h - 1, z + dz - 1), both corners included.
+ *
+ * @note Bounding boxes are normally specified with bb_offset_x = bb_offset_y = bb_offset_z = 0. The extent of the bounding box in negative direction is
+ * defined by the sprite offset in the grf file.
+ * However if modifying the sprite offsets is not suitable (e.g. when using existing graphics), the bounding box can be tuned by bb_offset.
+ *
+ * @pre w > bb_offset_x, h > bb_offset_y, dz > bb_offset_z. Else w, h or dz are ignored.
+ *
* @param image the image to combine and draw,
* @param pal the provided palette,
- * @param x position x of the sprite,
- * @param y position y of the sprite,
- * @param w width of the sprite,
- * @param h height of the sprite,
- * @param dz delta z, difference of elevation between sprite and parent sprite,
- * @param z elevation of the sprite,
- * @param transparent if true, switch the palette between the provided palette and the transparent palette
+ * @param x position X (world) of the sprite,
+ * @param y position Y (world) of the sprite,
+ * @param w bounding box extent towards positive X (world),
+ * @param h bounding box extent towards positive Y (world),
+ * @param dz bounding box extent towards positive Z (world),
+ * @param z position Z (world) of the sprite,
+ * @param transparent if true, switch the palette between the provided palette and the transparent palette,
+ * @param bb_offset_x bounding box extent towards negative X (world),
+ * @param bb_offset_y bounding box extent towards negative Y (world),
+ * @param bb_offset_z bounding box extent towards negative Z (world)
*/
-void AddSortableSpriteToDraw(SpriteID image, SpriteID pal, int x, int y, int w, int h, byte dz, byte z, bool transparent)
+void AddSortableSpriteToDraw(SpriteID image, SpriteID pal, int x, int y, int w, int h, int dz, int z, bool transparent, int bb_offset_x, int bb_offset_y, int bb_offset_z)
{
ViewportDrawer *vd = _cur_vd;
ParentSpriteToDraw *ps;
- const Sprite *spr;
Point pt;
+ int32 right, bottom;
assert((image & SPRITE_MASK) < MAX_SPRITES);
@@ -530,11 +549,24 @@
}
pt = RemapCoords(x, y, z);
- spr = GetSprite(image & SPRITE_MASK);
- if ((ps->left = (pt.x += spr->x_offs)) >= vd->dpi.left + vd->dpi.width ||
- (ps->right = (pt.x + spr->width )) <= vd->dpi.left ||
- (ps->top = (pt.y += spr->y_offs)) >= vd->dpi.top + vd->dpi.height ||
- (ps->bottom = (pt.y + spr->height)) <= vd->dpi.top) {
+ ps->x = pt.x;
+ ps->y = pt.y;
+ if (image == SPR_EMPTY_BOUNDING_BOX) {
+ ps->left = RemapCoords(x + w , y + bb_offset_y, z + bb_offset_z).x;
+ right = RemapCoords(x + bb_offset_x, y + h , z + bb_offset_z).x;
+ ps->top = RemapCoords(x + bb_offset_x, y + bb_offset_y, z + dz ).y;
+ bottom = RemapCoords(x + w , y + h , z + bb_offset_z).y;
+ } else {
+ const Sprite *spr = GetSprite(image & SPRITE_MASK);
+ ps->left = (pt.x += spr->x_offs);
+ right = (pt.x + spr->width );
+ ps->top = (pt.y += spr->y_offs);
+ bottom = (pt.y + spr->height);
+ }
+ if (ps->left >= vd->dpi.left + vd->dpi.width ||
+ right <= vd->dpi.left ||
+ ps->top >= vd->dpi.top + vd->dpi.height ||
+ bottom <= vd->dpi.top) {
return;
}
@@ -542,16 +574,16 @@
ps->image = image;
ps->pal = pal;
- ps->xmin = x;
- ps->xmax = x + w - 1;
-
- ps->ymin = y;
- ps->ymax = y + h - 1;
-
- ps->zmin = z;
- ps->zmax = z + dz - 1;
-
- ps->unk16 = 0;
+ ps->xmin = x + bb_offset_x;
+ ps->xmax = x + max(bb_offset_x, w - 1);
+
+ ps->ymin = y + bb_offset_y;
+ ps->ymax = y + max(bb_offset_y, h - 1);
+
+ ps->zmin = z + bb_offset_z;
+ ps->zmax = z + max(bb_offset_z, dz - 1);
+
+ ps->comparison_done = false;
ps->child = NULL;
vd->last_child = &ps->child;
@@ -1130,23 +1162,23 @@
while (*psd != NULL) {
ParentSpriteToDraw* ps = *psd;
- if (!(ps->unk16 & 1)) {
+ if (!ps->comparison_done) {
ParentSpriteToDraw** psd2 = psd;
- ps->unk16 |= 1;
+ ps->comparison_done = true;
while (*++psd2 != NULL) {
ParentSpriteToDraw* ps2 = *psd2;
ParentSpriteToDraw** psd3;
- if (ps2->unk16 & 1) continue;
+ if (ps2->comparison_done) continue;
/* Decide which comparator to use, based on whether the bounding
* boxes overlap
*/
- if (ps->xmax > ps2->xmin && ps->xmin < ps2->xmax && // overlap in X?
- ps->ymax > ps2->ymin && ps->ymin < ps2->ymax && // overlap in Y?
- ps->zmax > ps2->zmin && ps->zmin < ps2->zmax) { // overlap in Z?
+ if (ps->xmax >= ps2->xmin && ps->xmin <= ps2->xmax && // overlap in X?
+ ps->ymax >= ps2->ymin && ps->ymin <= ps2->ymax && // overlap in Y?
+ ps->zmax >= ps2->zmin && ps->zmin <= ps2->zmax) { // overlap in Z?
/* Use X+Y+Z as the sorting order, so sprites closer to the bottom of
* the screen and with higher Z elevation, are drawn in front.
* Here X,Y,Z are the coordinates of the "center of mass" of the sprite,
@@ -1158,13 +1190,13 @@
continue;
}
} else {
+ /* We only change the order, if it is definite.
+ * I.e. every single order of X, Y, Z says ps2 is behind ps or they overlap.
+ * That is: If one partial order says ps behind ps2, do not change the order.
+ */
if (ps->xmax < ps2->xmin ||
ps->ymax < ps2->ymin ||
- ps->zmax < ps2->zmin || (
- ps->xmin < ps2->xmax &&
- ps->ymin < ps2->ymax &&
- ps->zmin < ps2->zmax
- )) {
+ ps->zmax < ps2->zmin) {
continue;
}
}
@@ -1189,10 +1221,9 @@
{
for (; *psd != NULL; psd++) {
const ParentSpriteToDraw* ps = *psd;
- Point pt = RemapCoords(ps->xmin, ps->ymin, ps->zmin);
const ChildScreenSpriteToDraw* cs;
- DrawSprite(ps->image, ps->pal, pt.x, pt.y);
+ if (ps->image != SPR_EMPTY_BOUNDING_BOX) DrawSprite(ps->image, ps->pal, ps->x, ps->y);
for (cs = ps->child; cs != NULL; cs = cs->next) {
DrawSprite(cs->image, cs->pal, ps->left + cs->x, ps->top + cs->y);
@@ -1440,6 +1471,14 @@
}
}
+/**
+ * Marks a viewport as dirty for repaint.
+ *
+ * @param vp The viewport to mark as dirty
+ * @todo documents the missing parameters @c left, @c top, @c right and @c bottom
+ * @todo detailed description missing
+ * @ingroup dirty
+ */
static void MarkViewportDirty(const ViewPort *vp, int left, int top, int right, int bottom)
{
right -= vp->virtual_left;
@@ -1505,6 +1544,14 @@
);
}
+/**
+ * Marks the selected tiles as dirty.
+ *
+ * This function marks the selected tiles as dirty for repaint
+ *
+ * @note Documentation may be wrong (Progman)
+ * @ingroup dirty
+ */
static void SetSelectionTilesDirty()
{
int y_size, x_size;
--- a/src/viewport.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/viewport.h Sun Sep 23 07:37:38 2007 +0000
@@ -44,11 +44,22 @@
while (DoZoomInOutWindow(how, w)) {};
}
+/**
+ * Some values for constructing bounding boxes (BB). The Z positions under bridges are:
+ * z=0..5 Everything that can be built under low bridges.
+ * z=6 reserved, currently unused.
+ * z=7 Z separator between bridge/tunnel and the things under/above it.
+ */
+enum {
+ BB_HEIGHT_UNDER_BRIDGE = 6, ///< Everything that can be built under low bridges, must not exceed this Z height.
+ BB_Z_SEPARATOR = 7, ///< Separates the bridge/tunnel from the things under/above it.
+};
+
void OffsetGroundSprite(int x, int y);
void DrawGroundSprite(SpriteID image, SpriteID pal);
void DrawGroundSpriteAt(SpriteID image, SpriteID pal, int32 x, int32 y, byte z);
-void AddSortableSpriteToDraw(SpriteID image, SpriteID pal, int x, int y, int w, int h, byte dz, byte z, bool transparent = false);
+void AddSortableSpriteToDraw(SpriteID image, SpriteID pal, int x, int y, int w, int h, int dz, int z, bool transparent = false, int bb_offset_x = 0, int bb_offset_y = 0, int bb_offset_z = 0);
void *AddStringToDraw(int x, int y, StringID string, uint64 params_1, uint64 params_2);
void AddChildSpriteScreen(SpriteID image, SpriteID pal, int x, int y);
--- a/src/water_cmd.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/water_cmd.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -183,6 +183,15 @@
return CommandCost(_price.clear_water * 2);
}
+/**
+ * Marks the tiles around a tile as dirty.
+ *
+ * This functions marks the tiles around a given tile as dirty for repaint.
+ *
+ * @param tile The center of the tile where all other tiles are marked as dirty
+ * @ingroup dirty
+ * @see TerraformAddDirtyTileAround
+ */
static void MarkTilesAroundDirty(TileIndex tile)
{
MarkTileDirtyByTile(TILE_ADDXY(tile, 0, 1));
--- a/src/win32.cpp Sun Sep 09 21:14:29 2007 +0000
+++ b/src/win32.cpp Sun Sep 23 07:37:38 2007 +0000
@@ -1031,6 +1031,7 @@
void DetermineBasePaths(const char *exe)
{
+ extern void ScanForTarFiles();
char tmp[MAX_PATH];
TCHAR path[MAX_PATH];
#ifdef WITH_PERSONAL_DIR
@@ -1076,6 +1077,8 @@
_searchpaths[SP_INSTALLATION_DIR] = NULL;
_searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL;
+
+ ScanForTarFiles();
}
/**
--- a/src/window.h Sun Sep 09 21:14:29 2007 +0000
+++ b/src/window.h Sun Sep 23 07:37:38 2007 +0000
@@ -378,10 +378,10 @@
};
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(order_d));
-struct traindetails_d {
+struct vehicledetails_d {
byte tab;
};
-assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(traindetails_d));
+assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(vehicledetails_d));
struct smallmap_d {
int32 scroll_x;
@@ -565,6 +565,12 @@
/* window.cpp */
void CallWindowEventNP(Window *w, int event);
void CallWindowTickEvent();
+
+/**
+ * Marks the window as dirty for repaint.
+ *
+ * @ingroup dirty
+ */
void SetWindowDirty(const Window *w);
void SendWindowMessage(WindowClass wnd_class, WindowNumber wnd_num, int msg, int wparam, int lparam);
void SendWindowMessageClass(WindowClass wnd_class, int msg, int wparam, int lparam);