--- a/Makefile.in Sun Jun 17 21:31:00 2007 +0000
+++ b/Makefile.in Tue Jun 26 23:40:58 2007 +0000
@@ -184,6 +184,7 @@
$(Q)cp "$(ROOT_DIR)/COPYING" "$(BUNDLE_DIR)/"
$(Q)cp "$(ROOT_DIR)/known-bugs.txt" "$(BUNDLE_DIR)/docs/"
$(Q)cp "$(ROOT_DIR)/docs/multiplayer.txt" "$(BUNDLE_DIR)/docs/"
+ $(Q)cp "$(ROOT_DIR)/docs/32bpp.txt" "$(BUNDLE_DIR)/docs/"
$(Q)cp "$(ROOT_DIR)/changelog.txt" "$(BUNDLE_DIR)/docs/"
$(Q)cp "$(ROOT_DIR)/media/openttd.64.png" "$(BUNDLE_DIR)/media/"
$(Q)cp "$(ROOT_DIR)/media/openttd.32.xpm" "$(BUNDLE_DIR)/media/"
--- a/config.lib Sun Jun 17 21:31:00 2007 +0000
+++ b/config.lib Tue Jun 26 23:40:58 2007 +0000
@@ -320,13 +320,13 @@
exit 1
fi
# cpu_type can be either 32 or 64
- if [ -z "`echo $cpu_type | grep '^32$\|^64$\|^DETECT$'`" ]; then
+ if [ -z "`echo $cpu_type | egrep '^(32|64|DETECT)$'`" ]; then
echo "configure: error: invalid option --cpu-type=$cpu_type"
echo " Available options are: --cpu-type[=DETECT|32|64]"
exit 1
fi
# enable_debug should be between 0 and 4
- if [ -z "`echo $enable_debug | grep '^[0123]$'`" ]; then
+ if [ -z "`echo $enable_debug | egrep '^[0123]$'`" ]; then
echo "configure: error: invalid option --enable-debug=$enable_debug"
echo " Available options are: --enable-debug[=0123]"
exit 1
@@ -839,7 +839,7 @@
CFLAGS="$CFLAGS -fno-strict-aliasing"
fi
- if [ "$os" != "CYGWIN" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ]; then
+ if [ "$os" != "CYGWIN" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then
LIBS="$LIBS -lpthread"
LIBS="$LIBS -lrt"
fi
@@ -1528,11 +1528,11 @@
log 2 "detecting $2"
if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then
- eval "$2=`ls -1 /usr/include/*.h 2>/dev/null | grep \"\/$4\$\"`"
+ eval "$2=`ls -1 /usr/include/*.h 2>/dev/null | egrep \"\/$4\$\"`"
eval "res=\$$2"
if [ -z "$res" ]; then
log 2 " trying /usr/include/$4... no"
- eval "$2=`ls -1 /usr/local/include/*.h 2>/dev/null | grep \"\/$4\$\"`"
+ eval "$2=`ls -1 /usr/local/include/*.h 2>/dev/null | egrep \"\/$4\$\"`"
fi
eval "res=\$$2"
if [ -z "$res" ]; then
@@ -1544,16 +1544,16 @@
eval "res=\$$2"
log 2 " trying $res... found"
# Now find the static lib, if needed
- eval "$2=`ls /lib/*.a 2>/dev/null | grep \"\/$3\$\"`"
+ eval "$2=`ls /lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
eval "res=\$$2"
if [ -z "$res" ]; then
log 2 " trying /lib/$3... no"
- eval "$2=`ls /usr/lib/*.a 2>/dev/null | grep \"\/$3\$\"`"
+ eval "$2=`ls /usr/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
fi
eval "res=\$$2"
if [ -z "$res" ]; then
log 2 " trying /usr/lib/$3... no"
- eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | grep \"\/$3\$\"`"
+ eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
fi
eval "res=\$$2"
if [ -z "$res" ]; then
@@ -1929,7 +1929,7 @@
# FOUR_BYTE_BOOL is needed, because C++ uses 4byte for a bool on PPC, where
# we use 1 byte per bool normally in C part. So convert that last one to 4
# bytes too, but only for PPC.
- ppc=`$cc_host -dumpmachine | grep "powerpc\|ppc"`
+ ppc=`$cc_host -dumpmachine | egrep "powerpc|ppc"`
if [ -n "$ppc" ]; then
T_CFLAGS="$CFLAGS -DFOUR_BYTE_BOOL"
osx_sysroot_version=10.3.9
--- a/docs/Readme_OS2.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/docs/Readme_OS2.txt Tue Jun 26 23:40:58 2007 +0000
@@ -50,6 +50,10 @@
If I hear enough responses that both music and sound work together (it might
just be my system), I'll have the defaults changed.
+Please note also that the GCC version does not currently support the MCI MIDI
+system.
+
+
A NOTE ABOUT DEDICATED MULTIPLAYER SERVERS
------------------------------------------
@@ -60,6 +64,8 @@
still pass any other parameters ('-D' is already passed) to
dedicated.cmd.
+You can find the dedicated.cmd file in the os/os2 directory.
+
=========================
BUILDING THE OS/2 VERSION
=========================
@@ -74,9 +80,17 @@
http://www.mozilla.org/ports/os2/gccsetup.html
+Alternatively, Paul Smedley's ready-to-go GCC build environment has been known to
+successfully build the game:
+
+ http://www.smedley.info/os2ports/index.php?page=build-environment
+
To build, you should, if your environment is set up well enough, be able to just
type `./configure' (or `sh configure' if you're using the OS/2 shell) and `make'.
+You may have to manually specify `--os OS2' on the configure command line, as
+configure cannot always detect OS/2 correctly.
+
A note on Open Watcom
---------------------
@@ -122,4 +136,4 @@
Thanks to Paul Smedley for his help with getting OpenTTD to compile under GCC on OS/2.
-- Owen Rudge, 8th January 2007
+- Owen Rudge, 24th June 2007
--- a/projects/openttd.vcproj Sun Jun 17 21:31:00 2007 +0000
+++ b/projects/openttd.vcproj Tue Jun 26 23:40:58 2007 +0000
@@ -182,6 +182,9 @@
RelativePath=".\..\src\cargotype.cpp">
</File>
<File
+ RelativePath=".\..\src\cargopacket.cpp">
+ </File>
+ <File
RelativePath=".\..\src\command.cpp">
</File>
<File
@@ -399,9 +402,6 @@
RelativePath=".\..\src\articulated_vehicles.h">
</File>
<File
- RelativePath=".\..\src\autoreplace_cmd.h">
- </File>
- <File
RelativePath=".\..\src\aystar.h">
</File>
<File
@@ -411,6 +411,9 @@
RelativePath=".\..\src\cargotype.h">
</File>
<File
+ RelativePath=".\..\src\cargopacket.h">
+ </File>
+ <File
RelativePath=".\..\src\command.h">
</File>
<File
@@ -486,6 +489,9 @@
RelativePath=".\..\src\industry.h">
</File>
<File
+ RelativePath=".\..\src\landscape.h">
+ </File>
+ <File
RelativePath=".\..\src\livery.h">
</File>
<File
@@ -570,6 +576,9 @@
RelativePath=".\..\src\newgrf_town.h">
</File>
<File
+ RelativePath=".\..\src\newgrf_townname.h">
+ </File>
+ <File
RelativePath=".\..\src\news.h">
</File>
<File
@@ -660,6 +669,9 @@
RelativePath=".\..\src\string.h">
</File>
<File
+ RelativePath=".\..\src\texteff.hpp">
+ </File>
+ <File
RelativePath=".\..\src\tgp.h">
</File>
<File
@@ -669,6 +681,9 @@
RelativePath=".\..\src\tile.h">
</File>
<File
+ RelativePath=".\..\src\timetable.h">
+ </File>
+ <File
RelativePath=".\..\src\town.h">
</File>
<File
@@ -805,6 +820,9 @@
RelativePath=".\..\src\terraform_gui.cpp">
</File>
<File
+ RelativePath=".\..\src\timetable_gui.cpp">
+ </File>
+ <File
RelativePath=".\..\src\town_gui.cpp">
</File>
<File
@@ -860,6 +878,9 @@
RelativePath=".\..\src\station_cmd.cpp">
</File>
<File
+ RelativePath=".\..\src\timetable_cmd.cpp">
+ </File>
+ <File
RelativePath=".\..\src\town_cmd.cpp">
</File>
<File
@@ -885,9 +906,6 @@
RelativePath=".\..\src\table\ai_rail.h">
</File>
<File
- RelativePath=".\..\src\table\allstrings.h">
- </File>
- <File
RelativePath=".\..\src\table\animcursors.h">
</File>
<File
@@ -936,7 +954,7 @@
RelativePath=".\..\src\table\station_land.h">
</File>
<File
- RelativePath=".\..\src\table\strings.h">
+ RelativePath=".\..\src\..\objs\langs\table\strings.h">
</File>
<File
RelativePath=".\..\src\table\town_land.h">
@@ -951,9 +969,6 @@
RelativePath=".\..\src\table\tree_land.h">
</File>
<File
- RelativePath=".\..\src\table\tunnel_land.h">
- </File>
- <File
RelativePath=".\..\src\table\unmovable_land.h">
</File>
<File
@@ -1050,7 +1065,6 @@
</File>
</Filter>
<Filter
-<<<<<<< .courant
Name="AI C++"
Filter="">
<File
@@ -1225,10 +1239,15 @@
</File>
</Filter>
<Filter
-=======
Name="Blitters"
Filter="">
<File
+ RelativePath=".\..\src\blitter\32bpp_anim.cpp">
+ </File>
+ <File
+ RelativePath=".\..\src\blitter\32bpp_anim.hpp">
+ </File>
+ <File
RelativePath=".\..\src\blitter\32bpp_base.cpp">
</File>
<File
@@ -1297,7 +1316,6 @@
</File>
</Filter>
<Filter
->>>>>>> .fusion-droit.r10096
Name="NewGRF"
Filter="">
<File
@@ -1342,6 +1360,9 @@
<File
RelativePath=".\..\src\newgrf_town.cpp">
</File>
+ <File
+ RelativePath=".\..\src\newgrf_townname.cpp">
+ </File>
</Filter>
<Filter
Name="Map Accessors"
--- a/projects/openttd_vs80.vcproj Sun Jun 17 21:31:00 2007 +0000
+++ b/projects/openttd_vs80.vcproj Tue Jun 26 23:40:58 2007 +0000
@@ -472,6 +472,10 @@
>
</File>
<File
+ RelativePath=".\..\src\cargopacket.cpp"
+ >
+ </File>
+ <File
RelativePath=".\..\src\command.cpp"
>
</File>
@@ -760,10 +764,6 @@
>
</File>
<File
- RelativePath=".\..\src\autoreplace_cmd.h"
- >
- </File>
- <File
RelativePath=".\..\src\aystar.h"
>
</File>
@@ -776,6 +776,10 @@
>
</File>
<File
+ RelativePath=".\..\src\cargopacket.h"
+ >
+ </File>
+ <File
RelativePath=".\..\src\command.h"
>
</File>
@@ -876,6 +880,10 @@
>
</File>
<File
+ RelativePath=".\..\src\landscape.h"
+ >
+ </File>
+ <File
RelativePath=".\..\src\livery.h"
>
</File>
@@ -988,6 +996,10 @@
>
</File>
<File
+ RelativePath=".\..\src\newgrf_townname.h"
+ >
+ </File>
+ <File
RelativePath=".\..\src\news.h"
>
</File>
@@ -1108,6 +1120,10 @@
>
</File>
<File
+ RelativePath=".\..\src\texteff.hpp"
+ >
+ </File>
+ <File
RelativePath=".\..\src\tgp.h"
>
</File>
@@ -1120,6 +1136,10 @@
>
</File>
<File
+ RelativePath=".\..\src\timetable.h"
+ >
+ </File>
+ <File
RelativePath=".\..\src\town.h"
>
</File>
@@ -1300,6 +1320,10 @@
>
</File>
<File
+ RelativePath=".\..\src\timetable_gui.cpp"
+ >
+ </File>
+ <File
RelativePath=".\..\src\town_gui.cpp"
>
</File>
@@ -1372,6 +1396,10 @@
>
</File>
<File
+ RelativePath=".\..\src\timetable_cmd.cpp"
+ >
+ </File>
+ <File
RelativePath=".\..\src\town_cmd.cpp"
>
</File>
@@ -1404,10 +1432,6 @@
>
</File>
<File
- RelativePath=".\..\src\table\allstrings.h"
- >
- </File>
- <File
RelativePath=".\..\src\table\animcursors.h"
>
</File>
@@ -1472,7 +1496,7 @@
>
</File>
<File
- RelativePath=".\..\src\table\strings.h"
+ RelativePath=".\..\src\..\objs\langs\table\strings.h"
>
</File>
<File
@@ -1492,10 +1516,6 @@
>
</File>
<File
- RelativePath=".\..\src\table\tunnel_land.h"
- >
- </File>
- <File
RelativePath=".\..\src\table\unmovable_land.h"
>
</File>
@@ -1621,7 +1641,6 @@
</File>
</Filter>
<Filter
-<<<<<<< .courant
Name="AI C++"
>
<File
@@ -1850,10 +1869,17 @@
</File>
</Filter>
<Filter
-=======
Name="Blitters"
>
<File
+ RelativePath=".\..\src\blitter\32bpp_anim.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\..\src\blitter\32bpp_anim.hpp"
+ >
+ </File>
+ <File
RelativePath=".\..\src\blitter\32bpp_base.cpp"
>
</File>
@@ -1943,7 +1969,6 @@
</File>
</Filter>
<Filter
->>>>>>> .fusion-droit.r10096
Name="NewGRF"
>
<File
@@ -2002,6 +2027,10 @@
RelativePath=".\..\src\newgrf_town.cpp"
>
</File>
+ <File
+ RelativePath=".\..\src\newgrf_townname.cpp"
+ >
+ </File>
</Filter>
<Filter
Name="Map Accessors"
--- a/readme.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/readme.txt Tue Jun 26 23:40:58 2007 +0000
@@ -186,8 +186,8 @@
libpng and freetype2 developer files.
OS/2:
- Open Watcom C/C++ 1.3 or later is required to build the OS/2 version. See the
- docs/Readme_OS2.txt file for more information.
+ A comprehensive GNU build environment is required to build the OS/2 version.
+ See the docs/Readme_OS2.txt file for more information.
8.0) Translating:
@@ -292,15 +292,14 @@
Loïc Guilloux (glx) - In training, not yet specialized
Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;)
Kerekes Miham (MiHaMiX) - Maintainer of translator service, and host of nightlies
-
+ Owen Rudge (orudge) - Contributor, forum host, OS/2 port
Peter Nelson (peter1138) - Spiritual descendant from newgrf gods
Remko Bijker (Rubidium) - THE desync hunter
Christoph Mallon (Tron) - Programmer, code correctness police
- Patric Stout (TrueLight) - Programmer, network guru, SVN-repository and website host
+ Patric Stout (TrueLight) - Programmer, network guru, SVN-, MS-, and website host
Retired Developers:
Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3.0 - 0.3.6)
- Owen Rudge (orudge) - Contributor, forum host, master server host, OS/2 port (0.1 - 0.4.8)
Ludvig Strigeus (ludde) - OpenTTD author, main coder (0.1 - 0.3.3)
Serge Paquet (vurlix) - Assistant project manager, coder (0.1 - 0.3.3)
--- a/source.list Sun Jun 17 21:31:00 2007 +0000
+++ b/source.list Tue Jun 26 23:40:58 2007 +0000
@@ -6,6 +6,7 @@
bmp.cpp
callback_table.cpp
cargotype.cpp
+cargopacket.cpp
command.cpp
console.cpp
console_cmds.cpp
@@ -100,10 +101,10 @@
airport.h
airport_movement.h
articulated_vehicles.h
-autoreplace_cmd.h
aystar.h
bmp.h
cargotype.h
+cargopacket.h
command.h
console.h
currency.h
@@ -129,6 +130,7 @@
heightmap.h
helpers.hpp
industry.h
+landscape.h
livery.h
macros.h
map.h
@@ -157,6 +159,7 @@
newgrf_station.h
newgrf_text.h
newgrf_town.h
+newgrf_townname.h
news.h
npf.h
music/null_m.h
@@ -187,9 +190,11 @@
station.h
stdafx.h
string.h
+texteff.hpp
tgp.h
thread.h
tile.h
+timetable.h
town.h
train.h
transparency_gui.h
@@ -236,6 +241,7 @@
station_gui.cpp
subsidy_gui.cpp
terraform_gui.cpp
+timetable_gui.cpp
town_gui.cpp
train_gui.cpp
transparency_gui.cpp
@@ -255,6 +261,7 @@
roadveh_cmd.cpp
ship_cmd.cpp
station_cmd.cpp
+timetable_cmd.cpp
town_cmd.cpp
train_cmd.cpp
tree_cmd.cpp
@@ -264,7 +271,6 @@
# Tables
table/ai_rail.h
-table/allstrings.h
table/animcursors.h
table/autorail.h
table/build_industry.h
@@ -281,12 +287,11 @@
table/roadveh.h
table/sprites.h
table/station_land.h
-table/strings.h
+../objs/langs/table/strings.h
table/town_land.h
table/track_land.h
table/train_cmd.h
table/tree_land.h
-table/tunnel_land.h
table/unmovable_land.h
table/water_land.h
@@ -384,6 +389,8 @@
#end
# Blitters
+blitter/32bpp_anim.cpp
+blitter/32bpp_anim.hpp
blitter/32bpp_base.cpp
blitter/32bpp_base.hpp
blitter/32bpp_simple.cpp
@@ -425,6 +432,7 @@
newgrf_station.cpp
newgrf_text.cpp
newgrf_town.cpp
+newgrf_townname.cpp
# Map Accessors
bridge_map.cpp
--- a/src/ai/api/ai_company.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_company.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -7,6 +7,8 @@
#include "../../player.h"
#include "../../economy.h"
#include "../../strings.h"
+#include "../../variables.h"
+#include "table/strings.h"
bool AICompany::SetCompanyName(const char *name)
{
@@ -20,7 +22,8 @@
{
static const int len = 64;
char *company_name = MallocT<char>(len);
- GetString(company_name, GetPlayer(_current_player)->name_1, &company_name[len - 1]);
+ SetDParam(0, GetPlayer(_current_player)->index);
+ GetString(company_name, STR_COMPANY_NAME, &company_name[len - 1]);
return company_name;
}
@@ -37,7 +40,8 @@
{
static const int len = 64;
char *president_name = MallocT<char>(len);
- GetString(president_name, GetPlayer(_current_player)->president_name_1, &president_name[len - 1]);
+ SetDParam(0, GetPlayer(_current_player)->index);
+ GetString(president_name, STR_PLAYER_NAME, &president_name[len - 1]);
return president_name;
}
--- a/src/ai/api/ai_execmode.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_execmode.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -4,7 +4,7 @@
#include "ai_execmode.hpp"
-bool AIExecMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs)
+bool AIExecMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs)
{
/* In execution mode we only return 'true', telling the DoCommand it
* should continue with the real execution of the command. */
--- a/src/ai/api/ai_execmode.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_execmode.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -23,7 +23,7 @@
/**
* The callback proc for Execute mode.
*/
- static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs);
+ static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs);
public:
/**
--- a/src/ai/api/ai_object.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_object.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -37,19 +37,19 @@
return AIObject::GetDoCommandStruct(_current_player)->mode_instance;
}
-void AIObject::SetDoCommandCosts(int32 value)
+void AIObject::SetDoCommandCosts(Money value)
{
- AIObject::GetDoCommandStruct(_current_player)->costs = value;
+ AIObject::GetDoCommandStruct(_current_player)->costs = CommandCost(value);
}
-void AIObject::IncreaseDoCommandCosts(int32 value)
+void AIObject::IncreaseDoCommandCosts(Money value)
{
- AIObject::GetDoCommandStruct(_current_player)->costs += value;
+ AIObject::GetDoCommandStruct(_current_player)->costs.AddCost(value);
}
-int32 AIObject::GetDoCommandCosts()
+Money AIObject::GetDoCommandCosts()
{
- return AIObject::GetDoCommandStruct(_current_player)->costs;
+ return AIObject::GetDoCommandStruct(_current_player)->costs.GetCost();
}
void AIObject::SetNewVehicleID(VehicleID vehicle)
@@ -85,14 +85,14 @@
AIObject::AIDoCommandStruct *command_struct = GetDoCommandStruct(_current_player);
command_struct->mode = NULL;
command_struct->delay = 1;
- command_struct->costs = 0;
+ command_struct->costs = CommandCost();
}
bool AIObject::DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint procc)
{
uint32 flags = 0;
PlayerID old_lp;
- int32 res = 0;
+ CommandCost res;
const char* tmp_cmdtext;
flags |= DC_NO_WATER;
@@ -111,7 +111,7 @@
/* Check what the callback wants us to do */
if (AIObject::GetDoCommandMode() != NULL && !AIObject::GetDoCommandMode()(tile, p1, p2, procc, res)) {
- AIObject::IncreaseDoCommandCosts(res);
+ AIObject::IncreaseDoCommandCosts(res.GetCost());
return true;
}
@@ -150,6 +150,6 @@
if (::CmdFailed(res)) return false;
- AIObject::IncreaseDoCommandCosts(res);
+ AIObject::IncreaseDoCommandCosts(res.GetCost());
return true;
}
--- a/src/ai/api/ai_object.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_object.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -11,7 +11,7 @@
/**
* The callback function for Mode-classes.
*/
-typedef bool (AIModeProc)(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs);
+typedef bool (AIModeProc)(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs);
/**
* Uper-parent object of all API classes. You should never use this class in
@@ -25,7 +25,7 @@
AIModeProc *mode;
AIObject *mode_instance;
uint delay;
- int32 costs;
+ CommandCost costs;
VehicleID new_vehicle_id;
SignID new_sign_id;
};
@@ -44,17 +44,17 @@
/**
* Sets the DoCommand costs counter to a value.
*/
- static void SetDoCommandCosts(int32 value);
+ static void SetDoCommandCosts(Money value);
/**
* Increase the current value of the DoCommand costs counter.
*/
- static void IncreaseDoCommandCosts(int32 value);
+ static void IncreaseDoCommandCosts(Money value);
/**
* Get the current DoCommand costs counter.
*/
- static int32 GetDoCommandCosts();
+ static Money GetDoCommandCosts();
/**
* Set the current mode of your AI to this proc.
--- a/src/ai/api/ai_testmode.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_testmode.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -4,7 +4,7 @@
#include "ai_testmode.hpp"
-bool AITestMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs)
+bool AITestMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs)
{
/* In test mode we only return 'false', telling the DoCommand it
* should stop after testing the command and return with that result. */
--- a/src/ai/api/ai_testmode.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_testmode.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -25,7 +25,7 @@
/**
* The callback proc for Testing mode.
*/
- static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs);
+ static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs);
public:
/**
--- a/src/ai/api/ai_transactionmode.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_transactionmode.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -8,7 +8,7 @@
#include "../../debug.h"
#include <stack>
-bool AITransactionMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs)
+bool AITransactionMode::ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs)
{
AITransactionMode *instance = (AITransactionMode *)AIObject::GetDoCommandModeInstance();
/* Don't record if we are stopped */
@@ -22,7 +22,7 @@
command.procc = procc;
command.text = (_cmd_text == NULL) ? NULL : strdup(_cmd_text);
instance->command_stack.push(command);
- instance->costs += costs;
+ instance->costs.AddCost(costs);
/* Now we return 'false', as we don't want to execute the commands just yet */
return false;
@@ -30,7 +30,7 @@
AITransactionMode::AITransactionMode()
{
- this->costs = 0;
+ this->costs = CommandCost();
this->stopped = false;
this->last_mode = this->GetDoCommandMode();
this->last_instance = this->GetDoCommandModeInstance();
@@ -123,9 +123,9 @@
}
}
-int32 AITransactionMode::GetCosts()
+Money AITransactionMode::GetCosts()
{
- return this->costs;
+ return this->costs.GetCost();
}
void AITransactionMode::Append(AITransactionMode *transaction)
--- a/src/ai/api/ai_transactionmode.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ai/api/ai_transactionmode.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -35,13 +35,13 @@
std::queue<AITransactionModeCommand> command_stack;
std::queue<AITransactionModeCommand> reverse_stack;
bool stopped;
- int32 costs;
+ CommandCost costs;
protected:
/**
* The callback proc for Transaction mode.
*/
- static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, int32 costs);
+ static bool ModeProc(TileIndex tile, uint32 p1, uint32 p2, uint procc, CommandCost costs);
public:
/**
@@ -97,7 +97,7 @@
* Get the costs it takes to execute this transaction (on average, real
* numbers can always differ).
*/
- int32 GetCosts();
+ Money GetCosts();
/**
* Append one transaction list to an other.
--- a/src/aircraft_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/aircraft_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -14,6 +14,7 @@
#include "map.h"
#include "tile.h"
#include "vehicle.h"
+#include "timetable.h"
#include "depot.h"
#include "engine.h"
#include "command.h"
@@ -227,9 +228,9 @@
height = spr->height;
}
-static int32 EstimateAircraftCost(EngineID engine, const AircraftVehicleInfo *avi)
+static CommandCost EstimateAircraftCost(EngineID engine, const AircraftVehicleInfo *avi)
{
- return GetEngineProperty(engine, 0x0B, avi->base_cost) * (_price.aircraft_base >> 3) >> 5;
+ return CommandCost(GetEngineProperty(engine, 0x0B, avi->base_cost) * (_price.aircraft_base >> 3) >> 5);
}
@@ -265,12 +266,12 @@
* @param p2 bit 0 when set, the unitnumber will be 0, otherwise it will be a free number
* return result of operation. Could be cost, error
*/
-int32 CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (!IsEngineBuildable(p1, VEH_AIRCRAFT, _current_player)) return_cmd_error(STR_AIRCRAFT_NOT_AVAILABLE);
const AircraftVehicleInfo *avi = AircraftVehInfo(p1);
- int32 value = EstimateAircraftCost(p1, avi);
+ CommandCost value = EstimateAircraftCost(p1, avi);
/* to just query the cost, it is not neccessary to have a valid tile (automation/AI) */
if (flags & DC_QUERY_COST) return value;
@@ -346,7 +347,7 @@
v->subtype = (avi->subtype & AIR_CTOL ? AIR_AIRCRAFT : AIR_HELICOPTER);
v->UpdateDeltaXY(INVALID_DIR);
- v->value = value;
+ v->value = value.GetCost();
u->subtype = AIR_SHADOW;
u->UpdateDeltaXY(INVALID_DIR);
@@ -476,7 +477,7 @@
* @param p2 unused
* @return result of operation. Error or sold value
*/
-int32 CmdSellAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (!IsValidVehicleID(p1)) return CMD_ERROR;
@@ -493,7 +494,7 @@
DoDeleteAircraft(v);
}
- return -(int32)v->value;
+ return CommandCost(-v->value);
}
/** Start/Stop an aircraft.
@@ -503,7 +504,7 @@
* @param p2 unused
* @return result of operation. Nothing if everything went well
*/
-int32 CmdStartStopAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (!IsValidVehicleID(p1)) return CMD_ERROR;
@@ -534,7 +535,7 @@
InvalidateWindowClasses(WC_AIRCRAFT_LIST);
}
- return 0;
+ return CommandCost();
}
/** Send an aircraft to the hangar.
@@ -546,7 +547,7 @@
* - p2 bit 8-10 - VLW flag (for mass goto depot)
* @return o if everything went well
*/
-int32 CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (p2 & DEPOT_MASS_SEND) {
/* Mass goto depot requested */
@@ -569,7 +570,7 @@
TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
- return 0;
+ return CommandCost();
}
if (p2 & DEPOT_DONT_CANCEL) return CMD_ERROR; // Requested no cancelation of hangar orders
@@ -609,7 +610,7 @@
}
}
- return 0;
+ return CommandCost();
}
@@ -623,7 +624,7 @@
* - p2 = (bit 16) - refit only this vehicle (ignored)
* @return cost of refit or error
*/
-int32 CmdRefitAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
byte new_subtype = GB(p2, 8, 8);
@@ -668,7 +669,7 @@
}
_returned_refit_capacity = pass;
- int32 cost = 0;
+ CommandCost cost;
if (IsHumanPlayer(v->owner) && new_cid != v->cargo_type) {
cost = GetRefitCost(v->engine_type);
}
@@ -679,13 +680,8 @@
Vehicle *u = v->next;
uint mail = IsCargoInClass(new_cid, CC_PASSENGERS) ? avi->mail_capacity : 0;
u->cargo_cap = mail;
- if (v->cargo_type == new_cid) {
- v->cargo_count = min(pass, v->cargo_count);
- u->cargo_count = min(mail, u->cargo_count);
- } else {
- v->cargo_count = 0;
- u->cargo_count = 0;
- }
+ v->cargo.Truncate(v->cargo_type == new_cid ? pass : 0);
+ u->cargo.Truncate(v->cargo_type == new_cid ? mail : 0);
v->cargo_type = new_cid;
v->cargo_subtype = new_subtype;
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
@@ -744,9 +740,9 @@
if (v->vehstatus & VS_STOPPED) return;
- int32 cost = GetVehicleProperty(v, 0x0E, AircraftVehInfo(v->engine_type)->running_cost) * _price.aircraft_running / 364;
+ CommandCost cost = CommandCost(GetVehicleProperty(v, 0x0E, AircraftVehInfo(v->engine_type)->running_cost) * _price.aircraft_running / 364);
- v->profit_this_year -= cost >> 8;
+ v->profit_this_year -= cost.GetCost() >> 8;
SET_EXPENSES_TYPE(EXPENSES_AIRCRAFT_RUN);
SubtractMoneyFromPlayerFract(v->owner, cost);
@@ -773,7 +769,7 @@
if (_age_cargo_skip_counter != 0) return;
do {
- if (v->cargo_days != 0xFF) v->cargo_days++;
+ v->cargo.AgeCargo();
v = v->next;
} while (v != NULL);
}
@@ -1348,6 +1344,7 @@
if (!(v->current_order.flags & OF_PART_OF_ORDERS)) return;
if (v->current_order.flags & OF_SERVICE_IF_NEEDED &&
!VehicleNeedsService(v)) {
+ UpdateVehicleTimetable(v, true);
v->cur_order_index++;
}
break;
@@ -1379,7 +1376,7 @@
*/
const Station *st = GetStation(v->u.air.targetairport);
if (!st->IsValid() || st->airport_tile == 0) {
- int32 ret;
+ CommandCost ret;
PlayerID old_player = _current_player;
_current_player = v->owner;
@@ -1427,11 +1424,11 @@
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
uint amt = 2;
- if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) amt += v->cargo_count;
+ if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) amt += v->cargo.Count();
SetDParam(0, amt);
- v->cargo_count = 0;
- v->next->cargo_count = 0;
+ v->cargo.Truncate(0);
+ v->next->cargo.Truncate(0);
const Station *st = GetStation(v->u.air.targetairport);
StringID newsitem;
if (st->airport_tile == 0) {
@@ -1467,7 +1464,7 @@
/* Crash the airplane. Remove all goods stored at the station. */
for (CargoID i = 0; i < NUM_CARGO; i++) {
st->goods[i].rating = 1;
- SB(st->goods[i].waiting_acceptance, 0, 12, 0);
+ st->goods[i].cargo.Truncate(0);
}
CrashAirplane(v);
@@ -2086,6 +2083,7 @@
static void AircraftEventHandler(Vehicle *v, int loop)
{
v->tick_counter++;
+ v->current_order_time++;
if (v->vehstatus & VS_CRASHED) {
HandleCrashedAircraft(v);
--- a/src/aircraft_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/aircraft_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -80,8 +80,7 @@
SetWindowWidgetDisabledState(w, 5, !_patches.servint_aircraft);
SetWindowWidgetDisabledState(w, 6, !_patches.servint_aircraft);
- SetDParam(0, v->string_id);
- SetDParam(1, v->unitnumber);
+ SetDParam(0, v->index);
DrawWindowWidgets(w);
/* Draw running cost */
@@ -125,7 +124,7 @@
/* Draw Transfer credits text */
{
- SetDParam(0, v->cargo_feeder_share);
+ SetDParam(0, v->cargo.FeederShare());
DrawString(60, 101, STR_FEEDER_CARGO_VALUE, 0);
}
@@ -137,7 +136,7 @@
do {
if (IsNormalAircraft(v)) {
- SetDParam(0, GetCustomEngineName(v->engine_type));
+ SetDParam(0, v->engine_type);
SetDParam(1, v->build_year);
SetDParam(2, v->value);
DrawString(60, y, STR_A011_BUILT_VALUE, 0);
@@ -152,12 +151,13 @@
y += 14;
}
- if (v->cargo_count != 0) {
+ uint cargo_count = v->cargo.Count();
+ if (cargo_count != 0) {
/* Cargo names (fix pluralness) */
SetDParam(0, v->cargo_type);
- SetDParam(1, v->cargo_count);
- SetDParam(2, v->cargo_source);
+ SetDParam(1, cargo_count);
+ SetDParam(2, v->cargo.Source());
DrawString(60, y, STR_8813_FROM, 0);
y += 10;
@@ -172,8 +172,8 @@
switch (e->we.click.widget) {
case 2: /* rename */
v = GetVehicle(w->window_number);
- SetDParam(0, v->unitnumber);
- ShowQueryString(v->string_id, STR_A030_NAME_AIRCRAFT, 31, 150, w, CS_ALPHANUMERAL);
+ 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;
@@ -271,8 +271,7 @@
/* draw widgets & caption */
- SetDParam(0, v->string_id);
- SetDParam(1, v->unitnumber);
+ SetDParam(0, v->index);
DrawWindowWidgets(w);
if (v->vehstatus & VS_CRASHED) {
@@ -359,6 +358,7 @@
DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
+ DeleteWindowById(WC_VEHICLE_TIMETABLE, w->window_number);
break;
case WE_MOUSELOOP: {
--- a/src/autoreplace_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/autoreplace_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -17,6 +17,7 @@
#include "aircraft.h"
#include "cargotype.h"
#include "group.h"
+#include "strings.h"
/*
@@ -25,27 +26,23 @@
static void MoveVehicleCargo(Vehicle *dest, Vehicle *source)
{
Vehicle *v = dest;
- int units_moved;
do {
do {
if (source->cargo_type != dest->cargo_type)
continue; // cargo not compatible
- if (dest->cargo_count == dest->cargo_cap)
+ if (dest->cargo.Count() == dest->cargo_cap)
continue; // the destination vehicle is already full
- units_moved = min(source->cargo_count, dest->cargo_cap - dest->cargo_count);
- source->cargo_count -= units_moved;
- dest->cargo_count += units_moved;
- dest->cargo_source = source->cargo_source;
+ uint units_moved = min(source->cargo.Count(), dest->cargo_cap - dest->cargo.Count());
+ source->cargo.MoveTo(&dest->cargo, units_moved);
// copy the age of the cargo
- dest->cargo_days = source->cargo_days;
dest->day_counter = source->day_counter;
dest->tick_counter = source->tick_counter;
- } while (source->cargo_count > 0 && (dest = dest->next) != NULL);
+ } while (source->cargo.Count() > 0 && (dest = dest->next) != NULL);
dest = v;
} while ((source = source->next) != NULL);
@@ -124,10 +121,10 @@
* @param flags is the flags to use when calling DoCommand(). Mainly DC_EXEC counts
* @return value is cost of the replacement or CMD_ERROR
*/
-static int32 ReplaceVehicle(Vehicle **w, byte flags, int32 total_cost)
+static CommandCost ReplaceVehicle(Vehicle **w, byte flags, Money total_cost)
{
- int32 cost;
- int32 sell_value;
+ CommandCost cost;
+ CommandCost sell_value;
Vehicle *old_v = *w;
const Player *p = GetPlayer(old_v->owner);
EngineID new_engine_type;
@@ -154,7 +151,7 @@
replacement_cargo_type = GetNewCargoTypeForReplace(old_v, new_engine_type);
/* check if we can't refit to the needed type, so no replace takes place to prevent the vehicle from altering cargo type */
- if (replacement_cargo_type == CT_INVALID) return 0;
+ if (replacement_cargo_type == CT_INVALID) return CommandCost();
sell_value = DoCommand(0, old_v->index, 0, DC_QUERY_COST, GetCmdSellVeh(old_v));
@@ -167,15 +164,17 @@
cost = DoCommand(old_v->tile, new_engine_type, 3, flags, GetCmdBuildVeh(old_v));
if (CmdFailed(cost)) {
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
- SubtractMoneyFromPlayer(-sell_value); // Take back the money we just gave the player
+ /* Take back the money we just gave the player */
+ sell_value.MultiplyCost(-1);
+ SubtractMoneyFromPlayer(sell_value);
return cost;
}
if (replacement_cargo_type != CT_NO_REFIT) {
/* add refit cost */
- int32 refit_cost = GetRefitCost(new_engine_type);
- if (old_v->type == VEH_TRAIN && IsMultiheaded(old_v)) refit_cost += refit_cost; // pay for both ends
- cost += refit_cost;
+ CommandCost refit_cost = GetRefitCost(new_engine_type);
+ if (old_v->type == VEH_TRAIN && IsMultiheaded(old_v)) refit_cost.AddCost(refit_cost); // pay for both ends
+ cost.AddCost(refit_cost);
}
if (flags & DC_EXEC) {
@@ -243,10 +242,11 @@
if (!IsCustomName(old_v->string_id)) {
vehicle_name[0] = '\0';
} else {
- GetName(vehicle_name, old_v->string_id & 0x7FF, lastof(vehicle_name));
+ SetDParam(0, old_v->index);
+ GetString(vehicle_name, STR_VEHICLE_NAME, lastof(vehicle_name));
}
} else { // flags & DC_EXEC not set
- int32 tmp_move = 0;
+ 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. */
@@ -258,9 +258,11 @@
/* Ensure that the player will not end up having negative money while autoreplacing
* This is needed because the only other check is done after the income from selling the old vehicle is substracted from the cost */
- if (CmdFailed(tmp_move) || p->money64 < (cost + total_cost)) {
+ if (CmdFailed(tmp_move) || p->player_money < (cost.GetCost() + total_cost)) {
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
- SubtractMoneyFromPlayer(-sell_value); // Pay back the loan
+ /* Pay back the loan */
+ sell_value.MultiplyCost(-1);
+ SubtractMoneyFromPlayer(sell_value);
return CMD_ERROR;
}
}
@@ -268,10 +270,11 @@
/* Take back the money we just gave the player just before building the vehicle
* The player will get the same amount now that the sale actually takes place */
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
- SubtractMoneyFromPlayer(-sell_value);
+ sell_value.MultiplyCost(-1);
+ SubtractMoneyFromPlayer(sell_value);
/* sell the engine/ find out how much you get for the old engine (income is returned as negative cost) */
- cost += DoCommand(0, old_v->index, 0, flags, GetCmdSellVeh(old_v));
+ cost.AddCost(DoCommand(0, old_v->index, 0, flags, GetCmdSellVeh(old_v)));
if (new_front) {
/* now we assign the old unitnumber to the new vehicle */
@@ -295,12 +298,12 @@
* @param display_costs If set, a cost animation is shown (only if check is false)
* @return CMD_ERROR if something went wrong. Otherwise the price of the replace
*/
-int32 MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
+CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
{
Vehicle *w;
const Player *p = GetPlayer(v->owner);
byte flags = 0;
- int32 cost, temp_cost = 0;
+ CommandCost cost, temp_cost;
bool stopped;
/* Remember the length in case we need to trim train later on
@@ -326,7 +329,7 @@
v->leave_depot_instantly = false;
for (;;) {
- cost = 0;
+ cost = CommandCost();
w = v;
do {
if (w->type == VEH_TRAIN && IsMultiheaded(w) && !IsTrainEngine(w)) {
@@ -352,7 +355,7 @@
}
/* Now replace the vehicle */
- temp_cost = ReplaceVehicle(&w, flags, cost);
+ temp_cost = ReplaceVehicle(&w, flags, cost.GetCost());
if (CmdFailed(temp_cost)) break; // replace failed for some reason. Leave the vehicle alone
@@ -364,11 +367,11 @@
*/
v = w;
}
- cost += temp_cost;
+ cost.AddCost(temp_cost);
} while (w->type == VEH_TRAIN && (w = GetNextVehicle(w)) != NULL);
- if (!(flags & DC_EXEC) && (p->money64 < (int32)(cost + p->engine_renew_money) || cost == 0)) {
- if (!check && p->money64 < (int32)(cost + p->engine_renew_money) && ( _local_player == v->owner ) && cost != 0) {
+ if (!(flags & DC_EXEC) && (p->player_money < (cost.GetCost() + p->engine_renew_money) || cost.GetCost() == 0)) {
+ if (!check && p->player_money < (cost.GetCost() + p->engine_renew_money) && ( _local_player == v->owner ) && cost.GetCost() != 0) {
StringID message;
SetDParam(0, v->unitnumber);
switch (v->type) {
@@ -418,13 +421,13 @@
w = GetNextVehicle(w);
DoCommand(0, (INVALID_VEHICLE << 16) | temp->index, 0, DC_EXEC, CMD_MOVE_RAIL_VEHICLE);
MoveVehicleCargo(v, temp);
- cost += DoCommand(0, temp->index, 0, DC_EXEC, CMD_SELL_RAIL_WAGON);
+ cost.AddCost(DoCommand(0, temp->index, 0, DC_EXEC, CMD_SELL_RAIL_WAGON));
}
}
if (stopped) v->vehstatus &= ~VS_STOPPED;
if (display_costs) {
- if (IsLocalPlayer()) ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost);
+ if (IsLocalPlayer()) ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost.GetCost());
_current_player = OWNER_NONE;
}
return cost;
--- a/src/autoreplace_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/autoreplace_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -288,7 +288,8 @@
if (!EngineHasReplacementForPlayer(p, selected_id[0], selected_group)) {
SetDParam(0, STR_NOT_REPLACING);
} else {
- SetDParam(0, GetCustomEngineName(EngineReplacementForPlayer(p, selected_id[0], selected_group)));
+ SetDParam(0, STR_ENGINE_NAME);
+ SetDParam(1, EngineReplacementForPlayer(p, selected_id[0], selected_group));
}
} else {
SetDParam(0, STR_NOT_REPLACING_VEHICLE_SELECTED);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_anim.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,277 @@
+#include "../stdafx.h"
+#include "../zoom.hpp"
+#include "../gfx.h"
+#include "../debug.h"
+#include "../table/sprites.h"
+#include "32bpp_anim.hpp"
+
+static FBlitter_32bppAnim iFBlitter_32bppAnim;
+
+void Blitter_32bppAnim::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
+{
+ const SpriteLoader::CommonPixel *src, *src_line;
+ uint32 *dst, *dst_line;
+ uint8 *anim, *anim_line;
+
+ if (_screen.width != this->anim_buf_width || _screen.height != this->anim_buf_height) {
+ /* The size of the screen changed; we can assume we can wipe all data from our buffer */
+ free(this->anim_buf);
+ this->anim_buf = CallocT<uint8>(_screen.width * _screen.height);
+ this->anim_buf_width = _screen.width;
+ this->anim_buf_height = _screen.height;
+ }
+
+ /* 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;
+ anim_line = this->anim_buf + ((uint32 *)bp->dst - (uint32 *)_screen.dst_ptr) + bp->top * this->anim_buf_width + 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);
+
+ anim = anim_line;
+ anim_line += this->anim_buf_width;
+
+ for (int x = 0; x < bp->width; x++) {
+ 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);
+ *anim = 0;
+ } else {
+ if (bp->remap[src->m] != 0) {
+ *dst = ComposeColourPA(this->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
+ *anim = bp->remap[src->m];
+ }
+ }
+ 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 */
+ if (src->a != 0) {
+ *dst = MakeTransparent(*dst, 75);
+ *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;
+ }
+ break;
+ }
+ dst++;
+ anim++;
+ src += ScaleByZoom(1, zoom);
+ }
+ }
+}
+
+void Blitter_32bppAnim::DrawColorMappingRect(void *dst, int width, int height, int pal)
+{
+ uint32 *udst = (uint32 *)dst;
+ uint8 *anim;
+
+ anim = this->anim_buf + ((uint32 *)dst - (uint32 *)_screen.dst_ptr);
+
+ if (pal == PALETTE_TO_TRANSPARENT) {
+ do {
+ for (int i = 0; i != width; i++) {
+ *udst = MakeTransparent(*udst, 60);
+ *anim = 0;
+ udst++;
+ anim++;
+ }
+ udst = udst - width + _screen.pitch;
+ anim = anim - width + this->anim_buf_width;
+ } while (--height);
+ return;
+ }
+ if (pal == PALETTE_TO_STRUCT_GREY) {
+ do {
+ for (int i = 0; i != width; i++) {
+ *udst = MakeGrey(*udst);
+ *anim = 0;
+ udst++;
+ anim++;
+ }
+ udst = udst - width + _screen.pitch;
+ anim = anim - width + this->anim_buf_width;
+ } while (--height);
+ return;
+ }
+
+ DEBUG(misc, 0, "32bpp blitter doesn't know how to draw this color table ('%d')", pal);
+}
+
+void Blitter_32bppAnim::SetPixel(void *video, int x, int y, uint8 color)
+{
+ *((uint32 *)video + x + y * _screen.pitch) = LookupColourInPalette(color);
+ /* Set the color in the anim-buffer too */
+ this->anim_buf[((uint32 *)video - (uint32 *)_screen.dst_ptr) + x + y * this->anim_buf_width] = color;
+}
+
+void Blitter_32bppAnim::SetPixelIfEmpty(void *video, int x, int y, uint8 color)
+{
+ uint32 *dst = (uint32 *)video + x + y * _screen.pitch;
+ if (*dst == 0) {
+ *dst = LookupColourInPalette(color);
+ /* Set the color in the anim-buffer too */
+ this->anim_buf[((uint32 *)video - (uint32 *)_screen.dst_ptr) + x + y * this->anim_buf_width] = color;
+ }
+}
+
+void Blitter_32bppAnim::DrawRect(void *video, int width, int height, uint8 color)
+{
+ uint32 color32 = LookupColourInPalette(color);
+ uint8 *anim_line;
+
+ anim_line = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + this->anim_buf;
+
+ do {
+ uint32 *dst = (uint32 *)video;
+ uint8 *anim = anim_line;
+
+ for (int i = width; i > 0; i--) {
+ *dst = color32;
+ /* Set the color in the anim-buffer too */
+ *anim = color;
+ dst++;
+ anim++;
+ }
+ video = (uint32 *)video + _screen.pitch;
+ anim_line += this->anim_buf_width;
+ } while (--height);
+}
+
+void Blitter_32bppAnim::CopyFromBuffer(void *video, const void *src, int width, int height)
+{
+ assert(video >= _screen.dst_ptr && video <= (uint32 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch);
+ uint32 *dst = (uint32 *)video;
+ uint32 *usrc = (uint32 *)src;
+ uint8 *anim_line;
+
+ anim_line = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + this->anim_buf;
+
+ for (; height > 0; height--) {
+ memcpy(dst, usrc, width * sizeof(uint32));
+ usrc += width;
+ dst += _screen.pitch;
+ /* Copy back the anim-buffer */
+ memcpy(anim_line, usrc, width * sizeof(uint8));
+ usrc = (uint32 *)((uint8 *)usrc + width);
+ anim_line += this->anim_buf_width;
+ }
+
+ /* We update the palette (or the pixels that do animation) immediatly, to avoid graphical glitches */
+ this->PaletteAnimate(217, _use_dos_palette ? 38 : 28);
+}
+
+void Blitter_32bppAnim::CopyToBuffer(const void *video, void *dst, int width, int height)
+{
+ assert(video >= _screen.dst_ptr && video <= (uint32 *)_screen.dst_ptr + _screen.width + _screen.height * _screen.pitch);
+ uint32 *udst = (uint32 *)dst;
+ uint32 *src = (uint32 *)video;
+ uint8 *anim_line;
+
+ if (this->anim_buf == NULL) return;
+
+ anim_line = ((uint32 *)video - (uint32 *)_screen.dst_ptr) + this->anim_buf;
+
+ for (; height > 0; height--) {
+ memcpy(udst, src, width * sizeof(uint32));
+ src += _screen.pitch;
+ udst += width;
+ /* Copy the anim-buffer */
+ memcpy(udst, anim_line, width * sizeof(uint8));
+ udst = (uint32 *)((uint8 *)udst + width);
+ anim_line += this->anim_buf_width;
+ }
+}
+
+void Blitter_32bppAnim::ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y)
+{
+ uint8 *dst, *src;
+
+ /* We need to scroll the anim-buffer too */
+ if (scroll_y > 0) {
+ dst = this->anim_buf + left + (top + height - 1) * this->anim_buf_width;
+ src = dst - scroll_y * this->anim_buf_width;
+
+ /* Adjust left & width */
+ if (scroll_x >= 0) dst += scroll_x;
+ else src -= scroll_x;
+
+ uint tw = width + (scroll_x >= 0 ? -scroll_x : scroll_x);
+ uint th = height - scroll_y;
+ for (; th > 0; th--) {
+ memcpy(dst, src, tw * sizeof(uint8));
+ src -= this->anim_buf_width;
+ dst -= this->anim_buf_width;
+ }
+ } else {
+ /* Calculate pointers */
+ dst = this->anim_buf + left + top * this->anim_buf_width;
+ src = dst - scroll_y * this->anim_buf_width;
+
+ /* Adjust left & width */
+ if (scroll_x >= 0) dst += scroll_x;
+ else src -= scroll_x;
+
+ /* the y-displacement may be 0 therefore we have to use memmove,
+ * because source and destination may overlap */
+ uint tw = width + (scroll_x >= 0 ? -scroll_x : scroll_x);
+ uint th = height + scroll_y;
+ for (; th > 0; th--) {
+ memmove(dst, src, tw * sizeof(uint8));
+ src += this->anim_buf_width;
+ dst += this->anim_buf_width;
+ }
+ }
+
+ Blitter_32bppBase::ScrollBuffer(video, left, top, width, height, scroll_x, scroll_y);
+}
+
+int Blitter_32bppAnim::BufferSize(int width, int height)
+{
+ return width * height * (sizeof(uint32) + sizeof(uint8));
+}
+
+void Blitter_32bppAnim::PaletteAnimate(uint start, uint count)
+{
+ uint8 *anim = this->anim_buf;
+
+ /* Never repaint the transparency pixel */
+ if (start == 0) start++;
+
+ /* Let's walk the anim buffer and try to find the pixels */
+ for (int y = 0; y < this->anim_buf_height; y++) {
+ for (int x = 0; x < this->anim_buf_width; x++) {
+ if (*anim >= start && *anim <= start + count) {
+ /* Update this pixel */
+ this->SetPixel(_screen.dst_ptr, x, y, *anim);
+ }
+ anim++;
+ }
+ }
+
+ /* Make sure the backend redraws the whole screen */
+ _video_driver->make_dirty(0, 0, _screen.width, _screen.height);
+}
+
+Blitter::PaletteAnimation Blitter_32bppAnim::UsePaletteAnimation()
+{
+ return Blitter::PALETTE_ANIMATION_BLITTER;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/blitter/32bpp_anim.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,46 @@
+/* $Id$ */
+
+/** @file 32bpp_anim.hpp */
+
+#ifndef BLITTER_32BPP_ANIM_HPP
+#define BLITTER_32BPP_ANIM_HPP
+
+#include "32bpp_simple.hpp"
+#include "factory.hpp"
+
+class Blitter_32bppAnim : public Blitter_32bppSimple {
+private:
+ uint8 *anim_buf; ///< In this buffer we keep track of the 8bpp indexes so we can do palette animation
+ int anim_buf_width;
+ int anim_buf_height;
+
+public:
+ Blitter_32bppAnim() :
+ anim_buf(NULL),
+ anim_buf_width(0),
+ anim_buf_height(0)
+ {}
+
+ /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
+ /* virtual */ void DrawColorMappingRect(void *dst, int width, int height, int pal);
+ /* virtual */ void SetPixel(void *video, int x, int y, uint8 color);
+ /* virtual */ void SetPixelIfEmpty(void *video, int x, int y, uint8 color);
+ /* virtual */ void DrawRect(void *video, int width, int height, uint8 color);
+ /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height);
+ /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height);
+ /* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y);
+ /* virtual */ int BufferSize(int width, int height);
+ /* virtual */ void PaletteAnimate(uint start, uint count);
+ /* virtual */ Blitter::PaletteAnimation UsePaletteAnimation();
+
+ /* virtual */ const char *GetName() { return "32bpp-anim"; }
+};
+
+class FBlitter_32bppAnim: public BlitterFactory<FBlitter_32bppAnim> {
+public:
+ /* virtual */ const char *GetName() { return "32bpp-anim"; }
+ /* virtual */ const char *GetDescription() { return "32bpp Animation Blitter (palette animation)"; }
+ /* virtual */ Blitter *CreateInstance() { return new Blitter_32bppAnim(); }
+};
+
+#endif /* BLITTER_32BPP_ANIM_HPP */
--- a/src/blitter/32bpp_base.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/32bpp_base.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -18,54 +18,162 @@
if (*dst == 0) *dst = LookupColourInPalette(color);
}
-void Blitter_32bppBase::SetHorizontalLine(void *video, int width, uint8 color)
+void Blitter_32bppBase::DrawRect(void *video, int width, int height, uint8 color)
{
- uint32 *dst = (uint32 *)video;
uint32 color32 = LookupColourInPalette(color);
- for (; width > 0; width--) {
- *dst = color32;
- dst++;
+ do {
+ uint32 *dst = (uint32 *)video;
+ for (int i = width; i > 0; i--) {
+ *dst = color32;
+ dst++;
+ }
+ video = (uint32 *)video + _screen.pitch;
+ } while (--height);
+}
+
+void Blitter_32bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color)
+{
+ int dy;
+ int dx;
+ int stepx;
+ int stepy;
+ int frac;
+
+ dy = (y2 - y) * 2;
+ if (dy < 0) {
+ dy = -dy;
+ stepy = -1;
+ } else {
+ stepy = 1;
+ }
+
+ dx = (x2 - x) * 2;
+ if (dx < 0) {
+ dx = -dx;
+ stepx = -1;
+ } else {
+ stepx = 1;
+ }
+
+ this->SetPixel(video, x, y, color);
+ if (dx > dy) {
+ frac = dy - (dx / 2);
+ while (x != x2) {
+ if (frac >= 0) {
+ y += stepy;
+ frac -= dx;
+ }
+ x += stepx;
+ frac += dy;
+ if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
+ }
+ } else {
+ frac = dx - (dy / 2);
+ while (y != y2) {
+ if (frac >= 0) {
+ x += stepx;
+ frac -= dy;
+ }
+ y += stepy;
+ frac += dx;
+ if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
+ }
}
}
-void Blitter_32bppBase::CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch)
+void Blitter_32bppBase::CopyFromBuffer(void *video, const void *src, int width, int height)
{
- int direction = (height < 0) ? -1 : 1;
uint32 *dst = (uint32 *)video;
uint32 *usrc = (uint32 *)src;
- height = abs(height);
for (; height > 0; height--) {
memcpy(dst, usrc, width * sizeof(uint32));
- usrc += src_pitch * direction;
- dst += _screen.pitch * direction;
+ usrc += width;
+ dst += _screen.pitch;
}
}
-void Blitter_32bppBase::CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
+void Blitter_32bppBase::CopyToBuffer(const void *video, void *dst, int width, int height)
{
- int direction = (height < 0) ? -1 : 1;
uint32 *udst = (uint32 *)dst;
uint32 *src = (uint32 *)video;
- height = abs(height);
for (; height > 0; height--) {
memcpy(udst, src, width * sizeof(uint32));
- src += _screen.pitch * direction;
- udst += dst_pitch * direction;
+ src += _screen.pitch;
+ udst += width;
}
}
-void Blitter_32bppBase::MoveBuffer(void *video_dst, const void *video_src, int width, int height)
+void Blitter_32bppBase::CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
{
- uint32 *dst = (uint32 *)video_dst;
- uint32 *src = (uint32 *)video_src;
+ uint32 *udst = (uint32 *)dst;
+ uint32 *src = (uint32 *)video;
for (; height > 0; height--) {
- memmove(dst, src, width * sizeof(uint32));
+ memcpy(udst, src, width * sizeof(uint32));
src += _screen.pitch;
- dst += _screen.pitch;
+ udst += dst_pitch;
+ }
+}
+
+void Blitter_32bppBase::ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y)
+{
+ const uint32 *src;
+ uint32 *dst;
+
+ if (scroll_y > 0) {
+ /*Calculate pointers */
+ dst = (uint32 *)video + left + (top + height - 1) * _screen.pitch;
+ src = dst - scroll_y * _screen.pitch;
+
+ /* Decrease height and increase top */
+ top += scroll_y;
+ height -= scroll_y;
+ assert(height > 0);
+
+ /* Adjust left & width */
+ if (scroll_x >= 0) {
+ dst += scroll_x;
+ left += scroll_x;
+ width -= scroll_x;
+ } else {
+ src -= scroll_x;
+ width += scroll_x;
+ }
+
+ for (int h = height; h > 0; h--) {
+ memcpy(dst, src, width * sizeof(uint32));
+ src -= _screen.pitch;
+ dst -= _screen.pitch;
+ }
+ } else {
+ /* Calculate pointers */
+ dst = (uint32 *)video + left + top * _screen.pitch;
+ src = dst - scroll_y * _screen.pitch;
+
+ /* Decrese height. (scroll_y is <=0). */
+ height += scroll_y;
+ assert(height > 0);
+
+ /* Adjust left & width */
+ if (scroll_x >= 0) {
+ dst += scroll_x;
+ left += scroll_x;
+ width -= scroll_x;
+ } else {
+ src -= scroll_x;
+ width += scroll_x;
+ }
+
+ /* the y-displacement may be 0 therefore we have to use memmove,
+ * because source and destination may overlap */
+ for (int h = height; h > 0; h--) {
+ memmove(dst, src, width * sizeof(uint32));
+ src += _screen.pitch;
+ dst += _screen.pitch;
+ }
}
}
@@ -73,3 +181,13 @@
{
return width * height * sizeof(uint32);
}
+
+void Blitter_32bppBase::PaletteAnimate(uint start, uint count)
+{
+ /* By default, 32bpp doesn't have palette animation */
+}
+
+Blitter::PaletteAnimation Blitter_32bppBase::UsePaletteAnimation()
+{
+ return Blitter::PALETTE_ANIMATION_NONE;
+}
--- a/src/blitter/32bpp_base.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/32bpp_base.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -16,16 +16,102 @@
/* virtual */ void *MoveTo(const void *video, int x, int y);
/* virtual */ void SetPixel(void *video, int x, int y, uint8 color);
/* virtual */ void SetPixelIfEmpty(void *video, int x, int y, uint8 color);
- /* virtual */ void SetHorizontalLine(void *video, int width, uint8 color);
- /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch);
- /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch);
- /* virtual */ void MoveBuffer(void *video_dst, const void *video_src, int width, int height);
+ /* virtual */ void DrawRect(void *video, int width, int height, uint8 color);
+ /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color);
+ /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height);
+ /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height);
+ /* virtual */ void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch);
+ /* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y);
/* virtual */ int BufferSize(int width, int height);
+ /* virtual */ void PaletteAnimate(uint start, uint count);
+ /* virtual */ Blitter::PaletteAnimation UsePaletteAnimation();
- static inline uint32 LookupColourInPalette(uint8 index) {
- #define ARGB(a, r, g, b) ((((a) << 24) & 0xFF000000) | (((r) << 16) & 0x00FF0000) | (((g) << 8) & 0x0000FF00) | ((b) & 0x000000FF))
- if (index == 0) return 0x00000000;
- return ARGB(0xFF, _cur_palette[index].r, _cur_palette[index].g, _cur_palette[index].b);
+ /**
+ * Compose a colour based on RGB values.
+ */
+ static inline uint ComposeColour(uint a, uint r, uint g, uint b)
+ {
+ return (((a) << 24) & 0xFF000000) | (((r) << 16) & 0x00FF0000) | (((g) << 8) & 0x0000FF00) | ((b) & 0x000000FF);
+ }
+
+ /**
+ * Look up the colour in the current palette.
+ **/
+ static inline uint32 LookupColourInPalette(uint8 index)
+ {
+ if (index == 0) return 0x00000000; // Full transparent pixel */
+ return ComposeColour(0xFF, _cur_palette[index].r, _cur_palette[index].g, _cur_palette[index].b);
+ }
+
+ /**
+ * Compose a colour based on RGBA values and the current pixel value.
+ */
+ static inline uint ComposeColourRGBA(uint r, uint g, uint b, uint a, uint current)
+ {
+ uint cr, cg, cb;
+ cr = GB(current, 16, 8);
+ cg = GB(current, 8, 8);
+ cb = GB(current, 0, 8);
+
+ return ComposeColour(0xFF,
+ (r * a + cr * (255 - a)) / 255,
+ (g * a + cg * (255 - a)) / 255,
+ (b * a + cb * (255 - a)) / 255);
+ }
+
+ /**
+ * Compose a colour based on Pixel value, alpha value, and the current pixel value.
+ */
+ static inline uint ComposeColourPA(uint colour, uint a, uint current)
+ {
+ uint r, g, b, cr, cg, cb;
+ 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);
+
+ return ComposeColour(0xFF,
+ (r * a + cr * (255 - a)) / 255,
+ (g * a + cg * (255 - a)) / 255,
+ (b * a + cb * (255 - a)) / 255);
+ }
+
+ /**
+ * Make a pixel looks like it is transparent.
+ * @param colour the colour already on the screen.
+ * @param amount the amount of transparency, times 100.
+ * @return the new colour for the screen.
+ */
+ static inline uint MakeTransparent(uint colour, uint amount)
+ {
+ uint r, g, b;
+ r = GB(colour, 16, 8);
+ g = GB(colour, 8, 8);
+ b = GB(colour, 0, 8);
+
+ return ComposeColour(0xFF, r * amount / 100, g * amount / 100, b * amount / 100);
+ }
+
+ /**
+ * Make a colour grey-based.
+ * @param colour the colour to make grey.
+ * @return the new colour, now grey.
+ */
+ static inline uint MakeGrey(uint colour)
+ {
+ uint r, g, b;
+ r = GB(colour, 16, 8);
+ g = GB(colour, 8, 8);
+ b = GB(colour, 0, 8);
+
+ /* To avoid doubles and stuff, multiple it with a total of 65536 (16bits), then
+ * divide by it to normalize the value to a byte again. See heightmap.cpp for
+ * information about the formula. */
+ colour = ((r * 19595) + (g * 38470) + (b * 7471)) / 65536;
+
+ return ComposeColour(0xFF, colour, colour, colour);
}
};
--- a/src/blitter/32bpp_simple.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/32bpp_simple.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -7,83 +7,6 @@
static FBlitter_32bppSimple iFBlitter_32bppSimple;
-/**
- * Compose a color based on RGB values.
- */
-static inline uint ComposeColor(uint r, uint g, uint b)
-{
- return (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF) << 0;
-}
-
-/**
- * Compose a color based on RGBA values and the current pixel value.
- */
-static inline uint ComposeColorRGBA(uint r, uint g, uint b, uint a, uint current)
-{
- uint cr, cg, cb;
- cr = GB(current, 16, 8);
- cg = GB(current, 8, 8);
- cb = GB(current, 0, 8);
-
- return ComposeColor((r * a + cr * (255 - a)) / 255,
- (g * a + cg * (255 - a)) / 255,
- (b * a + cb * (255 - a)) / 255);
-}
-
-/**
- * Compose a color based on Pixel value, alpha value, and the current pixel value.
- */
-static inline uint ComposeColorPA(uint color, uint a, uint current)
-{
- uint r, g, b, cr, cg, cb;
- r = GB(color, 16, 8);
- g = GB(color, 8, 8);
- b = GB(color, 0, 8);
- cr = GB(current, 16, 8);
- cg = GB(current, 8, 8);
- cb = GB(current, 0, 8);
-
- return ComposeColor((r * a + cr * (255 - a)) / 255,
- (g * a + cg * (255 - a)) / 255,
- (b * a + cb * (255 - a)) / 255);
-}
-
-/**
- * Make a pixel looks like it is transparent.
- * @param color the color already on the screen.
- * @param amount the amount of transparency, times 100.
- * @return the new color for the screen.
- */
-static inline uint MakeTransparent(uint color, uint amount)
-{
- uint r, g, b;
- r = GB(color, 16, 8);
- g = GB(color, 8, 8);
- b = GB(color, 0, 8);
-
- return ComposeColor(r * amount / 100, g * amount / 100, b * amount / 100);
-}
-
-/**
- * Make a color grey-based.
- * @param color the color to make grey.
- * @return the new color, now grey.
- */
-static inline uint MakeGrey(uint color)
-{
- uint r, g, b;
- r = GB(color, 16, 8);
- g = GB(color, 8, 8);
- b = GB(color, 0, 8);
-
- /* To avoid doubles and stuff, multiple it with a total of 65536 (16bits), then
- * divide by it to normalize the value to a byte again. See heightmap.cpp for
- * information about the formula. */
- color = ((r * 19595) + (g * 38470) + (b * 7471)) / 65536;
-
- return ComposeColor(color, color, color);
-}
-
void Blitter_32bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
{
const SpriteLoader::CommonPixel *src, *src_line;
@@ -105,9 +28,9 @@
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 = ComposeColorRGBA(src->r, src->g, src->b, src->a, *dst);
+ if (src->a != 0) *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
} else {
- if (bp->remap[src->m] != 0) *dst = ComposeColorPA(this->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
+ if (bp->remap[src->m] != 0) *dst = ComposeColourPA(this->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
}
break;
@@ -121,7 +44,7 @@
break;
default:
- if (src->a != 0) *dst = ComposeColorRGBA(src->r, src->g, src->b, src->a, *dst);
+ if (src->a != 0) *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
break;
}
dst++;
@@ -141,7 +64,7 @@
udst++;
}
udst = udst - width + _screen.pitch;
- } while (height--);
+ } while (--height);
return;
}
if (pal == PALETTE_TO_STRUCT_GREY) {
@@ -151,7 +74,7 @@
udst++;
}
udst = udst - width + _screen.pitch;
- } while (height--);
+ } while (--height);
return;
}
--- a/src/blitter/32bpp_simple.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/32bpp_simple.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -13,6 +13,8 @@
/* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom);
/* virtual */ void DrawColorMappingRect(void *dst, int width, int height, int pal);
/* virtual */ Sprite *Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator);
+
+ /* virtual */ const char *GetName() { return "32bpp-simple"; }
};
class FBlitter_32bppSimple: public BlitterFactory<FBlitter_32bppSimple> {
--- a/src/blitter/8bpp_base.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_base.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -9,7 +9,7 @@
do {
for (int i = 0; i != width; i++) *((uint8 *)dst + i) = ctab[((uint8 *)dst)[i]];
dst = (uint8 *)dst + _screen.pitch;
- } while (height--);
+ } while (--height);
}
void *Blitter_8bppBase::MoveTo(const void *video, int x, int y)
@@ -28,48 +28,156 @@
if (*dst == 0) *dst = color;
}
-void Blitter_8bppBase::SetHorizontalLine(void *video, int width, uint8 color)
+void Blitter_8bppBase::DrawRect(void *video, int width, int height, uint8 color)
{
- memset(video, color, width);
+ do {
+ memset(video, color, width);
+ video = (uint8 *)video + _screen.pitch;
+ } while (--height);
}
-void Blitter_8bppBase::CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch)
+void Blitter_8bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color)
{
- int direction = (height < 0) ? -1 : 1;
- uint8 *dst = (uint8 *)video;
- uint8 *usrc = (uint8 *)src;
+ int dy;
+ int dx;
+ int stepx;
+ int stepy;
+ int frac;
- height = abs(height);
- for (; height > 0; height--) {
- memcpy(dst, usrc, width);
- usrc += src_pitch * direction;
- dst += _screen.pitch * direction;
+ dy = (y2 - y) * 2;
+ if (dy < 0) {
+ dy = -dy;
+ stepy = -1;
+ } else {
+ stepy = 1;
+ }
+
+ dx = (x2 - x) * 2;
+ if (dx < 0) {
+ dx = -dx;
+ stepx = -1;
+ } else {
+ stepx = 1;
+ }
+
+ this->SetPixel(video, x, y, color);
+ if (dx > dy) {
+ frac = dy - (dx / 2);
+ while (x != x2) {
+ if (frac >= 0) {
+ y += stepy;
+ frac -= dx;
+ }
+ x += stepx;
+ frac += dy;
+ if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
+ }
+ } else {
+ frac = dx - (dy / 2);
+ while (y != y2) {
+ if (frac >= 0) {
+ x += stepx;
+ frac -= dy;
+ }
+ y += stepy;
+ frac += dx;
+ if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
+ }
}
}
-void Blitter_8bppBase::CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
+void Blitter_8bppBase::CopyFromBuffer(void *video, const void *src, int width, int height)
{
- int direction = (height < 0) ? -1 : 1;
+ uint8 *dst = (uint8 *)video;
+ uint8 *usrc = (uint8 *)src;
+
+ for (; height > 0; height--) {
+ memcpy(dst, usrc, width * sizeof(uint8));
+ usrc += width;
+ dst += _screen.pitch;
+ }
+}
+
+void Blitter_8bppBase::CopyToBuffer(const void *video, void *dst, int width, int height)
+{
uint8 *udst = (uint8 *)dst;
uint8 *src = (uint8 *)video;
- height = abs(height);
for (; height > 0; height--) {
- memcpy(udst, src, width);
- src += _screen.pitch * direction;
- udst += dst_pitch * direction;
+ memcpy(udst, src, width * sizeof(uint8));
+ src += _screen.pitch;
+ udst += width;
}
}
-void Blitter_8bppBase::MoveBuffer(void *video_dst, const void *video_src, int width, int height)
+void Blitter_8bppBase::CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch)
{
- uint8 *dst = (uint8 *)video_dst;
- uint8 *src = (uint8 *)video_src;
+ uint8 *udst = (uint8 *)dst;
+ uint8 *src = (uint8 *)video;
for (; height > 0; height--) {
- memmove(dst, src, width);
+ memcpy(udst, src, width * sizeof(uint8));
src += _screen.pitch;
- dst += _screen.pitch;
+ udst += dst_pitch;
+ }
+}
+
+void Blitter_8bppBase::ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y)
+{
+ const uint8 *src;
+ uint8 *dst;
+
+ if (scroll_y > 0) {
+ /*Calculate pointers */
+ dst = (uint8 *)video + left + (top + height - 1) * _screen.pitch;
+ src = dst - scroll_y * _screen.pitch;
+
+ /* Decrease height and increase top */
+ top += scroll_y;
+ height -= scroll_y;
+ assert(height > 0);
+
+ /* Adjust left & width */
+ if (scroll_x >= 0) {
+ dst += scroll_x;
+ left += scroll_x;
+ width -= scroll_x;
+ } else {
+ src -= scroll_x;
+ width += scroll_x;
+ }
+
+ for (int h = height; h > 0; h--) {
+ memcpy(dst, src, width * sizeof(uint8));
+ src -= _screen.pitch;
+ dst -= _screen.pitch;
+ }
+ } else {
+ /* Calculate pointers */
+ dst = (uint8 *)video + left + top * _screen.pitch;
+ src = dst - scroll_y * _screen.pitch;
+
+ /* Decrese height. (scroll_y is <=0). */
+ height += scroll_y;
+ assert(height > 0);
+
+ /* Adjust left & width */
+ if (scroll_x >= 0) {
+ dst += scroll_x;
+ left += scroll_x;
+ width -= scroll_x;
+ } else {
+ src -= scroll_x;
+ width += scroll_x;
+ }
+
+ /* the y-displacement may be 0 therefore we have to use memmove,
+ * because source and destination may overlap */
+ for (int h = height; h > 0; h--) {
+ memmove(dst, src, width * sizeof(uint8));
+ src += _screen.pitch;
+ dst += _screen.pitch;
+ }
}
}
@@ -77,3 +185,13 @@
{
return width * height;
}
+
+void Blitter_8bppBase::PaletteAnimate(uint start, uint count)
+{
+ /* Video backend takes care of the palette animation */
+}
+
+Blitter::PaletteAnimation Blitter_8bppBase::UsePaletteAnimation()
+{
+ return Blitter::PALETTE_ANIMATION_VIDEO_BACKEND;
+}
--- a/src/blitter/8bpp_base.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_base.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -16,11 +16,15 @@
/* virtual */ void *MoveTo(const void *video, int x, int y);
/* virtual */ void SetPixel(void *video, int x, int y, uint8 color);
/* virtual */ void SetPixelIfEmpty(void *video, int x, int y, uint8 color);
- /* virtual */ void SetHorizontalLine(void *video, int width, uint8 color);
- /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch);
- /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch);
- /* virtual */ void MoveBuffer(void *video_dst, const void *video_src, int width, int height);
+ /* virtual */ void DrawRect(void *video, int width, int height, uint8 color);
+ /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color);
+ /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height);
+ /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height);
+ /* virtual */ void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch);
+ /* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y);
/* virtual */ int BufferSize(int width, int height);
+ /* virtual */ void PaletteAnimate(uint start, uint count);
+ /* virtual */ Blitter::PaletteAnimation UsePaletteAnimation();
};
#endif /* BLITTER_8BPP_BASE_HPP */
--- a/src/blitter/8bpp_debug.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_debug.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -12,6 +12,8 @@
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 "8bpp-debug"; }
};
class FBlitter_8bppDebug: public BlitterFactory<FBlitter_8bppDebug> {
--- a/src/blitter/8bpp_optimized.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_optimized.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -151,7 +151,7 @@
if (rx == sprite->width) break;
}
- if (last_color == 0 || color == 0) {
+ if (last_color == 0 || color == 0 || pixels == 255) {
if (count_index != 0) {
/* Write how many non-transparent bytes we get */
temp_dst[count_index] = pixels;
--- a/src/blitter/8bpp_optimized.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_optimized.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -12,6 +12,8 @@
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 "8bpp-optimized"; }
};
class FBlitter_8bppOptimized: public BlitterFactory<FBlitter_8bppOptimized> {
--- a/src/blitter/8bpp_simple.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/8bpp_simple.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -12,6 +12,8 @@
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 "8bpp-simple"; }
};
class FBlitter_8bppSimple: public BlitterFactory<FBlitter_8bppSimple> {
--- a/src/blitter/base.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/base.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -31,6 +31,12 @@
int pitch; ///< The pitch of the destination buffer
};
+ enum PaletteAnimation {
+ PALETTE_ANIMATION_NONE, ///< No palette animation
+ PALETTE_ANIMATION_VIDEO_BACKEND, ///< Palette animation should be done by video backend (8bpp only!)
+ PALETTE_ANIMATION_BLITTER, ///< The blitter takes care of the palette animation
+ };
+
typedef void *AllocatorProc(size_t size);
/**
@@ -94,7 +100,20 @@
* @param width The lenght of the line.
* @param color A 8bpp mapping color.
*/
- virtual void SetHorizontalLine(void *video, int width, uint8 color) = 0;
+ virtual void DrawRect(void *video, int width, int height, uint8 color) = 0;
+
+ /**
+ * Draw a line with a given color.
+ * @param video The destination pointer (video-buffer).
+ * @param x The x coordinate from where the line starts.
+ * @param y The y coordinate from where the line starts.
+ * @param x2 The x coordinate to where the line goes.
+ * @param y2 The y coordinate to where the lines goes.
+ * @param screen_width The width of the screen you are drawing in (to avoid buffer-overflows).
+ * @param screen_height The height of the screen you are drawing in (to avoid buffer-overflows).
+ * @param color A 8bpp mapping color.
+ */
+ virtual void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color) = 0;
/**
* Copy from a buffer to the screen.
@@ -102,9 +121,9 @@
* @param src The buffer from which the data will be read.
* @param width The width of the buffer.
* @param height The height of the buffer.
- * @param src_pitch The pitch (byte per line) of the source buffer.
+ * @note You can not do anything with the content of the buffer, as the blitter can store non-pixel data in it too!
*/
- virtual void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch) = 0;
+ virtual void CopyFromBuffer(void *video, const void *src, int width, int height) = 0;
/**
* Copy from the screen to a buffer.
@@ -112,18 +131,31 @@
* @param dst The buffer in which the data will be stored.
* @param width The width of the buffer.
* @param height The height of the buffer.
- * @param dst_pitch The pitch (byte per line) of the destination buffer.
+ * @note You can not do anything with the content of the buffer, as the blitter can store non-pixel data in it too!
*/
- virtual void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) = 0;
+ virtual void CopyToBuffer(const void *video, void *dst, int width, int height) = 0;
/**
- * Move the videobuffer some places (via memmove).
- * @param video_dst The destination pointer (video-buffer).
- * @param video_src The source pointer (video-buffer).
- * @param width The width of the buffer to move.
- * @param height The height of the buffer to move.
+ * Copy from the screen to a buffer in a palette format for 8bpp and RGBA format for 32bpp.
+ * @param video The destination pointer (video-buffer).
+ * @param dst The buffer in which the data will be stored.
+ * @param width The width of the buffer.
+ * @param height The height of the buffer.
+ * @param dst_pitch The pitch (byte per line) of the destination buffer.
*/
- virtual void MoveBuffer(void *video_dst, const void *video_src, int width, int height) = 0;
+ virtual void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) = 0;
+
+ /**
+ * Scroll the videobuffer some 'x' and 'y' value.
+ * @param video The buffer to scroll into.
+ * @param left The left value of the screen to scroll.
+ * @param top The top value of the screen to scroll.
+ * @param width The width of the screen to scroll.
+ * @param height The height of the screen to scroll.
+ * @param scroll_x How much to scroll in X.
+ * @param scroll_y How much to scroll in Y.
+ */
+ virtual void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) = 0;
/**
* Calculate how much memory there is needed for an image of this size in the video-buffer.
@@ -133,6 +165,25 @@
*/
virtual int BufferSize(int width, int height) = 0;
+ /**
+ * Called when the 8bpp palette is changed; you should redraw all pixels on the screen that
+ * are equal to the 8bpp palette indexes 'start' to 'start + count'.
+ * @param start The start index in the 8bpp palette.
+ * @param count The amount of indexes that are (possible) changed.
+ */
+ virtual void PaletteAnimate(uint start, uint count) = 0;
+
+ /**
+ * Check if the blitter uses palette animation at all.
+ * @return True if it uses palette animation.
+ */
+ virtual Blitter::PaletteAnimation UsePaletteAnimation() = 0;
+
+ /**
+ * Get the naem of the blitter, the same as the Factory-instance returns.
+ */
+ virtual const char *GetName() = 0;
+
virtual ~Blitter() { }
};
--- a/src/blitter/null.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/blitter/null.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -17,11 +17,17 @@
/* virtual */ void *MoveTo(const void *video, int x, int y) { return NULL; };
/* virtual */ void SetPixel(void *video, int x, int y, uint8 color) {};
/* virtual */ void SetPixelIfEmpty(void *video, int x, int y, uint8 color) {};
- /* virtual */ void SetHorizontalLine(void *video, int width, uint8 color) {};
- /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch) {};
- /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) {};
- /* virtual */ void MoveBuffer(void *video_dst, const void *video_src, int width, int height) {};
+ /* virtual */ void DrawRect(void *video, int width, int height, uint8 color) {};
+ /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color) {};
+ /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height) {};
+ /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height) {};
+ /* virtual */ void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) {};
+ /* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) {};
/* virtual */ int BufferSize(int width, int height) { return 0; };
+ /* virtual */ void PaletteAnimate(uint start, uint count) { };
+ /* virtual */ Blitter::PaletteAnimation UsePaletteAnimation() { return Blitter::PALETTE_ANIMATION_NONE; };
+
+ /* virtual */ const char *GetName() { return "null"; }
};
class FBlitter_Null: public BlitterFactory<FBlitter_Null> {
--- a/src/bridge_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/bridge_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -22,7 +22,7 @@
TileIndex end_tile;
byte type;
byte indexes[MAX_BRIDGES];
- int32 costs[MAX_BRIDGES];
+ Money costs[MAX_BRIDGES];
} _bridgedata;
void CcBuildBridge(bool success, TileIndex tile, uint32 p1, uint32 p2)
@@ -113,7 +113,7 @@
void ShowBuildBridgeWindow(TileIndex start, TileIndex end, byte bridge_type)
{
uint j = 0;
- int32 ret;
+ CommandCost ret;
StringID errmsg;
DeleteWindowById(WC_BUILD_BRIDGE, 0);
@@ -145,7 +145,7 @@
const Bridge *b = &_bridge[bridge_type];
// bridge is accepted, add to list
// add to terraforming & bulldozing costs the cost of the bridge itself (not computed with DC_QUERY_COST)
- _bridgedata.costs[j] = ret + (((int64)tot_bridgedata_len * _price.build_bridge * b->price) >> 8);
+ _bridgedata.costs[j] = ret.GetCost() + (((int64)tot_bridgedata_len * _price.build_bridge * b->price) >> 8);
_bridgedata.indexes[j] = bridge_type;
j++;
}
--- a/src/build_vehicle_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/build_vehicle_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -140,12 +140,14 @@
if (va != last_engine[0]) {
last_engine[0] = va;
- GetString(last_name[0], GetCustomEngineName(va), lastof(last_name[0]));
+ SetDParam(0, va);
+ GetString(last_name[0], STR_ENGINE_NAME, lastof(last_name[0]));
}
if (vb != last_engine[1]) {
last_engine[1] = vb;
- GetString(last_name[1], GetCustomEngineName(vb), lastof(last_name[1]));
+ SetDParam(0, vb);
+ GetString(last_name[1], STR_ENGINE_NAME, lastof(last_name[1]));
}
r = strcmp(last_name[0], last_name[1]); // sort by name
@@ -206,9 +208,9 @@
const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
- int va = rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class] * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
- int vb = rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class] * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
- int r = va - vb;
+ Money va = rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class] * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
+ Money vb = rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class] * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
+ int r = ClampToI32(va - vb);
return _internal_sort_order ? -r : r;
}
@@ -224,9 +226,9 @@
* Because of this, the return value have to be reversed as well and we return b - a instead of a - b.
* Another thing is that both power and running costs should be doubled for multiheaded engines.
* Since it would be multipling with 2 in both numerator and denumerator, it will even themselves out and we skip checking for multiheaded. */
- int va = (rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class]) / max((uint16)1, rvi_a->power);
- int vb = (rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class]) / max((uint16)1, rvi_b->power);
- int r = vb - va;
+ Money va = (rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class]) / max((uint16)1, rvi_a->power);
+ Money vb = (rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class]) / max((uint16)1, rvi_b->power);
+ int r = ClampToI32(vb - va);
return _internal_sort_order ? -r : r;
}
@@ -853,7 +855,8 @@
const EngineID engine = eng_list[min];
const uint num_engines = IsDefaultGroupID(selected_group) ? p->num_engines[engine] : GetGroup(selected_group)->num_engines[engine];
- DrawString(x + x_offset, y, GetCustomEngineName(engine), engine == selected_id ? 0xC : 0x10);
+ SetDParam(0, engine);
+ DrawString(x + x_offset, y, STR_ENGINE_NAME, engine == selected_id ? 0xC : 0x10);
DrawVehicleEngine(type, x, y + y_offset, engine, (show_count && num_engines == 0) ? PALETTE_CRASH : GetEnginePalette(engine, _local_player));
if (show_count) {
SetDParam(0, num_engines);
@@ -963,7 +966,8 @@
case VEH_SHIP: str = STR_9838_RENAME_SHIP_TYPE; break;
case VEH_AIRCRAFT: str = STR_A039_RENAME_AIRCRAFT_TYPE; break;
}
- ShowQueryString(GetCustomEngineName(sel_eng), str, 31, 160, w, CS_ALPHANUMERAL);
+ SetDParam(0, sel_eng);
+ ShowQueryString(STR_ENGINE_NAME, str, 31, 160, w, CS_ALPHANUMERAL);
}
break;
}
@@ -996,6 +1000,14 @@
BuildVehicleClickEvent(w, e);
break;
+ case WE_DOUBLE_CLICK:
+ if (e->we.click.widget == BUILD_VEHICLE_WIDGET_LIST) {
+ /* When double clicking, we want to buy a vehicle */
+ e->we.click.widget = BUILD_VEHICLE_WIDGET_BUILD;
+ BuildVehicleClickEvent(w, e);
+ }
+ break;
+
case WE_ON_EDIT_TEXT: {
if (e->we.edittext.str[0] != '\0') {
StringID str = STR_NULL;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cargopacket.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,357 @@
+/* $Id$ */
+
+/** @file cargopacket.cpp Implementation of the cargo packets */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "station.h"
+#include "cargopacket.h"
+#include "saveload.h"
+
+/** Cache for speeding up lookups in AllocateRaw */
+static uint _first_free_cargo_packet_index;
+
+/**
+ * Called if a new block is added to the station-pool
+ */
+static void CargoPacketPoolNewBlock(uint cpart_item)
+{
+ /* We don't use FOR_ALL here, because FOR_ALL skips invalid items.
+ * TODO - This is just a temporary stage, this will be removed. */
+ for (CargoPacket *cp = GetCargoPacket(cpart_item); cp != NULL; cp = (cp->index + 1U < GetCargoPacketPoolSize()) ? GetCargoPacket(cp->index + 1U) : NULL) cp->index = cpart_item++;
+}
+
+static void CargoPacketPoolCleanBlock(uint cpart_item, uint end_item)
+{
+ for (uint i = cpart_item; i <= end_item; i++) {
+ CargoPacket *cp = GetCargoPacket(i);
+ if (cp->IsValid()) cp->~CargoPacket();
+ }
+}
+
+/* Initialize the cargopacket-pool */
+DEFINE_OLD_POOL(CargoPacket, CargoPacket, CargoPacketPoolNewBlock, CargoPacketPoolCleanBlock)
+
+void InitializeCargoPackets()
+{
+ _first_free_cargo_packet_index = 0;
+ /* Clean the cargo packet pool and create 1 block in it */
+ CleanPool(&_CargoPacket_pool);
+ AddBlockToPool(&_CargoPacket_pool);
+
+ /* Check whether our &cargolist == &cargolist.packets "hack" works */
+ CargoList::AssertOnWrongPacketOffset();
+}
+
+CargoPacket::CargoPacket(StationID source, uint16 count)
+{
+ if (source != INVALID_STATION) assert(count != 0);
+
+ this->source = source;
+ this->source_xy = (source != INVALID_STATION) ? GetStation(source)->xy : 0;
+ this->loaded_at_xy = this->source_xy;
+
+ this->count = count;
+ this->days_in_transit = 0;
+ this->feeder_share = 0;
+ this->paid_for = false;
+}
+
+CargoPacket::~CargoPacket()
+{
+ if (this->index < _first_free_cargo_packet_index) _first_free_cargo_packet_index = this->index;
+ this->count = 0;
+}
+
+bool CargoPacket::SameSource(CargoPacket *cp)
+{
+ return this->source_xy == cp->source_xy && this->days_in_transit == cp->days_in_transit && this->paid_for == cp->paid_for;
+}
+
+void *CargoPacket::operator new(size_t size)
+{
+ CargoPacket *cp = AllocateRaw();
+ return cp;
+}
+
+void *CargoPacket::operator new(size_t size, CargoPacket::ID cp_idx)
+{
+ if (!AddBlockIfNeeded(&_CargoPacket_pool, cp_idx))
+ error("CargoPackets: failed loading savegame: too many cargo packets");
+
+ CargoPacket *cp = GetCargoPacket(cp_idx);
+ return cp;
+}
+
+void CargoPacket::operator delete(void *p)
+{
+}
+
+void CargoPacket::operator delete(void *p, CargoPacket::ID cp_idx)
+{
+}
+
+/*static*/ CargoPacket *CargoPacket::AllocateRaw()
+{
+ CargoPacket *cp = NULL;
+
+ /* We don't use FOR_ALL here, because FOR_ALL skips invalid items.
+ * TODO - This is just a temporary stage, this will be removed. */
+ for (cp = GetCargoPacket(_first_free_cargo_packet_index); cp != NULL; cp = (cp->index + 1U < GetCargoPacketPoolSize()) ? GetCargoPacket(cp->index + 1U) : NULL) {
+ if (!cp->IsValid()) {
+ CargoPacket::ID index = cp->index;
+
+ memset(cp, 0, sizeof(CargoPacket));
+ cp->index = index;
+ _first_free_cargo_packet_index = cp->index;
+ return cp;
+ }
+ }
+
+ /* Check if we can add a block to the pool */
+ if (AddBlockToPool(&_CargoPacket_pool)) return AllocateRaw();
+
+ error("CargoPackets: too many cargo packets");
+}
+
+static const SaveLoad _cargopacket_desc[] = {
+ SLE_VAR(CargoPacket, source, SLE_UINT16),
+ SLE_VAR(CargoPacket, source_xy, SLE_UINT32),
+ SLE_VAR(CargoPacket, loaded_at_xy, SLE_UINT32),
+ SLE_VAR(CargoPacket, count, SLE_UINT16),
+ SLE_VAR(CargoPacket, days_in_transit, SLE_UINT8),
+ SLE_VAR(CargoPacket, feeder_share, SLE_INT64),
+ SLE_VAR(CargoPacket, paid_for, SLE_BOOL),
+
+ SLE_END()
+};
+
+static void Save_CAPA()
+{
+ CargoPacket *cp;
+
+ FOR_ALL_CARGOPACKETS(cp) {
+ SlSetArrayIndex(cp->index);
+ SlObject(cp, _cargopacket_desc);
+ }
+}
+
+static void Load_CAPA()
+{
+ int index;
+
+ while ((index = SlIterateArray()) != -1) {
+ if (!AddBlockIfNeeded(&_CargoPacket_pool, index)) {
+ error("CargoPackets: failed loading savegame: too many cargo packets");
+ }
+
+ CargoPacket *cp = GetCargoPacket(index);
+ SlObject(cp, _cargopacket_desc);
+ }
+}
+
+extern const ChunkHandler _cargopacket_chunk_handlers[] = {
+ { 'CAPA', Save_CAPA, Load_CAPA, CH_ARRAY | CH_LAST},
+};
+
+/*
+ *
+ * Cargo list implementation
+ *
+ */
+
+/* static */ void CargoList::AssertOnWrongPacketOffset()
+{
+ CargoList cl;
+ if ((void*)&cl != (void*)cl.Packets()) NOT_REACHED();
+}
+
+
+CargoList::~CargoList()
+{
+ while (!packets.empty()) {
+ delete packets.front();
+ packets.pop_front();
+ }
+}
+
+const CargoList::List *CargoList::Packets() const
+{
+ return &packets;
+}
+
+void CargoList::AgeCargo()
+{
+ if (empty) return;
+
+ uint dit = 0;
+ for (List::const_iterator it = packets.begin(); it != packets.end(); it++) {
+ if ((*it)->days_in_transit != 0xFF) (*it)->days_in_transit++;
+ dit += (*it)->days_in_transit * (*it)->count;
+ }
+ days_in_transit = dit / count;
+}
+
+bool CargoList::Empty() const
+{
+ return empty;
+}
+
+uint CargoList::Count() const
+{
+ return count;
+}
+
+bool CargoList::UnpaidCargo() const
+{
+ return unpaid_cargo;
+}
+
+Money CargoList::FeederShare() const
+{
+ return feeder_share;
+}
+
+StationID CargoList::Source() const
+{
+ return source;
+}
+
+uint CargoList::DaysInTransit() const
+{
+ return days_in_transit;
+}
+
+void CargoList::Append(CargoPacket *cp)
+{
+ assert(cp != NULL);
+ assert(cp->IsValid());
+
+ for (List::iterator it = packets.begin(); it != packets.end(); it++) {
+ if ((*it)->SameSource(cp)) {
+ (*it)->count += cp->count;
+ (*it)->feeder_share += cp->feeder_share;
+ delete cp;
+
+ InvalidateCache();
+ return;
+ }
+ }
+
+ /* The packet could not be merged with another one */
+ packets.push_back(cp);
+ InvalidateCache();
+}
+
+
+void CargoList::Truncate(uint count)
+{
+ for (List::iterator it = packets.begin(); it != packets.end(); it++) {
+ uint local_count = (*it)->count;
+ if (local_count <= count) {
+ count -= local_count;
+ continue;
+ }
+
+ (*it)->count = count;
+ count = 0;
+ }
+
+ while (!packets.empty()) {
+ CargoPacket *cp = packets.back();
+ if (cp->count != 0) break;
+ delete cp;
+ packets.pop_back();
+ }
+
+ InvalidateCache();
+}
+
+bool CargoList::MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta, uint data)
+{
+ assert(mta == MTA_FINAL_DELIVERY || dest != NULL);
+ CargoList tmp;
+
+ while (!packets.empty() && count > 0) {
+ CargoPacket *cp = *packets.begin();
+ if (cp->count <= count) {
+ /* Can move the complete packet */
+ packets.remove(cp);
+ switch (mta) {
+ case MTA_FINAL_DELIVERY:
+ if (cp->source == data) {
+ tmp.Append(cp);
+ } else {
+ count -= cp->count;
+ delete cp;
+ }
+ break;
+ case MTA_CARGO_LOAD:
+ cp->loaded_at_xy = data;
+ /* When cargo is moved into another vehicle you have *always* paid for it */
+ cp->paid_for = false;
+ /* FALL THROUGH */
+ case MTA_OTHER:
+ count -= cp->count;
+ dest->packets.push_back(cp);
+ break;
+ }
+ } else {
+ /* Can move only part of the packet, so split it into two pieces */
+ if (mta != MTA_FINAL_DELIVERY) {
+ CargoPacket *cp_new = new CargoPacket();
+ cp_new->source = cp->source;
+ cp_new->source_xy = cp->source_xy;
+ cp_new->loaded_at_xy = (mta == MTA_CARGO_LOAD) ? data : cp->loaded_at_xy;
+
+ cp_new->days_in_transit = cp->days_in_transit;
+ cp_new->feeder_share = cp->feeder_share / count;
+ /* When cargo is moved into another vehicle you have *always* paid for it */
+ cp_new->paid_for = (mta == MTA_CARGO_LOAD) ? false : cp->paid_for;
+
+ cp_new->count = count;
+ dest->packets.push_back(cp_new);
+
+ cp->feeder_share /= cp->count - count;
+ }
+ cp->count -= count;
+
+ count = 0;
+ }
+ }
+
+ bool remaining = !packets.empty();
+
+ if (mta == MTA_FINAL_DELIVERY && !tmp.Empty()) {
+ /* There are some packets that could not be delivered at the station, put them back */
+ tmp.MoveTo(this, MAX_UVALUE(uint));
+ tmp.packets.clear();
+ }
+
+ if (dest != NULL) dest->InvalidateCache();
+ InvalidateCache();
+
+ return remaining;
+}
+
+void CargoList::InvalidateCache()
+{
+ empty = packets.empty();
+ count = 0;
+ unpaid_cargo = false;
+ feeder_share = 0;
+ source = INVALID_STATION;
+ days_in_transit = 0;
+
+ if (empty) return;
+
+ uint dit = 0;
+ for (List::const_iterator it = packets.begin(); it != packets.end(); it++) {
+ count += (*it)->count;
+ unpaid_cargo |= !(*it)->paid_for;
+ dit += (*it)->days_in_transit * (*it)->count;
+ feeder_share += (*it)->feeder_share;
+ }
+ days_in_transit = dit / count;
+ source = (*packets.begin())->source;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cargopacket.h Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,221 @@
+/* $Id$ */
+
+/** @file cargotype.h */
+
+#ifndef CARGOPACKET_H
+#define CARGOPACKET_H
+
+#include <list>
+
+/**
+ * Container for cargo from the same location and time
+ */
+struct CargoPacket {
+ bool touched;
+
+ typedef uint32 ID; ///< Type for cargopacket identifiers
+
+ ID index; ///< The unique index of this packet
+
+ StationID source; ///< The station where the cargo came from first
+ TileIndex source_xy; ///< The origin of the cargo (first station in feeder chain)
+ TileIndex loaded_at_xy; ///< Location where this cargo has been loaded into the vehicle
+
+ uint16 count; ///< The amount of cargo in this packet
+ byte days_in_transit; ///< Amount of days this packet has been in transit
+ Money feeder_share; ///< Value of feeder pickup to be paid for on delivery of cargo
+ bool paid_for; ///< Have we been paid for this cargo packet?
+
+ /**
+ * Creates a new cargo packet
+ * @param source the source of the packet
+ * @param count the number of cargo entities to put in this packet
+ * @pre count != 0 || source == INVALID_STATION
+ */
+ CargoPacket(StationID source = INVALID_STATION, uint16 count = 0);
+
+ /** Destroy the packet */
+ ~CargoPacket();
+
+
+ /**
+ * Is this a valid cargo packet ?
+ * @return true if and only it is valid
+ */
+ bool IsValid() const { return this->count != 0; }
+
+ /**
+ * Checks whether the cargo packet is from (exactly) the same source
+ * in time and location.
+ * @param cp the cargo packet to compare to
+ * @return true if and only if days_in_transit and source_xy are equal
+ */
+ bool SameSource(CargoPacket *cp);
+
+
+ /* normal new/delete operators. Used when building/removing station */
+ void* operator new (size_t size);
+ void operator delete(void *p);
+
+ /* new/delete operators accepting station index. Used when loading station from savegame. */
+ void* operator new (size_t size, CargoPacket::ID cp_idx);
+ void operator delete(void *p, CargoPacket::ID cp_idx);
+
+private:
+ /**
+ * Allocate the raw memory for this cargo packet
+ * @return the allocated memory
+ */
+ static CargoPacket *AllocateRaw();
+};
+
+/** We want to use a pool */
+DECLARE_OLD_POOL(CargoPacket, CargoPacket, 10, 1000)
+
+/**
+ * Iterate over all _valid_ cargo packets from the given start
+ * @param cp the variable used as "iterator"
+ * @param start the cargo packet ID of the first packet to iterate over
+ */
+#define FOR_ALL_CARGOPACKETS_FROM(cp, start) for (cp = GetCargoPacket(start); cp != NULL; cp = (cp->index + 1U < GetCargoPacketPoolSize()) ? GetCargoPacket(cp->index + 1U) : NULL) if (cp->IsValid())
+
+/**
+ * Iterate over all _valid_ cargo packets from the begin of the pool
+ * @param cp the variable used as "iterator"
+ */
+#define FOR_ALL_CARGOPACKETS(cp) FOR_ALL_CARGOPACKETS_FROM(cp, 0)
+
+/**
+ * Simple collection class for a list of cargo packets
+ */
+class CargoList {
+public:
+ /** List of cargo packets */
+ typedef std::list<CargoPacket *> List;
+
+ /** Kind of actions that could be done with packets on move */
+ enum MoveToAction {
+ MTA_FINAL_DELIVERY, ///< "Deliver" the packet to the final destination, i.e. destroy the packet
+ MTA_CARGO_LOAD, ///< Load the packet onto a vehicle, i.e. set the last loaded station ID
+ MTA_OTHER ///< "Just" move the packet to another cargo list
+ };
+
+private:
+ List packets; ///< The cargo packets in this list
+
+ bool empty; ///< Cache for whether this list is empty or not
+ uint count; ///< Cache for the number of cargo entities
+ bool unpaid_cargo; ///< Cache for the unpaid cargo
+ Money feeder_share; ///< Cache for the feeder share
+ StationID source; ///< Cache for the source of the packet
+ uint days_in_transit; ///< Cache for the number of days in transit
+
+public:
+ /**
+ * Needed for an ugly hack:
+ * - vehicles and stations need to store cargo lists, so they use CargoList as container
+ * - this internals of the container should be protected, e.g. private (or protected) by C++
+ * - for saving/loading we need to pass pointer to objects
+ * -> so *if* the pointer to the cargo list is the same as the pointer to the packet list
+ * encapsulated in the CargoList, we can just pass the CargoList as "offset".
+ * Normally we would then just add the offset of the packets variable within the cargo list
+ * but that is not possible because the variable is private. Furthermore we are not sure
+ * that this works on all platforms, we need to check whether the offset is actually 0.
+ * This cannot be done compile time, because the variable is private. So we need to write
+ * a function that does actually check the offset runtime and call it somewhere where it
+ * is always called but it should not be called often.
+ */
+ static void AssertOnWrongPacketOffset();
+
+ /** Create the cargo list */
+ CargoList() { this->InvalidateCache(); }
+ /** And destroy it ("frees" all cargo packets) */
+ ~CargoList();
+
+ /**
+ * Returns a pointer to the cargo packet list (so you can iterate over it etc).
+ * @return pointer to the packet list
+ */
+ const CargoList::List *Packets() const;
+
+ /**
+ * Ages the all cargo in this list
+ */
+ void AgeCargo();
+
+ /**
+ * Checks whether this list is empty
+ * @return true if and only if the list is empty
+ */
+ bool Empty() const;
+
+ /**
+ * Returns the number of cargo entities in this list
+ * @return the before mentioned number
+ */
+ uint Count() const;
+
+ /**
+ * Is there some cargo that has not been paid for?
+ * @return true if and only if there is such a cargo
+ */
+ bool UnpaidCargo() const;
+
+ /**
+ * Returns total sum of the feeder share for all packets
+ * @return the before mentioned number
+ */
+ Money FeederShare() const;
+
+ /**
+ * Returns source of the first cargo packet in this list
+ * @return the before mentioned source
+ */
+ StationID Source() const;
+
+ /**
+ * Returns average number of days in transit for a cargo entity
+ * @return the before mentioned number
+ */
+ uint DaysInTransit() const;
+
+
+ /**
+ * Appends the given cargo packet
+ * @warning After appending this packet may not exist anymore!
+ * @note Do not use the cargo packet anymore after it has been appended to this CargoList!
+ * @param cp the cargo packet to add
+ * @pre cp != NULL
+ */
+ void Append(CargoPacket *cp);
+
+ /**
+ * Truncates the cargo in this list to the given amount. It leaves the
+ * first count cargo entities and removes the rest.
+ * @param count the maximum amount of entities to be in the list after the command
+ */
+ void Truncate(uint count);
+
+ /**
+ * Moves the given amount of cargo to another list.
+ * Depending on the value of mta the side effects of this function differ:
+ * - MTA_FINAL_DELIVERY: destroys the packets that do not originate from a specific station
+ * - MTA_CARGO_LOAD: sets the loaded_at_xy value of the moved packets
+ * - MTA_OTHER: just move without side effects
+ * @param dest the destination to move the cargo to
+ * @param count the amount of cargo entities to move
+ * @param mta how to handle the moving (side effects)
+ * @param data Depending on mta the data of this variable differs:
+ * - MTA_FINAL_DELIVERY - station ID of packet's origin not to remove
+ * - MTA_CARGO_LOAD - station's tile index of load
+ * - MTA_OTHER - unused
+ * @param mta == MTA_FINAL_DELIVERY || dest != NULL
+ * @return true if there are still packets that might be moved from this cargo list
+ */
+ bool MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta = MTA_OTHER, uint data = 0);
+
+ /** Invalidates the cached data and rebuild it */
+ void InvalidateCache();
+};
+
+#endif /* CARGOPACKET_H */
--- a/src/clear_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/clear_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -22,6 +22,7 @@
#include "unmovable_map.h"
#include "genworld.h"
#include "industry.h"
+#include "water_map.h"
struct TerraformerHeightMod {
TileIndex tile;
@@ -36,7 +37,7 @@
int modheight_count;
int tile_table_count;
- int32 cost;
+ CommandCost cost;
TileIndex *tile_table;
TerraformerHeightMod *modheight;
@@ -97,7 +98,7 @@
static int TerraformProc(TerraformerState *ts, TileIndex tile, int mode)
{
int r;
- int32 ret;
+ CommandCost ret;
assert(tile < MapSize());
@@ -116,7 +117,7 @@
* basement and then you raise/lower the other corner. */
tileh = GetTileSlope(tile, &z);
if (tileh == unsafe_slope[mode] ||
- tileh == ComplementSlope(unsafe_slope[mode])) {
+ tileh == (SLOPE_STEEP | ComplementSlope(unsafe_slope[mode]))) {
_terraform_err_tile = tile;
_error_message = STR_1008_MUST_REMOVE_RAILROAD_TRACK;
return -1;
@@ -141,6 +142,13 @@
}
}
+ /* Canals can't be terraformed */
+ if (IsClearWaterTile(tile) && IsCanal(tile)) {
+ _terraform_err_tile = tile;
+ _error_message = STR_MUST_DEMOLISH_CANAL_FIRST;
+ return -1;
+ }
+
ret = DoCommand(tile, 0, 0, ts->flags & ~DC_EXEC, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) {
@@ -148,7 +156,7 @@
return -1;
}
- ts->cost += ret;
+ ts->cost.AddCost(ret.GetCost());
if (ts->tile_table_count >= 625) return -1;
ts->tile_table[ts->tile_table_count++] = tile;
@@ -198,7 +206,7 @@
mod->tile = tile;
mod->height = (byte)height;
- ts->cost += _price.terraform;
+ ts->cost.AddCost(_price.terraform);
{
int direction = ts->direction, r;
@@ -232,7 +240,7 @@
* @param p2 direction; eg up or down
* @return error or cost of terraforming
*/
-int32 CmdTerraformLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdTerraformLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
TerraformerState ts;
TileIndex t;
@@ -248,7 +256,7 @@
ts.direction = direction = p2 ? 1 : -1;
ts.flags = flags;
ts.modheight_count = ts.tile_table_count = 0;
- ts.cost = 0;
+ ts.cost = CommandCost();
ts.modheight = modheight_data;
ts.tile_table = tile_table_data;
@@ -357,14 +365,16 @@
* @param p2 unused
* @return error or cost of terraforming
*/
-int32 CmdLevelLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdLevelLand(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
int size_x, size_y;
int ex;
int ey;
int sx, sy;
uint h, curh;
- int32 ret, cost, money;
+ CommandCost money;
+ CommandCost ret;
+ CommandCost cost;
if (p1 >= MapSize()) return CMD_ERROR;
@@ -385,29 +395,29 @@
size_x = ex - sx + 1;
size_y = ey - sy + 1;
- money = GetAvailableMoneyForCommand();
- cost = 0;
+ money.AddCost(GetAvailableMoneyForCommand());
BEGIN_TILE_LOOP(tile2, size_x, size_y, tile) {
curh = TileHeight(tile2);
while (curh != h) {
ret = DoCommand(tile2, 8, (curh > h) ? 0 : 1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND);
if (CmdFailed(ret)) break;
- cost += ret;
if (flags & DC_EXEC) {
- if ((money -= ret) < 0) {
- _additional_cash_required = ret;
- return cost - ret;
+ money.AddCost(-ret.GetCost());
+ if (money.GetCost() < 0) {
+ _additional_cash_required = ret.GetCost();
+ return cost;
}
DoCommand(tile2, 8, (curh > h) ? 0 : 1, flags, CMD_TERRAFORM_LAND);
}
+ cost.AddCost(ret);
curh += (curh > h) ? -1 : 1;
}
} END_TILE_LOOP(tile2, size_x, size_y, tile)
- return (cost == 0) ? CMD_ERROR : cost;
+ return (cost.GetCost() == 0) ? CMD_ERROR : cost;
}
/** Purchase a land area. Actually you only purchase one tile, so
@@ -418,9 +428,9 @@
* @param p2 unused
* @return error of cost of operation
*/
-int32 CmdPurchaseLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPurchaseLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 cost;
+ CommandCost cost;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -438,13 +448,13 @@
MarkTileDirtyByTile(tile);
}
- return cost + _price.purchase_land * 10;
+ return cost.AddCost(_price.purchase_land * 10);
}
-static int32 ClearTile_Clear(TileIndex tile, byte flags)
+static CommandCost ClearTile_Clear(TileIndex tile, byte flags)
{
- static const int32* clear_price_table[] = {
+ static const Money* clear_price_table[] = {
&_price.clear_1,
&_price.purchase_land,
&_price.clear_2,
@@ -453,12 +463,10 @@
&_price.purchase_land,
&_price.clear_2, // XXX unused?
};
- int32 price;
+ CommandCost price;
- if (IsClearGround(tile, CLEAR_GRASS) && GetClearDensity(tile) == 0) {
- price = 0;
- } else {
- price = *clear_price_table[GetClearGround(tile)];
+ if (!IsClearGround(tile, CLEAR_GRASS) || GetClearDensity(tile) != 0) {
+ price.AddCost(*clear_price_table[GetClearGround(tile)]);
}
if (flags & DC_EXEC) DoClearSquare(tile);
@@ -474,7 +482,7 @@
* @param p2 unused
* @return error or cost of operation
*/
-int32 CmdSellLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -486,7 +494,7 @@
if (flags & DC_EXEC) DoClearSquare(tile);
- return - _price.purchase_land * 2;
+ return CommandCost(- _price.purchase_land * 2);
}
--- a/src/command.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/command.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -17,7 +17,7 @@
const char* _cmd_text = NULL;
-#define DEF_COMMAND(yyyy) int32 yyyy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+#define DEF_COMMAND(yyyy) CommandCost yyyy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
DEF_COMMAND(CmdBuildRailroadTrack);
DEF_COMMAND(CmdRemoveRailroadTrack);
@@ -177,6 +177,9 @@
DEF_COMMAND(CmdSetGroupReplaceProtection);
DEF_COMMAND(CmdMoveOrder);
+DEF_COMMAND(CmdChangeTimetable);
+DEF_COMMAND(CmdSetVehicleOnTime);
+DEF_COMMAND(CmdAutofillTimetable);
/* The master command table */
static const Command _command_proc_table[] = {
@@ -331,6 +334,9 @@
{CmdRemoveAllVehiclesGroup, 0}, /* 125 */
{CmdSetGroupReplaceProtection, 0}, /* 126 */
{CmdMoveOrder, 0}, /* 127 */
+ {CmdChangeTimetable, 0}, /* 128 */
+ {CmdSetVehicleOnTime, 0}, /* 129 */
+ {CmdAutofillTimetable, 0}, /* 130 */
};
/* This function range-checks a cmd, and checks if the cmd is not NULL */
@@ -351,9 +357,9 @@
static int _docommand_recursive;
-int32 DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
+CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc)
{
- int32 res;
+ CommandCost res;
CommandProc *proc;
/* Do not even think about executing out-of-bounds tile-commands */
@@ -372,13 +378,13 @@
if (_docommand_recursive == 1 || !(flags & DC_EXEC) || (flags & DC_FORCETEST) ) {
res = proc(tile, flags & ~DC_EXEC, p1, p2);
if (CmdFailed(res)) {
- if (res & 0xFFFF) _error_message = res & 0xFFFF;
+ res.SetGlobalErrorMessage();
goto error;
}
if (_docommand_recursive == 1 &&
!(flags & DC_QUERY_COST) &&
- res != 0 &&
+ res.GetCost() != 0 &&
!CheckPlayerHasMoney(res)) {
goto error;
}
@@ -394,7 +400,7 @@
* themselves with "SET_EXPENSES_TYPE(...);" at the beginning of the function */
res = proc(tile, flags, p1, p2);
if (CmdFailed(res)) {
- if (res & 0xFFFF) _error_message = res & 0xFFFF;
+ res.SetGlobalErrorMessage();
error:
_docommand_recursive--;
_cmd_text = NULL;
@@ -414,10 +420,10 @@
return res;
}
-int32 GetAvailableMoneyForCommand()
+Money GetAvailableMoneyForCommand()
{
PlayerID pid = _current_player;
- if (!IsValidPlayer(pid)) return 0x7FFFFFFF; // max int
+ if (!IsValidPlayer(pid)) return INT64_MAX;
return GetPlayer(pid)->player_money;
}
@@ -425,7 +431,7 @@
* the callback is called when the command succeeded or failed. */
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd)
{
- int32 res = 0, res2;
+ CommandCost res, res2;
CommandProc *proc;
uint32 flags;
bool notest;
@@ -497,10 +503,10 @@
/* estimate the cost. */
res = proc(tile, flags, p1, p2);
if (CmdFailed(res)) {
- if (res & 0xFFFF) _error_message = res & 0xFFFF;
+ res.SetGlobalErrorMessage();
ShowErrorMessage(_error_message, error_part1, x, y);
} else {
- ShowEstimatedCostOrIncome(res, x, y);
+ ShowEstimatedCostOrIncome(res.GetCost(), x, y);
}
_docommand_recursive = 0;
@@ -513,11 +519,11 @@
/* first test if the command can be executed. */
res = proc(tile, flags, p1, p2);
if (CmdFailed(res)) {
- if (res & 0xFFFF) _error_message = res & 0xFFFF;
+ res.SetGlobalErrorMessage();
goto show_error;
}
/* no money? Only check if notest is off */
- if (!notest && res != 0 && !CheckPlayerHasMoney(res)) goto show_error;
+ if (!notest && res.GetCost() != 0 && !CheckPlayerHasMoney(res)) goto show_error;
}
#ifdef ENABLE_NETWORK
@@ -552,10 +558,10 @@
/* If notest is on, it means the result of the test can be different than
* the real command.. so ignore the test */
if (!notest && !((cmd & CMD_NO_TEST_IF_IN_NETWORK) && _networking)) {
- assert(res == res2); // sanity check
+ assert(res.GetCost() == res2.GetCost() && CmdFailed(res) == CmdFailed(res2)); // sanity check
} else {
if (CmdFailed(res2)) {
- if (res2 & 0xFFFF) _error_message = res2 & 0xFFFF;
+ res.SetGlobalErrorMessage();
goto show_error;
}
}
@@ -563,11 +569,11 @@
SubtractMoneyFromPlayer(res2);
if (IsLocalPlayer() && _game_mode != GM_EDITOR) {
- if (res2 != 0) ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2);
- if (_additional_cash_required) {
+ if (res2.GetCost() != 0) ShowCostOrIncomeAnimation(x, y, GetSlopeZ(x, y), res2.GetCost());
+ if (_additional_cash_required != 0) {
SetDParam(0, _additional_cash_required);
ShowErrorMessage(STR_0003_NOT_ENOUGH_CASH_REQUIRES, error_part1, x, y);
- if (res2 == 0) goto callb_err;
+ if (res2.GetCost() == 0) goto callb_err;
}
}
@@ -590,3 +596,59 @@
_cmd_text = NULL;
return false;
}
+
+
+CommandCost CommandCost::AddCost(CommandCost ret)
+{
+ this->AddCost(ret.cost);
+ if (this->success && !ret.success) {
+ this->message = ret.message;
+ this->success = false;
+ }
+ return *this;
+}
+
+CommandCost CommandCost::AddCost(Money cost)
+{
+ /* Overflow protection */
+ if (cost < 0 && (this->cost + cost) > this->cost) {
+ this->cost = INT64_MIN;
+ } else if (cost > 0 && (this->cost + cost) < this->cost) {
+ this->cost = INT64_MAX;
+ } else {
+ this->cost += cost;
+ }
+ return *this;
+}
+
+CommandCost CommandCost::MultiplyCost(int factor)
+{
+ /* Overflow protection */
+ if (factor != 0 && (INT64_MAX / myabs(factor)) < myabs(this->cost)) {
+ this->cost = (this->cost < 0 == factor < 0) ? INT64_MAX : INT64_MIN;
+ } else {
+ this->cost *= factor;
+ }
+ return *this;
+}
+
+Money CommandCost::GetCost() const
+{
+ return this->cost;
+}
+
+void CommandCost::SetGlobalErrorMessage() const
+{
+ extern StringID _error_message;
+ if (this->message != INVALID_STRING_ID) _error_message = this->message;
+}
+
+bool CommandCost::Succeeded() const
+{
+ return this->success;
+}
+
+bool CommandCost::Failed() const
+{
+ return !this->success;
+}
--- a/src/command.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/command.h Tue Jun 26 23:40:58 2007 +0000
@@ -153,6 +153,9 @@
CMD_SET_GROUP_REPLACE_PROTECTION = 126,
CMD_MOVE_ORDER = 127,
+ CMD_CHANGE_TIMETABLE = 128,
+ CMD_SET_VEHICLE_ON_TIME = 129,
+ CMD_AUTOFILL_TIMETABLE = 130,
};
enum {
@@ -163,8 +166,6 @@
DC_NO_RAIL_OVERLAP = 0x10, ///< don't allow overlap of rails (used in buildrail)
DC_NO_TOWN_RATING = 0x40, ///< town rating does not disallow you from building
DC_FORCETEST = 0x80, ///< force test too.
-
- CMD_ERROR = ((int32)0x80000000),
};
#define CMD_MSG(x) ((x) << 16)
@@ -183,30 +184,23 @@
CMD_OFFLINE = 0x2, ///< the command cannot be executed in a multiplayer game; single-player only
};
-typedef int32 CommandProc(TileIndex tile, uint32 flags, uint32 p1, uint32 p2);
+typedef CommandCost CommandProc(TileIndex tile, uint32 flags, uint32 p1, uint32 p2);
struct Command {
CommandProc *proc;
byte flags;
};
-//#define return_cmd_error(errcode) do { _error_message=(errcode); return CMD_ERROR; } while(0)
-#define return_cmd_error(errcode) do { return CMD_ERROR | (errcode); } while (0)
+static inline bool CmdFailed(CommandCost cost) { return cost.Failed(); }
+static inline bool CmdSucceeded(CommandCost cost) { return cost.Succeeded(); }
-/**
- * Check the return value of a DoCommand*() function
- * @param res the resulting value from the command to be checked
- * @return Return true if the command failed, false otherwise
- */
-static inline bool CmdFailed(int32 res)
-{
- /* lower 16bits are the StringID of the possible error */
- return res <= (CMD_ERROR | INVALID_STRING_ID);
-}
+static const CommandCost CMD_ERROR = CommandCost((StringID)INVALID_STRING_ID);
+
+#define return_cmd_error(errcode) do { return CommandCost((StringID)(errcode)); } while (0)
/* command.cpp */
typedef void CommandCallback(bool success, TileIndex tile, uint32 p1, uint32 p2);
-int32 DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
+CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc);
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd);
#ifdef ENABLE_NETWORK
@@ -218,6 +212,6 @@
bool IsValidCommand(uint cmd);
byte GetCommandFlags(uint cmd);
-int32 GetAvailableMoneyForCommand();
+Money GetAvailableMoneyForCommand();
#endif /* COMMAND_H */
--- a/src/console.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/console.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -388,7 +388,8 @@
str_validate(str);
if (_network_dedicated) {
- printf("%s\n", str);
+ fprintf(stdout, "%s\n", str);
+ fflush(stdout);
IConsoleWriteToLogFile(str);
free(str); // free duplicated string since it's not used anymore
return;
--- a/src/console_cmds.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/console_cmds.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -1248,7 +1248,7 @@
const NetworkPlayerInfo *npi = &_network_player_info[p->index];
GetString(buffer, STR_00D1_DARK_BLUE + _player_colors[p->index], lastof(buffer));
- IConsolePrintF(8, "#:%d(%s) Company Name: '%s' Year Founded: %d Money: %d Loan: %d Value: %" OTTD_PRINTF64 "d (T:%d, R:%d, P:%d, S:%d) %sprotected",
+ IConsolePrintF(8, "#:%d(%s) Company Name: '%s' Year Founded: %d Money: %" OTTD_PRINTF64 "d Loan: %" OTTD_PRINTF64 "d Value: %" OTTD_PRINTF64 "d (T:%d, R:%d, P:%d, S:%d) %sprotected",
p->index + 1, buffer, npi->company_name, p->inaugurated_year, p->player_money, p->current_loan, CalculateCompanyValue(p),
/* trains */ npi->num_vehicle[0],
/* lorry + bus */ npi->num_vehicle[1] + npi->num_vehicle[2],
--- a/src/driver.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/driver.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -64,7 +64,7 @@
#if defined(LIBTIMIDITY)
M("libtimidity", "LibTimidity MIDI Driver", &_libtimidity_music_driver),
#endif /* LIBTIMIDITY */
-#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(PSP)
+#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(__OS2__) && !defined(PSP)
M("extmidi", "External MIDI Driver", &_extmidi_music_driver),
#endif
#endif
--- a/src/dummy_land.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/dummy_land.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -26,7 +26,7 @@
return SLOPE_FLAT;
}
-static int32 ClearTile_Dummy(TileIndex tile, byte flags)
+static CommandCost ClearTile_Dummy(TileIndex tile, byte flags)
{
return_cmd_error(STR_0001_OFF_EDGE_OF_MAP);
}
--- a/src/economy.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/economy.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -57,10 +57,11 @@
int _score_part[MAX_PLAYERS][SCORE_END];
-int64 CalculateCompanyValue(const Player* p)
+Money CalculateCompanyValue(const Player* p)
{
PlayerID owner = p->index;
- int64 value;
+ /* Do a little nasty by using CommandCost, so we can use the "overflow" protection of CommandCost */
+ CommandCost value;
{
Station *st;
@@ -70,7 +71,7 @@
if (st->owner == owner) num += CountBitsSet(st->facilities);
}
- value = num * _price.station_value * 25;
+ value.AddCost(num * _price.station_value * 25);
}
{
@@ -83,14 +84,16 @@
v->type == VEH_ROAD ||
(v->type == VEH_AIRCRAFT && IsNormalAircraft(v)) ||
v->type == VEH_SHIP) {
- value += v->value * 3 >> 1;
+ value.AddCost(v->value * 3 >> 1);
}
}
}
- value += p->money64 - p->current_loan; // add real money value
+ /* Add real money value */
+ value.AddCost(-p->current_loan);
+ value.AddCost(p->player_money);
- return max(value, 1LL);
+ return max(value.GetCost(), 1LL);
}
/** if update is set to true, the economy is updated with this score
@@ -109,7 +112,7 @@
/* Count vehicles */
{
Vehicle *v;
- int32 min_profit = 0;
+ Money min_profit = 0;
bool min_profit_first = true;
uint num = 0;
@@ -132,7 +135,7 @@
_score_part[owner][SCORE_VEHICLES] = num;
/* Don't allow negative min_profit to show */
if (min_profit > 0)
- _score_part[owner][SCORE_MIN_PROFIT] = min_profit;
+ _score_part[owner][SCORE_MIN_PROFIT] = ClampToI32(min_profit);
}
/* Count stations */
@@ -148,25 +151,21 @@
/* Generate statistics depending on recent income statistics */
{
- const PlayerEconomyEntry* pee;
- int numec;
- int32 min_income;
- int32 max_income;
+ int numec = min(p->num_valid_stat_ent, 12);
+ if (numec != 0) {
+ const PlayerEconomyEntry *pee = p->old_economy;
+ Money min_income = pee->income + pee->expenses;
+ Money max_income = pee->income + pee->expenses;
- numec = min(p->num_valid_stat_ent, 12);
- if (numec != 0) {
- min_income = 0x7FFFFFFF;
- max_income = 0;
- pee = p->old_economy;
do {
min_income = min(min_income, pee->income + pee->expenses);
max_income = max(max_income, pee->income + pee->expenses);
} while (++pee,--numec);
if (min_income > 0)
- _score_part[owner][SCORE_MIN_INCOME] = min_income;
+ _score_part[owner][SCORE_MIN_INCOME] = ClampToI32(min_income);
- _score_part[owner][SCORE_MAX_INCOME] = max_income;
+ _score_part[owner][SCORE_MAX_INCOME] = ClampToI32(max_income);
}
}
@@ -197,15 +196,14 @@
/* Generate score for player money */
{
- int32 money = p->player_money;
- if (money > 0) {
- _score_part[owner][SCORE_MONEY] = money;
+ if (p->player_money > 0) {
+ _score_part[owner][SCORE_MONEY] = ClampToI32(p->player_money);
}
}
/* Generate score for loan */
{
- _score_part[owner][SCORE_LOAN] = _score_info[SCORE_LOAN].needed - p->current_loan;
+ _score_part[owner][SCORE_LOAN] = ClampToI32(_score_info[SCORE_LOAN].needed - p->current_loan);
}
/* Now we calculate the score for each item.. */
@@ -259,7 +257,7 @@
for (i = 0; i < 4; i++) {
if (p->share_owners[i] == old_player) {
/* Sell his shares */
- int32 res = DoCommand(0, p->index, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
+ CommandCost res = DoCommand(0, p->index, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
/* Because we are in a DoCommand, we can't just execute an other one and
* expect the money to be removed. We need to do it ourself! */
SubtractMoneyFromPlayer(res);
@@ -273,7 +271,7 @@
_current_player = p->share_owners[i];
if (_current_player != PLAYER_SPECTATOR) {
/* Sell the shares */
- int32 res = DoCommand(0, old_player, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
+ CommandCost res = DoCommand(0, old_player, 0, DC_EXEC, CMD_SELL_SHARE_IN_COMPANY);
/* Because we are in a DoCommand, we can't just execute an other one and
* expect the money to be removed. We need to do it ourself! */
SubtractMoneyFromPlayer(res);
@@ -287,8 +285,7 @@
* removing his/her property doesn't fail because of lack of money.
* Not too drastically though, because it could overflow */
if (new_player == PLAYER_SPECTATOR) {
- GetPlayer(old_player)->money64 = MAX_UVALUE(uint64) >>2; // jackpot ;p
- UpdatePlayerMoney32(GetPlayer(old_player));
+ GetPlayer(old_player)->player_money = MAX_UVALUE(uint64) >> 2; // jackpot ;p
}
if (new_player == PLAYER_SPECTATOR) {
@@ -440,7 +437,6 @@
static void PlayersCheckBankrupt(Player *p)
{
PlayerID owner;
- int64 val;
/* If the player has money again, it does not go bankrupt */
if (p->player_money >= 0) {
@@ -468,7 +464,7 @@
/* Check if the company has any value.. if not, declare it bankrupt
* right now */
- val = CalculateCompanyValue(p);
+ Money val = CalculateCompanyValue(p);
if (val > 0) {
p->bankrupt_value = val;
p->bankrupt_asked = 1 << owner; // Don't ask the owner
@@ -482,8 +478,7 @@
DeletePlayerWindows(owner);
/* Show bankrupt news */
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
+ SetDParam(0, p->index);
AddNewsItem( (StringID)(owner | NB_BBANKRUPT), NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
if (IsHumanPlayer(owner)) {
@@ -519,8 +514,7 @@
DrawPlayerFace(p->face, p->player_color, 2, 23);
GfxFillRect(3, 23, 3 + 91, 23 + 118, PALETTE_TO_STRUCT_GREY | (1 << USE_COLORTABLE));
- SetDParam(0, p->president_name_1);
- SetDParam(1, p->president_name_2);
+ SetDParam(0, p->index);
DrawStringMultiCenter(49, 148, STR_7058_PRESIDENT, 94);
@@ -528,8 +522,7 @@
case NB_BTROUBLE:
DrawStringCentered(w->width>>1, 1, STR_7056_TRANSPORT_COMPANY_IN_TROUBLE, 0);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
+ SetDParam(0, p->index);
DrawStringMultiCenter(
((w->width - 101) >> 1) + 98,
@@ -543,10 +536,9 @@
DrawStringCentered(w->width>>1, 1, STR_7059_TRANSPORT_COMPANY_MERGER, 0);
COPY_IN_DPARAM(0,WP(w,news_d).ni->params, 2);
- SetDParam(2, p->name_1);
- SetDParam(3, p->name_2);
+ SetDParam(2, p->index);
price = WP(w,news_d).ni->params[2];
- SetDParam(4, price);
+ SetDParam(3, price);
DrawStringMultiCenter(
((w->width - 101) >> 1) + 98,
90,
@@ -567,9 +559,8 @@
case NB_BNEWCOMPANY:
DrawStringCentered(w->width>>1, 1, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED, 0);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- COPY_IN_DPARAM(2,WP(w,news_d).ni->params, 2);
+ SetDParam(0, p->index);
+ COPY_IN_DPARAM(1,WP(w,news_d).ni->params, 2);
DrawStringMultiCenter(
((w->width - 101) >> 1) + 98,
90,
@@ -590,16 +581,14 @@
case NB_BTROUBLE:
SetDParam(0, STR_7056_TRANSPORT_COMPANY_IN_TROUBLE);
SetDParam(1, STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED);
- SetDParam(2, p->name_1);
- SetDParam(3, p->name_2);
+ SetDParam(2, p->index);
return STR_02B6;
case NB_BMERGER:
SetDParam(0, STR_7059_TRANSPORT_COMPANY_MERGER);
SetDParam(1, STR_705A_HAS_BEEN_SOLD_TO_FOR);
COPY_IN_DPARAM(2,ni->params, 2);
- SetDParam(4, p->name_1);
- SetDParam(5, p->name_2);
- COPY_IN_DPARAM(6,ni->params + 2, 1);
+ SetDParam(4, p->index);
+ COPY_IN_DPARAM(5,ni->params + 2, 1);
return STR_02B6;
case NB_BBANKRUPT:
SetDParam(0, STR_705C_BANKRUPT);
@@ -609,9 +598,8 @@
case NB_BNEWCOMPANY:
SetDParam(0, STR_705E_NEW_TRANSPORT_COMPANY_LAUNCHED);
SetDParam(1, STR_705F_STARTS_CONSTRUCTION_NEAR);
- SetDParam(2, p->name_1);
- SetDParam(3, p->name_2);
- COPY_IN_DPARAM(4,ni->params, 2);
+ SetDParam(2, p->index);
+ COPY_IN_DPARAM(3,ni->params, 2);
return STR_02B6;
default:
NOT_REACHED();
@@ -658,11 +646,17 @@
InvalidateWindow(WC_COMPANY_LEAGUE, 0);
}
-static void AddSingleInflation(int32 *value, uint16 *frac, int32 amt)
+static void AddSingleInflation(Money *value, uint16 *frac, int32 amt)
{
- int64 tmp = (int64)*value * amt + *frac;
- *frac = GB(tmp, 0, 16);
- *value += tmp >> 16;
+ /* Is it safe to add inflation ? */
+ if ((INT64_MAX / amt) < (*value + 1)) {
+ *value = INT64_MAX / amt;
+ *frac = 0;
+ } else {
+ int64 tmp = (int64)*value * amt + *frac;
+ *frac = GB(tmp, 0, 16);
+ *value += tmp >> 16;
+ }
}
static void AddInflation()
@@ -672,10 +666,10 @@
* 12 -> months per year
* This is only a good approxiamtion for small values
*/
- int32 inf = _economy.infl_amount * 54;
+ Money inf = _economy.infl_amount * 54;
for (uint i = 0; i != NUM_PRICES; i++) {
- AddSingleInflation((int32*)&_price + i, _price_frac + i, inf);
+ AddSingleInflation((Money*)&_price + i, _price_frac + i, inf);
}
_economy.max_loan_unround += BIGMULUS(_economy.max_loan_unround, inf, 16);
@@ -686,7 +680,7 @@
inf = _economy.infl_amount_pr * 54;
for (CargoID i = 0; i < NUM_CARGO; i++) {
AddSingleInflation(
- (int32*)_cargo_payment_rates + i,
+ (Money*)_cargo_payment_rates + i,
_cargo_payment_rates_frac + i,
inf
);
@@ -709,7 +703,7 @@
_current_player = p->index;
SET_EXPENSES_TYPE(EXPENSES_LOAN_INT);
- SubtractMoneyFromPlayer(BIGMULUS(p->current_loan, interest, 16));
+ SubtractMoneyFromPlayer(CommandCost((Money)BIGMULUS(p->current_loan, interest, 16)));
SET_EXPENSES_TYPE(EXPENSES_OTHER);
SubtractMoneyFromPlayer(_price.station_value >> 2);
@@ -739,7 +733,7 @@
2,
};
-static const int32 _price_base[NUM_PRICES] = {
+static const Money _price_base[NUM_PRICES] = {
100, ///< station_value
100, ///< build_rail
95, ///< build_road
@@ -822,10 +816,10 @@
{
int i;
- assert(sizeof(_price) == NUM_PRICES * sizeof(int32));
+ assert(sizeof(_price) == NUM_PRICES * sizeof(Money));
for (i = 0; i != NUM_PRICES; i++) {
- int32 price = _price_base[i];
+ Money price = _price_base[i];
if (_price_category[i] != 0) {
uint mod = _price_category[i] == 1 ? _opt.diff.vehicle_costs : _opt.diff.construction_cost;
if (mod < 1) {
@@ -839,7 +833,7 @@
} else {
price >>= 8 - price_base_multiplier[i];
}
- ((int32*)&_price)[i] = price;
+ ((Money*)&_price)[i] = price;
_price_frac[i] = 0;
}
@@ -1152,7 +1146,7 @@
SlObject(&_subsidies[index], _subsidies_desc);
}
-int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, CargoID cargo_type)
+Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, CargoID cargo_type)
{
const CargoSpec *cs = GetCargo(cargo_type);
byte f;
@@ -1299,8 +1293,7 @@
InjectDParam(2);
p = GetPlayer(_current_player);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
+ SetDParam(0, p->index);
AddNewsItem(
STR_2031_SERVICE_SUBSIDY_AWARDED + _opt.diff.subsidy_multiplier,
NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_SUBSIDIES, 0),
@@ -1314,11 +1307,11 @@
return false;
}
-static int32 DeliverGoods(int num_pieces, CargoID cargo_type, StationID source, StationID dest, TileIndex source_tile, byte days_in_transit)
+static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID source, StationID dest, TileIndex source_tile, byte days_in_transit)
{
bool subsidised;
Station *s_from, *s_to;
- int32 profit;
+ Money profit;
assert(num_pieces > 0);
@@ -1368,14 +1361,9 @@
{
int result = 0;
- int profit = 0;
- int total_veh_profit = 0; // accumulates the profit across the vehicle chain (used by trains)
- int32 route_profit = 0; // the grand total amount for the route. A-D of transfer chain A-B-C-D
- int virtual_profit = 0; // virtual profit of one vehicle element for feeder systems
- int virtual_profit_total = 0; // virtual profit for entire vehicle chain
- int total_cargo_feeder_share = 0; // the feeder cash amount for the goods being loaded/unloaded in this load step
-
- int all_vehicles_cargo_feeder_share = front_v->cargo_feeder_share; // used to hold transfer value of complete vehicle chain - used by trains
+ Money vehicle_profit = 0; // Money paid to the train
+ Money route_profit = 0; // The grand total amount for the route. A-D of transfer chain A-B-C-D
+ Money virtual_profit = 0; // The virtual profit for entire vehicle chain
StationID last_visited = front_v->last_station_visited;
Station *st = GetStation(last_visited);
@@ -1392,75 +1380,70 @@
for (Vehicle *v = front_v; v != NULL; v = v->next) {
/* No cargo to unload */
- if (v->cargo_cap == 0 || v->cargo_count == 0) continue;
+ if (v->cargo_cap == 0 || v->cargo.Empty()) continue;
/* All cargo has already been paid for, no need to pay again */
- if (v->cargo_count == v->cargo_paid_for) {
+ if (!v->cargo.UnpaidCargo()) {
SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
continue;
}
GoodsEntry *ge = &st->goods[v->cargo_type];
-
- if (v->cargo_source != last_visited &&
- HASBIT(ge->waiting_acceptance, 15) &&
- (front_v->current_order.flags & OF_TRANSFER) == 0) {
- /* Deliver goods to the station */
- st->time_since_unload = 0;
-
- /* handle end of route payment */
- profit += DeliverGoods(v->cargo_count - v->cargo_paid_for, v->cargo_type, v->cargo_source, last_visited, v->cargo_source_xy, v->cargo_days);
- v->cargo_paid_for = v->cargo_count;
- route_profit = profit; // display amount paid for final route delivery, A-D of a chain A-B-C-D
- total_veh_profit = profit - all_vehicles_cargo_feeder_share; // whole vehicle is not payed for transfers picked up earlier
- total_cargo_feeder_share = -all_vehicles_cargo_feeder_share; // total of transfer fees in vehicle chain needs to be zero at end of unload
-
- v->cargo_feeder_share = 0; // clear transfer cost per vehicle
- result |= 1;
+ const CargoList::List *cargos = v->cargo.Packets();
- SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
- } else if (front_v->current_order.flags & (OF_UNLOAD | OF_TRANSFER)) {
- if ((front_v->current_order.flags & OF_TRANSFER) != 0) {
- virtual_profit = GetTransportedGoodsIncome(
- v->cargo_count - v->cargo_paid_for,
- /* pay transfer vehicle for only the part of transfer it has done: ie. cargo_loaded_at_xy to here */
- DistanceManhattan(v->cargo_loaded_at_xy, GetStation(last_visited)->xy),
- v->cargo_days,
- v->cargo_type);
+ for (CargoList::List::const_iterator it = cargos->begin(); it != cargos->end(); it++) {
+ CargoPacket *cp = *it;
+ if (!cp->paid_for &&
+ cp->source != last_visited &&
+ ge->acceptance &&
+ (front_v->current_order.flags & OF_TRANSFER) == 0) {
+ /* Deliver goods to the station */
+ st->time_since_unload = 0;
- front_v->profit_this_year += virtual_profit;
- ge->feeder_profit += v->cargo_feeder_share + virtual_profit; // transfer cargo transfer fees to station
- total_cargo_feeder_share -= v->cargo_feeder_share; // accumulate deduction of feeder shares
- v->cargo_feeder_share = 0; // clear transfer cost
+ /* handle end of route payment */
+ Money profit = DeliverGoods(cp->count, v->cargo_type, cp->source, last_visited, cp->source_xy, cp->days_in_transit);
+ cp->paid_for = true;
+ route_profit += profit - cp->feeder_share; // display amount paid for final route delivery, A-D of a chain A-B-C-D
+ vehicle_profit += profit; // whole vehicle is not payed for transfers picked up earlier
- /* keep total of cargo unloaded (pending) for accurate cargoshare calculation on load */
- SB(ge->unload_pending, 0, 12, GB(ge->unload_pending, 0, 12) + v->cargo_count);
+ result |= 1;
- virtual_profit_total += virtual_profit; // accumulate transfer profits for whole vehicle
- v->cargo_paid_for = v->cargo_count; // record how much of the cargo has been paid for to eliminate double counting
+ SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
+ } else if (front_v->current_order.flags & (OF_UNLOAD | OF_TRANSFER)) {
+ if (!cp->paid_for && (front_v->current_order.flags & OF_TRANSFER) != 0) {
+ Money profit = GetTransportedGoodsIncome(
+ cp->count,
+ /* pay transfer vehicle for only the part of transfer it has done: ie. cargo_loaded_at_xy to here */
+ DistanceManhattan(cp->loaded_at_xy, GetStation(last_visited)->xy),
+ cp->days_in_transit,
+ v->cargo_type);
+
+ front_v->profit_this_year += profit;
+ virtual_profit += profit; // accumulate transfer profits for whole vehicle
+ cp->feeder_share += profit; // account for the (virtual) profit already made for the cargo packet
+ cp->paid_for = true; // record that the cargo has been paid for to eliminate double counting
+ }
+ result |= 2;
+
+ SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
}
- result |= 2;
-
- SETBIT(v->vehicle_flags, VF_CARGO_UNLOADING);
}
+ v->cargo.InvalidateCache();
}
- /* Ensure a negative total is only applied to the vehicle if there is value to reduce. */
- front_v->cargo_feeder_share = max(front_v->cargo_feeder_share + total_cargo_feeder_share, 0);
-
- if (virtual_profit_total > 0) {
- ShowFeederIncomeAnimation(front_v->x_pos, front_v->y_pos, front_v->z_pos, virtual_profit_total);
+ if (virtual_profit > 0) {
+ ShowFeederIncomeAnimation(front_v->x_pos, front_v->y_pos, front_v->z_pos, virtual_profit);
}
if (route_profit != 0) {
- front_v->profit_this_year += total_veh_profit;
+ front_v->profit_this_year += vehicle_profit;
SubtractMoneyFromPlayer(-route_profit);
if (IsLocalPlayer() && !PlayVehicleSound(front_v, VSE_LOAD_UNLOAD)) {
SndPlayVehicleFx(SND_14_CASHTILL, front_v);
}
- ShowCostOrIncomeAnimation(front_v->x_pos, front_v->y_pos, front_v->z_pos, -total_veh_profit);
+ ShowCostOrIncomeAnimation(front_v->x_pos, front_v->y_pos, front_v->z_pos, -vehicle_profit);
}
_current_player = old_player;
@@ -1483,7 +1466,7 @@
if (_patches.improved_load && HASBIT(v->current_order.flags, OFB_FULL_LOAD)) {
/* 'Reserve' this cargo for this vehicle, because we were first. */
for (; v != NULL; v = v->next) {
- if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo_count;
+ if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo.Count();
}
}
return;
@@ -1499,14 +1482,13 @@
int unloading_time = 0;
Vehicle *u = v;
int result = 0;
- int cap;
+ uint cap;
bool completely_empty = true;
bool anything_unloaded = false;
bool anything_loaded = false;
uint32 cargo_not_full = 0;
uint32 cargo_full = 0;
- int total_cargo_feeder_share = 0; // the feeder cash amount for the goods being loaded/unloaded in this load step
v->cur_speed = 0;
@@ -1523,36 +1505,19 @@
}
GoodsEntry *ge = &st->goods[v->cargo_type];
- int count = GB(ge->waiting_acceptance, 0, 12);
if (HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING)) {
- uint16 amount_unloaded = _patches.gradual_loading ? min(v->cargo_count, load_amount) : v->cargo_count;
+ uint cargo_count = v->cargo.Count();
+ uint amount_unloaded = _patches.gradual_loading ? min(cargo_count, load_amount) : cargo_count;
+ bool remaining; // Are there cargo entities in this vehicle that can still be unloaded here?
- if (v->cargo_source != last_visited && ge->waiting_acceptance & 0x8000 && !(u->current_order.flags & OF_TRANSFER)) {
+ if (ge->acceptance && !(u->current_order.flags & OF_TRANSFER)) {
+ /* The cargo has reached it's final destination, the packets may now be destroyed */
+ remaining = v->cargo.MoveTo(NULL, amount_unloaded, CargoList::MTA_FINAL_DELIVERY, last_visited);
+
result |= 1;
} else if (u->current_order.flags & (OF_UNLOAD | OF_TRANSFER)) {
- if (count == 0) {
- /* No goods waiting at station */
- ge->enroute_time = v->cargo_days;
- ge->enroute_from = v->cargo_source;
- ge->enroute_from_xy = v->cargo_source_xy;
- } else {
- /* Goods already waiting at station. Set counters to the worst value. */
- if (v->cargo_days >= ge->enroute_time) ge->enroute_time = v->cargo_days;
-
- if (last_visited != ge->enroute_from) {
- ge->enroute_from = v->cargo_source;
- ge->enroute_from_xy = v->cargo_source_xy;
- }
- }
- /* Update amount of waiting cargo. There is, however, no sense in
- * updating the count variable because this vehicle will not be
- * able to take the cargo. */
- SB(ge->waiting_acceptance, 0, 12, min(amount_unloaded + count, 0xFFF));
-
- /* if there is not enough to unload from pending, ensure it does not go -ve
- * else deduct amount actually unloaded from unload_pending */
- SB(ge->unload_pending, 0, 12, max(GB(ge->unload_pending, 0, 12) - amount_unloaded, 0U));
+ remaining = v->cargo.MoveTo(&ge->cargo, amount_unloaded);
result |= 2;
} else {
@@ -1567,11 +1532,8 @@
unloading_time += amount_unloaded;
- v->cargo_count -= amount_unloaded;
- v->cargo_paid_for -= min(amount_unloaded, v->cargo_paid_for);
-
anything_unloaded = true;
- if (_patches.gradual_loading && v->cargo_count != 0) {
+ if (_patches.gradual_loading && remaining) {
completely_empty = false;
} else {
/* We have finished unloading (cargo count == 0) */
@@ -1581,9 +1543,6 @@
continue;
}
- /* We cannot have paid for more cargo than there is on board. */
- assert(v->cargo_paid_for <= v->cargo_count);
-
/* Do not pick up goods that we unloaded */
if (u->current_order.flags & OF_UNLOAD) continue;
@@ -1596,14 +1555,14 @@
}
/* if last speed is 0, we treat that as if no vehicle has ever visited the station. */
- ge->days_since_pickup = 0;
ge->last_speed = min(t, 255);
- ge->last_age = _cur_year - v->build_year;
+ ge->last_age = _cur_year - u->build_year;
/* If there's goods waiting at the station, and the vehicle
* has capacity for it, load it on the vehicle. */
- if (count != 0 &&
- (cap = v->cargo_cap - v->cargo_count) != 0) {
+ if (!ge->cargo.Empty() &&
+ (cap = v->cargo_cap - v->cargo.Count()) != 0) {
+ uint count = ge->cargo.Count();
/* Skip loading this vehicle if another train/vehicle is already handling
* the same cargo type at this station */
@@ -1616,11 +1575,11 @@
if (_patches.gradual_loading) cap = min(cap, load_amount);
if (_patches.improved_load) {
/* Don't load stuff that is already 'reserved' for other vehicles */
- cap = min(cargo_left[v->cargo_type], cap);
+ cap = min((uint)cargo_left[v->cargo_type], cap);
cargo_left[v->cargo_type] -= cap;
}
- if (v->cargo_count == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
+ if (v->cargo.Empty()) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO);
/* TODO: Regarding this, when we do gradual loading, we
* should first unload all vehicles and then start
@@ -1632,32 +1591,17 @@
completely_empty = false;
anything_loaded = true;
- /* cargoshare is proportioned by the amount due to unload
- * Otherwise, with gradual loading, 100% of credits would be taken immediately,
- * even if the cargo volume represents a tiny percent of the whole.
- * ge->unload_pending holds the amount that has been credited, but has not yet been unloaded.
- */
- int cargoshare = cap * 10000 / (ge->waiting_acceptance + ge->unload_pending);
- int feeder_profit_share = ge->feeder_profit * cargoshare / 10000;
- v->cargo_count += cap;
- ge->waiting_acceptance -= cap;
+ ge->cargo.MoveTo(&v->cargo, cap, CargoList::MTA_CARGO_LOAD, st->xy);
+ ge->days_since_pickup = 0;
- total_cargo_feeder_share += feeder_profit_share; // store cost for later payment when cargo unloaded
- v->cargo_loaded_at_xy = st->xy; // retains location of where the cargo was picked up for intermediate payments
-
- ge->feeder_profit -= feeder_profit_share;
unloading_time += cap;
st->time_since_load = 0;
+ st->last_vehicle_type = v->type;
- /* And record the source of the cargo, and the days in travel. */
- v->cargo_source = ge->enroute_from;
- v->cargo_source_xy = ge->enroute_from_xy;
- v->cargo_days = ge->enroute_time;
result |= 2;
- st->last_vehicle_type = v->type;
}
- if (v->cargo_count == v->cargo_cap) {
+ if (v->cargo.Count() == v->cargo_cap) {
SETBIT(cargo_full, v->cargo_type);
} else {
SETBIT(cargo_not_full, v->cargo_type);
@@ -1671,14 +1615,12 @@
if (_patches.improved_load && HASBIT(u->current_order.flags, OFB_FULL_LOAD)) {
/* Update left cargo */
for (v = u; v != NULL; v = v->next) {
- if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo_count;
+ if (v->cargo_cap != 0) cargo_left[v->cargo_type] -= v->cargo_cap - v->cargo.Count();
}
}
v = u;
- v->cargo_feeder_share += total_cargo_feeder_share;
-
if (anything_loaded || anything_unloaded) {
if (_patches.gradual_loading) {
/* The time it takes to load one 'slice' of cargo or passengers depends
@@ -1693,7 +1635,7 @@
if (_patches.full_load_any) {
/* if the aircraft carries passengers and is NOT full, then
* continue loading, no matter how much mail is in */
- if ((v->type == VEH_AIRCRAFT && IsCargoInClass(v->cargo_type, CC_PASSENGERS) && v->cargo_cap != v->cargo_count) ||
+ if ((v->type == VEH_AIRCRAFT && IsCargoInClass(v->cargo_type, CC_PASSENGERS) && v->cargo_cap != v->cargo.Count()) ||
(cargo_not_full && (cargo_full & ~cargo_not_full) == 0)) { // There are stull non-full cargos
finished_loading = false;
}
@@ -1715,6 +1657,17 @@
}
}
+ /* Calculate the loading indicator fill percent and display */
+ if (_patches.loading_indicators && _game_mode != GM_MENU && v->owner == _local_player) {
+ StringID percent_up_down = STR_NULL;
+ int percent = CalcPercentVehicleFilled(v, &percent_up_down);
+ if (v->fill_percent_te_id == INVALID_TE_ID) {
+ v->fill_percent_te_id = ShowFillingPercent(v->x_pos, v->y_pos, v->z_pos + 20, percent, percent_up_down);
+ } else {
+ UpdateFillingPercent(v->fill_percent_te_id, percent, percent_up_down);
+ }
+ }
+
v->load_unload_time_rem = unloading_time;
if (completely_empty) {
@@ -1741,7 +1694,7 @@
{
int cargo_left[NUM_CARGO];
- for (uint i = 0; i < NUM_CARGO; i++) cargo_left[i] = GB(st->goods[i].waiting_acceptance, 0, 12);
+ for (uint i = 0; i < NUM_CARGO; i++) cargo_left[i] = st->goods[i].cargo.Count();
std::list<Vehicle *>::iterator iter;
for (iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end(); ++iter) {
@@ -1766,11 +1719,10 @@
{
Player *owner;
int i;
- int64 value;
+ Money value;
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, p->bankrupt_value);
+ SetDParam(0, p->index);
+ SetDParam(1, p->bankrupt_value);
AddNewsItem( (StringID)(_current_player | NB_BMERGER), NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
/* original code does this a little bit differently */
@@ -1784,14 +1736,15 @@
}
value = CalculateCompanyValue(p) >> 2;
+ PlayerID old_player = _current_player;
for (i = 0; i != 4; i++) {
if (p->share_owners[i] != PLAYER_SPECTATOR) {
- owner = GetPlayer(p->share_owners[i]);
- owner->money64 += value;
- owner->yearly_expenses[0][EXPENSES_OTHER] += value;
- UpdatePlayerMoney32(owner);
+ SET_EXPENSES_TYPE(EXPENSES_OTHER);
+ _current_player = p->share_owners[i];
+ SubtractMoneyFromPlayer(CommandCost(-value));
}
}
+ _current_player = old_player;
p->is_active = false;
@@ -1807,10 +1760,10 @@
* @param p1 player to buy the shares from
* @param p2 unused
*/
-int32 CmdBuyShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuyShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Player *p;
- int64 cost;
+ CommandCost cost;
/* Check if buying shares is allowed (protection against modified clients */
if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares) return CMD_ERROR;
@@ -1822,12 +1775,12 @@
if (_cur_year - p->inaugurated_year < 6) return_cmd_error(STR_7080_PROTECTED);
/* Those lines are here for network-protection (clients can be slow) */
- if (GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 0) return 0;
+ if (GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 0) return cost;
/* We can not buy out a real player (temporarily). TODO: well, enable it obviously */
- if (GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 1 && !p->is_ai) return 0;
+ if (GetAmountOwnedBy(p, PLAYER_SPECTATOR) == 1 && !p->is_ai) return cost;
- cost = CalculateCompanyValue(p) >> 2;
+ cost.AddCost(CalculateCompanyValue(p) >> 2);
if (flags & DC_EXEC) {
PlayerByte* b = p->share_owners;
int i;
@@ -1853,10 +1806,10 @@
* @param p1 player to sell the shares from
* @param p2 unused
*/
-int32 CmdSellShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellShareInCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Player *p;
- int64 cost;
+ Money cost;
/* Check if buying shares is allowed (protection against modified clients */
if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares) return CMD_ERROR;
@@ -1865,7 +1818,7 @@
p = GetPlayer((PlayerID)p1);
/* Those lines are here for network-protection (clients can be slow) */
- if (GetAmountOwnedBy(p, _current_player) == 0) return 0;
+ if (GetAmountOwnedBy(p, _current_player) == 0) return CommandCost();
/* adjust it a little to make it less profitable to sell and buy */
cost = CalculateCompanyValue(p) >> 2;
@@ -1877,7 +1830,7 @@
*b = PLAYER_SPECTATOR;
InvalidateWindow(WC_COMPANY, p1);
}
- return cost;
+ return CommandCost(cost);
}
/** Buy up another company.
@@ -1889,7 +1842,7 @@
* @param p1 player/company to buy up
* @param p2 unused
*/
-int32 CmdBuyCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuyCompany(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Player *p;
PlayerID pid = (PlayerID)p1;
@@ -1908,13 +1861,14 @@
if (flags & DC_EXEC) {
DoAcquireCompany(p);
}
- return p->bankrupt_value;
+ return CommandCost(p->bankrupt_value);
}
/** Prices */
static void SaveLoad_PRIC()
{
- SlArray(&_price, NUM_PRICES, SLE_INT32);
+ int vt = CheckSavegameVersion(65) ? (SLE_FILE_I32 | SLE_VAR_I64) : SLE_INT64;
+ SlArray(&_price, NUM_PRICES, vt);
SlArray(&_price_frac, NUM_PRICES, SLE_UINT16);
}
@@ -1922,18 +1876,21 @@
static void SaveLoad_CAPR()
{
uint num_cargo = CheckSavegameVersion(55) ? 12 : NUM_CARGO;
- SlArray(&_cargo_payment_rates, num_cargo, SLE_INT32);
+ int vt = CheckSavegameVersion(65) ? (SLE_FILE_I32 | SLE_VAR_I64) : SLE_INT64;
+ SlArray(&_cargo_payment_rates, num_cargo, vt);
SlArray(&_cargo_payment_rates_frac, num_cargo, SLE_UINT16);
}
static const SaveLoad _economy_desc[] = {
- SLE_VAR(Economy, max_loan, SLE_INT32),
- SLE_VAR(Economy, max_loan_unround, SLE_INT32),
- SLE_VAR(Economy, fluct, SLE_FILE_I16 | SLE_VAR_I32),
- SLE_VAR(Economy, interest_rate, SLE_UINT8),
- SLE_VAR(Economy, infl_amount, SLE_UINT8),
- SLE_VAR(Economy, infl_amount_pr, SLE_UINT8),
- SLE_END()
+ SLE_CONDVAR(Economy, max_loan, SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
+ SLE_CONDVAR(Economy, max_loan, SLE_INT64, 65, SL_MAX_VERSION),
+ SLE_CONDVAR(Economy, max_loan_unround, SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
+ SLE_CONDVAR(Economy, max_loan_unround, SLE_INT64, 65, SL_MAX_VERSION),
+ SLE_VAR(Economy, fluct, SLE_FILE_I16 | SLE_VAR_I32),
+ SLE_VAR(Economy, interest_rate, SLE_UINT8),
+ SLE_VAR(Economy, infl_amount, SLE_UINT8),
+ SLE_VAR(Economy, infl_amount_pr, SLE_UINT8),
+ SLE_END()
};
/** Economy variables */
--- a/src/economy.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/economy.h Tue Jun 26 23:40:58 2007 +0000
@@ -9,8 +9,8 @@
void SetPriceBaseMultiplier(uint price, byte factor);
struct Economy {
- int32 max_loan; ///< Maximum possible loan
- int32 max_loan_unround; ///< Economy fluctuation status
+ Money max_loan; ///< Maximum possible loan
+ Money max_loan_unround; ///< Economy fluctuation status
int fluct;
byte interest_rate; ///< Interest
byte infl_amount; ///< inflation amount
@@ -65,7 +65,7 @@
void DeleteSubsidyWithIndustry(IndustryID index);
void DeleteSubsidyWithStation(StationID index);
-int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, CargoID cargo_type);
+Money GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, CargoID cargo_type);
uint MoveGoodsToStation(TileIndex tile, int w, int h, CargoID type, uint amount);
void VehiclePayment(Vehicle *front_v);
--- a/src/elrail.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/elrail.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -395,6 +395,8 @@
void DrawCatenary(const TileInfo *ti)
{
+ if (_patches.disable_elrails) return;
+
if (MayHaveBridgeAbove(ti->tile) && IsBridgeAbove(ti->tile)) {
TileIndex head = GetNorthernBridgeEnd(ti->tile);
@@ -402,7 +404,6 @@
DrawCatenaryOnBridge(ti);
}
}
- if (_patches.disable_elrails) return;
switch (GetTileType(ti->tile)) {
case MP_RAILWAY:
--- a/src/engine.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/engine.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -266,7 +266,7 @@
* @param p1 engine-prototype offered
* @param p2 unused
*/
-int32 CmdWantEnginePreview(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdWantEnginePreview(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Engine *e;
@@ -276,7 +276,7 @@
if (flags & DC_EXEC) AcceptEnginePreview(p1, _current_player);
- return 0;
+ return CommandCost();
}
/* Determine if an engine type is a wagon (and not a loco) */
@@ -374,7 +374,7 @@
* @param p1 engine ID to rename
* @param p2 unused
*/
-int32 CmdRenameEngine(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameEngine(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
StringID str;
@@ -393,7 +393,7 @@
DeleteName(str);
}
- return 0;
+ return CommandCost();
}
@@ -533,7 +533,7 @@
return er == NULL ? INVALID_ENGINE : er->to;
}
-int32 AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags)
+CommandCost AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags)
{
EngineRenew *er;
@@ -541,7 +541,7 @@
er = GetEngineReplacement(*erl, old_engine, group);
if (er != NULL) {
if (flags & DC_EXEC) er->to = new_engine;
- return 0;
+ return CommandCost();
}
er = AllocateEngineRenew();
@@ -557,10 +557,10 @@
*erl = (EngineRenewList)er;
}
- return 0;
+ return CommandCost();
}
-int32 RemoveEngineReplacement(EngineRenewList *erl, EngineID engine, GroupID group, uint32 flags)
+CommandCost RemoveEngineReplacement(EngineRenewList *erl, EngineID engine, GroupID group, uint32 flags)
{
EngineRenew *er = (EngineRenew *)(*erl);
EngineRenew *prev = NULL;
@@ -578,7 +578,7 @@
}
DeleteEngineRenew(er);
}
- return 0;
+ return CommandCost();
}
prev = er;
er = er->next;
--- a/src/engine.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/engine.h Tue Jun 26 23:40:58 2007 +0000
@@ -328,7 +328,7 @@
* @param flags The calling command flags.
* @return 0 on success, CMD_ERROR on failure.
*/
-int32 AddEngineReplacement(EngineRenewList* erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags);
+CommandCost AddEngineReplacement(EngineRenewList* erl, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags);
/**
* Remove an engine replacement from a given renewlist.
@@ -337,7 +337,7 @@
* @param flags The calling command flags.
* @return 0 on success, CMD_ERROR on failure.
*/
-int32 RemoveEngineReplacement(EngineRenewList* erl, EngineID engine, GroupID group, uint32 flags);
+CommandCost RemoveEngineReplacement(EngineRenewList* erl, EngineID engine, GroupID group, uint32 flags);
/** When an engine is made buildable or is removed from being buildable, add/remove it from the build/autoreplace lists
* @param type The type of engine
--- a/src/engine_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/engine_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -78,7 +78,8 @@
SetDParam(0, GetEngineCategoryName(engine));
DrawStringMultiCenter(150, 44, STR_8101_WE_HAVE_JUST_DESIGNED_A, 296);
- DrawStringCentered(w->width >> 1, 80, GetCustomEngineName(engine), 0x10);
+ SetDParam(0, engine);
+ DrawStringCentered(w->width >> 1, 80, STR_ENGINE_NAME, 0x10);
dei = &_draw_engine_list[GetEngine(engine)->type];
@@ -177,7 +178,7 @@
{
EngineID engine = ni->string_id;
SetDParam(0, GetEngineCategoryName(engine));
- SetDParam(1, GetCustomEngineName(engine));
+ SetDParam(1, engine);
return STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE;
}
@@ -193,7 +194,7 @@
GfxFillRect(25, 56, w->width - 25, w->height - 2, 10);
- SetDParam(0, GetCustomEngineName(engine));
+ SetDParam(0, engine);
DrawStringMultiCenter(w->width >> 1, 57, STR_NEW_VEHICLE_TYPE, w->width - 2);
dei->engine_proc(w->width >> 1, 88, engine, 0);
--- a/src/fileio.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/fileio.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -410,7 +410,9 @@
void DetermineBasePaths(const char *exe)
{
char tmp[MAX_PATH];
-#ifdef WITH_PERSONAL_DIR
+#if defined(__MORPHOS__) || defined(__AMIGA__) || !defined(WITH_PERSONAL_DIR)
+ _searchpaths[SP_PERSONAL_DIR] = NULL;
+#else
const char *homedir = getenv("HOME");
if (homedir == NULL) {
@@ -422,14 +424,16 @@
AppendPathSeparator(tmp, MAX_PATH);
_searchpaths[SP_PERSONAL_DIR] = strdup(tmp);
-#else
- _searchpaths[SP_PERSONAL_DIR] = NULL;
#endif
_searchpaths[SP_SHARED_DIR] = NULL;
+#if defined(__MORPHOS__) || defined(__AMIGA__)
+ _searchpaths[SP_WORKING_DIR] = NULL;
+#else
getcwd(tmp, MAX_PATH);
AppendPathSeparator(tmp, MAX_PATH);
_searchpaths[SP_WORKING_DIR] = strdup(tmp);
+#endif
/* Change the working directory to that one of the executable */
ChangeWorkingDirectory((char*)exe);
@@ -437,9 +441,13 @@
AppendPathSeparator(tmp, MAX_PATH);
_searchpaths[SP_BINARY_DIR] = strdup(tmp);
+#if defined(__MORPHOS__) || defined(__AMIGA__)
+ _searchpaths[SP_INSTALLATION_DIR] = NULL;
+#else
snprintf(tmp, MAX_PATH, "%s", GLOBAL_DATA_DIR);
AppendPathSeparator(tmp, MAX_PATH);
_searchpaths[SP_INSTALLATION_DIR] = strdup(tmp);
+#endif
#ifdef WITH_COCOA
extern void cocoaSetApplicationBundleDir();
cocoaSetApplicationBundleDir();
@@ -524,6 +532,7 @@
/* The following characters are not allowed in filenames
* on at least one of the supported operating systems: */
case ':': case '\\': case '*': case '?': case '/':
+ case '<': case '>': case '|': case '"':
*filename = '_';
break;
}
--- a/src/fileio.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/fileio.h Tue Jun 26 23:40:58 2007 +0000
@@ -40,12 +40,13 @@
* Types of searchpaths OpenTTD might use
*/
enum Searchpath {
- SP_WORKING_DIR, ///< Search in the working directory
- SP_PERSONAL_DIR, ///< Search in the personal directory
- SP_SHARED_DIR, ///< Search in the shared directory, like 'Shared Files' under Windows
- SP_BINARY_DIR, ///< Search in the directory where the binary resides
- SP_INSTALLATION_DIR, ///< Search in the installation directory
- SP_APPLICATION_BUNDLE_DIR, ///< Search within the application bundle
+ SP_FIRST_DIR,
+ SP_WORKING_DIR = SP_FIRST_DIR, ///< Search in the working directory
+ SP_PERSONAL_DIR, ///< Search in the personal directory
+ SP_SHARED_DIR, ///< Search in the shared directory, like 'Shared Files' under Windows
+ SP_BINARY_DIR, ///< Search in the directory where the binary resides
+ SP_INSTALLATION_DIR, ///< Search in the installation directory
+ SP_APPLICATION_BUNDLE_DIR, ///< Search within the application bundle
NUM_SEARCHPATHS
};
@@ -70,7 +71,7 @@
}
/** Iterator for all the search paths */
-#define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_PERSONAL_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp))
+#define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp))
FILE *FioFOpenFile(const char *filename, const char *mode = "rb", Subdirectory subdir = DATA_DIR);
bool FioCheckFileExists(const char *filename, Subdirectory subdir = DATA_DIR);
--- a/src/functions.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/functions.h Tue Jun 26 23:40:58 2007 +0000
@@ -20,12 +20,11 @@
void TileLoop_Water(TileIndex tile);
/* players.cpp */
-bool CheckPlayerHasMoney(int32 cost);
-void SubtractMoneyFromPlayer(int32 cost);
-void SubtractMoneyFromPlayerFract(PlayerID player, int32 cost);
+bool CheckPlayerHasMoney(CommandCost cost);
+void SubtractMoneyFromPlayer(CommandCost cost);
+void SubtractMoneyFromPlayerFract(PlayerID player, CommandCost cost);
bool CheckOwnership(Owner owner);
bool CheckTileOwnership(TileIndex tile);
-StringID GetPlayerNameString(PlayerID player, uint index);
/* standard */
void ShowInfo(const char *str);
@@ -79,16 +78,6 @@
uint InteractiveRandomRange(uint max);
/* texteff.cpp */
-void MoveAllTextEffects();
-void AddTextEffect(StringID msg, int x, int y, uint16 duration);
-void InitTextEffects();
-void DrawTextEffects(DrawPixelInfo *dpi);
-
-void InitTextMessage();
-void DrawTextMessage();
-void CDECL AddTextMessage(uint16 color, uint8 duration, const char *message, ...);
-void UndrawTextMessage();
-
bool AddAnimatedTile(TileIndex tile);
void DeleteAnimatedTile(TileIndex tile);
void AnimateAnimatedTiles();
@@ -139,8 +128,8 @@
bool EnsureNoVehicle(TileIndex tile);
bool EnsureNoVehicleOnGround(TileIndex tile);
void MarkAllViewportsDirty(int left, int top, int right, int bottom);
-void ShowCostOrIncomeAnimation(int x, int y, int z, int32 cost);
-void ShowFeederIncomeAnimation(int x, int y, int z, int32 cost);
+void ShowCostOrIncomeAnimation(int x, int y, int z, Money cost);
+void ShowFeederIncomeAnimation(int x, int y, int z, Money cost);
bool CheckIfAuthorityAllows(TileIndex tile);
Town *ClosestTownFromTile(TileIndex tile, uint threshold);
--- a/src/genworld_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/genworld_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -875,14 +875,12 @@
_tp.percent = percent_table[cls];
}
- /* Don't update the screen too often. So update it once in every 200ms.
- * However, the _tick_counter increases by 8 every 30ms, so compensate
- * for that. */
- if (!_network_dedicated && _tp.timer != 0 && _timer_counter - _tp.timer < (200 * 8 / 30)) return;
+ /* Don't update the screen too often. So update it once in every 200ms */
+ if (!_network_dedicated && _tp.timer != 0 && _realtime_tick - _tp.timer < 200) return;
/* Percentage is about the number of completed tasks, so 'current - 1' */
_tp.percent = percent_table[cls] + (percent_table[cls + 1] - percent_table[cls]) * (_tp.current == 0 ? 0 : _tp.current - 1) / _tp.total;
- _tp.timer = _timer_counter;
+ _tp.timer = _realtime_tick;
if (_network_dedicated) {
static uint last_percent = 0;
--- a/src/gfx.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/gfx.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -19,12 +19,9 @@
#include "genworld.h"
#include "debug.h"
#include "zoom.hpp"
+#include "texteff.hpp"
#include "blitter/factory.hpp"
-#ifdef _DEBUG
-bool _dbg_screen_rect;
-#endif
-
byte _dirkeys; ///< 1 = left, 2 = up, 4 = right, 8 = down
bool _fullscreen;
CursorVars _cursor;
@@ -41,7 +38,7 @@
byte _game_mode;
byte _pause_game;
int _pal_first_dirty;
-int _pal_last_dirty;
+int _pal_count_dirty;
Colour _cur_palette[256];
byte _stringwidth_table[FS_END][224];
@@ -61,59 +58,13 @@
void GfxScroll(int left, int top, int width, int height, int xo, int yo)
{
Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
- const void *src;
- void *dst;
if (xo == 0 && yo == 0) return;
if (_cursor.visible) UndrawMouseCursor();
UndrawTextMessage();
- if (yo > 0) {
- /*Calculate pointers */
- dst = blitter->MoveTo(_screen.dst_ptr, left, top + height - 1);
- src = blitter->MoveTo(dst, 0, -yo);
-
- /* Decrease height and increase top */
- top += yo;
- height -= yo;
- assert(height > 0);
-
- /* Adjust left & width */
- if (xo >= 0) {
- dst = blitter->MoveTo(dst, xo, 0);
- left += xo;
- width -= xo;
- } else {
- src = blitter->MoveTo(src, -xo, 0);
- width += xo;
- }
-
- /* Negative height as we want to copy from bottom to top */
- blitter->CopyFromBuffer(dst, src, width, -height, _screen.pitch);
- } else {
- /* Calculate pointers */
- dst = blitter->MoveTo(_screen.dst_ptr, left, top);
- src = blitter->MoveTo(dst, 0, -yo);
-
- /* Decrese height. (yo is <=0). */
- height += yo;
- assert(height > 0);
-
- /* Adjust left & width */
- if (xo >= 0) {
- dst = blitter->MoveTo(dst, xo, 0);
- left += xo;
- width -= xo;
- } else {
- src = blitter->MoveTo(src, -xo, 0);
- width += xo;
- }
-
- /* the y-displacement may be 0 therefore we have to use memmove,
- * because source and destination may overlap */
- blitter->MoveBuffer(dst, src, width, height);
- }
+ blitter->ScrollBuffer(_screen.dst_ptr, left, top, width, height, xo, yo);
/* This part of the screen is now dirty. */
_video_driver->make_dirty(left, top, width, height);
}
@@ -148,10 +99,7 @@
if (!HASBIT(color, PALETTE_MODIFIER_GREYOUT)) {
if (!HASBIT(color, USE_COLORTABLE)) {
- do {
- blitter->SetHorizontalLine(dst, right, (uint8)color);
- dst = blitter->MoveTo(dst, 0, 1);
- } while (--bottom);
+ blitter->DrawRect(dst, right, bottom, (uint8)color);
} else {
blitter->DrawColorMappingRect(dst, right, bottom, GB(color, 0, PALETTE_WIDTH));
}
@@ -164,79 +112,23 @@
}
}
-static void GfxSetPixel(int x, int y, int color)
-{
- Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
- const DrawPixelInfo *dpi = _cur_dpi;
-
- if ((x -= dpi->left) < 0 || x >= dpi->width || (y -= dpi->top) < 0 || y >= dpi->height) return;
- blitter->SetPixel(dpi->dst_ptr, x, y, color);
-}
-
void GfxDrawLine(int x, int y, int x2, int y2, int color)
{
- int dy;
- int dx;
- int stepx;
- int stepy;
- int frac;
-
- /* Check clipping first */
- {
- DrawPixelInfo *dpi = _cur_dpi;
- int t;
-
- if (x < dpi->left && x2 < dpi->left) return;
-
- if (y < dpi->top && y2 < dpi->top) return;
-
- t = dpi->left + dpi->width;
- if (x > t && x2 > t) return;
-
- t = dpi->top + dpi->height;
- if (y > t && y2 > t) return;
- }
-
- dy = (y2 - y) * 2;
- if (dy < 0) {
- dy = -dy;
- stepy = -1;
- } else {
- stepy = 1;
- }
+ Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+ DrawPixelInfo *dpi = _cur_dpi;
- dx = (x2 - x) * 2;
- if (dx < 0) {
- dx = -dx;
- stepx = -1;
- } else {
- stepx = 1;
- }
+ x -= dpi->left;
+ x2 -= dpi->left;
+ y -= dpi->top;
+ y2 -= dpi->top;
- GfxSetPixel(x, y, color);
- if (dx > dy) {
- frac = dy - (dx >> 1);
- while (x != x2) {
- if (frac >= 0) {
- y += stepy;
- frac -= dx;
- }
- x += stepx;
- frac += dy;
- GfxSetPixel(x, y, color);
- }
- } else {
- frac = dx - (dy >> 1);
- while (y != y2) {
- if (frac >= 0) {
- x += stepx;
- frac -= dy;
- }
- y += stepy;
- frac += dx;
- GfxSetPixel(x, y, color);
- }
- }
+ /* Check clipping */
+ if (x < 0 && x2 < 0) return;
+ if (y < 0 && y2 < 0) return;
+ if (x > dpi->width && x2 > dpi->width) return;
+ if (y > dpi->height && y2 > dpi->height) return;
+
+ blitter->DrawLine(dpi->dst_ptr, x, y, x2, y2, dpi->width, dpi->height, color);
}
@@ -768,16 +660,17 @@
{
memcpy(_cur_palette, _palettes[_use_dos_palette ? 1 : 0], sizeof(_cur_palette));
+ DoPaletteAnimations();
_pal_first_dirty = 0;
- _pal_last_dirty = 255;
- DoPaletteAnimations();
+ _pal_count_dirty = 255;
}
-#define EXTR(p, q) (((uint16)(_timer_counter * (p)) * (q)) >> 16)
-#define EXTR2(p, q) (((uint16)(~_timer_counter * (p)) * (q)) >> 16)
+#define EXTR(p, q) (((uint16)(_palette_animation_counter * (p)) * (q)) >> 16)
+#define EXTR2(p, q) (((uint16)(~_palette_animation_counter * (p)) * (q)) >> 16)
void DoPaletteAnimations()
{
+ Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
const Colour *s;
Colour *d;
/* Amount of colors to be rotated.
@@ -785,15 +678,13 @@
* 245-254 for DOS and 217-226 for Windows. */
const ExtraPaletteValues *ev = &_extra_palette_values;
int c = _use_dos_palette ? 38 : 28;
- Colour old_val[38]; // max(38, 28)
+ Colour old_val[38];
uint i;
uint j;
- int old_tc = _timer_counter;
+ uint old_tc = _palette_animation_counter;
- /* We can only update the palette in 8bpp for now */
- /* TODO -- We need support for other bpps too! */
- if (BlitterFactoryBase::GetCurrentBlitter() != NULL && BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) {
- _timer_counter = 0;
+ if (blitter != NULL && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
+ _palette_animation_counter = 0;
}
d = &_cur_palette[217];
@@ -836,7 +727,7 @@
/* Radio tower blinking */
{
- byte i = (_timer_counter >> 1) & 0x7F;
+ byte i = (_palette_animation_counter >> 1) & 0x7F;
byte v;
(v = 255, i < 0x3f) ||
@@ -887,12 +778,14 @@
}
}
- if (memcmp(old_val, &_cur_palette[217], c * sizeof(*old_val)) != 0) {
- if (_pal_first_dirty > 217) _pal_first_dirty = 217;
- if (_pal_last_dirty < 217 + c) _pal_last_dirty = 217 + c;
+ if (blitter != NULL && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
+ _palette_animation_counter = old_tc;
+ } else {
+ if (memcmp(old_val, &_cur_palette[217], c * sizeof(*old_val)) != 0) {
+ _pal_first_dirty = 217;
+ _pal_count_dirty = c;
+ }
}
-
- if (old_tc != _timer_counter) _timer_counter = old_tc;
}
@@ -940,7 +833,7 @@
if (_cursor.visible) {
Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
_cursor.visible = false;
- blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y, _cursor.draw_size.x);
+ blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y);
_video_driver->make_dirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y);
}
}
@@ -987,7 +880,7 @@
assert(blitter->BufferSize(w, h) < (int)sizeof(_cursor_backup));
/* Make backup of stuff below cursor */
- blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y, _cursor.draw_size.x);
+ blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y);
/* Draw cursor on screen */
_cur_dpi = &_screen;
@@ -999,20 +892,6 @@
_cursor.dirty = false;
}
-#if defined(_DEBUG)
-static void DbgScreenRect(int left, int top, int right, int bottom)
-{
- DrawPixelInfo dp;
- DrawPixelInfo *old;
-
- old = _cur_dpi;
- _cur_dpi = &dp;
- dp = _screen;
- GfxFillRect(left, top, right - 1, bottom - 1, rand() & 255);
- _cur_dpi = old;
-}
-#endif
-
void RedrawScreenRect(int left, int top, int right, int bottom)
{
assert(right <= _screen.width && bottom <= _screen.height);
@@ -1026,12 +905,7 @@
}
UndrawTextMessage();
-#if defined(_DEBUG)
- if (_dbg_screen_rect)
- DbgScreenRect(left, top, right, bottom);
- else
-#endif
- DrawOverlappedWindowForAll(left, top, right, bottom);
+ DrawOverlappedWindowForAll(left, top, right, bottom);
_video_driver->make_dirty(left, top, right - left, bottom - top);
}
--- a/src/gfx.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/gfx.h Tue Jun 26 23:40:58 2007 +0000
@@ -166,7 +166,7 @@
extern byte _pause_game;
extern int _pal_first_dirty;
-extern int _pal_last_dirty;
+extern int _pal_count_dirty;
extern int _num_resolutions;
extern uint16 _resolutions[32][2];
extern uint16 _cur_resolution[2];
@@ -302,9 +302,4 @@
IS_PALETTE_COLOR = 0x100, ///< color value is already a real palette color index, not an index of a StringColor
};
-
-#ifdef _DEBUG
-extern bool _dbg_screen_rect;
-#endif
-
#endif /* GFX_H */
--- a/src/graph_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/graph_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -64,7 +64,7 @@
uint height; ///< The height of the graph in pixels.
StringID format_str_y_axis;
byte colors[GRAPH_MAX_DATASETS];
- int64 cost[GRAPH_MAX_DATASETS][24]; ///< last 2 years
+ Money cost[GRAPH_MAX_DATASETS][24]; ///< last 2 years
};
static void DrawGraph(const GraphDrawer *gw)
@@ -132,7 +132,7 @@
for (int i = 0; i < gw->num_dataset; i++) {
if (!HASBIT(gw->excluded_data, i)) {
for (int j = 0; j < gw->num_on_x_axis; j++) {
- int64 datapoint = gw->cost[i][j];
+ Money datapoint = gw->cost[i][j];
if (datapoint != INVALID_DATAPOINT) {
/* For now, if the graph has negative values the scaling is
@@ -162,7 +162,7 @@
for (int i = 0; i < GRAPH_NUM_LINES_Y; i++) {
SetDParam(0, gw->format_str_y_axis);
- SetDParam64(1, y_label);
+ SetDParam(1, y_label);
DrawStringRightAligned(x, y, STR_0170, GRAPH_AXIS_LABEL_COLOUR);
y_label -= y_label_separation;
@@ -214,7 +214,7 @@
uint prev_y = INVALID_DATAPOINT_POS;
for (int j = 0; j < gw->num_on_x_axis; j++) {
- int64 datapoint = gw->cost[i][j];
+ Money datapoint = gw->cost[i][j];
if (datapoint != INVALID_DATAPOINT) {
/* XXX: This can overflow if x_axis_offset * datapoint is
@@ -270,9 +270,8 @@
DrawPlayerIcon(p->index, 4, 18 + p->index * 12);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, GetPlayerNameString(p->index, 3));
+ SetDParam(0, p->index);
+ SetDParam(1, p->index);
DrawString(21, 17 + p->index * 12, STR_7021, HASBIT(_legend_excluded_players, p->index) ? 0x10 : 0xC);
}
break;
@@ -875,10 +874,9 @@
for (uint i = 0; i != pl_num; i++) {
p = plist[i];
SetDParam(0, i + STR_01AC_1ST);
- SetDParam(1, p->name_1);
- SetDParam(2, p->name_2);
- SetDParam(3, GetPlayerNameString(p->index, 4));
- SetDParam(5, GetPerformanceTitleFromValue(p->old_economy[1].performance_history));
+ SetDParam(1, p->index);
+ SetDParam(2, p->index);
+ SetDParam(3, GetPerformanceTitleFromValue(p->old_economy[1].performance_history));
DrawString(2, 15 + i * 10, i == 0 ? STR_7054 : STR_7055, 0);
DrawPlayerIcon(p->index, 27, 16 + i * 10);
--- a/src/group_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/group_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -93,7 +93,7 @@
* @param p1 vehicle type
* @param p2 unused
*/
-int32 CmdCreateGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdCreateGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
VehicleType vt = (VehicleType)p1;
if (!IsPlayerBuildableVehicleType(vt)) return CMD_ERROR;
@@ -103,14 +103,14 @@
if (flags & DC_EXEC) {
g->owner = _current_player;
- g->string_id = STR_SV_GROUP_NAME;
+ g->string_id = STR_EMPTY;
g->replace_protection = false;
g->vehicle_type = vt;
InvalidateWindowData(GetWCForVT(vt), (vt << 11) | VLW_GROUP_LIST | _current_player);
}
- return 0;
+ return CommandCost();
}
@@ -121,7 +121,7 @@
* - p1 bit 0-15 : GroupID
* @param p2 unused
*/
-int32 CmdDeleteGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDeleteGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (!IsValidGroupID(p1)) return CMD_ERROR;
@@ -156,7 +156,7 @@
InvalidateWindowData(GetWCForVT(vt), (vt << 11) | VLW_GROUP_LIST | _current_player);
}
- return 0;
+ return CommandCost();
}
@@ -167,7 +167,7 @@
* - p1 bit 0-15 : GroupID
* @param p2 unused
*/
-int32 CmdRenameGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (!IsValidGroupID(p1) || StrEmpty(_cmd_text)) return CMD_ERROR;
@@ -187,7 +187,7 @@
InvalidateWindowData(GetWCForVT(g->vehicle_type), (g->vehicle_type << 11) | VLW_GROUP_LIST | _current_player);
}
- return 0;
+ return CommandCost();
}
@@ -199,7 +199,7 @@
* @param p2 vehicle to add to a group
* - p2 bit 0-15 : VehicleID
*/
-int32 CmdAddVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdAddVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
GroupID new_g = p1;
@@ -235,7 +235,7 @@
InvalidateWindowData(GetWCForVT(v->type), (v->type << 11) | VLW_GROUP_LIST | _current_player);
}
- return 0;
+ return CommandCost();
}
/**
@@ -245,7 +245,7 @@
* - p1 bit 0-15 : GroupID
* @param p2 type of vehicles
*/
-int32 CmdAddSharedVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdAddSharedVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
VehicleType type = (VehicleType)p2;
if (!IsValidGroupID(p1) || !IsPlayerBuildableVehicleType(type)) return CMD_ERROR;
@@ -271,7 +271,7 @@
InvalidateWindowData(GetWCForVT(type), (type << 11) | VLW_GROUP_LIST | _current_player);
}
- return 0;
+ return CommandCost();
}
@@ -282,7 +282,7 @@
* - p1 bit 0-15 : GroupID
* @param p2 type of vehicles
*/
-int32 CmdRemoveAllVehiclesGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
VehicleType type = (VehicleType)p2;
if (!IsValidGroupID(p1) || !IsPlayerBuildableVehicleType(type)) return CMD_ERROR;
@@ -307,7 +307,7 @@
InvalidateWindowData(GetWCForVT(type), (type << 11) | VLW_GROUP_LIST | _current_player);
}
- return 0;
+ return CommandCost();
}
@@ -319,7 +319,7 @@
* @param p2
* - p2 bit 0 : 1 to set or 0 to clear protection.
*/
-int32 CmdSetGroupReplaceProtection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetGroupReplaceProtection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (!IsValidGroupID(p1)) return CMD_ERROR;
@@ -332,7 +332,7 @@
InvalidateWindowData(GetWCForVT(g->vehicle_type), (g->vehicle_type << 11) | VLW_GROUP_LIST | _current_player);
}
- return 0;
+ return CommandCost();
}
/**
--- a/src/group_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/group_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -78,13 +78,13 @@
if (ga != last_group[0]) {
last_group[0] = ga;
SetDParam(0, ga->index);
- GetString(last_name[0], ga->string_id, lastof(last_name[0]));
+ GetString(last_name[0], STR_GROUP_NAME, lastof(last_name[0]));
}
if (gb != last_group[1]) {
last_group[1] = gb;
SetDParam(0, gb->index);
- GetString(last_name[1], gb->string_id, lastof(last_name[1]));
+ GetString(last_name[1], STR_GROUP_NAME, lastof(last_name[1]));
}
r = strcmp(last_name[0], last_name[1]); // sort by name
@@ -344,9 +344,8 @@
/* If selected_group == DEFAULT_GROUP, draw the standard caption
We list all vehicles */
if (IsDefaultGroupID(gv->group_sel)) {
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, gv->l.list_length);
+ SetDParam(0, p->index);
+ SetDParam(1, gv->l.list_length);
switch (gv->vehicle_type) {
case VEH_TRAIN:
@@ -420,7 +419,7 @@
/* draw the selected group in white, else we draw it in black */
SetDParam(0, g->index);
- DrawString(10, y1, STR_SV_GROUP_NAME, (gv->group_sel == g->index) ? 12 : 16);
+ DrawString(10, y1, STR_GROUP_NAME, (gv->group_sel == g->index) ? 12 : 16);
/* draw the number of vehicles of the group */
SetDParam(0, g->num_vehicle);
@@ -567,7 +566,7 @@
const Group *g = GetGroup(gv->group_sel);
SetDParam(0, g->index);
- ShowQueryString(g->string_id, STR_GROUP_RENAME_CAPTION, 31, 150, w, CS_ALPHANUMERAL);
+ ShowQueryString(STR_GROUP_NAME, STR_GROUP_RENAME_CAPTION, 31, 150, w, CS_ALPHANUMERAL);
} break;
--- a/src/gui.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/gui.h Tue Jun 26 23:40:58 2007 +0000
@@ -105,7 +105,7 @@
void ShowPlayerFinances(PlayerID player);
void ShowPlayerCompany(PlayerID player);
-void ShowEstimatedCostOrIncome(int32 cost, int x, int y);
+void ShowEstimatedCostOrIncome(Money cost, int x, int y);
void ShowErrorMessage(StringID msg_1, StringID msg_2, int x, int y);
void DrawStationCoverageAreaText(int sx, int sy, uint mask,int rad);
--- a/src/industry_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/industry_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -30,6 +30,8 @@
#include "water_map.h"
#include "tree_map.h"
#include "cargotype.h"
+#include "newgrf_industrytiles.h"
+#include "newgrf_callbacks.h"
void ShowIndustryViewWindow(int industry);
void BuildOilRig(TileIndex tile);
@@ -241,18 +243,32 @@
static void DrawTile_Industry(TileInfo *ti)
{
- const IndustryGfx gfx = GetIndustryGfx(ti->tile);
- const Industry *ind;
+ IndustryGfx gfx = GetIndustryGfx(ti->tile);
+ Industry *ind = GetIndustryByTile(ti->tile);
+ const IndustryTileSpec *indts = GetIndustryTileSpec(gfx);
const DrawBuildingsTileStruct *dits;
byte z;
SpriteID image;
SpriteID pal;
- /* Pointer to industry */
- ind = GetIndustryByTile(ti->tile);
+ /* Retrieve pointer to the draw industry tile struct */
+ if (gfx >= NEW_INDUSTRYTILEOFFSET) {
+ /* Draw the tile using the specialized method of newgrf industrytile.
+ * DrawNewIndustry will return false if ever the resolver could not
+ * find any sprite to display. So in this case, we will jump on the
+ * substitute gfx instead. */
+ if (indts->grf_prop.spritegroup != NULL && DrawNewIndustryTile(ti, ind, gfx, indts)) {
+ return;
+ } else {
+ /* No sprite group (or no valid one) found, meaning no graphics associated.
+ * Use the substitute one instead */
+ gfx = indts->grf_prop.subst_id;
+ /* And point the industrytile spec accordingly */
+ indts = GetIndustryTileSpec(indts->grf_prop.subst_id);
+ }
+ }
- /* Retrieve pointer to the draw industry tile struct */
- dits = &_industry_draw_tile_data[gfx << 2 | (GetIndustryTileSpec(gfx)->anim_state ?
+ dits = &_industry_draw_tile_data[gfx << 2 | (indts->anim_state ?
GetIndustryAnimationState(ti->tile) & 3 :
GetIndustryConstructionStage(ti->tile))];
@@ -266,14 +282,12 @@
z = ti->z;
/* Add bricks below the industry? */
if (ti->tileh != SLOPE_FLAT) {
- AddSortableSpriteToDraw(SPR_FOUNDATION_BASE + ti->tileh, PAL_NONE, ti->x, ti->y, 16, 16, 7, z);
- AddChildSpriteScreen(image, pal, 31, 1);
+ DrawFoundation(ti, ti->tileh);
z += TILE_HEIGHT;
- } else {
- /* Else draw regular ground */
- DrawGroundSprite(image, pal);
}
+ DrawGroundSprite(image, pal);
+
/* Add industry on top of the ground? */
image = dits->building.sprite;
if (image != 0) {
@@ -336,7 +350,7 @@
}
}
-static int32 ClearTile_Industry(TileIndex tile, byte flags)
+static CommandCost ClearTile_Industry(TileIndex tile, byte flags)
{
Industry *i = GetIndustryByTile(tile);
const IndustrySpec *indspec = GetIndustrySpec(i->type);
@@ -354,7 +368,7 @@
}
if (flags & DC_EXEC) DeleteIndustry(i);
- return 0;
+ return CommandCost();
}
static void TransportIndustryGoods(TileIndex tile)
@@ -1469,7 +1483,7 @@
* @param p2 unused
* @return index of the newly create industry, or CMD_ERROR if it failed
*/
-int32 CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildIndustry(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
int num;
const IndustryTileTable * const *itt;
@@ -1505,7 +1519,7 @@
if (CreateNewIndustryHelper(tile, p1, flags, indspec, it) == NULL) return CMD_ERROR;
- return (_price.build_industry >> 8) * indspec->cost_multiplier;
+ return CommandCost((_price.build_industry >> 8) * indspec->cost_multiplier);
}
@@ -1517,7 +1531,7 @@
return CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, it);
}
-static const byte _numof_industry_table[5][12] = {
+static const byte _numof_industry_table[5][11] = {
/* difficulty settings for number of industries */
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //none
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, //very low
@@ -1624,13 +1638,17 @@
int mag;
new_prod = old_prod = i->production_rate[j];
- if (CHANCE16I(20, 1024, r))
- new_prod -= ((RandomRange(50) + 10) * old_prod) >> 8;
- if (CHANCE16I(20 + (i->last_month_pct_transported[j] * 20 >> 8), 1024, r >> 16))
- new_prod += ((RandomRange(50) + 10) * old_prod) >> 8;
- new_prod = clamp(new_prod, 0, 255);
- if (new_prod == old_prod) {
+ 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) {
+ 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;
}
@@ -1638,8 +1656,8 @@
percent = new_prod * 100 / old_prod - 100;
i->production_rate[j] = new_prod;
- if (new_prod >= indspec->production_rate[j] / 4)
- closeit = false;
+ /* Close the industry when it has the lowest possible production rate */
+ if (new_prod > 1) closeit = false;
mag = abs(percent);
if (mag >= 10) {
--- a/src/landscape.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/landscape.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -22,7 +22,6 @@
#include "water_map.h"
#include "tgp.h"
#include "genworld.h"
-#include "heightmap.h"
extern const TileTypeProcs
_tile_type_clear_procs,
@@ -253,7 +252,7 @@
if (f < 15) {
/* leveled foundation
* Use the original slope sprites if NW and NE borders should be visible */
- if (sprite_base == SPR_SLOPES_BASE - 15) sprite_base = SPR_FOUNDATION_BASE;
+ if (sprite_base == SPR_SLOPES_BASE - 15) sprite_base = SPR_FOUNDATION_BASE;
AddSortableSpriteToDraw(sprite_base + f, PAL_NONE, ti->x, ti->y, 16, 16, 7, ti->z);
ti->z += TILE_HEIGHT;
@@ -367,7 +366,7 @@
* @param p1 unused
* @param p2 unused
*/
-int32 CmdLandscapeClear(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdLandscapeClear(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -380,9 +379,9 @@
* @param flags of operation to conduct
* @param p2 unused
*/
-int32 CmdClearArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdClearArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 cost, ret, money;
+ CommandCost cost, ret, money;
int ex;
int ey;
int sx, sy;
@@ -401,20 +400,19 @@
if (ex < sx) Swap(ex, sx);
if (ey < sy) Swap(ey, sy);
- money = GetAvailableMoneyForCommand();
- cost = 0;
+ money.AddCost(GetAvailableMoneyForCommand());
for (x = sx; x <= ex; ++x) {
for (y = sy; y <= ey; ++y) {
ret = DoCommand(TileXY(x, y), 0, 0, flags & ~DC_EXEC, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) continue;
- cost += ret;
success = true;
if (flags & DC_EXEC) {
- if (ret > 0 && (money -= ret) < 0) {
- _additional_cash_required = ret;
- return cost - ret;
+ money.AddCost(-ret.GetCost());
+ if (ret.GetCost() > 0 && money.GetCost() < 0) {
+ _additional_cash_required = ret.GetCost();
+ return cost;
}
DoCommand(TileXY(x, y), 0, 0, flags, CMD_LANDSCAPE_CLEAR);
@@ -426,6 +424,7 @@
);
}
}
+ cost.AddCost(ret);
}
}
--- a/src/lang/american.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/american.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Off edge of map
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Too close to edge of map
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Not enough cash - requires {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Flat land required
STR_0008_WAITING :{BLACK}Waiting: {WHITE}{STRING}
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Local authority: {LTBLUE}{STRING}
STR_01A9_NONE :None
STR_01AA_NAME :{BLACK}Name
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1st
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Difficulty settings
STR_02C7_CONFIG_PATCHES :Configure patches
STR_NEWGRF_SETTINGS :Newgrf settings
+STR_TRANSPARENCY_OPTIONS :Transparency options
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Town names displayed
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Station names displayed
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :Map of world
STR_EXTRA_VIEW_PORT :Extra viewport
STR_SIGN_LIST :Sign list
-STR_TRANSPARENCY_OPTIONS :Transparency options
STR_02DF_TOWN_DIRECTORY :Town directory
STR_TOWN_POPULATION :{BLACK}World population: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA}
@@ -1103,6 +1103,9 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Map scrollwheel speed: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Use loading indicators: {ORANGE}{STRING}
+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_MAX_TRAINS :{LTBLUE}Max trains per player: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Max road vehicles per player: {ORANGE}{STRING}
@@ -1186,7 +1189,7 @@
STR_CHEATS :{WHITE}Cheats
STR_CHEATS_TIP :{BLACK}Checkboxes indicate if you have used this cheat before
STR_CHEATS_WARNING :{BLACK}Warning! You are about to betray your fellow competitors. Keep in mind that such a disgrace will be remembered for eternity.
-STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Playing as player: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magic bulldozer (remove industries, unmovables): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnels may cross each other: {ORANGE}{STRING}
@@ -1397,6 +1400,31 @@
STR_NETWORK_LANG_ENGLISH :English
STR_NETWORK_LANG_GERMAN :German
STR_NETWORK_LANG_FRENCH :French
+STR_NETWORK_LANG_BRAZILIAN :Brazilian
+STR_NETWORK_LANG_BULGARIAN :Bulgarian
+STR_NETWORK_LANG_CHINESE :Chinese
+STR_NETWORK_LANG_CZECH :Czech
+STR_NETWORK_LANG_DANISH :Danish
+STR_NETWORK_LANG_DUTCH :Dutch
+STR_NETWORK_LANG_ESPERANTO :Esperanto
+STR_NETWORK_LANG_FINNISH :Finnish
+STR_NETWORK_LANG_HUNGARIAN :Hungarian
+STR_NETWORK_LANG_ICELANDIC :Icelandic
+STR_NETWORK_LANG_ITALIAN :Italian
+STR_NETWORK_LANG_JAPANESE :Japanese
+STR_NETWORK_LANG_KOREAN :Korean
+STR_NETWORK_LANG_LITHUANIAN :Lithuanian
+STR_NETWORK_LANG_NORWEGIAN :Norwegian
+STR_NETWORK_LANG_POLISH :Polish
+STR_NETWORK_LANG_PORTUGUESE :Portuguese
+STR_NETWORK_LANG_ROMANIAN :Romanian
+STR_NETWORK_LANG_RUSSIAN :Russian
+STR_NETWORK_LANG_SLOVAK :Slovak
+STR_NETWORK_LANG_SLOVENIAN :Slovenian
+STR_NETWORK_LANG_SPANISH :Spanish
+STR_NETWORK_LANG_SWEDISH :Swedish
+STR_NETWORK_LANG_TURKISH :Turkish
+STR_NETWORK_LANG_UKRAINIAN :Ukrainian
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Multiplayer game lobby
@@ -1416,9 +1444,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Company name: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguration: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Company value: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Current balance: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Last year's income: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Company value: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Current balance: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Last year's income: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Performance: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Vehicles: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1653,7 +1681,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Building must be demolished first
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Population: {ORANGE}{COMMA}{BLACK} Houses: {ORANGE}{COMMA}
@@ -1686,7 +1714,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Show information on local authority
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} local authority
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Transport company ratings:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subsidies
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Subsidies on offer for services taking:
STR_2027_FROM_TO :{ORANGE}{STRING} from {STRING} to {STRING}
@@ -1757,7 +1785,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...tree already here
STR_2804_SITE_UNSUITABLE :{WHITE}...site unsuitable
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Can't plant tree here...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...too many signs
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Can't place sign here...
STR_280A_SIGN :Sign
@@ -1866,6 +1894,7 @@
STR_3805_COAST_OR_RIVERBANK :Coast or riverbank
STR_3806_SHIP_DEPOT :Ship depot
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Can't build on water
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Must demolish canal first
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Save Game
@@ -1875,9 +1904,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabyte{P "" s} free
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Unable to read drive
-STR_4007_GAME_SAVE_FAILED :{WHITE}Game Save Failed
+STR_4007_GAME_SAVE_FAILED :{WHITE}Game Save Failed{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Unable to delete file
-STR_4009_GAME_LOAD_FAILED :{WHITE}Game Load Failed
+STR_4009_GAME_LOAD_FAILED :{WHITE}Game Load Failed{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internal error: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Broken savegame - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is made with newer version
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :File not readable
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :File not writable
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}List of drives, directories and saved-game files
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Currently selected name for saved-game
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Delete the currently selected saved-game
@@ -2048,8 +2082,7 @@
STR_SV_STNAME_LOWER :Lower {STRING}
STR_SV_STNAME_HELIPORT :{STRING} Heliport
STR_SV_STNAME_FOREST :{STRING} Forest
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} Station #{NUM}
############ end of savegame specific region!
@@ -2129,7 +2162,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Player {COMMA})
STR_7004_NEW_FACE :{BLACK}New Face
STR_7005_COLOR_SCHEME :{BLACK}Color Scheme
@@ -2141,7 +2174,7 @@
STR_700B_PRESIDENT_S_NAME :President's Name
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Can't change company name...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Can't change president's name...
-STR_700E_FINANCES :{WHITE}{COMPANY} Finances {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Finances {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Expenditure/Income
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Construction
@@ -2157,20 +2190,20 @@
STR_701B_SHIP_INCOME :{GOLD}Ship Income
STR_701C_LOAN_INTEREST :{GOLD}Loan Interest
STR_701D_OTHER :{GOLD}Other
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Total:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Income Graph
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Operating Profit Graph
STR_7026_BANK_BALANCE :{WHITE}Bank Balance
STR_7027_LOAN :{WHITE}Loan
-STR_MAX_LOAN :{WHITE}Max Loan: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Borrow {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Repay {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Max Loan: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Borrow {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Repay {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maximum permitted loan size is {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Can't borrow any more money...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...no loan to repay
@@ -2209,8 +2242,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Company performance ratings (maximum rating=1000)
STR_7052_COMPANY_VALUES :{WHITE}Company values
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Company League Table
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Transport company in trouble!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} will be sold off or declared bankrupt unless performance increases soon!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(President)
@@ -2248,7 +2281,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}World Recession!{}{}Financial experts fear worst as economy slumps!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recession Over!{}{}Upturn in trade gives confidence to industries as economy strengthens!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Toggle large/small window size
-STR_7076_COMPANY_VALUE :{GOLD}Company value: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Company value: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Buy 25% share in company
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Sell 25% share in company
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Buy 25% share in this company
@@ -2560,7 +2593,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Train Depot
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Citizens celebrate . . .{}First train arrives at {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Details)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Details)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Train in the way
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2581,6 +2614,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Go non-stop to {TOWN} Train Depot
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Service non-stop at {TOWN} Train Depot
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Travel (not timetabled)
+STR_TIMETABLE_TRAVEL_FOR :Travel for {STRING}
+STR_TIMETABLE_STAY_FOR :and stay for {STRING}
+STR_TIMETABLE_DAYS :{COMMA} day{P "" s}
+STR_TIMETABLE_TICKS :{COMMA} tick{P "" s}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Heading for {TOWN} Train Depot
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Heading for {TOWN} Train Depot, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Service at {TOWN} Train Depot
@@ -2622,13 +2662,15 @@
STR_REFIT :{BLACK}Refit
STR_REFIT_TIP :{BLACK}Select what cargo type to refit to in this order. Control click to remove refit instruction
STR_REFIT_ORDER :(Refit to {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Timetable
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Switch to the timetable view
STR_8829_ORDERS :{WHITE}{VEHICLE} (Orders)
STR_882A_END_OF_ORDERS :{SETX 10}- - End of Orders - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Service
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Can't build railroad vehicle...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Value: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Loading / Unloading
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Train must be stopped inside a depot
@@ -2638,6 +2680,9 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Can't insert new order...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Can't delete this order...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Can't modify this order...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Can't move this order...
+STR_CAN_T_SKIP_ORDER :{WHITE}Can't skip current order...
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}Can't skip to selected order...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Can't move vehicle...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}The rear engine will always follow its front counterpart
STR_8838_N_A :N/A{SKIP}
@@ -2669,11 +2714,16 @@
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Show capacities of each vehicle
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Show total capacity of train, split by cargo type
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Orders list - click on order to highlight it
+STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Skip the current order, and start the next. CTRL + click skips to the selected order)
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Delete the highlighted order
STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Make the highlighted order non-stop
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Insert a new order before the highlighted order, or add to end of list
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Make the highlighted order force the vehicle to wait for a full load
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Make the highlighted order force the vehicle to unload
+STR_TIMETABLE_TOOLTIP :{BLACK}Timetable - click on an order to highlight it.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time
STR_SERVICE_HINT :{BLACK}Skip this order unless a service is needed
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Cost: {CURRENCY} Weight: {WEIGHT_S}{}Speed: {VELOCITY} Power: {POWER}{}Running Cost: {CURRENCY}/yr{}Capacity: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Broken down
@@ -2695,6 +2745,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Can't rename train vehicle type...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Make the highlighted order force the vehicle to dump cargo
STR_886F_TRANSFER :{BLACK}Transfer
+STR_CLEAR_TIME :{BLACK}Clear Time
+STR_RESET_LATENESS :{BLACK}Reset Late Counter
STR_TRAIN_STOPPING :{RED}Stopping
STR_TRAIN_STOPPING_VEL :{RED}Stopping, {VELOCITY}
@@ -2703,8 +2755,16 @@
STR_TRAIN_START_NO_CATENARY :This track lacks catenary, so the train can't start
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}New {STRING} now available!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}New {STRING} now available! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}New {STRING} now available! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Can't timetable vehicle...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehicles can only wait at stations.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}This vehicle is not stopping at this station.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Change Time
+STR_TIMETABLE_STATUS_ON_TIME :This vehicle is currently running on time
+STR_TIMETABLE_STATUS_LATE :This vehicle is currently running {STRING} late
+STR_TIMETABLE_STATUS_EARLY :This vehicle is currently running {STRING} early
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Road vehicle in the way
@@ -2720,7 +2780,7 @@
STR_900E_MAX_SPEED :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit this year: {LTBLUE}{CURRENCY} (last year: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Reliability: {LTBLUE}{COMMA}% {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Capacity: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...must be stopped inside a road vehicle depot
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Can't sell road vehicle...
@@ -2747,6 +2807,8 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Road vehicle selection list - click on vehicle for information
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Build the highlighted road vehicle
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Cost: {CURRENCY}{}Speed: {VELOCITY}{}Running Cost: {CURRENCY}/yr{}Capacity: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Capacity: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Name road vehicle
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Can't name road vehicle...
@@ -2794,7 +2856,7 @@
STR_9813_MAX_SPEED :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit this year: {LTBLUE}{CURRENCY} (last year: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Reliability: {LTBLUE}{COMMA}% {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacity: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Can't stop/start ship...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Can't send ship to depot...
@@ -2862,7 +2924,7 @@
STR_A00E_MAX_SPEED :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit this year: {LTBLUE}{CURRENCY} (last year: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Reliability: {LTBLUE}{COMMA}% {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Can't send aircraft to hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Heading for {STATION} Hangar
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Heading for {STATION} Hangar, {VELOCITY}
@@ -2915,6 +2977,8 @@
STR_GO_TO_AIRPORT_HANGAR :Go to {STATION} Hangar
SERVICE_AT_AIRPORT_HANGAR :Service at {STATION} Hangar
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Timetable)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelin disaster at {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Road vehicle destroyed in 'UFO' collision!
@@ -3230,6 +3294,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Toggle transparency for buildables like stations, depots, waypoints and catenary
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Toggle transparency for bridges
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Toggle transparency for structures like lighthouses and antennas, maybe in future for eyecandy
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Toggle transparency for loading indicators
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Group {COMMA}
@@ -3267,4 +3339,7 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profit this year: {GREEN}{CURRENCY} {BLACK}(last year: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profit this year: {RED}{CURRENCY} {BLACK}(last year: {RED}{CURRENCY}{BLACK})
+STR_GROUP_NAME :{GROUP}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/brazilian_portuguese.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/brazilian_portuguese.txt Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Fora do mapa
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Muito próximo da borda do mapa
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Não há dinheiro - requer {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Precisa de terreno plano
STR_0008_WAITING :{BLACK}Aguardando: {WHITE}{STRING}
@@ -497,7 +497,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Autoridade local: {LTBLUE}{STRING}
STR_01A9_NONE :Nenhum
STR_01AA_NAME :{BLACK}Nome
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -780,6 +780,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Configurações de dificuldade
STR_02C7_CONFIG_PATCHES :Configurar correções
STR_NEWGRF_SETTINGS :Configurar NewGRF
+STR_TRANSPARENCY_OPTIONS :Opções de Transparência
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Exibir nomes de cidades
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Exibir nomes de estações
@@ -807,7 +808,6 @@
STR_02DE_MAP_OF_WORLD :Mapa mundi
STR_EXTRA_VIEW_PORT :Visualizador extra
STR_SIGN_LIST :Lista de placas
-STR_TRANSPARENCY_OPTIONS :Opções de Transparência
STR_02DF_TOWN_DIRECTORY :Lista de cidades
STR_TOWN_POPULATION :{BLACK}População mundial: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Visualizador {COMMA}
@@ -1105,6 +1105,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Velocidade do scrollwheel do mapa: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Usar indicadores de carga: {ORANGE}{STRING}
+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}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Trilho Normal
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Trilho Elétrico
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monotrilho
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Primeiro disponível
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Último disponível
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Mais utilizado
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Máximo de trens por jogador: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Máximo de automóveis por jogador: {ORANGE}{STRING}
@@ -1188,7 +1199,7 @@
STR_CHEATS :{WHITE}Trapaças
STR_CHEATS_TIP :{BLACK}As caixas de verificação indicam se esta trapaça já foi usada antes
STR_CHEATS_WARNING :{BLACK}Atenção! Você está prestes a trair os seus oponentes. Saiba que isto ficará registrado para sempre.
-STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Jogar como jogador: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer mágico (destrói indústrias, etc.): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Os túneis poderão cruzar-se: {ORANGE}{STRING}
@@ -1443,9 +1454,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Nome da empresa: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguração: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Valor da empresa: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Balanço atual: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Rendimento do último ano: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Valor da empresa: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Balanço atual: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Rendimento do último ano: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Desempenho: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Veículos: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1680,7 +1691,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}O edifício precisa ser demolido primeiro
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}População: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA}
@@ -1713,7 +1724,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Exibir informações sobre a autoridade local
STR_2022_LOCAL_AUTHORITY :{WHITE}autoridade local de {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Avaliações das empresas
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subsídios
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Ofertas de transporte subsidiados
STR_2027_FROM_TO :{ORANGE}{STRING} de {STRING} para {STRING}
@@ -1786,7 +1797,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...árvore já plantada aqui
STR_2804_SITE_UNSUITABLE :{WHITE}...local impróprio
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Impossível plantar árvore aqui...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...muitas placas
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Impossível colocar placa aqui...
STR_280A_SIGN :Placa
@@ -1895,6 +1906,7 @@
STR_3805_COAST_OR_RIVERBANK :Costa ou margem
STR_3806_SHIP_DEPOT :Depósito naval
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Impossível construir na água
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Deve demolir o canal primeiro
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Salvar Jogo
@@ -1904,9 +1916,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabytes livres
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Incapaz de ler unidade
-STR_4007_GAME_SAVE_FAILED :{WHITE}Falha ao Salvar Jogo
+STR_4007_GAME_SAVE_FAILED :{WHITE}Falha ao Salvar Jogo{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Incapaz de remover o arquivo
-STR_4009_GAME_LOAD_FAILED :{WHITE}Falha ao Abrir Jogo
+STR_4009_GAME_LOAD_FAILED :{WHITE}Falha ao Abrir Jogo{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Arquivo corrompido - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :O arquivo foi criado utilizando uma versão mais nova
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Arquivo não legível
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Arquivo não editável
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Lista de unidades, diretórios e arquivos de jogos gravados
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Nome selecionado para salvar o jogo
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Remover o jogo selecionado
@@ -2077,8 +2094,7 @@
STR_SV_STNAME_LOWER :Sul de {STRING}
STR_SV_STNAME_HELIPORT :Heliporto de {STRING}
STR_SV_STNAME_FOREST :Floresta de {STRING}
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} Estação #{NUM}
############ end of savegame specific region!
@@ -2158,7 +2174,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Jogador {COMMA})
STR_7004_NEW_FACE :{BLACK}Novo Rosto
STR_7005_COLOR_SCHEME :{BLACK}Cores
@@ -2170,7 +2186,7 @@
STR_700B_PRESIDENT_S_NAME :Nome do Presidente
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Impossível alterar o nome da empresa...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Impossível alterar o nome do presidente...
-STR_700E_FINANCES :{WHITE}Finanças de {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}Finanças de {COMPANY} {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Despesas/Lucros
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Construção
@@ -2186,20 +2202,20 @@
STR_701B_SHIP_INCOME :{GOLD}Lucros de Embarcações
STR_701C_LOAN_INTEREST :{GOLD}Juros do Empréstimo
STR_701D_OTHER :{GOLD}Outros
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Total:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Gráfico de Rendimentos
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Gráfico de Lucros Operacionais
STR_7026_BANK_BALANCE :{WHITE}Balanço Bancário
STR_7027_LOAN :{WHITE}Empréstimo
-STR_MAX_LOAN :{WHITE}Empréstimo Máximo: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Pedir {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Pagar {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Empréstimo Máximo: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Pedir {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Pagar {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...o empréstimo máximo permitido é de {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Impossível pedir mais dinheiro emprestado...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...não há empréstimo para pagar
@@ -2238,8 +2254,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Avaliações da empresa (máximo=1000)
STR_7052_COMPANY_VALUES :{WHITE}Valor da empresa
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Classificação de Empresas
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Empresa de transportes em dificuldades!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} será vendida ou declarada falida a menos que melhore os seus rendimentos em breve!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Presidente)
@@ -2277,7 +2293,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Recesso Mundial!{}{}Economistas temem crise!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Fim do recesso!{}{}Melhoras no comércio inspiram confiança nas indústrias à medida que a economia se fortalece!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Alternar entre janela grande/pequena
-STR_7076_COMPANY_VALUE :{GOLD}Valor da empresa: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Valor da empresa: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Comprar 25% de ações
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Vender 25% de ações
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Comprar 25% das ações desta empresa
@@ -2589,7 +2605,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}Depósito ferroviário de {TOWN}
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro trem chega a {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detalhes)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detalhes)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Trem no caminho
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2610,6 +2626,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Ir sem parar para o depósito de {TOWN}
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Manutenção no depósito de {TOWN} sem parar
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Viajar (não progamado)
+STR_TIMETABLE_TRAVEL_FOR :Viajar para {STRING}
+STR_TIMETABLE_STAY_FOR :e ficar durante {STRING}
+STR_TIMETABLE_DAYS :{COMMA} dia{P "" s}
+STR_TIMETABLE_TICKS :{COMMA} tique{P "" s}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Dirigindo-se ao depósito de {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Dirigindo-se ao depósito de {TOWN}, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Manutenção no depósito de {TOWN}
@@ -2651,13 +2674,15 @@
STR_REFIT :{BLACK}Readaptar
STR_REFIT_TIP :{BLACK}Selecionar a adaptação na ordem atual. CTRL + Clique para remover a instrução
STR_REFIT_ORDER :(Readaptar para {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Plano de horário
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Exibe o plano de horário
STR_8829_ORDERS :{WHITE}{VEHICLE} (Ordens)
STR_882A_END_OF_ORDERS :{SETX 10}- - Fim de Ordens - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Manutenção
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Impossível construir veículo ferroviário...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+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
@@ -2667,6 +2692,7 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Impossível inserir nova ordem...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Impossível remover esta ordem...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Impossível modificar esta ordem...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Impossível mudar essa ordem
STR_CAN_T_SKIP_ORDER :{WHITE}Impossível pular a ordem atual...
STR_CAN_T_SKIP_TO_ORDER :{WHITE}Impossível pular à ordem selecionada...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Impossível mover veículo...
@@ -2706,6 +2732,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Inserir nova ordem antes da ordem selecionada, ou adicionar no fim da lista
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}A ordem selecionada fará com que o veículo espere carregar completamente
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}A ordem selecionada forçará o veículo a descarregar
+STR_TIMETABLE_TOOLTIP :{BLACK}Plano de horário - selecione uma ordem clicando nela
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Mude a quantidade de tempo que a ordem deverá levar
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Reseta a quantidade de tempo para a ordem selecionada
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reseta o contador de atraso, fazendo o veículo estar na hora
STR_SERVICE_HINT :{BLACK}Saltar esta ordem a menos que seja necessário manutenção
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Custo: {CURRENCY} Peso: {WEIGHT_S}{}Velocidade: {VELOCITY} Potência: {POWER}{}Custo de circulação: {CURRENCY}/ano{}Capacidade: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Quebrado
@@ -2727,6 +2757,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Impossível renomear tipo de veículo ferroviário...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Força o veículo a deixar a carga na ordem selecionada
STR_886F_TRANSFER :{BLACK}Transferir
+STR_CLEAR_TIME :{BLACK}Resetar horário
+STR_RESET_LATENESS :{BLACK}Resetar contador de atraso
STR_TRAIN_STOPPING :{RED}Parando
STR_TRAIN_STOPPING_VEL :{RED}Parando, {VELOCITY}
@@ -2735,8 +2767,18 @@
STR_TRAIN_START_NO_CATENARY :Essa linha não tem energia, portanto o trem não parte
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Novo {STRING} agora disponível!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo {STRING} agora disponível! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo {STRING} agora disponível! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossível programar veículo...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Veículos só podem aguardar em estações
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Esse veículo não pára nesta estação
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Mudar horário
+STR_TIMETABLE_STATUS_ON_TIME :Esse veículo está no horário
+STR_TIMETABLE_STATUS_LATE :Esse veículo está {STRING} atrasado
+STR_TIMETABLE_STATUS_EARLY :Esse veículo está {STRING} adiantado
+STR_TIMETABLE_AUTOFILL :{BLACK}Autopreencher
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Preenche a tabela de horários com os horários da primeira viagem
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Automóvel no caminho
@@ -2752,7 +2794,7 @@
STR_900E_MAX_SPEED :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+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_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Impossível vender automóvel...
@@ -2779,6 +2821,8 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Lista de automóveis - clique num automóvel para informações
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Construir o veículo selecionado
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Custo: {CURRENCY}{}Velocidade: {VELOCITY}{}Custo de circulação: {CURRENCY}/ano{}Capacidade: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Capacidade: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Renomear automóvel
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Impossível renomear automóvel...
@@ -2826,7 +2870,7 @@
STR_9813_MAX_SPEED :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Impossível iniciar/parar embarcação...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Impossível enviar embarcação para o depósito...
@@ -2894,7 +2938,7 @@
STR_A00E_MAX_SPEED :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Confiabilidade: {LTBLUE}{COMMA}% {BLACK}Quebras desde a última manutenção: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Impossível enviar aeronave para o hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Dirigindo-se ao hangar de {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Dirigindo-se ao hangar de {STATION}, {VELOCITY}
@@ -2947,6 +2991,8 @@
STR_GO_TO_AIRPORT_HANGAR :Ir para o hangar de {STATION}
SERVICE_AT_AIRPORT_HANGAR :Manutenção no hangar de {STATION}
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Timetable)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Acidente de Zepelim em {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Automóvel destruído em colisão com OVNI!
@@ -3262,6 +3308,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Alternar transparência para construções como estações, depósitos, pontos de controle e eletrificação da ferrovia
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Alternar transparência para pontes
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Alternar transparência para estruturas como faróis e antenas, talvez no futuro para efeitos visuais
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Altera transparência para os indicadores de carga
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Agrupar {COMMA}
@@ -3299,4 +3353,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Lucros do ano {GREEN}{CURRENCY} {BLACK}(ano passado: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Lucros do ano: {RED}{CURRENCY} {BLACK}(ano passado {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/bulgarian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/bulgarian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Извън картата
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Края на картата е прекалено близо
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Недостатъчно пари - трябват {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Трябва равна земя
STR_0008_WAITING :{BLACK}Чакане: {WHITE}{STRING}
@@ -497,7 +497,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Община: {LTBLUE}{STRING}
STR_01A9_NONE :Нищо
STR_01AA_NAME :{BLACK}Име
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1-ви
@@ -780,6 +780,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Опции за трудност
STR_02C7_CONFIG_PATCHES :Конфигурирай патчове
STR_NEWGRF_SETTINGS :Newgrf настройки
+STR_TRANSPARENCY_OPTIONS :Опций на прозрачност
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Показване имената на градовете
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Показване имената на станциите
@@ -807,7 +808,6 @@
STR_02DE_MAP_OF_WORLD :Карта на света
STR_EXTRA_VIEW_PORT :Допълнителна камера
STR_SIGN_LIST :Списък с табели
-STR_TRANSPARENCY_OPTIONS :Опций на прозрачност
STR_02DF_TOWN_DIRECTORY :Списък със селищата
STR_TOWN_POPULATION :{BLACK}Световна популация: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Камера {COMMA}
@@ -1186,7 +1186,7 @@
STR_CHEATS :{WHITE}Кодове
STR_CHEATS_TIP :{BLACK}Кутийките показват дали този код е бил използван
STR_CHEATS_WARNING :{BLACK}Внимание! По този начин ще измамите своите съперници. Имайте в предвид, че това безчестие ще бъде запомнено вовеки веков.
-STR_CHEAT_MONEY :{LTBLUE}Увеличаване на парите с {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Увеличаване на парите с {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Игра като: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Магически булдозер (премахва промишленост, неподвижни обекти): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Тунелите може да се пресичат: {ORANGE}{STRING}
@@ -1441,9 +1441,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Име на компания: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Основаване: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Стойност на компанията: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Текущ баланс: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Приход от предходната година: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Стойност на компанията: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Текущ баланс: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Приход от предходната година: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Представяне: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Превозни средства: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1672,7 +1672,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Сградата първо трябва да бъде разрушена
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Население: {ORANGE}{COMMA}{BLACK} Жилища: {ORANGE}{COMMA}
@@ -1705,7 +1705,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Показване на информация за местните власти
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} местни власти
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Рейтинги на транспортни компании:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Субсидии
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Субсидии за превоз на:
STR_2027_FROM_TO :{ORANGE}{STRING} от {STRING} до {STRING}
@@ -1776,7 +1776,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...вече има дърво
STR_2804_SITE_UNSUITABLE :{WHITE}...неподходящо място
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Тук не може да бъде засадено дърво...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...твърде много знаци
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Тук не може да бъде поставян знак...
STR_280A_SIGN :Знак
@@ -1894,9 +1894,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} мегабайт{P "" а} свободно
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Не може да прочете диска
-STR_4007_GAME_SAVE_FAILED :{WHITE}Запазването на играта е неуспешно
+STR_4007_GAME_SAVE_FAILED :{WHITE}Запазването на играта е неуспешно{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Изтриването на файла е неуспешно
-STR_4009_GAME_LOAD_FAILED :{WHITE}Отварянето на играта е неуспешно
+STR_4009_GAME_LOAD_FAILED :{WHITE}Отварянето на играта е неуспешно{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Списък с хард-дисковете, директориите и запазените игри
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Избрано име за запазена игра
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Изтрий избраната запазената игра
@@ -2068,8 +2068,6 @@
STR_SV_STNAME_HELIPORT :{STRING} Хелипорт
STR_SV_STNAME_FOREST :{STRING} Дървета
-STR_SV_GROUP_NAME :{GROUP}
-
############ end of savegame specific region!
##id 0x6800
@@ -2148,7 +2146,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Играч {COMMA})
STR_7004_NEW_FACE :{BLACK}Ново лице
STR_7005_COLOR_SCHEME :{BLACK}Цветове
@@ -2160,7 +2158,7 @@
STR_700B_PRESIDENT_S_NAME :Име на управителя
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Не може да бъде променено името на компанията...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Не може да се промени името на управителя...
-STR_700E_FINANCES :{WHITE}{COMPANY} Финанси {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Финанси {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Разходи/Приходи
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Строеж
@@ -2176,20 +2174,20 @@
STR_701B_SHIP_INCOME :{GOLD}Приходи от кораби
STR_701C_LOAN_INTEREST :{GOLD}Лихва по заема
STR_701D_OTHER :{GOLD}Други
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Всичко:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Графика на приходите
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Графика на оперативните приходи
STR_7026_BANK_BALANCE :{WHITE}Баланс на банковата сметка
STR_7027_LOAN :{WHITE}Заем
-STR_MAX_LOAN :{WHITE}Максимален заем: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Изтегли {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Изплати {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Максимален заем: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Изтегли {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Изплати {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...максимално разрешеният размер на заема е {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Не може да изтеглиш повече пари...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...няма заем за изплащане
@@ -2228,8 +2226,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Райтинг на представянето на компанията (максимален рейтинг=1000)
STR_7052_COMPANY_VALUES :{WHITE}Стойност на Компанията
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Класиране на Компаниите
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Транспортна компания в беда!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} ще бъде продадена или обявена в банкрут освен ако представянето й не се подобри скоро!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Manager)
@@ -2267,7 +2265,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Световна икономическа криза!{}{}Финансовите експерти очакват най-лошото от сриващата се световна икономика!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Световната икономическа криза отмина!{}{}Възходът на търговията дава увереност на индустриите в новата засилваща се икономическа реалност!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Активирай голям/малък размер на прозореца
-STR_7076_COMPANY_VALUE :{GOLD}Стойност на Компанията: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Стойност на Компанията: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Купи 25% от акциите на компанията
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Продай 25% от акциите на компанията
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Купи 25% от акциите на тази компания
@@ -2579,7 +2577,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Влаково депо
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Хората празнуват . . .{}Първи влак пристигна на {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Подробности)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Подробности)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Влак на пътя
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2600,6 +2598,8 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Отиди без да спираш на {TOWN} Влаково депо
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Ремонт без спиране в {TOWN} влаково депо
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Отиващ към Влаковото депо на {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Отиващ към Влаковото депо на {TOWN}, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}На ремонт във Влаковото депо на {TOWN}
@@ -2646,8 +2646,8 @@
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Ремонт
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Не може да купиш ЖП машина...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Купи: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Цена: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Купи: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Цена: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Товарене/ Разтоварване
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Влакът трябва да бъде спрян в депото
@@ -2722,8 +2722,9 @@
STR_TRAIN_START_NO_CATENARY :Влака не може да тръгне, защото ЖП линията няма catenary
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Нов {STRING} е на разположение!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Нов {STRING} е на разположение! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Нов {STRING} е на разположение! - {ENGINE}
+
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Кола на пътя
@@ -2739,7 +2740,7 @@
STR_900E_MAX_SPEED :{BLACK}Макс. скорост: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Печалба тази година: {LTBLUE}{CURRENCY} (предходна година: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Надеждност: {LTBLUE}{COMMA}% {BLACK}Повреди от последния сервиз: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Производство: {LTBLUE}{NUM}{BLACK} Стойност: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Производство: {LTBLUE}{NUM}{BLACK} Стойност: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Капацитет: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...трябва да бъде спряно в сервиз за коли
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Не може да продаде колата...
@@ -2812,7 +2813,7 @@
STR_9813_MAX_SPEED :{BLACK}Макс. скорост: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Печалба тази година: {LTBLUE}{CURRENCY} (миналата година: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Надеждност: {LTBLUE}{COMMA}% {BLACK}Повреди след последния сервиз: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Купен: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Купен: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Вместимост: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Не може да спреш/задвижиш кораба...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Не може да пратиш кораба в депото...
@@ -2880,7 +2881,7 @@
STR_A00E_MAX_SPEED :{BLACK}Макс. скорост: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Печалба тази година: {LTBLUE}{CURRENCY} (предходната: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Надеждност: {LTBLUE}{COMMA}% {BLACK}Повреди от последния сервиз: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Произведен: {LTBLUE}{NUM}{BLACK} Стойност: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Произведен: {LTBLUE}{NUM}{BLACK} Стойност: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Не може да изпрати самолета в хангар...
STR_HEADING_FOR_HANGAR :{ORANGE}Отиващ към Хангара на летище {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Отиващ към Хангара на летище {STATION}, {VELOCITY}
@@ -2933,6 +2934,7 @@
STR_GO_TO_AIRPORT_HANGAR :Отиди до Хангара на летище {STATION}
SERVICE_AT_AIRPORT_HANGAR :Сервиз в {STATION} хангар
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Катастрофа с Цепелин на {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}МПС бе унищожено при сблъсък с НЛО!
@@ -3249,6 +3251,13 @@
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Използвай прозрачност за мостове
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Използвай прозрачност за сгради като фарове и антени, може би в бъдеще за украси
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+
##### Mass Order
STR_GROUP_NAME_FORMAT :Група {COMMA}
STR_GROUP_TINY_NAME :{TINYFONT}{GROUP}
@@ -3285,4 +3294,6 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Печалба тази година: {GREEN}{CURRENCY} {BLACK}(предишната година: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Печалба тази година: {RED}{CURRENCY} {BLACK}(предишната година: {RED}{CURRENCY}{BLACK})
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/catalan.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/catalan.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Fora del marc del mapa
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Massa a prop del marc del mapa
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}No tens prou diners - et fan falta {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Es necessita un terreny pla
STR_0008_WAITING :{BLACK}Esperant: {WHITE}{STRING}
@@ -166,7 +166,7 @@
STR_00C5 :{BLACK}{CROSS}
STR_00C6 :{SILVER}{CROSS}
-STR_00C7_QUIT :{WHITE}Sortir
+STR_00C7_QUIT :{WHITE}Surt
STR_00C8_YES :{BLACK}Si
STR_00C9_NO :{BLACK}No
STR_00CA_ARE_YOU_SURE_YOU_WANT_TO :{YELLOW}Estàs segur que vols abandonar aquest joc i tornar a {STRING}?
@@ -331,15 +331,15 @@
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}t
STR_UNITS_WEIGHT_SHORT_SI :{COMMA}kg
-STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA} tona{P "" s}
-STR_UNITS_WEIGHT_LONG_METRIC :{COMMA} tone{P "" s}
+STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA} ton{P a es}
+STR_UNITS_WEIGHT_LONG_METRIC :{COMMA} ton{P a es}
STR_UNITS_WEIGHT_LONG_SI :{COMMA} kg
STR_UNITS_VOLUME_SHORT_IMPERIAL :{COMMA}gal
STR_UNITS_VOLUME_SHORT_METRIC :{COMMA}l
STR_UNITS_VOLUME_SHORT_SI :{COMMA}m³
-STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA} galó{P "" s}
+STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA} galó{P "" ns}
STR_UNITS_VOLUME_LONG_METRIC :{COMMA} litre{P "" s}
STR_UNITS_VOLUME_LONG_SI :{COMMA} m³
@@ -362,7 +362,7 @@
STR_015C_SAVE_GAME :Desa el joc
STR_015D_LOAD_GAME :Carrega el joc
STR_015E_QUIT_GAME :Abandona el joc
-STR_015F_QUIT :Sortir
+STR_015F_QUIT :Surt
STR_ABANDON_GAME_QUERY :{YELLOW}Estàs segur que vols abandonar aquest joc?
STR_0161_QUIT_GAME :{WHITE}Abandona el Joc
STR_SORT_ORDER_TIP :{BLACK}Selecciona ordre de classificació (descendent/ascendent)
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Autoritat Local: {LTBLUE}{STRING}
STR_01A9_NONE :Ningú
STR_01AA_NAME :{BLACK}Nom
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -735,9 +735,9 @@
STR_0292_SAVE_SCENARIO :Desa l'escenari
STR_0293_LOAD_SCENARIO :Carrega un escenari
STR_LOAD_HEIGHTMAP :Carrega Mapa d'alçades
-STR_0294_QUIT_EDITOR :Sortir de l'editor
+STR_0294_QUIT_EDITOR :Surt de l'editor
STR_0295 :
-STR_0296_QUIT :Sortir
+STR_0296_QUIT :Surt
STR_0297_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Desa l'escenari, carrega un escenari, abandona l'editor d'escenaris, sortir
STR_0298_LOAD_SCENARIO :{WHITE}Carrega un Escenari
STR_0299_SAVE_SCENARIO :{WHITE}Desa l'Escenari
@@ -745,7 +745,7 @@
STR_PLAY_HEIGHTMAP :{BLACK}Juga un mapa d'alçades
STR_PLAY_HEIGHTMAP_HINT :{BLACK}Comença un nou joc, utilitzant un mapa d'alçades com a terreny
STR_QUIT_SCENARIO_QUERY :{YELLOW}Estàs segur que vols sortir d'aquest escenari ?
-STR_029C_QUIT_EDITOR :{WHITE}Sortir de l'Editor
+STR_029C_QUIT_EDITOR :{WHITE}Surt de l'Editor
STR_029D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...només es pot construir en poblacions de més de 1200 hab.
STR_029E_MOVE_THE_STARTING_DATE :{BLACK}Retarda la data d'inici 1 any
STR_029F_MOVE_THE_STARTING_DATE :{BLACK}Avança la data d'inici 1 any
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Paràmetres de dificultat
STR_02C7_CONFIG_PATCHES :Configura pedaços
STR_NEWGRF_SETTINGS :Configuracions de Newgrf
+STR_TRANSPARENCY_OPTIONS :Opcions de transparència
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Mostra els noms de les poblacions
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Mostra els noms de les estacions
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :Mapa del món
STR_EXTRA_VIEW_PORT :Vista extra
STR_SIGN_LIST :Llista de senyals
-STR_TRANSPARENCY_OPTIONS :Opcions de transparència
STR_02DF_TOWN_DIRECTORY :Directori de Poblacions
STR_TOWN_POPULATION :{BLACK}Població mundial: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vista {COMMA}
@@ -844,8 +844,8 @@
STR_0301_DISPLAY_GAME_OPTIONS :{BLACK}Mostra les opcions del joc
STR_0302_DISPLAY_DIFFICULTY_OPTIONS :{BLACK}Mostra les opcions de dificultat
STR_0303_START_A_NEW_GAME_USING :{BLACK}Comença un joc nou, utilitzant un escenari personalitzat
-STR_0304_QUIT :{BLACK}Sortir
-STR_0305_QUIT_OPENTTD :{BLACK}Sortir d'OpenTTD
+STR_0304_QUIT :{BLACK}Surt
+STR_0305_QUIT_OPENTTD :{BLACK}Surt d'OpenTTD
STR_0307_OPENTTD :{WHITE}OpenTTD {REV}
STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}...només es pot construir en poblacions
STR_030E_SELECT_TEMPERATE_LANDSCAPE :{BLACK}Selecciona l'estil de paisatge 'temperat'
@@ -1098,11 +1098,22 @@
STR_CONFIG_PATCHES_PREFER_TEAMCHAT :{LTBLUE}Prefereix fer un chat d'equip amb <ENTER>: {ORANGE}{STRING}
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 :Moure mapa
+STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLL :Mou el mapa
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :Off
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Velocitat del mapa amb la rodeta del ratolí: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Utilitza indicadors de carregament: {ORANGE}{STRING}
+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}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Via Normal
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Via Electrificada
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :La primera disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :La darrera disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :La més utilitzada
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Max trens per jugador: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Max automòbils per jugador: {ORANGE}{STRING}
@@ -1186,7 +1197,7 @@
STR_CHEATS :{WHITE}Trampes
STR_CHEATS_TIP :{BLACK}Els quadres marcats indiquen que ja has fet servir aquesta trampa
STR_CHEATS_WARNING :{BLACK}Atenció! Estàs a punt d'enredar als teus companys competidors. Pensa que una cosa així serà recordada per tota la eternitat!.
-STR_CHEAT_MONEY :{LTBLUE}Incrementa els diners en {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Incrementa els diners en {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Juga com el jugador: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Eruga màgica (treu indústries, inamovibles): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Els túnels es poden creuar: {ORANGE}{STRING}
@@ -1441,9 +1452,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Nom empresa: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguració: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Valor de l'empresa: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Balanç actual: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Ingressos de l'últim any: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Valor de l'empresa: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Balanç actual: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Ingressos de l'últim any: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Rendiment: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Vehicles: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1584,7 +1595,7 @@
STR_1007_ALREADY_BUILT :{WHITE}...ja construit
STR_1008_MUST_REMOVE_RAILROAD_TRACK :{WHITE}S'ha de treure la via primer
STR_100A_RAILROAD_CONSTRUCTION :{WHITE}Construcció de Ferrocarril
-STR_TITLE_ELRAIL_CONSTRUCTION :{WHITE}Construcció de Via Electrificada
+STR_TITLE_ELRAIL_CONSTRUCTION :{WHITE}Construcció de Ferrocarril Elèctric
STR_100B_MONORAIL_CONSTRUCTION :{WHITE}Construcció de Monorail
STR_100C_MAGLEV_CONSTRUCTION :{WHITE}Construcció de Maglev
STR_100D_SELECT_RAIL_BRIDGE :{WHITE}Selecciona pont per la via
@@ -1596,7 +1607,7 @@
STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Aquí no es poden treure les senyals...
STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Cotxeres de Tren
STR_1015_RAILROAD_CONSTRUCTION :Construcció de Ferrocarril
-STR_TOOLB_ELRAIL_CONSTRUCTION :Contrucció de Via Electrificada
+STR_TOOLB_ELRAIL_CONSTRUCTION :Construcció de Ferrocarril Elèctric
STR_1016_MONORAIL_CONSTRUCTION :Construcció de Monorail
STR_1017_MAGLEV_CONSTRUCTION :Construcció de Maglev
STR_1018_BUILD_RAILROAD_TRACK :{BLACK}Construeix via de tren
@@ -1629,7 +1640,7 @@
STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}S'ha de treure la carretera primer
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Obres en progrés
STR_1802_ROAD_CONSTRUCTION :{WHITE}Construcció de Carreteres
-STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Construcció de via de tramvia
+STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Construcció de Tramvies
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Selecciona un Pont per Carretera
STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... les carreteres de sentit únic no poden tenir encreuaments
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Aquí no es pot construir una carretera...
@@ -1645,9 +1656,9 @@
STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}No puc construir l'estació de tramvies de passatgers
STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}No puc construir l'estació de tramvies de càrrega
STR_180A_ROAD_CONSTRUCTION :Construcció de Carreteres
-STR_180A_TRAMWAY_CONSTRUCTION :Construcció de vies de tramvia
+STR_180A_TRAMWAY_CONSTRUCTION :Construcció de Tramvies
STR_180B_BUILD_ROAD_SECTION :{BLACK}Construeix una secció de carretera
-STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Construeix secció de via de tramvia
+STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Construeix una secció de via de tramvia
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construeix una cotxera (per construir i mantenir vehicles)
STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construeix cotxeres de tramvies (per construir i revisar tramvies)
STR_180D_BUILD_BUS_STATION :{BLACK}Constueix una parada d'autobús
@@ -1678,7 +1689,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}L'edifici s'ha d'enderrocar primer
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Població: {ORANGE}{COMMA}{BLACK} Cases: {ORANGE}{COMMA}
@@ -1711,7 +1722,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Mostra informació de l'autoritat local
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} autoritat local
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Ratis de l'Empresa de Transports:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subvencions
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Subvencions per prestació de serveis oferts:
STR_2027_FROM_TO :{ORANGE}{STRING} de {STRING} a {STRING}
@@ -1751,7 +1762,7 @@
STR_204A_BUILD_STATUE_OF_COMPANY :Construeix una estàtua del propietari de l'empresa
STR_204B_FUND_NEW_BUILDINGS :Patrocina nous edificis
STR_204C_BUY_EXCLUSIVE_TRANSPORT :Compra els drets de transport en exclusiva
-STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY :Subornar les autoritats locals
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY :Suborna les autoritats locals
STR_204D_INITIATE_A_SMALL_LOCAL :{WHITE}{STRING}{}{YELLOW} Inicia una petita campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{} Cost: {CURRENCY}
STR_204E_INITIATE_A_MEDIUM_LOCAL :{WHITE}{STRING}{}{YELLOW} Inicia una mitjana campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{} Cost: {CURRENCY}
STR_204F_INITIATE_A_LARGE_LOCAL :{WHITE}{STRING}{}{YELLOW} Inicia una gran campanya de publicitat, per atraure més passatgers i càrregues als teus serveis de transport.{} Cost: {CURRENCY}
@@ -1759,7 +1770,7 @@
STR_2051_BUILD_A_STATUE_IN_HONOR :{WHITE}{STRING}{}{YELLOW} Construeix una estatua en honor a la teva empresa.{} Cost: {CURRENCY}
STR_2052_FUND_THE_CONSTRUCTION_OF :{WHITE}{STRING}{}{YELLOW} Patrocina la construcció de nous edificis comercials en la població.{} Cost: {CURRENCY}
STR_2053_BUY_1_YEAR_S_EXCLUSIVE :{WHITE}{STRING}{}{YELLOW} Compra per 1 any els drets exclusius de transport en la població. La autoritat local només permetrà utilitzar les instal·lacions de la teva empresa de transports als passatgers i les mercaderies.{} Cost: {CURRENCY}
-STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC :{WHITE}{STRING}{}{YELLOW} Subornar les autoritats locals per incrementar el teu rati, a risc de greus penalitzacions si et pesquen!!.{} Cost: {CURRENCY}
+STR_TOWN_BRIBE_THE_LOCAL_AUTHORITY_DESC :{WHITE}{STRING}{}{YELLOW} Suborna les autoritats locals per incrementar el teu rati, a risc de greus penalitzacions si et pesquen!!.{} Cost: {CURRENCY}
STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING :{BIGFONT}{BLACK}Caos de trànsit en {TOWN}!{}{}El programa de rehabilitació dels carrers patrocinat per {COMPANY} porta 6 mesos de misèria als motoristes!
STR_2056 :{TINYFONT}{WHITE}{TOWN}
STR_2057 :{ORANGE}{TOWN}{BLACK} ({COMMA})
@@ -1782,7 +1793,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...aquí ja hi ha arbres
STR_2804_SITE_UNSUITABLE :{WHITE}...lloc inadequat
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Aquí no es poden plantar arbres...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...massa senyals
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Aquí no es pot situar una senyal...
STR_280A_SIGN :Senyal
@@ -1891,6 +1902,7 @@
STR_3805_COAST_OR_RIVERBANK :Costa o marge de riu
STR_3806_SHIP_DEPOT :Drassana
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...No es pot construir dins l'aigua
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Has de demolir el canal primer
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Desa el Joc
@@ -1900,9 +1912,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabytes lliures
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Impossible llegir la unitat de disc
-STR_4007_GAME_SAVE_FAILED :{WHITE}Desat del Joc erroni
+STR_4007_GAME_SAVE_FAILED :{WHITE}Desat del Joc erroni{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Impossible esborrar l'arxiu
-STR_4009_GAME_LOAD_FAILED :{WHITE}Càrrega del Joc errònia
+STR_4009_GAME_LOAD_FAILED :{WHITE}Càrrega del Joc errònia{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error Intern: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :El joc desat està trencat - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :El joc desat està fet amb una versió més moderna
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :L'arxiu no es pot llegir l'arxiu
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :No es pot escriure a l'arxiu
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Llista de dispositius de disc, carpetes i arxius de jocs desats
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Nom actualment seleccionat per joc desat
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Esborra el joc desat actualment seleccionat
@@ -2073,8 +2090,7 @@
STR_SV_STNAME_LOWER :Baix {STRING}
STR_SV_STNAME_HELIPORT :{STRING} Heliport
STR_SV_STNAME_FOREST :{STRING} Bosc
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} Estació #{NUM}
############ end of savegame specific region!
@@ -2154,7 +2170,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Jugador {COMMA})
STR_7004_NEW_FACE :{BLACK}Nova Cara
STR_7005_COLOR_SCHEME :{BLACK}Esquema de color
@@ -2166,7 +2182,7 @@
STR_700B_PRESIDENT_S_NAME :Nom President
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}No es pot canviar el nom d'empresa...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}No es pot canviar el nom de president...
-STR_700E_FINANCES :{WHITE}{COMPANY} Economia {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Economia {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Despeses/Ingressos
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Construcció
@@ -2182,20 +2198,20 @@
STR_701B_SHIP_INCOME :{GOLD}Ingressos de Vaixells
STR_701C_LOAN_INTEREST :{GOLD}Interessos del Prèstec
STR_701D_OTHER :{GOLD}Altres
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Total:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Gràfic d'Ingressos
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Gràfic de Rendiment d'Operacions
STR_7026_BANK_BALANCE :{WHITE}Balanç del Banc
STR_7027_LOAN :{WHITE}Préstec
-STR_MAX_LOAN :{WHITE}Max. Prèstec: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Demana {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Amortitza {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Max. Prèstec: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Demana {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Amortitza {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...màxim import permès del préstec és {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}No pots demanar més diners...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...No queda préstec per amortitzar
@@ -2234,8 +2250,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Ratis de rendiment de l'empresa (màxim rati=1000)
STR_7052_COMPANY_VALUES :{WHITE}Valors de l'empresa
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Taula de la Lliga d'Empreses
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Empresa de Transport en dificultats!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} ha de ser venuda o declarar-se en fallida a menys que el seu rendiment s'incrementi aviat!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(President)
@@ -2273,7 +2289,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Recessió Mundial!{}{}Economistes experts temen que l'economia es desplomi!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recessió Acabada!{}{}La millora als negocis dóna confiança a les indústries a la vegada que l'economia s'enforteix!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Intercanvia mida gran/petita de finestra
-STR_7076_COMPANY_VALUE :{GOLD}Valor de l'Empresa: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Valor de l'Empresa: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Compra un 25% d'accions
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Vendre un 25% d'accions
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Compra el 25% d'accions d'aquesta empresa
@@ -2585,7 +2601,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Cotxeres de Tren
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Celebració popular . . .{} Arribada del 1er. tren a {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detalls)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detalls)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Tren en el camí
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2622,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Ves sense parar a les cotxeres de {TOWN}.
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Manteniment sense parades a cotxeres de {TOWN}.
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Viatge (fora d'horari)
+STR_TIMETABLE_TRAVEL_FOR :Viatge a {STRING}
+STR_TIMETABLE_STAY_FOR :i estigues {STRING}
+STR_TIMETABLE_DAYS :{COMMA} di{P a es}
+STR_TIMETABLE_TICKS :{COMMA} mar{P ca ques}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Cap a cotxeres de {TOWN}.
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Cap a cotxeres de {TOWN}, a {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Revisió a la cotxera de {TOWN}
@@ -2640,20 +2663,22 @@
STR_8820_RENAME :{BLACK}Reanomena
STR_8823_SKIP :{BLACK}Salta
STR_8824_DELETE :{BLACK}Esborra
-STR_8825_NON_STOP :{BLACK}Sense Parar
+STR_8825_NON_STOP :{BLACK}No paris
STR_8826_GO_TO :{BLACK}Ves a
STR_8827_FULL_LOAD :{BLACK}Carrega
-STR_8828_UNLOAD :{BLACK}Descarrega
+STR_8828_UNLOAD :{BLACK}Descarreg
STR_REFIT :{BLACK}Remodela
STR_REFIT_TIP :{BLACK}Selecciona quin tipus de càrrega vols remodelar en aquesta ordre. Control + Clic per eliminar l'ordre de remodelar
STR_REFIT_ORDER :(Remodela a {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Horari
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Canvia cap a la vista d'horari
STR_8829_ORDERS :{WHITE}{VEHICLE} (Ordres)
STR_882A_END_OF_ORDERS :{SETX 10}- - Fí d'Ordres - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Servei
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}No es pot construir el vehicle...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Carregant / Descarregant
STR_TRAIN_MUST_BE_STOPPED :{WHITE}El tren s'ha de parar dins de la cotxera
@@ -2703,6 +2728,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Afegeix una nova ordre abans de la seleccionada, o afegeix-la al final de la llista
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Fer que en l'ordre seleccionada s'esperi a que l'element tingui càrrega total
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Obliga en l'ordre seleccionada a descarregar l'element
+STR_TIMETABLE_TOOLTIP :{BLACK}Horari - clica sobre l'ordre per marcar-la.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Canvia la quantitat de temps que l'ordre marcada hauria de prendre
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Esborra la quantitat de temps de l'ordre marcada
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reseteja el comptador de retrassos, de manera que el vehicle serà puntual
STR_SERVICE_HINT :{BLACK}Saltar l'ordre a menys que es necessiti manteniment
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Cost: {CURRENCY} Pes: {WEIGHT_S}{}Velocitat: {VELOCITY} Potència: {POWER}{}Cost de circulació: {CURRENCY}/any{}Capacitat: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Avariat
@@ -2723,7 +2752,9 @@
STR_886A_RENAME_TRAIN_VEHICLE_TYPE :{WHITE}Reanomena el tipus d'element del tren
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}No es pot reanomenar el tipus d'element del tren...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Fer que l'ordre marcada forci al vehicle a volcar la càrrega
-STR_886F_TRANSFER :{BLACK}Transfereix
+STR_886F_TRANSFER :{BLACK}Transf.
+STR_CLEAR_TIME :{BLACK}Esborra Temps
+STR_RESET_LATENESS :{BLACK}Reseteja el comptador de retrassos
STR_TRAIN_STOPPING :{RED}Parant
STR_TRAIN_STOPPING_VEL :{RED}Parant, a {VELOCITY}
@@ -2732,8 +2763,18 @@
STR_TRAIN_START_NO_CATENARY :Aquesta via no té catenària, el tren no pot arrencar
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nou {STRING} disponible!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nou/Nova {STRING} disponible! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nou/Nova {STRING} disponible! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossible establir l'horari del vehicle...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Els vehicles només poden esperar a les estacions.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Aquest vehicle no para en aquesta estació.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Canvia Temps
+STR_TIMETABLE_STATUS_ON_TIME :Actualment aquest vehicle és puntual
+STR_TIMETABLE_STATUS_LATE :Actualment aquest vehicle va {STRING} tard
+STR_TIMETABLE_STATUS_EARLY :Actualment aquest vehicle va {STRING} d'hora
+STR_TIMETABLE_AUTOFILL :{BLACK}Autoomple
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Omple l'horari automàticament amb els valors del primer viatge
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Automòbil en camí
@@ -2749,7 +2790,7 @@
STR_900E_MAX_SPEED :{BLACK}Vel. Max.: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Benefici enguany: {LTBLUE}{CURRENCY} (darrer any: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Rendibilitat: {LTBLUE}{COMMA}% {BLACK}Avaries des del darrer manteniment: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Capacitat: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...s'ha de parar dins d'una cotxera
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}No pots vendre l'automòbil...
@@ -2825,7 +2866,7 @@
STR_9813_MAX_SPEED :{BLACK}Max. velocitat: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Benefici enguany: {LTBLUE}{CURRENCY} (darrer any: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Rendibilitat: {LTBLUE}{COMMA}% {BLACK}Avaries des de l'últim manteniment: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacitat: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}No es pot parar/arrencar el vaixell...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}No es pot enviar vaixell a la drassana...
@@ -2893,7 +2934,7 @@
STR_A00E_MAX_SPEED :{BLACK}Max. velocitat: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Benefici enguany: {LTBLUE}{CURRENCY} (darrer any: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Rendibilitat: {LTBLUE}{COMMA}% {BLACK}Avaries des de l'últim manteniment: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construït: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construït: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}No es pot enviar l'aeronau a l'hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Cap a l'hangar de {STATION}.
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Cap a l'hangar de {STATION}, a {VELOCITY}
@@ -2946,6 +2987,8 @@
STR_GO_TO_AIRPORT_HANGAR :Ves a l'hangar de {STATION}.
SERVICE_AT_AIRPORT_HANGAR :Manteniment en l'hangar de {STATION}.
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Horari)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Desastre de Zeppelin a {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Automòbil destruit en colisionar amb un 'OVNI'!
@@ -3015,9 +3058,9 @@
STR_NEWGRF_ADD_TIP :{BLACK}Afegeix un arxiu NewGRF a la llista
STR_NEWGRF_REMOVE :{BLACK}Treu
STR_NEWGRF_REMOVE_TIP :{BLACK}Treu l'arxiu NewGRF seleccionat de la llista
-STR_NEWGRF_MOVEUP :{BLACK}Mou Amunt
+STR_NEWGRF_MOVEUP :{BLACK}Mou amunt
STR_NEWGRF_MOVEUP_TIP :{BLACK}Mou amunt l'arxiu NewGRF seleccionat de la llista
-STR_NEWGRF_MOVEDOWN :{BLACK}Mou Avall
+STR_NEWGRF_MOVEDOWN :{BLACK}Mou avall
STR_NEWGRF_MOVEDOWN_TIP :{BLACK}Mou avall l'arxiu NewGRF seleccionat de la llista
STR_NEWGRF_FILE_TIP :{BLACK}Una llista d'arxius NewGRF que ha estat instal·lada. Clica un arxiu per canviar els seus paràmetres
STR_NEWGRF_PARAMETER :{BLACK}Paràmetres: {SILVER}{STRING}
@@ -3181,8 +3224,8 @@
STR_NUMBER_OF_TOWNS :{BLACK}No. de pobles:
STR_NUMBER_OF_INDUSTRIES :{BLACK}No. d'indústries:
STR_GENERATE_DATE :{BLACK}{DATE_LONG}
-STR_SNOW_LINE_UP :{BLACK}Moure la linia de neu un pas amunt
-STR_SNOW_LINE_DOWN :{BLACK}Moure la linia de neu un pas avall
+STR_SNOW_LINE_UP :{BLACK}Mou la linia de neu un pas amunt
+STR_SNOW_LINE_DOWN :{BLACK}Mou la linia de neu un pas avall
STR_SNOW_LINE_QUERY_CAPT :{WHITE}Canviar alçada de la linia de neu
STR_START_DATE_QUERY_CAPT :{WHITE}Canviar l'any inicial
STR_HEIGHTMAP_SCALE_WARNING_CAPTION :{WHITE}Alerta d'escala
@@ -3211,8 +3254,8 @@
STR_SE_RANDOM_LAND :{WHITE}Terreny aleatori
STR_SE_NEW_WORLD :{BLACK}Crear nou escenari
STR_SE_CAPTION :{WHITE}Tipus d'escenari
-STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Moure l'alçada del terreny pla un pas avall
-STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Moure l'alçada del terreny pla un pas amunt
+STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Mou l'alçada del terreny pla un pas avall
+STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Mou l'alçada del terreny pla un pas amunt
STR_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Canvia alçada del terreny pla
STR_FLAT_WORLD_HEIGHT :{BLACK}Alçada del terreny pla:
STR_FLAT_WORLD_HEIGHT_NUM :{NUM}
@@ -3261,6 +3304,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Activa/Desactiva transparència dels edificis com ara estacions, cotxeres, punts de trobada i catenàries
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Activa/Desactiva transparència dels ponts
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Activa/Desactiva transparència de les estructures com ara fars i antenes
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Activa/Desactiva la transparència pels indicadors de carregament
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Grup {COMMA}
@@ -3298,4 +3349,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Benefici aquest any: {GREEN}{CURRENCY} {BLACK}(any passat: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Benefici aquest any: {RED}{CURRENCY} {BLACK}(any passat: {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/czech.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/czech.txt Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Mimo okraj mapy
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Moc blízko k okraji mapy
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nedostatek peněz - je potřeba {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Je potřeba plochá země
STR_0008_WAITING :{BLACK}Čeká tu: {WHITE}{STRING}
@@ -553,7 +553,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Místní správa: {LTBLUE}{STRING}
STR_01A9_NONE :Nic
STR_01AA_NAME :{BLACK}Jméno
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1.
@@ -1244,7 +1244,7 @@
STR_CHEATS :{WHITE}Cheaty
STR_CHEATS_TIP :{BLACK}Zaškrtávací políčka ukazují, jestli jsi tento cheat už použil.
STR_CHEATS_WARNING :{BLACK}Varování! Chystáš se podvést ostatní hráče. Pamatuj si, že tento podlý čin nebude nikdy zapomenut!
-STR_CHEAT_MONEY :{LTBLUE}Navýšit peníze o {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Navýšit peníze o {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Hrát jako hráč: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magický buldozer (odstraní průmysl a neodstranitelné předměty): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunely se mohou křížit: {ORANGE}{STRING}
@@ -1499,9 +1499,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Jméno společnosti: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Založeno: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Hodnota společnosti: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Stav na účtu: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Loňský hrubý zisk: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Hodnota společnosti: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Stav na účtu: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Loňský hrubý zisk: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Výkon: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Vozidla: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1736,7 +1736,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Budova musí být nejprve zničena
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Populace: {ORANGE}{COMMA}{BLACK} Domů: {ORANGE}{COMMA}
@@ -1769,7 +1769,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Ukázat informace o místní správě
STR_2022_LOCAL_AUTHORITY :{WHITE}Místní správa města {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Hodnocení společností:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Dotace
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Nabídnuté dotace pro službu:
STR_2027_FROM_TO :{ORANGE}{STRING.big} z {STRING} do {STRING}
@@ -1840,7 +1840,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}... strom už tu je
STR_2804_SITE_UNSUITABLE :{WHITE}... nepoužitelné místo
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Zde nemůžeš vysadit strom...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}... příliš mnoho popisků
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Zde nemůžeš umístit nápis...
STR_280A_SIGN :Nápis
@@ -1958,9 +1958,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} MB voln{P ý é ých}
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Nemohu číst z jednotky
-STR_4007_GAME_SAVE_FAILED :{WHITE}Uložení hry selhalo
+STR_4007_GAME_SAVE_FAILED :{WHITE}Uložení hry selhalo{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Nemohu smazat soubor
-STR_4009_GAME_LOAD_FAILED :{WHITE}Nemohu otevřít hru
+STR_4009_GAME_LOAD_FAILED :{WHITE}Nemohu otevřít hru{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Seznam jednotek, adresářů a uložených her
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Zvolené jméno uložené hry
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Smazat označenou uloženou hru
@@ -2132,7 +2132,7 @@
STR_SV_STNAME_HELIPORT :{STRING} heliport
STR_SV_STNAME_FOREST :{STRING} les
-STR_SV_GROUP_NAME :{GROUP}
+
############ end of savegame specific region!
@@ -2212,7 +2212,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(hráč {COMMA})
STR_7004_NEW_FACE :{BLACK}Nový obličej
STR_7005_COLOR_SCHEME :{BLACK}Barva
@@ -2224,7 +2224,7 @@
STR_700B_PRESIDENT_S_NAME :Jméno prezidenta
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Nemohu změnit jméno společnosti.
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Nemohu změnit jméno prezidenta.
-STR_700E_FINANCES :{WHITE}{COMPANY} Finance {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Finance {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Příjmy / výdaje
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Výstavba
@@ -2240,20 +2240,20 @@
STR_701B_SHIP_INCOME :{GOLD}Příjmy lodí
STR_701C_LOAN_INTEREST :{GOLD}Úroky z půjček
STR_701D_OTHER :{GOLD}Další
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Celkem:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Graf příjmu
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Graf provozního zisku
STR_7026_BANK_BALANCE :{WHITE}Stav na účtu
STR_7027_LOAN :{WHITE}Půjčka
-STR_MAX_LOAN :{WHITE}Max. půjčka: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Půjčit {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Vrátit {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Max. půjčka: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Půjčit {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Vrátit {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}... maximální dovolená výše půjčky je {CURRENCY}.
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Nemohu půjčit více peněz...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}... žádný dluh ke splacení
@@ -2292,8 +2292,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Hodnocení společností (nejvyšší hodnocení=1000)
STR_7052_COMPANY_VALUES :{WHITE}Hodnota společností
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Tabulka pořadí společností
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Dopravní společnost má problémy!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} bude prodána nebo vyhlásí bankrot, pokud se brzy nezvýší výkonnost!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Prezident)
@@ -2331,7 +2331,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Celosvětový hospodářský úpadek!{}{}Finanční experti se kvůli prudkému poklesu ekonomiky obávají nejhoršího!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Konec hospodářského úpadku!{}{}Posílení trhu zvýšilo u průmyslu důvěru!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Přepnout velké/malé okno
-STR_7076_COMPANY_VALUE :{GOLD}Hodnota společnosti: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Hodnota společnosti: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Koupit 25% podíl ve společnosti
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Prodat 25% podíl ve společnosti
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Koupit 25% podíl v této společnosti
@@ -2649,7 +2649,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}Železniční depo {TOWN}
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Obyvatelé oslavují...{}První vlak dorazil do {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detaily)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detaily)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}V cestě je vlak
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2716,8 +2716,8 @@
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Údržba
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Nemohu koupit vagon nebo lokomotivu...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Koupeno: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Koupeno: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Nakládání / vykládání
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Vlak musí stát v depu
@@ -2796,8 +2796,8 @@
STR_TRAIN_START_NO_CATENARY :Tato trať není elektrifikována, vlak nemůže odjet
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nov{G á ý é} {STRING} k dispozici!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G á ý é} {STRING} k dispozici! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G á ý é} {STRING} k dispozici! - {ENGINE}
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Silniční vozidlo v cestě
@@ -2813,7 +2813,7 @@
STR_900E_MAX_SPEED :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Příjem tento rok: {LTBLUE}{CURRENCY} (minulý rok): {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Spolehlivost: {LTBLUE}{COMMA}% {BLACK}Poruch od posledního servisu: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Koupen: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Koupen: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kapacita: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}... musí být zastaven v garáži
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Nemohu prodat silniční vozidlo...
@@ -2889,7 +2889,7 @@
STR_9813_MAX_SPEED :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Příjem tento rok: {LTBLUE}{CURRENCY} (minulý rok: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Spolehlivost: {LTBLUE}{COMMA}% {BLACK}Poruch od posledního servisu: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Koupeno: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Koupeno: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kapacita: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Nelze rozjet/zastavit loď...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Nelze poslat loď do depa...
@@ -2957,7 +2957,7 @@
STR_A00E_MAX_SPEED :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Příjem tento rok: {LTBLUE}{CURRENCY} (minulý rok: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Spolehlivost: {LTBLUE}{COMMA}% {BLACK}Poruch od posledního servisu: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Koupeno: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Koupeno: {LTBLUE}{NUM}{BLACK} Cena: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Nelze poslat letadlo do hangáru...
STR_HEADING_FOR_HANGAR :{ORANGE}Jedu do hangáru {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Jedu do hangáru {STATION}, {VELOCITY}
--- a/src/lang/danish.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/danish.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Ude over kanten af kortet
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}For tæt på kanten af kortet
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Ikke nok penge - kræver {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Landskabet skal være fladt
STR_0008_WAITING :{BLACK}Venter: {WHITE}{STRING}
@@ -399,7 +399,7 @@
STR_SELECT_ALL_FACILITIES :{BLACK}Vælg alle faciliteter
STR_SELECT_ALL_TYPES :{BLACK}Vælg alle lasttyper (inklusiv fragttyper, der ikke venter)
STR_AVAILABLE_TRAINS :{BLACK}Tilgængelige tog
-STR_AVAILABLE_ROAD_VEHICLES :{BLACK}Tilgængelige vejkøretøjer
+STR_AVAILABLE_ROAD_VEHICLES :{BLACK}Tilgæn. vejkøretøjer
STR_AVAILABLE_SHIPS :{BLACK}Tilgængelige skibe
STR_AVAILABLE_AIRCRAFT :{BLACK}Tilgængelige fly
STR_AVAILABLE_ENGINES_TIP :{BLACK}Se liste over tilgængelige designs for denne køretøjstype.
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Lokal myndighed: {LTBLUE}{STRING}
STR_01A9_NONE :Ingen
STR_01AA_NAME :{BLACK}Navn
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1.
@@ -636,7 +636,7 @@
STR_0231_ROAD_CONSTRUCTION :{BLACK}Bygning af vej
STR_0233_TOWN_GENERATION :{WHITE}Bygenerering
STR_0234_NEW_TOWN :{BLACK}Ny by
-STR_0235_CONSTRUCT_NEW_TOWN :{BLACK}Byg en ny by
+STR_0235_CONSTRUCT_NEW_TOWN :{BLACK}Opfør en ny by
STR_0236_CAN_T_BUILD_TOWN_HERE :{WHITE}Kan ikke bygge en by her...
STR_0237_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}...for tæt på kanten af kortet
STR_0238_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...for tæt på en anden by
@@ -683,41 +683,41 @@
STR_025F_BUBBLE_GENERATOR :{BLACK}Boblegenerator
STR_0260_TOFFEE_QUARRY :{BLACK}Karamelbrud
STR_0261_SUGAR_MINE :{BLACK}Sukkermine
-STR_0262_CONSTRUCT_COAL_MINE :{BLACK}Byg Kulmine
-STR_0263_CONSTRUCT_POWER_STATION :{BLACK}Byg Kraftværk
-STR_0264_CONSTRUCT_SAWMILL :{BLACK}Byg Savværk
+STR_0262_CONSTRUCT_COAL_MINE :{BLACK}Opfør Kulmine
+STR_0263_CONSTRUCT_POWER_STATION :{BLACK}Opfør Kraftværk
+STR_0264_CONSTRUCT_SAWMILL :{BLACK}Opfør Savværk
STR_0265_PLANT_FOREST :{BLACK}Plant Skov
-STR_0266_CONSTRUCT_OIL_REFINERY :{BLACK}Byg Olieraffinaderi
-STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY :{BLACK}Byg Boreplatform (Kan kun bygges tæt på kanten af kortet)
-STR_0268_CONSTRUCT_FACTORY :{BLACK}Byg Fabrik
-STR_0269_CONSTRUCT_STEEL_MILL :{BLACK}Byg Stålværk
-STR_026A_CONSTRUCT_FARM :{BLACK}Byg Bondegård
-STR_026B_CONSTRUCT_IRON_ORE_MINE :{BLACK}Byg Jernmalmsmine
-STR_026C_CONSTRUCT_OIL_WELLS :{BLACK}Byg Oliekilde
-STR_026D_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Byg Bank (Kan kun bygges i en by med mere end 1200 indbyggere)
-STR_026E_CONSTRUCT_PAPER_MILL :{BLACK}Byg Papirmølle
-STR_026F_CONSTRUCT_FOOD_PROCESSING :{BLACK}Byg Fødevareindustri
-STR_0270_CONSTRUCT_PRINTING_WORKS :{BLACK}Byg Trykkeri
-STR_0271_CONSTRUCT_GOLD_MINE :{BLACK}Byg Guldmine
-STR_0272_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Byg Bank (Kan kun bygges i en by)
-STR_0273_CONSTRUCT_LUMBER_MILL_TO :{BLACK}Byg Træfabrik (for at rydde regnskoven og producere træ)
+STR_0266_CONSTRUCT_OIL_REFINERY :{BLACK}Opfør Olieraffinaderi
+STR_0267_CONSTRUCT_OIL_RIG_CAN_ONLY :{BLACK}Opfør Boreplatform (Kan kun bygges tæt på kanten af kortet)
+STR_0268_CONSTRUCT_FACTORY :{BLACK}Opfør Fabrik
+STR_0269_CONSTRUCT_STEEL_MILL :{BLACK}Opfør Stålværk
+STR_026A_CONSTRUCT_FARM :{BLACK}Opfør Bondegård
+STR_026B_CONSTRUCT_IRON_ORE_MINE :{BLACK}Opfør Jernmalmsmine
+STR_026C_CONSTRUCT_OIL_WELLS :{BLACK}Opfør Oliekilde
+STR_026D_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Opfør Bank (Kan kun bygges i en by med mere end 1200 indbyggere)
+STR_026E_CONSTRUCT_PAPER_MILL :{BLACK}Opfør Papirmølle
+STR_026F_CONSTRUCT_FOOD_PROCESSING :{BLACK}Opfør Fødevareindustri
+STR_0270_CONSTRUCT_PRINTING_WORKS :{BLACK}Opfør Trykkeri
+STR_0271_CONSTRUCT_GOLD_MINE :{BLACK}Opfør Guldmine
+STR_0272_CONSTRUCT_BANK_CAN_ONLY :{BLACK}Opfør Bank (Kan kun bygges i en by)
+STR_0273_CONSTRUCT_LUMBER_MILL_TO :{BLACK}Opfør Savværk (for at rydde regnskoven og producere træ)
STR_0274_PLANT_FRUIT_PLANTATION :{BLACK}Plant Frugtplantage
STR_0275_PLANT_RUBBER_PLANTATION :{BLACK}Plant Gummiplantage
-STR_0276_CONSTRUCT_WATER_SUPPLY :{BLACK}Byg Vandværk
-STR_0277_CONSTRUCT_WATER_TOWER_CAN :{BLACK}Byg Vandtårn (Kan kun bygges i byer)
-STR_0278_CONSTRUCT_DIAMOND_MINE :{BLACK}Byg Diamantmine
-STR_0279_CONSTRUCT_COPPER_ORE_MINE :{BLACK}Byg Kobbermalmsmine
+STR_0276_CONSTRUCT_WATER_SUPPLY :{BLACK}Opfør Vandværk
+STR_0277_CONSTRUCT_WATER_TOWER_CAN :{BLACK}Opfør Vandtårn (Kan kun bygges i byer)
+STR_0278_CONSTRUCT_DIAMOND_MINE :{BLACK}Opfør Diamantmine
+STR_0279_CONSTRUCT_COPPER_ORE_MINE :{BLACK}Opfør Kobbermalmsmine
STR_027A_PLANT_COTTON_CANDY_FOREST :{BLACK}Plant Candyfloss-skov
-STR_027B_CONSTRUCT_CANDY_FACTORY :{BLACK}Byg Slikfabrik
-STR_027C_CONSTRUCT_BATTERY_FARM :{BLACK}Byg Batterigård
-STR_027D_CONSTRUCT_COLA_WELLS :{BLACK}Byg Colabrønd
-STR_027E_CONSTRUCT_TOY_SHOP :{BLACK}Byg Legetøjsforretning
-STR_027F_CONSTRUCT_TOY_FACTORY :{BLACK}Byg Legetøjsfabrik
-STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS :{BLACK}Byg Plastikspringvand
-STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY :{BLACK}Byg Sodavandsfabrik
-STR_0282_CONSTRUCT_BUBBLE_GENERATOR :{BLACK}Byg Boblegenerator
-STR_0283_CONSTRUCT_TOFFEE_QUARRY :{BLACK}Byg Karamelbrud
-STR_0284_CONSTRUCT_SUGAR_MINE :{BLACK}Byg Sukkermine
+STR_027B_CONSTRUCT_CANDY_FACTORY :{BLACK}Opfør Slikfabrik
+STR_027C_CONSTRUCT_BATTERY_FARM :{BLACK}Opfør Batterigård
+STR_027D_CONSTRUCT_COLA_WELLS :{BLACK}Opfør Colabrønd
+STR_027E_CONSTRUCT_TOY_SHOP :{BLACK}Opfør Legetøjsforretning
+STR_027F_CONSTRUCT_TOY_FACTORY :{BLACK}Opfør Legetøjsfabrik
+STR_0280_CONSTRUCT_PLASTIC_FOUNTAINS :{BLACK}Opfør Plastikspringvand
+STR_0281_CONSTRUCT_FIZZY_DRINK_FACTORY :{BLACK}Opfør Sodavandsfabrik
+STR_0282_CONSTRUCT_BUBBLE_GENERATOR :{BLACK}Opfør Boblegenerator
+STR_0283_CONSTRUCT_TOFFEE_QUARRY :{BLACK}Opfør Karamelbrud
+STR_0284_CONSTRUCT_SUGAR_MINE :{BLACK}Opfør Sukkermine
STR_0285_CAN_T_BUILD_HERE :{WHITE}Kan ikke bygge {STRING} her...
STR_0286_MUST_BUILD_TOWN_FIRST :{WHITE}...det er nødvendigt at bygge en by først
STR_0287_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...kun en tilladt per by
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Sværhedsgrad
STR_02C7_CONFIG_PATCHES :Indstil programrettelser
STR_NEWGRF_SETTINGS :NewGRF indstillinger
+STR_TRANSPARENCY_OPTIONS :Gennemsigtighedsvalg
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Bynavne vist
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Stationsnavne vist
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :Kort over verden
STR_EXTRA_VIEW_PORT :Flere lokalitetsvinduer
STR_SIGN_LIST :Liste over skilte
-STR_TRANSPARENCY_OPTIONS :Gennemsigtighedsvalg
STR_02DF_TOWN_DIRECTORY :Byoversigt
STR_TOWN_POPULATION :{BLACK}Verdens befolkning: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Lokalitetsvinduer {COMMA}
@@ -1103,6 +1103,9 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Rulleknap-hastighed på kort: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Benyt laste-indikatorer: {ORANGE}{STRING}
+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_MAX_TRAINS :{LTBLUE}Maks. antal tog per spiller: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Maks. antal køretøjer per spiller: {ORANGE}{STRING}
@@ -1126,7 +1129,7 @@
STR_CONFIG_PATCHES_SERVINT_SHIPS :{LTBLUE}Standard service interval for skibe: {ORANGE}{STRING} dage/%
STR_CONFIG_PATCHES_SERVINT_SHIPS_DISABLED :{LTBLUE}Standard service interval for skibe: {ORANGE}slået fra
STR_CONFIG_PATCHES_NOSERVICE :{LTBLUE}Slå service fra, når nedbrud er sat til ingen: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_WAGONSPEEDLIMITS :{LTBLUE}Aktiver hastigheds begrænsning for vogne: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_WAGONSPEEDLIMITS :{LTBLUE}Aktiver hastighedsbegrænsning for vogne: {ORANGE}{STRING}
STR_CONFIG_PATCHES_DISABLE_ELRAILS :{LTBLUE}Slå elektriske jernbaner fra: {ORANGE}{STRING}
STR_CONFIG_PATCHES_COLORED_NEWS_YEAR :{LTBLUE}Farvede nyheder dukker op i: {ORANGE}{STRING}
@@ -1186,7 +1189,7 @@
STR_CHEATS :{WHITE}Snydefunktioner
STR_CHEATS_TIP :{BLACK}Checkbokse viser, om du har brugt denne snydefunktion før
STR_CHEATS_WARNING :{BLACK}Advarsel! Du er ved at forråde dine modstandere. Husk at dette vil blive husket i al evighed.
-STR_CHEAT_MONEY :{LTBLUE}Forøg kassebeholdning med {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Forøg kassebeholdning med {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Spil som spiller: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magisk bulldozer (nedriv ting, som normalt ikke kan fjernes): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunneler kan krydse hinanden: {ORANGE}{STRING}
@@ -1263,29 +1266,29 @@
STR_FAST_FORWARD :{BLACK}Kør spillet hurtigere
STR_MESSAGE_HISTORY :{WHITE}Tidligere beskeder
-STR_MESSAGE_HISTORY_TIP :{BLACK}En liste of seneste nyheder
+STR_MESSAGE_HISTORY_TIP :{BLACK}En liste over seneste nyheder
STR_MESSAGES_DISABLE_ALL :{BLACK}Slå alle fra
STR_MESSAGES_ENABLE_ALL :{BLACK}Slå alle til
-STR_CONSTRUCT_COAL_MINE_TIP :{BLACK}Byg Kulmine
+STR_CONSTRUCT_COAL_MINE_TIP :{BLACK}Opfør Kulmine
STR_CONSTRUCT_FOREST_TIP :{BLACK}Plant Skov
-STR_CONSTRUCT_OIL_RIG_TIP :{BLACK}Byg Boreplatform
-STR_CONSTRUCT_FARM_TIP :{BLACK}Opfør en bondegård
-STR_CONSTRUCT_COPPER_ORE_MINE_TIP :{BLACK}Byg Kobbermalmsmine
+STR_CONSTRUCT_OIL_RIG_TIP :{BLACK}Opfør Boreplatform
+STR_CONSTRUCT_FARM_TIP :{BLACK}Opfør Bondegård
+STR_CONSTRUCT_COPPER_ORE_MINE_TIP :{BLACK}Opfør Kobbermalmsmine
STR_CONSTRUCT_OIL_WELLS_TIP :{BLACK}Bor efter olie
-STR_CONSTRUCT_GOLD_MINE_TIP :{BLACK}Byg Guldmine
-STR_CONSTRUCT_DIAMOND_MINE_TIP :{BLACK}Byg Diamandmine
-STR_CONSTRUCT_IRON_ORE_MINE_TIP :{BLACK}Byg Jernmalmsmine
-STR_CONSTRUCT_FRUIT_PLANTATION_TIP :{BLACK}Opfør Frugtplantage
-STR_CONSTRUCT_RUBBER_PLANTATION_TIP :{BLACK}Opfør Gummiplantage
+STR_CONSTRUCT_GOLD_MINE_TIP :{BLACK}Opfør Guldmine
+STR_CONSTRUCT_DIAMOND_MINE_TIP :{BLACK}Opfør Diamantmine
+STR_CONSTRUCT_IRON_ORE_MINE_TIP :{BLACK}Opfør Jernmalmsmine
+STR_CONSTRUCT_FRUIT_PLANTATION_TIP :{BLACK}Plant Frugtplantage
+STR_CONSTRUCT_RUBBER_PLANTATION_TIP :{BLACK}Plant Gummiplantage
STR_CONSTRUCT_WATER_SUPPLY_TIP :{BLACK}Opfør Vandforsyning
-STR_CONSTRUCT_COTTON_CANDY_TIP :{BLACK}Plant Candyfloss Skov
+STR_CONSTRUCT_COTTON_CANDY_TIP :{BLACK}Plant Candyfloss-skov
STR_CONSTRUCT_BATTERY_FARM_TIP :{BLACK}Opfør Batterigård
STR_CONSTRUCT_COLA_WELLS_TIP :{BLACK}Bor efter Cola
STR_CONSTRUCT_PLASTIC_FOUNTAINS_TIP :{BLACK}Opfør Plastikspringvand
-STR_CONSTRUCT_BUBBLE_GENERATOR_TIP :{BLACK}Byg Boblegenerator
+STR_CONSTRUCT_BUBBLE_GENERATOR_TIP :{BLACK}Opfør Boblegenerator
STR_CONSTRUCT_TOFFEE_QUARRY_TIP :{BLACK}Opfør Karamelbrud
-STR_CONSTRUCT_SUGAR_MINE_TIP :{BLACK}Byg Sukkermine
+STR_CONSTRUCT_SUGAR_MINE_TIP :{BLACK}Opfør Sukkermine
STR_INDUSTRYDIR_CAPTION :{WHITE}Industrier
STR_INDUSTRYDIR_ITEM :{ORANGE}{INDUSTRY}{BLACK} ({CARGO}){YELLOW} ({COMMA}% transporteret)
@@ -1355,7 +1358,7 @@
STR_NETWORK_NEW_GAME_NAME :{BLACK}Spillets navn:
STR_NETWORK_NEW_GAME_NAME_TIP :{BLACK}Navnet vil blive vist til andre spillere i menuen, hvor man vælger netværksspil
-STR_NETWORK_SET_PASSWORD :{BLACK}Set kodeord
+STR_NETWORK_SET_PASSWORD :{BLACK}Sæt kodeord
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?
@@ -1441,9 +1444,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Selskabsnavn: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Grundlagt: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Virksomhedens værdi: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Nuværende beholdning: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Sidste års indtægt: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Virksomhedens værdi: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Nuværende beholdning: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Sidste års indtægt: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Præstation: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Køretøjer: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1458,9 +1461,9 @@
STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Venter..
STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Henter kort..
STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Behandler data..
-STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registere..
+STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registrerer..
-STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Henter spil info..
+STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Henter spil-info..
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Henter selskabsinfo..
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} klient{P "" er} foran dig
@@ -1469,7 +1472,7 @@
STR_NETWORK_DISCONNECT :{BLACK}Afbryd forbindelse
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriv det beløb, som du ønsker at give
-STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveren er beskyttet. Skriv kodeordet
+STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveren er beskyttet. Indtast kodeord
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Selskabet er beskyttet. Indtast kodeord
STR_NETWORK_CLIENT_LIST :{WHITE}Klient liste
@@ -1482,7 +1485,7 @@
STR_NETWORK_ERR_SAVEGAMEERROR :{WHITE} Kunne ikke hente gemt spil
STR_NETWORK_ERR_SERVER_START :{WHITE} Kunne ikke starte serveren
STR_NETWORK_ERR_CLIENT_START :{WHITE} Kunne ikke forbinde
-STR_NETWORK_ERR_TIMEOUT :{WHITE} Forbindelsen #{NUM} svare ikke
+STR_NETWORK_ERR_TIMEOUT :{WHITE} Forbindelsen #{NUM} svarer ikke
STR_NETWORK_ERR_SERVER_ERROR :{WHITE} Der opstod en protokol-fejl og forbindelse blev lukket
STR_NETWORK_ERR_WRONG_REVISION :{WHITE} Revisionen af denne klient passer ikke sammen med serverens revision
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Forkert kodeord
@@ -1678,7 +1681,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Det er nødvendigt at nedrive bygningen først
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Indbyggere: {ORANGE}{COMMA}{BLACK} Huse: {ORANGE}{COMMA}
@@ -1711,7 +1714,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Vis information om de lokale myndigheder
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} lokal myndighed
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Transportselskabsbedømmelse:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Tilskudsordninger
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Tilskudsordninger i licitation:
STR_2027_FROM_TO :{ORANGE}{STRING} fra {STRING} til {STRING}
@@ -1782,7 +1785,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...der er allerede træer her
STR_2804_SITE_UNSUITABLE :{WHITE}...placeringen er ikke egnet
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Kan ikke plante træer her...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...for mange skilte
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Kan ikke placere skilt her...
STR_280A_SIGN :Skilt
@@ -1891,6 +1894,7 @@
STR_3805_COAST_OR_RIVERBANK :Kyst eller flodbred
STR_3806_SHIP_DEPOT :Skibsdok
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...kan ikke bygge på vand
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Kanal må fjernes først
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Gem spil
@@ -1900,9 +1904,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabytes fri
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke læse drevet
-STR_4007_GAME_SAVE_FAILED :{WHITE}Fejl under gemning af spil
+STR_4007_GAME_SAVE_FAILED :{WHITE}Fejl under gemning af spil{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil
-STR_4009_GAME_LOAD_FAILED :{WHITE}Fejl under hentning af spil
+STR_4009_GAME_LOAD_FAILED :{WHITE}Fejl under hentning af spil{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern fejl: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt gemt spil - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er gemt med en nyere version
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Filen kan ikke læses
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Filen kan ikke skrives
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Liste over drev, biblioteker og gemte spilfiler
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Nuværende gemte spils navn
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Slet det valgte gemte spil
@@ -2074,8 +2083,6 @@
STR_SV_STNAME_HELIPORT :{STRING} Helikopterplads
STR_SV_STNAME_FOREST :{STRING} Skov
-STR_SV_GROUP_NAME :{GROUP}
-
############ end of savegame specific region!
##id 0x6800
@@ -2154,7 +2161,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Spiller {COMMA})
STR_7004_NEW_FACE :{BLACK}Nyt ansigt
STR_7005_COLOR_SCHEME :{BLACK}Farvetema
@@ -2166,7 +2173,7 @@
STR_700B_PRESIDENT_S_NAME :Direktørens navn
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Kan ikke ændre selskabets navn...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Kan ikke ændre direktørens navn...
-STR_700E_FINANCES :{WHITE}{COMPANY} Finanser {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Finanser {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Udgifter/Indkomst
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Konstruktion
@@ -2182,20 +2189,20 @@
STR_701B_SHIP_INCOME :{GOLD}Skibsindkomst
STR_701C_LOAN_INTEREST :{GOLD}Renter
STR_701D_OTHER :{GOLD}Andet
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Total:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Graf over indkomst
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Graf over afkast
STR_7026_BANK_BALANCE :{WHITE}Bank balance
STR_7027_LOAN :{WHITE}Lån
-STR_MAX_LOAN :{WHITE}Maks. lån: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Lån {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Tilbagebetal {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Maks. lån: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Lån {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Tilbagebetal {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maksimale størrelse af lån er {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan ikke låne flere penge...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...ingen lån at tilbagebetale
@@ -2234,8 +2241,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Selskabets ydelsesrate (maksimal=1000)
STR_7052_COMPANY_VALUES :{WHITE}Selskabsværdier
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Selskabsoversigt
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Transportselskab i vanskeligheder!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} vil blive erklæret konkurs eller solgt, hvis ikke ydelsen stiger snart!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Direktør)
@@ -2273,7 +2280,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Lavkonjuktur over hele verden!{}{}Vismændende frygter det værste, økonomien skrumper!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Økonomisk krise overvundet!{}{}Stigning i forbrug giver industrien selvtilliden tilbage, produktionen øges!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Skift mellem stort/lille vindue
-STR_7076_COMPANY_VALUE :{GOLD}Selskabsværdi: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Selskabsværdi: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Køb 25% aktier i selskabet
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Sælg 25% aktier i selskabet
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Køb 25% aktier i dette selskab
@@ -2585,7 +2592,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} remise
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Indbyggerne fester . . .{}Første tog ankommer til {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detaljer)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detaljer)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Tog i vejen
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2613,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Gå uden stop til {TOWN} remise
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Service uden stop i {TOWN} remise
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Rejs (ikke iflg. køreplan)
+STR_TIMETABLE_TRAVEL_FOR :Rejs i {STRING}
+STR_TIMETABLE_STAY_FOR :og vent i {STRING}
+STR_TIMETABLE_DAYS :{COMMA} dag{P "" e}
+STR_TIMETABLE_TICKS :{COMMA} tik
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Kører til {TOWN} remise
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Kører til {TOWN} remise, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Service i {TOWN} remise
@@ -2647,13 +2661,15 @@
STR_REFIT :{BLACK}Ombyg
STR_REFIT_TIP :{BLACK}Vælg hvilken lasttype der skal ombygges til i denne ordre. CTRL-klik for at fjerne ombygningsinstruktion
STR_REFIT_ORDER :(Ombyg til {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Køreplan
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Skift til køreplan-visning
STR_8829_ORDERS :{WHITE}{VEHICLE} (Ordrer)
STR_882A_END_OF_ORDERS :{SETX 10}- - Slut på ordrer - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Service
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Kan ikke bygge jernbanekøretøj...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Værdi: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Værdi: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Læsser / Aflæsser
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Toget skal være stoppet inde i en remise
@@ -2703,6 +2719,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Indsæt en ny ordre før den markerede eller ved slutningen af ordrelisten
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Få den markerede ordre til at tvinge toget til at vente på en fuld last
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Få den markerede ordre til at tvinge toget til at aflæsse
+STR_TIMETABLE_TOOLTIP :{BLACK}Køreplan - klik på en ordre for at markere den.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ændre hvor lang tid den markerede ordre skal tage
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Nulstil tiden for den markerede ordre
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nulstil forsinkelses-tæller, så transportmidlet kommer til tiden
STR_SERVICE_HINT :{BLACK}Spring denne ordre over medmindre der er behov for service
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Pris: {CURRENCY} Vægt: {WEIGHT_S}{}Hastighed: {VELOCITY} Styrke: {POWER}{}Driftsomkostninger: {CURRENCY}/år{}Kapacitet: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Gået i stykker
@@ -2724,6 +2744,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Kan ikke omdøbe tog-/togvognstypen...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Få den valgte ordre til at tvinge køretøjet til at smide lasten
STR_886F_TRANSFER :{BLACK}Overfør
+STR_CLEAR_TIME :{BLACK}Nulstil tid
+STR_RESET_LATENESS :{BLACK}Nulstil forsinkelse
STR_TRAIN_STOPPING :{RED}Stopper
STR_TRAIN_STOPPING_VEL :{RED}Stopper, {VELOCITY}
@@ -2732,8 +2754,16 @@
STR_TRAIN_START_NO_CATENARY :Toget kan ikke køre, fordi sporet ikke har køreledninger
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Ny {STRING} er nu tilgængelig!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING} er nu tilgængelig! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING} er nu tilgængelig! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan ikke lave køreplan for transportmiddel...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Transportmidler kan kun vente ved stationer.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Dette transportmiddel stopper ikke ved denne station.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Ændre tid
+STR_TIMETABLE_STATUS_ON_TIME :Dette transportmiddel kommer til tiden
+STR_TIMETABLE_STATUS_LATE :Dette transportmiddel er nu {STRING} forsinket
+STR_TIMETABLE_STATUS_EARLY :Dette transportmiddel er nu {STRING} foran køreplanen
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Køretøj i vejen
@@ -2749,7 +2779,7 @@
STR_900E_MAX_SPEED :{BLACK}Maks. hastighed: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Afkast i år: {LTBLUE}{CURRENCY} (sidste år: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Pålidelighed: {LTBLUE}{COMMA}% {BLACK}Nedbrud siden sidste service: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kapacitet: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...skal være stoppet inde i et værksted først
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Kan ikke sælge køretøj...
@@ -2825,7 +2855,7 @@
STR_9813_MAX_SPEED :{BLACK}Maks. hastighed: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Afkast i år: {LTBLUE}{CURRENCY} (sidste år: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Pålidelighed: {LTBLUE}{COMMA}% {BLACK}Nedbrud siden sidste service: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kapacitet: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Kan ikke stoppe/starte skibet...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Kan ikke sende skibet til dok...
@@ -2893,7 +2923,7 @@
STR_A00E_MAX_SPEED :{BLACK}Maks. hastighed: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Afkast i år: {LTBLUE}{CURRENCY} (sidste år: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Pålidelighed: {LTBLUE}{COMMA}% {BLACK}Nedbrud siden sidste service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Værdi: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Kan ikke sende flyet til en hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Flyver til {STATION} hangar
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Flyver til {STATION} hangar, {VELOCITY}
@@ -2946,6 +2976,8 @@
STR_GO_TO_AIRPORT_HANGAR :Flyv til {STATION} hangar
SERVICE_AT_AIRPORT_HANGAR :Service i {STATION} hangar
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Køreplan)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelin katastrofe ved {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Lastbil ødelagt i kollision med en UFO
@@ -3261,6 +3293,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Skift gennemsigtighed for konstruktioner som stationer, værksteder, kontrolsteder og køreledninger
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Skift gennemsigtighed for broer
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Skift gennemsigtighed for strukturer som fyrtårne og antenner, og måske i fremtiden for øjeguf
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Slå gennemsigtighed til/fra for laste-indikatorer
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Gruppe {COMMA}
@@ -3298,4 +3338,7 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Afkast i indeværende år: {GREEN}{CURRENCY} {BLACK}(sidste år: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Afkast i indeværende år: {RED}{CURRENCY} {BLACK}(sidste år: {RED}{CURRENCY}{BLACK})
+STR_GROUP_NAME :{GROUP}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/dutch.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/dutch.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Buiten de kaart
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Te dicht bij de rand van de kaart
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Niet genoeg geld - {CURRENCY} nodig
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Vlak land nodig
STR_0008_WAITING :{BLACK}Wachtend: {WHITE}{STRING}
@@ -231,7 +231,7 @@
STR_0105_BANK :{BLACK}{TINYFONT}Bank
STR_0106_PAPER_MILL :{BLACK}{TINYFONT}Papierfabriek
STR_0107_GOLD_MINE :{BLACK}{TINYFONT}Goudmijn
-STR_0108_FOOD_PROCESSING_PLANT :{BLACK}{TINYFONT}Voedselverwerkings fabriek
+STR_0108_FOOD_PROCESSING_PLANT :{BLACK}{TINYFONT}Voedselverwerkingsfabriek
STR_0109_DIAMOND_MINE :{BLACK}{TINYFONT}Diamantmijn
STR_010A_COPPER_ORE_MINE :{BLACK}{TINYFONT}Kopermijn
STR_010B_FRUIT_PLANTATION :{BLACK}{TINYFONT}Fruitplantage
@@ -349,8 +349,8 @@
############ range for menu starts
STR_0154_OPERATING_PROFIT_GRAPH :Winstgrafiek
-STR_0155_INCOME_GRAPH :Inkomenstegrafiek
-STR_0156_DELIVERED_CARGO_GRAPH :Afgeleverde lading-grafiek
+STR_0155_INCOME_GRAPH :Inkomstengrafiek
+STR_0156_DELIVERED_CARGO_GRAPH :Afgeleverde ladinggrafiek
STR_0157_PERFORMANCE_HISTORY_GRAPH :Prestatiegrafiek
STR_0158_COMPANY_VALUE_GRAPH :Bedrijfswaardegrafiek
STR_0159_CARGO_PAYMENT_RATES :Ladingsprijzen
@@ -358,7 +358,7 @@
STR_PERFORMANCE_DETAIL_MENU :Detail prestatiewaarde
############ range for menu ends
-STR_015B_OPENTTD :{WHITE}OpenTTD
+STR_015B_OPENTTD :{WHITE}Over OpenTTD
STR_015C_SAVE_GAME :Spel opslaan
STR_015D_LOAD_GAME :Spel laden
STR_015E_QUIT_GAME :Spel stoppen
@@ -397,7 +397,7 @@
STR_ENGINE_SORT_CARGO_CAPACITY :Vracht capaciteit
STR_NO_WAITING_CARGO :{BLACK}Er wacht geen vracht van enig type
STR_SELECT_ALL_FACILITIES :{BLACK}Kies alle faciliteiten
-STR_SELECT_ALL_TYPES :{BLACK}Kies alle vracht typen (inclusief niet wachtende vracht)
+STR_SELECT_ALL_TYPES :{BLACK}Kies alle vrachttypen (inclusief niet wachtende vracht)
STR_AVAILABLE_TRAINS :{BLACK}Beschikbare Treinen
STR_AVAILABLE_ROAD_VEHICLES :{BLACK}Beschikbare Voertuigen
STR_AVAILABLE_SHIPS :{BLACK}Beschikbare Schepen
@@ -406,10 +406,10 @@
STR_MANAGE_LIST :{BLACK}Beheer lijst
STR_MANAGE_LIST_TIP :{BLACK}Stuur instructies naar alle voertuigen in de lijst
STR_REPLACE_VEHICLES :Vervang voertuigen
-STR_SEND_TRAIN_TO_DEPOT :Stuur naar Depot
-STR_SEND_ROAD_VEHICLE_TO_DEPOT :Stuur naar Depot
-STR_SEND_SHIP_TO_DEPOT :Stuur naar Depot
-STR_SEND_AIRCRAFT_TO_HANGAR :Stuur naar Hangar
+STR_SEND_TRAIN_TO_DEPOT :Stuur naar depot
+STR_SEND_ROAD_VEHICLE_TO_DEPOT :Stuur naar depot
+STR_SEND_SHIP_TO_DEPOT :Stuur naar depot
+STR_SEND_AIRCRAFT_TO_HANGAR :Stuur naar hangar
STR_SEND_FOR_SERVICING :Stuur naar onderhoud
############ range for months starts
@@ -458,9 +458,9 @@
STR_018A_CAN_T_CHANGE_SERVICING :{WHITE}Kan onderhoudsinterval niet aanpassen...
STR_018B_CLOSE_WINDOW :{BLACK}Sluit venster
STR_018C_WINDOW_TITLE_DRAG_THIS :{BLACK}Vensternaam - sleep om venster te verplaatsen
-STR_STICKY_BUTTON :{BLACK}Markeer dit venster als niet-verwijderbaar door de 'Sluit Alle Vensters' knop
+STR_STICKY_BUTTON :{BLACK}Markeer dit venster als niet-sluitbaar door de 'Sluit alle vensters'-knop
STR_RESIZE_BUTTON :{BLACK}Klik en sleep om dit venster van grootte te veranderen
-STR_SAVELOAD_HOME_BUTTON :{BLACK}Klik hier om naar de standaard bewaar/laad directorie te gaan
+STR_SAVELOAD_HOME_BUTTON :{BLACK}Klik hier om naar de standaard bewaar/laadmap te gaan
STR_018D_DEMOLISH_BUILDINGS_ETC :{BLACK}Sloop gebouwen etc. op een stuk land
STR_018E_LOWER_A_CORNER_OF_LAND :{BLACK}Verlaag een hoek van het land
STR_018F_RAISE_A_CORNER_OF_LAND :{BLACK}Verhoog een hoek van het land
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Gemeente: {LTBLUE}{STRING}
STR_01A9_NONE :Geen
STR_01AA_NAME :{BLACK}Naam
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Moeilijkheidsgraad
STR_02C7_CONFIG_PATCHES :Kies patches
STR_NEWGRF_SETTINGS :Newgrf instellingen
+STR_TRANSPARENCY_OPTIONS :Doorzichtigheidsopties
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Geef stadsnamen weer
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Geef stationsnamen weer
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :Kaart
STR_EXTRA_VIEW_PORT :Extra kijkvenster
STR_SIGN_LIST :Bordenlijst
-STR_TRANSPARENCY_OPTIONS :Doorzichtigheidsopties
STR_02DF_TOWN_DIRECTORY :Stedenlijst
STR_TOWN_POPULATION :{BLACK}Wereldbevolking: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Kijkvenster {COMMA}
@@ -872,7 +872,7 @@
STR_0329_PURCHASE_LAND_FOR_FUTURE :{BLACK}Koop land voor toekomstig gebruik
STR_032F_AUTOSAVE :{RED}AUTOSAVE
STR_SAVING_GAME :{RED}* * SPEL WORDT OPGESLAGEN * *
-STR_SAVE_STILL_IN_PROGRESS :{WHITE}Opslaan van spel is nog bezig,{}wacht tot dit voltooid is!
+STR_SAVE_STILL_IN_PROGRESS :{WHITE}Opslaan van spel is nog bezig,{}Wacht tot dit voltooid is!
STR_0330_SELECT_EZY_STREET_STYLE :{BLACK}Kies 'Ezy Street style music' programma
STR_0335_6 :{BLACK}6
@@ -993,10 +993,10 @@
STR_TRAIN_HAS_VOID_ORDER :{WHITE}Trein {COMMA} heeft een lege opdracht
STR_TRAIN_HAS_DUPLICATE_ENTRY :{WHITE}Trein {COMMA} heeft dubbele orders
STR_TRAIN_HAS_INVALID_ENTRY :{WHITE}Trein {COMMA} heeft een ongeldig station in de orders
-STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}Wegvoertuig {COMMA} heeft te weinig orders in de orderlijst
-STR_ROADVEHICLE_HAS_VOID_ORDER :{WHITE}Wegvoertuig {COMMA} heeft lege order
-STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Wegvoertuig {COMMA} heeft dubbele orders
-STR_ROADVEHICLE_HAS_INVALID_ENTRY :{WHITE}Wegvoertuig {COMMA} heeft een ongeldig station in de orders
+STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}Wagen {COMMA} heeft te weinig orders in de orderlijst
+STR_ROADVEHICLE_HAS_VOID_ORDER :{WHITE}Wagen {COMMA} heeft lege order
+STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Wagen {COMMA} heeft dubbele orders
+STR_ROADVEHICLE_HAS_INVALID_ENTRY :{WHITE}Wagen {COMMA} heeft een ongeldig station in de orders
STR_SHIP_HAS_TOO_FEW_ORDERS :{WHITE}Schip {COMMA} heeft te weinig order is orderlijst
STR_SHIP_HAS_VOID_ORDER :{WHITE}Schip {COMMA} heeft lege order
STR_SHIP_HAS_DUPLICATE_ENTRY :{WHITE}Schip {COMMA} heeft dubbele orders
@@ -1008,7 +1008,7 @@
# end of order system
STR_TRAIN_AUTORENEW_FAILED :{WHITE}Automatisch vernieuwen mislukt bij trein {COMMA} (onvoldoende geld)
-STR_ROADVEHICLE_AUTORENEW_FAILED :{WHITE}Automatisch vernieuwen mislukt bij voertuig {COMMA} (onvoldoende geld)
+STR_ROADVEHICLE_AUTORENEW_FAILED :{WHITE}Automatisch vernieuwen mislukt bij wagen {COMMA} (onvoldoende geld)
STR_SHIP_AUTORENEW_FAILED :{WHITE}Automatisch vernieuwen mislukt bij schip {COMMA} (onvoldoende geld)
STR_AIRCRAFT_AUTORENEW_FAILED :{WHITE}Automatisch vernieuwen mislukt bij vliegtuig {COMMA} (onvoldoende geld)
STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}Trein {COMMA} is te lang na het vervangen
@@ -1103,6 +1103,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Kaart muiswiel snelheid: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Gebruik laad indicatoren: {ORANGE}{STRING}
+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}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Normaal spoor
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Elektrisch spoor
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Eerst beschikbare
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Laatst beschikbare
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Meest gebruikte
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Maximaal aantal treinen per speler: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Maximaal aantal wegvoertuigen per speler: {ORANGE}{STRING}
@@ -1181,12 +1192,12 @@
STR_TEMPERATE_LANDSCAPE :gematigd landschap
STR_SUB_ARCTIC_LANDSCAPE :subarctisch landschap
STR_SUB_TROPICAL_LANDSCAPE :subtropisch landschap
-STR_TOYLAND_LANDSCAPE :speelgoed landschap
+STR_TOYLAND_LANDSCAPE :Speelgoedlandschap
STR_CHEATS :{WHITE}Cheats
STR_CHEATS_TIP :{BLACK}Keuzevakjes geven aan of je deze cheat al ooit gebruikt hebt.
STR_CHEATS_WARNING :{BLACK}Waarschuwing! Je staat op het punt je concurrenten te verraden. Bedenk dat zo'n schande eeuwig wordt onthouden.
-STR_CHEAT_MONEY :{LTBLUE}Verhoog geld met {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Verhoog geld met {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Spelend als speler: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magische bulldozer (industrieën en andere onverplaatsbare objecten verwijderen): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnels mogen elkaar kruisen: {ORANGE}{STRING}
@@ -1258,7 +1269,7 @@
STR_DRAG_DROP :{BLACK}Slepen
STR_STATION_DRAG_DROP :{BLACK}Bouw een station door te slepen
-STR_SELECT_STATION_CLASS_TIP :{BLACK}Selecteer een station type
+STR_SELECT_STATION_CLASS_TIP :{BLACK}Selecteer een stationtype
STR_SELECT_STATION_TYPE_TIP :{BLACK}Selecteer het type station om te bouwen
STR_FAST_FORWARD :{BLACK}Verhoog de spelsnelheid
@@ -1441,9 +1452,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Bedrijfsnaam: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Begonnen in: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Bedrijfswaarde: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Huidige kas: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Inkomen vorig jaar: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Bedrijfswaarde: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Huidige kas: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Inkomen vorig jaar: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Prestatie: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Voertuigen: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1678,7 +1689,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Gebouw moet eerst gesloopt worden
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Bevolking: {ORANGE}{COMMA}{BLACK} Huizen: {ORANGE}{COMMA}
@@ -1711,7 +1722,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Geef informatie over de gemeente weer
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN}'s gemeenteraad
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Reputatie van transportbedrijven:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subsidies
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Beschikbare subsidies:
STR_2027_FROM_TO :{ORANGE}{STRING} van {STRING} naar {STRING}
@@ -1782,7 +1793,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}....er staat hier al een boom
STR_2804_SITE_UNSUITABLE :{WHITE}...plek niet geschikt
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Kan hier geen boom planten...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...teveel borden
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Kan hier geen bord plaatsen
STR_280A_SIGN :Bord
@@ -1891,6 +1902,7 @@
STR_3805_COAST_OR_RIVERBANK :Kust of rivierbed
STR_3806_SHIP_DEPOT :Scheepswerf
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Kan niet op water bouwen
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Het kanaal moet eerst verwijderd worden
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Spel Opslaan
@@ -1900,9 +1912,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabytes vrij
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Kan niet lezen van schijf
-STR_4007_GAME_SAVE_FAILED :{WHITE}Opslaan Spel Mislukt
+STR_4007_GAME_SAVE_FAILED :{WHITE}Opslaan Spel Mislukt{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Kan bestand niet verwijderen
-STR_4009_GAME_LOAD_FAILED :{WHITE}Laden Spel Mislukt
+STR_4009_GAME_LOAD_FAILED :{WHITE}Laden Spel Mislukt{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne fout: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Kapotte savegame - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Opgeslagen spel hoort bij een nieuwere versie
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Bestand is niet leesbaar
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Bestand is niet schrijfbaar
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Lijst van schijven, mappen, en opgeslagen spellen
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Huidige gekozen naam voor opgeslagen spel
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Verwijder het momenteel geselecteerde opgeslagen spel
@@ -2036,7 +2053,7 @@
STR_SV_EMPTY :
STR_SV_UNNAMED :Geen naam
STR_SV_TRAIN_NAME :Trein {COMMA}
-STR_SV_ROADVEH_NAME :Automobiel {COMMA}
+STR_SV_ROADVEH_NAME :Wagen {COMMA}
STR_SV_SHIP_NAME :Schip {COMMA}
STR_SV_AIRCRAFT_NAME :Vliegtuig {COMMA}
@@ -2073,8 +2090,7 @@
STR_SV_STNAME_LOWER :Lager {STRING}
STR_SV_STNAME_HELIPORT :{STRING} Helihaven
STR_SV_STNAME_FOREST :{STRING} Bossen
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} Station #{NUM}
############ end of savegame specific region!
@@ -2154,7 +2170,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Speler {COMMA})
STR_7004_NEW_FACE :{BLACK}Nieuw gezicht
STR_7005_COLOR_SCHEME :{BLACK}Kleurenschema
@@ -2166,7 +2182,7 @@
STR_700B_PRESIDENT_S_NAME :Naam van directeur
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Kan bedrijfsnaam niet veranderen...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Kan naam directeur niet veranderen...
-STR_700E_FINANCES :{WHITE}{COMPANY} Financiën {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Financiën {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Uitgaven/inkomsten
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Bouwkosten
@@ -2182,20 +2198,20 @@
STR_701B_SHIP_INCOME :{GOLD}Schipinkomsten
STR_701C_LOAN_INTEREST :{GOLD}Rente van lening
STR_701D_OTHER :{GOLD}Overig
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Totaal:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Inkomstengrafiek
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Bedrijfswinst Grafiek
STR_7026_BANK_BALANCE :{WHITE}Banksaldo
STR_7027_LOAN :{WHITE}Lening
-STR_MAX_LOAN :{WHITE}Max lening: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Leen {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Betaal {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY} terug
+STR_MAX_LOAN :{WHITE}Max lening: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Leen {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Betaal {SKIP}{SKIP}{CURRENCY} terug
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maximaal toegestane leninggrootte is {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan geen geld meer lenen...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...geen lening om terug te betalen
@@ -2213,7 +2229,7 @@
STR_7038_INAUGURATED :{GOLD}Gesticht: {WHITE}{NUM}
STR_7039_VEHICLES :{GOLD}Voertuigen:
STR_TRAINS :{WHITE}{COMMA} trein{P "" en}
-STR_ROAD_VEHICLES :{WHITE}{COMMA} wegvoertuig{P "" en}
+STR_ROAD_VEHICLES :{WHITE}{COMMA} wagen{P "" s}
STR_AIRCRAFT :{WHITE}{COMMA} vliegtuig{P "" en}
STR_SHIPS :{WHITE}{COMMA} sch{P ip epen}
STR_7042_NONE :{WHITE}Geen
@@ -2234,8 +2250,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Bedrijfs prestatie score (maximale score=1000)
STR_7052_COMPANY_VALUES :{WHITE}Bedrijfswaarde
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Bedrijfscompetitietabel
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Transportbedrijf in de problemen!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} wordt verkocht of failliet verklaard tenzij finanicele situatie snel verbetert!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Directeur)
@@ -2273,7 +2289,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Wereld Recessie!{}{}Financiële experts vrezen het ergste terwijl economie ineen stort!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recessie Voorbij!{}{}Stijgende handel geeft industrie vertrouwen terwijl economie verstevigt!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Schakel tussen groot/klein venster
-STR_7076_COMPANY_VALUE :{GOLD}Bedrijfswaarde: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Bedrijfswaarde: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Koop 25% aandeel in bedrijf
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Verkoop 25% aandeel in bedrijf
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Koop een aandeel van 25% in dit bedrijf
@@ -2585,7 +2601,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Treindepot
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Inwoners feesten... {}Eerste trein arriveert in {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Details)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Details)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Trein in de weg
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2602,9 +2618,16 @@
STR_8810_GO_NON_STOP_TO_LOAD :Ga non-stop naar {STATION} (Laden)
STR_8811_GO_TO_NON_STOP_TRANSFER_LOAD :Ga non-stop naar {STATION} (Overladen en wacht tot vol geladen)
STR_GO_TO_TRAIN_DEPOT :Ga naar {TOWN} Trein Depot
-STR_SERVICE_AT_TRAIN_DEPOT :Reparatie in {TOWN} Treindepot
+STR_SERVICE_AT_TRAIN_DEPOT :Reparatie in {TOWN} treindepot
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Ga zonder tussenstop naar {TOWN} Treindepot
-STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Reparatie zonder tussentop in {TOWN} Treindepot
+STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Reparatie zonder tussentop in {TOWN} treindepot
+
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Reis (geen dienstregeling)
+STR_TIMETABLE_TRAVEL_FOR :Reis naar {STRING}
+STR_TIMETABLE_STAY_FOR :en blijf voor {STRING}
+STR_TIMETABLE_DAYS :{COMMA} dag{P "" en}
+STR_TIMETABLE_TICKS :{COMMA} tik{P "" ken}
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Op weg naar {TOWN} Trein Depot
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Op weg naar {TOWN} Trein Depot, {VELOCITY}
@@ -2647,13 +2670,15 @@
STR_REFIT :{BLACK}Ombouwen
STR_REFIT_TIP :{BLACK}Kies naar welk type vracht ombouwen in deze order. Ctrl-klik om ombouw instructie te verwijderen
STR_REFIT_ORDER :(Ombouwen naar {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Dienstregeling
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Schakel naar de dienstregeling
STR_8829_ORDERS :{WHITE}{VEHICLE} (Orders)
STR_882A_END_OF_ORDERS :{SETX 10}- - Einde van orders - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Reparatie
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Kan spoorvoertuig niet bouwen...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Waarde: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}In- en uitladen
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Trein moet gestopt zijn in depot
@@ -2703,6 +2728,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Voeg een nieuwe order in voor de geselecteerde order, of voeg het toe aan de eind van de lijst
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Zorg dat de geselecteerde order het voertuig forceert te wachten voor een volledige belading
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Zorg dat de geselecteerde order het voertuig forceert uit te laden
+STR_TIMETABLE_TOOLTIP :{BLACK}Dienstregeling - klik op een opdracht om het te selecteren
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Verander de hoeveelheid tijd die de geselecteerde opdracht mag innemen
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Verwijder de hoeveelheid tijd die de geselecteerde opdracht mag innemen
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset de teller zodat het voertuig toch op tijd is
STR_SERVICE_HINT :{BLACK}Sla deze order over tenzij een reparatie nodig is
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Prijs: {CURRENCY} Gewicht: {WEIGHT_S}{}Snelheid: {VELOCITY} Kracht: {POWER}{}Brandstofprijs: {CURRENCY}/jr{}Capaciteit: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Kapot
@@ -2724,6 +2753,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Kan het trein voertuig type niet hernoemen...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Forceer het voertuig goederen te dumpen bij geselecteerde order
STR_886F_TRANSFER :{BLACK}Overladen
+STR_CLEAR_TIME :{BLACK}Reset de tijd
+STR_RESET_LATENESS :{BLACK}Reset teller
STR_TRAIN_STOPPING :{RED}Gestopt
STR_TRAIN_STOPPING_VEL :{RED}Aan het stoppen, {VELOCITY}
@@ -2732,8 +2763,16 @@
STR_TRAIN_START_NO_CATENARY :Er is geen bovenleiding, de trein kan niet starten
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nieuw {STRING} nu beschikbaar!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nieuw {STRING} nu beschikbaar! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nieuw {STRING} nu beschikbaar! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan geen dienstregeling opzetten voor dit voertuig...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Voertuigen kunnen alleen wachten op stations.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Dit voertuig stopt niet op dit station
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Verander de tijd
+STR_TIMETABLE_STATUS_ON_TIME :Dit voertuig loopt op schema
+STR_TIMETABLE_STATUS_LATE :Dit voertuig heeft {STRING} vertraging
+STR_TIMETABLE_STATUS_EARLY :Dit voertuig is {STRING} te vroeg
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Wegvoertuig in de weg
@@ -2749,7 +2788,7 @@
STR_900E_MAX_SPEED :{BLACK}Max. snelheid: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Winst dit jaar: {LTBLUE}{CURRENCY} (vorig jaar: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Betrouwbaarheid: {LTBLUE}{COMMA}% {BLACK}Pechgevallen sinds laatste reparaties: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Capaciteit: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...moet gestopt zijn binnen een wegvoertuig depot
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Kan dit wegvoertuig niet verkopen...
@@ -2795,13 +2834,13 @@
STR_9036_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Hernoem wegvoertuigtype
STR_9037_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Kan wegvoertuigtype niet hernoemen...
STR_9038_GO_TO_ROADVEH_DEPOT :Ga naar {TOWN} Wegvoertuig Depot
-STR_SERVICE_AT_ROADVEH_DEPOT :Repareren in {TOWN} Wegvoertuig Depot
+STR_SERVICE_AT_ROADVEH_DEPOT :Repareren in {TOWN} wagendepot
STR_REFIT_ROAD_VEHICLE_TO_CARRY :{BLACK}Verbouw het wegvoertuig om een andere lading the vervoeren
STR_REFIT_ROAD_VEHICLE :{BLACK}Verbouw wegvoertuig
STR_REFIT_ROAD_VEHICLE_TO_CARRY_HIGHLIGHTED :{BLACK}Verbouw wegvoertuig om geselecteerd vrachttype te vervoeren
STR_REFIT_ROAD_VEHICLE_CAN_T :{WHITE}Kan wegvoertuig niet verbouwen
-STR_ROAD_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Selecteer welk type vracht het wegvoertuig moet vervoeren
+STR_ROAD_SELECT_TYPE_OF_CARGO_FOR :{BLACK}Selecteer welk type vracht het wagen moet vervoeren
##id 0x9800
STR_9800_DOCK_CONSTRUCTION :Dokbouw
@@ -2825,7 +2864,7 @@
STR_9813_MAX_SPEED :{BLACK}Max. snelheid: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Winst dit jaar: {LTBLUE}{CURRENCY} (vorig jaar: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Betrouwbaarheid: {LTBLUE}{COMMA}% {BLACK}Pechgevallen sinds laatste reparatie: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capaciteit: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Kan schip niet starten of stoppen...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Kan schip niet naar depot sturen...
@@ -2893,7 +2932,7 @@
STR_A00E_MAX_SPEED :{BLACK}Max. snelheid: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Winst dit jaar: {LTBLUE}{CURRENCY} (vorig jaar: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Betrouwbaarheid: {LTBLUE}{COMMA}% {BLACK}Pechgevallen sinds laatste reparatie: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bouwdatum: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bouwdatum: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Kan vliegtuig niet naar hangar sturen...
STR_HEADING_FOR_HANGAR :{ORANGE}Op weg naar {STATION} Hangar
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Op weg naar {STATION} Hangar, {VELOCITY}
@@ -2946,6 +2985,8 @@
STR_GO_TO_AIRPORT_HANGAR :Ga naar {STATION} hanger
SERVICE_AT_AIRPORT_HANGAR :Reperatie bij {STATION} hanger
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Dienstregeling)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelin ongeluk bij {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Voertuig vernietigd in botsing met 'UFO'
@@ -3055,13 +3096,13 @@
STR_PLANE :{BLACK}{PLANE}
STR_SHIP :{BLACK}{SHIP}
-STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA} Treinen
-STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA} Wegvoertuigen
+STR_SCHEDULED_TRAINS :{WHITE}{STATION} - {COMMA} Trein{P "" en}
+STR_SCHEDULED_ROAD_VEHICLES :{WHITE}{STATION} - {COMMA} Wagen{P "" s}
STR_SCHEDULED_AIRCRAFT :{WHITE}{STATION} - {COMMA} Vliegtuigen
-STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA} Schepen
+STR_SCHEDULED_SHIPS :{WHITE}{STATION} - {COMMA} Sch{P ip epen}
STR_SCHEDULED_TRAINS_TIP :{BLACK}Geef alle treinen weer die dit station in hun opdrachtenlijst hebben
-STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Geef alle wegvoertuigen weer die dit station in hun opdrachtenlijst hebben
+STR_SCHEDULED_ROAD_VEHICLES_TIP :{BLACK}Geef alle wagens weer die dit station in hun opdrachtenlijst hebben
STR_SCHEDULED_AIRCRAFT_TIP :{BLACK}Geef alle vliegtuigen weer die dit station in hun opdrachtenlijst hebben
STR_SCHEDULED_SHIPS_TIP :{BLACK}Geef alle schepen weer die dit station in hun opdrachtenlijst hebben
@@ -3173,17 +3214,17 @@
STR_LAND_GENERATOR :{BLACK}Land generator:
STR_TREE_PLACER :{BLACK}Bos algoritme:
STR_HEIGHTMAP_ROTATION :{BLACK}Aantal graden hoogtekaart:
-STR_TERRAIN_TYPE :{BLACK}Terrein type:
+STR_TERRAIN_TYPE :{BLACK}Terreintype:
STR_QUANTITY_OF_SEA_LAKES :{BLACK}Zee niveau:
-STR_SMOOTHNESS :{BLACK}Vlakte:
-STR_SNOW_LINE_HEIGHT :{BLACK}Sneeuwlijn hoogte:
+STR_SMOOTHNESS :{BLACK}Gladheid:
+STR_SNOW_LINE_HEIGHT :{BLACK}Hoogte van sneeuwlijn:
STR_DATE :{BLACK}Datum:
STR_NUMBER_OF_TOWNS :{BLACK}Aantal steden:
STR_NUMBER_OF_INDUSTRIES :{BLACK}Aantal Industrieën:
STR_GENERATE_DATE :{BLACK}{DATE_LONG}
STR_SNOW_LINE_UP :{BLACK}Verschuif de sneeuwlijn één omhoog
STR_SNOW_LINE_DOWN :{BLACK}Verschuif de sneeuwlijn één naar beneden
-STR_SNOW_LINE_QUERY_CAPT :{WHITE}Verander sneeuwlijn hoogte
+STR_SNOW_LINE_QUERY_CAPT :{WHITE}Verander hoogte van sneeuwlijn
STR_START_DATE_QUERY_CAPT :{WHITE}Verander begin jaar
STR_HEIGHTMAP_SCALE_WARNING_CAPTION :{WHITE}Schaal waarschuwing
STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}Het aanpassen van de grootte van een bronkaar is niet aan te bevelen. Toch doorgaan?
@@ -3207,17 +3248,17 @@
STR_PREPARING_GAME :{BLACK}Voorbereiden spel
STR_DIFFICULTY_TO_CUSTOM :{WHITE}Deze aktie past de moeilijkheidsgraag aan naam custom
STR_SE_FLAT_WORLD :{WHITE}Vlak land
-STR_SE_FLAT_WORLD_TIP :{BLACK}Genereer een platte kaart
+STR_SE_FLAT_WORLD_TIP :{BLACK}Genereer een vlakke kaart
STR_SE_RANDOM_LAND :{WHITE}Willekeurig land
STR_SE_NEW_WORLD :{BLACK}Maak nieuw scenario aan
-STR_SE_CAPTION :{WHITE}Scenario type
+STR_SE_CAPTION :{WHITE}Scenariotype
STR_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Maak de hoogte van plat land een lager
STR_FLAT_WORLD_HEIGHT_UP :{BLACK}Maak de hoogte van plat land een hoger
STR_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Verander hoogte van vlak land
STR_FLAT_WORLD_HEIGHT :{BLACK}Hoogte van platte grond:
STR_FLAT_WORLD_HEIGHT_NUM :{NUM}
-STR_SMALLMAP_CENTER :{BLACK}Centreerd de kleine kaart op heidige positie
+STR_SMALLMAP_CENTER :{BLACK}Centreer de kleine kaart op huidige positie
########### String for new airports
STR_SMALL_AIRPORT :{BLACK}Klein
@@ -3261,6 +3302,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Wissel doorzichtigheid voor gebouwen zoals stations, depots, waypoints en bovenleiding
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Wissel doorzichtigheid voor bruggen
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Wissel doorzichtigheid voor structuren zoals vuurtoren en antennes, in de toekomst misschien voor eyecandy
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Schakel tussen doorzichtigheid voor laad indicatoren
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Groep {COMMA}
@@ -3298,4 +3347,7 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Winst dit jaar: {GREEN}{CURRENCY} {BLACK}(vorig jaar: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Winst dit jaar: {RED}{CURRENCY} {BLACK}(vorig jaar: {RED}{CURRENCY}{BLACK})
+STR_GROUP_NAME :{GROUP}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/english.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/english.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Off edge of map
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Too close to edge of map
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Not enough cash - requires {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Flat land required
STR_0008_WAITING :{BLACK}Waiting: {WHITE}{STRING}
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Local authority: {LTBLUE}{STRING1}
STR_01A9_NONE :None
STR_01AA_NAME :{BLACK}Name
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1st
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Difficulty settings
STR_02C7_CONFIG_PATCHES :Configure patches
STR_NEWGRF_SETTINGS :NewGRF settings
+STR_TRANSPARENCY_OPTIONS :Transparency options
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Town names displayed
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Station names displayed
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :Map of world
STR_EXTRA_VIEW_PORT :Extra viewport
STR_SIGN_LIST :Sign list
-STR_TRANSPARENCY_OPTIONS :Transparency options
STR_02DF_TOWN_DIRECTORY :Town directory
STR_TOWN_POPULATION :{BLACK}World population: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Viewport {COMMA}
@@ -1103,6 +1103,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Map scrollwheel speed: {ORANGE}{STRING1}
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_LOADING_INDICATORS :{LTBLUE}Use loading indicators: {ORANGE}{STRING1}
+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}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Normal Rail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Electrified Rail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :First available
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Last available
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Most used
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Max trains per player: {ORANGE}{STRING1}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Max road vehicles per player: {ORANGE}{STRING1}
@@ -1186,7 +1197,7 @@
STR_CHEATS :{WHITE}Cheats
STR_CHEATS_TIP :{BLACK}Checkboxes indicate if you have used this cheat before
STR_CHEATS_WARNING :{BLACK}Warning! You are about to betray your fellow competitors. Keep in mind that such a disgrace will be remembered for eternity.
-STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Increase money by {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Playing as player: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magic bulldozer (remove industries, unmovables): {ORANGE}{STRING1}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnels may cross each other: {ORANGE}{STRING1}
@@ -1441,9 +1452,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Company name: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguration: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Company value: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Current balance: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Last year's income: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Company value: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Current balance: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Last year's income: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Performance: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Vehicles: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1678,7 +1689,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING1}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Building must be demolished first
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Population: {ORANGE}{COMMA}{BLACK} Houses: {ORANGE}{COMMA}
@@ -1711,7 +1722,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Show information on local authority
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} local authority
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Transport company ratings:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subsidies
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Subsidies on offer for services taking:
STR_2027_FROM_TO :{ORANGE}{STRING} from {STRING2} to {STRING2}
@@ -1782,7 +1793,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...tree already here
STR_2804_SITE_UNSUITABLE :{WHITE}...site unsuitable
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Can't plant tree here...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...too many signs
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Can't place sign here...
STR_280A_SIGN :Sign
@@ -1891,6 +1902,7 @@
STR_3805_COAST_OR_RIVERBANK :Coast or riverbank
STR_3806_SHIP_DEPOT :Ship depot
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Can't build on water
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Must demolish canal first
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Save Game
@@ -1900,9 +1912,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabyte{P "" s} free
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Unable to read drive
-STR_4007_GAME_SAVE_FAILED :{WHITE}Game Save Failed
+STR_4007_GAME_SAVE_FAILED :{WHITE}Game Save Failed{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Unable to delete file
-STR_4009_GAME_LOAD_FAILED :{WHITE}Game Load Failed
+STR_4009_GAME_LOAD_FAILED :{WHITE}Game Load Failed{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internal error: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Broken savegame - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is made with newer version
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :File not readable
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :File not writeable
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}List of drives, directories and saved-game files
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Currently selected name for saved-game
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Delete the currently selected saved-game
@@ -2073,8 +2090,7 @@
STR_SV_STNAME_LOWER :Lower {STRING1}
STR_SV_STNAME_HELIPORT :{STRING1} Heliport
STR_SV_STNAME_FOREST :{STRING1} Forest
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING1} Station #{NUM}
############ end of savegame specific region!
@@ -2154,7 +2170,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Player {COMMA})
STR_7004_NEW_FACE :{BLACK}New Face
STR_7005_COLOR_SCHEME :{BLACK}Colour Scheme
@@ -2166,7 +2182,7 @@
STR_700B_PRESIDENT_S_NAME :Manager's Name
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Can't change company name...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Can't change manager's name...
-STR_700E_FINANCES :{WHITE}{COMPANY} Finances {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Finances {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Expenditure/Income
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Construction
@@ -2182,20 +2198,20 @@
STR_701B_SHIP_INCOME :{GOLD}Ship Income
STR_701C_LOAN_INTEREST :{GOLD}Loan Interest
STR_701D_OTHER :{GOLD}Other
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Total:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Income Graph
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Operating Profit Graph
STR_7026_BANK_BALANCE :{WHITE}Bank Balance
STR_7027_LOAN :{WHITE}Loan
-STR_MAX_LOAN :{WHITE}Max Loan: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Borrow {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Repay {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Max Loan: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Borrow {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Repay {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maximum permitted loan size is {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Can't borrow any more money...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...no loan to repay
@@ -2234,8 +2250,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Company performance ratings (maximum rating=1000)
STR_7052_COMPANY_VALUES :{WHITE}Company values
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Company League Table
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Transport company in trouble!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} will be sold off or declared bankrupt unless performance increases soon!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Manager)
@@ -2273,7 +2289,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}World Recession!{}{}Financial experts fear worst as economy slumps!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recession Over!{}{}Upturn in trade gives confidence to industries as economy strengthens!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Toggle large/small window size
-STR_7076_COMPANY_VALUE :{GOLD}Company value: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Company value: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Buy 25% share in company
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Sell 25% share in company
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Buy 25% share in this company
@@ -2585,7 +2601,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Train Depot
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Citizens celebrate . . .{}First train arrives at {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING1} (Details)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Details)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Train in the way
STR_8804 :{SETX 10}{COMMA}: {STRING1} {STRING1}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING1} {STRING1}
@@ -2606,6 +2622,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Go non-stop to {TOWN} Train Depot
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Service non-stop at {TOWN} Train Depot
+STR_TIMETABLE_GO_TO :{STRING1} {STRING2}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Travel (not timetabled)
+STR_TIMETABLE_TRAVEL_FOR :Travel for {STRING1}
+STR_TIMETABLE_STAY_FOR :and stay for {STRING1}
+STR_TIMETABLE_DAYS :{COMMA} day{P "" s}
+STR_TIMETABLE_TICKS :{COMMA} tick{P "" s}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Heading for {TOWN} Train Depot
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Heading for {TOWN} Train Depot, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Service at {TOWN} Train Depot
@@ -2647,13 +2670,15 @@
STR_REFIT :{BLACK}Refit
STR_REFIT_TIP :{BLACK}Select what cargo type to refit to in this order. Control click to remove refit instruction
STR_REFIT_ORDER :(Refit to {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Timetable
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Switch to the timetable view
STR_8829_ORDERS :{WHITE}{VEHICLE} (Orders)
STR_882A_END_OF_ORDERS :{SETX 10}- - End of Orders - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Service
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Can't build railway vehicle...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Value: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Loading / Unloading
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Train must be stopped inside a depot
@@ -2703,6 +2728,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Insert a new order before the highlighted order, or add to end of list
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Make the highlighted order force the vehicle to wait for a full load
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Make the highlighted order force the vehicle to unload
+STR_TIMETABLE_TOOLTIP :{BLACK}Timetable - click on an order to highlight it.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Change the amount of time that the highlighted order should take
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Clear the amount of time for the highlighted order
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time
STR_SERVICE_HINT :{BLACK}Skip this order unless a service is needed
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Cost: {CURRENCY} Weight: {WEIGHT_S}{}Speed: {VELOCITY} Power: {POWER}{}Running Cost: {CURRENCY}/yr{}Capacity: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Broken down
@@ -2724,6 +2753,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Can't rename train vehicle type...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Make the highlighted order force the vehicle to dump cargo
STR_886F_TRANSFER :{BLACK}Transfer
+STR_CLEAR_TIME :{BLACK}Clear Time
+STR_RESET_LATENESS :{BLACK}Reset Late Counter
STR_TRAIN_STOPPING :{RED}Stopping
STR_TRAIN_STOPPING_VEL :{RED}Stopping, {VELOCITY}
@@ -2732,8 +2763,20 @@
STR_TRAIN_START_NO_CATENARY :This track lacks catenary, so the train can't start
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}New {STRING} now available!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}New {STRING} now available! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}New {STRING} now available! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Can't timetable vehicle...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehicles can only wait at stations.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}This vehicle is not stopping at this station.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Change Time
+STR_TIMETABLE_STATUS_ON_TIME :This vehicle is currently running on time
+STR_TIMETABLE_STATUS_LATE :This vehicle is currently running {STRING1} late
+STR_TIMETABLE_STATUS_EARLY :This vehicle is currently running {STRING1} early
+STR_TIMETABLE_TOTAL_TIME :This timetable will take {STRING1} to complete
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :This timetable will take at least {STRING1} to complete (not all timetabled)
+STR_TIMETABLE_AUTOFILL :{BLACK}Autofill
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the first journey
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Road vehicle in the way
@@ -2749,7 +2792,7 @@
STR_900E_MAX_SPEED :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit this year: {LTBLUE}{CURRENCY} (last year: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Reliability: {LTBLUE}{COMMA}% {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Capacity: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...must be stopped inside a road vehicle depot
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Can't sell road vehicle...
@@ -2825,7 +2868,7 @@
STR_9813_MAX_SPEED :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit this year: {LTBLUE}{CURRENCY} (last year: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Reliability: {LTBLUE}{COMMA}% {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacity: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Can't stop/start ship...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Can't send ship to depot...
@@ -2893,7 +2936,7 @@
STR_A00E_MAX_SPEED :{BLACK}Max. speed: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit this year: {LTBLUE}{CURRENCY} (last year: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Reliability: {LTBLUE}{COMMA}% {BLACK}Breakdowns since last service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Built: {LTBLUE}{NUM}{BLACK} Value: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Can't send aircraft to hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Heading for {STATION} Hangar
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Heading for {STATION} Hangar, {VELOCITY}
@@ -2946,6 +2989,8 @@
STR_GO_TO_AIRPORT_HANGAR :Go to {STATION} Hangar
SERVICE_AT_AIRPORT_HANGAR :Service at {STATION} Hangar
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Timetable)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelin disaster at {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Road vehicle destroyed in 'UFO' collision!
@@ -3261,6 +3306,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Toggle transparency for buildables like stations, depots, waypoints and catenary
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Toggle transparency for bridges
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Toggle transparency for structures like lighthouses and antennas, maybe in future for eyecandy
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Toggle transparency for loading indicators
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Group {COMMA}
@@ -3298,4 +3351,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profit this year: {GREEN}{CURRENCY} {BLACK}(last year: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profit this year: {RED}{CURRENCY} {BLACK}(last year: {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/esperanto.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/esperanto.txt Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}For de la mapo
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Tro proksime al la mapa rando
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Ne sufiĉe da mono - vi bezonas {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Necesas ebena lando
STR_0008_WAITING :{BLACK}Atendas: {WHITE}{STRING}
@@ -496,7 +496,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Lokaj estroj: {LTBLUE}{STRING}
STR_01A9_NONE :Neniu
STR_01AA_NAME :{BLACK}Nomo
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1a de
@@ -1185,7 +1185,7 @@
STR_CHEATS :{WHITE}Filudaĵoj
STR_CHEATS_TIP :{BLACK}La kvadratetoj indikas ĉu vi jam uzis la filudaĵon antaŭe.
STR_CHEATS_WARNING :{BLACK}Atentu! Vi perfidos viajn kunulajn konkurantojn. Memoru ke io tia rememoriĝos eterne.
-STR_CHEAT_MONEY :{LTBLUE}Altigu monkvanton per {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Altigu monkvanton per {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Ludu kiel ludanto: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magia forigilo (forviŝu industriojn, nemoveblaĵojn): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tuneloj rajtas kruciĝi unu kun la alia: {ORANGE}{STRING}
@@ -1415,9 +1415,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Kompaninomo: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inaŭguro: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Kompanivaloro: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Nuna monstato: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Lastjara enspezo: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Kompanivaloro: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Nuna monstato: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Lastjara enspezo: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Rendimento: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Veturiloj: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1626,7 +1626,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Antaŭe forigu konstruaĵon
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Enloĝantoj: {ORANGE}{COMMA}{BLACK} Domoj: {ORANGE}{COMMA}
@@ -1659,7 +1659,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Montru informojn pri lokaj estroj
STR_2022_LOCAL_AUTHORITY :{WHITE}Lokaj estroj de {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Takso de transportkompanioj:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subvencioj
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Subvencioj haveblas por jenaj servoj:
STR_2027_FROM_TO :{ORANGE}{STRING} de {STRING} al {STRING}
@@ -1730,7 +1730,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...jam estas arbo
STR_2804_SITE_UNSUITABLE :{WHITE}...loko ne uzeblas
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Ne povas planti arbon ĉi tie...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...tro da afiŝoj
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Ne povas meti afiŝon ĉi tie...
STR_280A_SIGN :Afiŝo
@@ -1842,9 +1842,9 @@
STR_4004 :{COMPANY} je {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabitoko{P "" j} libera{P "" j}
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Ne eblas legi diskon
-STR_4007_GAME_SAVE_FAILED :{WHITE}Ludkonservado Fiaskis
+STR_4007_GAME_SAVE_FAILED :{WHITE}Ludkonservado Fiaskis{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Ne eblas forviŝi dosieron
-STR_4009_GAME_LOAD_FAILED :{WHITE}Ludŝarĝado Fiaskis
+STR_4009_GAME_LOAD_FAILED :{WHITE}Ludŝarĝado Fiaskis{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Listo da diskoj, dosierujoj kaj luddosieroj
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Nune elektita nomo por luddosiero
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Forviŝu la nun elektitan luddosieron
@@ -2095,7 +2095,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Ludanto {COMMA})
STR_7004_NEW_FACE :{BLACK}Nova Vizaĝo
STR_7005_COLOR_SCHEME :{BLACK}Kolorskemo
@@ -2107,7 +2107,7 @@
STR_700B_PRESIDENT_S_NAME :Nomo de la Manaĝanto
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Ne povas ŝanĝi kompaninomon...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Ne povas ŝanĝi manaĝantnomon...
-STR_700E_FINANCES :{WHITE}Financoj de {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}Financoj de {COMPANY} {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Elspezo/Enspezo
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Konstruado
@@ -2123,20 +2123,20 @@
STR_701B_SHIP_INCOME :{GOLD}Ŝipa Enspezo
STR_701C_LOAN_INTEREST :{GOLD}Rento pri Prunto
STR_701D_OTHER :{GOLD}Alia
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Entute:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Enspeza Grafiko
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Gajna Grafiko
STR_7026_BANK_BALANCE :{WHITE}Banka Balanco
STR_7027_LOAN :{WHITE}Prunto
-STR_MAX_LOAN :{WHITE}Maksimuma prunto: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Pruntu {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Repagu {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Maksimuma prunto: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Pruntu {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Repagu {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maksimuma permesata prunto estas {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Ne povas prunti pli da mono...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...ne estas repagebla prunto
@@ -2175,8 +2175,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Kompania rendimento (maksimumo=1000)
STR_7052_COMPANY_VALUES :{WHITE}Kompaniaj valoroj
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Kompaniara tabelo
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Transportkompanio en problemoj!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} forvendiĝos aŭ bankrotiĝos krom se ĝi pli bone faros!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Manaĝanto)
@@ -2214,7 +2214,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Monda Recesio!{}{}Financaj spertuloj timas ke malpliboniĝas treege! Ekonomio malboniĝadas!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recesio finiĝis!{}{}Komerca pliboniĝos donas konfidon al industrioj! Ekonomio pliboniĝas!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Ŝaltu inter granda kaj malgranda fenestro
-STR_7076_COMPANY_VALUE :{GOLD}Kompania valoro: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Kompania valoro: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Aĉetu 25%-an dividaĵon
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Vendu 25%-an dividaĵon
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Aĉetu 25%-an dividaĵon en ĉi tiu kompanio
@@ -2524,7 +2524,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Trajndeponejo
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Enloĝantoj festas . . .{}Unua trajno alvenas ĉe {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detaloj)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detaloj)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Trajno okupas la lokon
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2591,8 +2591,8 @@
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Prizorgo
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Ne povas krei relan veturilon...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Valoro: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Valoro: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Ŝarĝante / Deŝarĝante
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Trajno estu halta en deponejo
@@ -2667,8 +2667,8 @@
STR_TRAIN_START_NO_CATENARY :Mankas ĉi-trake supera elektro, do la trajno ne povas starti
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nova {STRING} nun haveblas!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nova {STRING} nun haveblas! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nova {STRING} nun haveblas! - {ENGINE}
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Vojveturilo okupas la lokon
@@ -2684,7 +2684,7 @@
STR_900E_MAX_SPEED :{BLACK}Maksimuma rapideco: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Ĉi-jara gajno: {LTBLUE}{CURRENCY} (lastjara: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Fidebleco: {LTBLUE}{COMMA}% {BLACK}Rompiĝoj post lasta prizorgo: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kapablo: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...devas esti haltigata en vojveturila deponejo
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Ne povas vendi vojveturilon...
@@ -2756,7 +2756,7 @@
STR_9813_MAX_SPEED :{BLACK}Maksimuma rapideco: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Ĉi-jara gajno: {LTBLUE}{CURRENCY} (lastjara: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Fidebleco: {LTBLUE}{COMMA}% {BLACK}Rompiĝoj post lasta prizorgo: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kapablo: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Ne povas haltigi/starti ŝipon...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Ne povas sendi ŝipon al deponejo...
@@ -2824,7 +2824,7 @@
STR_A00E_MAX_SPEED :{BLACK}Maksimuma rapideco: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Ĉi-jara gajno: {LTBLUE}{CURRENCY} (lastjara: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Fidebleco: {LTBLUE}{COMMA}% {BLACK}Rompiĝoj post lasta prizorgo: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Kreite: {LTBLUE}{NUM}{BLACK} Valoro: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Ne povas sendi aviadilon al hangaro...
STR_HEADING_FOR_HANGAR :{ORANGE}Irante al {STATION} Hangaro
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Irante al {STATION} Hangaro, {VELOCITY}
--- a/src/lang/estonian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/estonian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Väljaspool kaardi piire
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Kaardi äärele liiga lähedal
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Pole piisavalt raha - vajad {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Maapind peab olema tasane
STR_0008_WAITING :{BLACK}Ootel: {WHITE}{STRING}
@@ -595,7 +595,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Kohalik omavalitsus: {LTBLUE}{STRING}
STR_01A9_NONE :puudub
STR_01AA_NAME :{BLACK}Nimi
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1.
@@ -878,6 +878,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Raskusastme seaded
STR_02C7_CONFIG_PATCHES :Paranduste seaded
STR_NEWGRF_SETTINGS :Newgrf seaded
+STR_TRANSPARENCY_OPTIONS :Läbipaistvuse valikud
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Näidatavad linnanimed
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Näidatavad jaamanimed
@@ -905,7 +906,6 @@
STR_02DE_MAP_OF_WORLD :Maailmakaart
STR_EXTRA_VIEW_PORT :Lisa vaateaken
STR_SIGN_LIST :Siltide nimekiri
-STR_TRANSPARENCY_OPTIONS :Läbipaistvuse valikud
STR_02DF_TOWN_DIRECTORY :Linnade nimistu
STR_TOWN_POPULATION :{BLACK}Maailma rahvastik: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vaateaken {COMMA}
@@ -1203,6 +1203,9 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Kaardi kerimisrulliku kiirus: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Kasuta laadimisnäidikuid: {ORANGE}{STRING}
+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_MAX_TRAINS :{LTBLUE}Enim ronge mängija kohta: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Enim mootorsõidukeid mängija kohta: {ORANGE}{STRING}
@@ -1286,7 +1289,7 @@
STR_CHEATS :{WHITE}Petmine
STR_CHEATS_TIP :{BLACK}Märgistatud kastid näitavad et, kas sa oled varem seda pettust kasutanud
STR_CHEATS_WARNING :{BLACK}Hoiatus! Sa kavatsed oma konkurente reeta. Pea meeles, et sellisest häbist ei saa sa enam kunagi lahti.
-STR_CHEAT_MONEY :{LTBLUE}Suurenda raha hulka {CURRENCY64} võrra
+STR_CHEAT_MONEY :{LTBLUE}Suurenda raha hulka {CURRENCY} võrra
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Mängi, kui mängija: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Maagiline buldooser (eemaldamatute rajatiste lammutamine): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnelid võivad üksteist läbida: {ORANGE}{STRING}
@@ -1541,9 +1544,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Ettevõtte nimi: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Avamine: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Firmaväärtus: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Rahaline seis: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Eelmise aasta tulud: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Firmaväärtus: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Rahaline seis: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Eelmise aasta tulud: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Suutlikus: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Sõidukid: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1778,7 +1781,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Ehitis tuleb eelnevalt hävitada
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Rahvastik: {ORANGE}{COMMA}{BLACK} Ehitisi: {ORANGE}{COMMA}
@@ -1811,7 +1814,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Näita teavet kohaliku omavalitsuse kohta
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} kohalik omavalitsus
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Ettevõtete hinnangud:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Toetused
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Pakutavad toetused teenusepakkumise eest:
STR_2027_FROM_TO :{ORANGE}{STRING} kohast {STRING} kohta {STRING}
@@ -1882,7 +1885,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...siin on juba puu olemas
STR_2804_SITE_UNSUITABLE :{WHITE}...ebasobiv koht
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Siia ei saa puud istutada...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...liiga palju silte
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Siia ei saa silti paigaldada...
STR_280A_SIGN :Silt
@@ -1991,6 +1994,7 @@
STR_3805_COAST_OR_RIVERBANK :Kallas
STR_3806_SHIP_DEPOT :Laevaangaar
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...vette ei saa ehitada
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Kanali peab eelnevalt lammutama
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Salvesta mäng
@@ -2000,9 +2004,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabaiti{P "" i} vaba
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Ei suuda kettalt lugeda
-STR_4007_GAME_SAVE_FAILED :{WHITE}Mängu salvestamine ebaõnnestus
+STR_4007_GAME_SAVE_FAILED :{WHITE}Mängu salvestamine ebaõnnestus{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Faili ei saa kustutada
-STR_4009_GAME_LOAD_FAILED :{WHITE}Mängu laadimine ebaõnnestus
+STR_4009_GAME_LOAD_FAILED :{WHITE}Mängu laadimine ebaõnnestus{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Süsteemi viga: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Katkine salvestus - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvestus on tehtud uuemas versioonis
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Fail pole loetav
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Faili ei saanud kirjutada
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Nimekiri ketastest, kataloogidest ja salvestatud mängudest
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Mängu salvestuse nimi
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Kustuta valitud salvestus
@@ -2173,8 +2182,7 @@
STR_SV_STNAME_LOWER :Alumine {STRING}
STR_SV_STNAME_HELIPORT :{STRING} Kopteriväljak
STR_SV_STNAME_FOREST :{STRING} mets
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} Jaam #{NUM}
############ end of savegame specific region!
@@ -2254,7 +2262,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY}{BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY}{BLACK}{COMPANYNUM}
STR_7002_PLAYER : (mängija {COMMA})
STR_7004_NEW_FACE :{BLACK}Uus nägu
STR_7005_COLOR_SCHEME :{BLACK}Värvivalik
@@ -2266,7 +2274,7 @@
STR_700B_PRESIDENT_S_NAME :Presidendi nimi
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Ei saa ettevõtte nime muuta...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Ei saa presidendi nime muuta...
-STR_700E_FINANCES :{WHITE}{COMPANY} rahavoogude aruanne {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} rahavoogude aruanne {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Kulud/tulud
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Ehituskulud
@@ -2282,20 +2290,20 @@
STR_701B_SHIP_INCOME :{GOLD}Laevade tulud
STR_701C_LOAN_INTEREST :{GOLD}Laenuintress
STR_701D_OTHER :{GOLD}Kõik muu
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Kokku:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Tulugraafik
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Opereerimiskasumi graafik
STR_7026_BANK_BALANCE :{WHITE}Kontojääk
STR_7027_LOAN :{WHITE}Laen
-STR_MAX_LOAN :{WHITE}Suurim laen: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Laena {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Maksa tagasi {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Suurim laen: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Laena {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Maksa tagasi {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...suurim lubatud laen on {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Rohkem raha ei saa laenata...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...pole laenu, mida tagasi maksta
@@ -2334,8 +2342,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Ettevõtte tegevushinnang (suurim hinnang saab olla 1000)
STR_7052_COMPANY_VALUES :{WHITE}Firmaväärtus
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Ettevõtete edetabel
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Ettevõttel on probleeme!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}Ettevõte {COMPANY} müüakse maha ja kuulutatakse pankrot, kui tulemused peatselt ei parane!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(President)
@@ -2373,7 +2381,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Majanduslik tagasilöök!{}{}Finantseksperdid ennustavad suurt majanduslangust!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Madalseis on läbi!{}{}Suurem kauplemine julgustab majanduse tugevnemisega ettevõtteid!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Lülita aken suureks/väikseks
-STR_7076_COMPANY_VALUE :{GOLD}Firmaväärtus: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Firmaväärtus: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Osta 25% ettevõtte aktsiatest
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Müü 25% ettevõtte aktsiatest
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Osta 25% ettevõtte aktsiatest
@@ -2685,7 +2693,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}Linna {TOWN} rongidepoo
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Rahvas rõõmustab. . .{}{STATION} jaama saabus esimene rong!
-STR_8802_DETAILS :{WHITE}{STRING} (üksikasjad)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (üksikasjad)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Rong on ees
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2706,6 +2714,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Sõida läbi linna {TOWN} rongidepoo
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Hooldus linna {TOWN} rongidepoost läbisõidul
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Sõitmine (sõiduplaanita)
+STR_TIMETABLE_TRAVEL_FOR :Sõida {STRING}
+STR_TIMETABLE_STAY_FOR :ja oota {STRING}
+STR_TIMETABLE_DAYS :{COMMA} päev{P "" a}
+STR_TIMETABLE_TICKS :{COMMA} tiks{P "" u}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Suundub linna {TOWN} rongidepoosse
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Suundub linna {TOWN} rongidepoosse, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Hooldus linna {TOWN} raudteedepoos
@@ -2747,13 +2762,15 @@
STR_REFIT :{BLACK}Taasseadista
STR_REFIT_TIP :{BLACK}Vali, millist laadungit ümber seadistada selles järjestuses. Ümberseadistuse käsu eemaldamiseks hoia klõpsamise ajal all Control nuppu
STR_REFIT_ORDER :(Taasseadista {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Sõiduplaan
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Näita sõiduplaani
STR_8829_ORDERS :{WHITE}{VEHICLE} (Käsud)
STR_882A_END_OF_ORDERS :{SETX 10}- - Käskude Lõpp - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Hooldus
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Raudteesõidukit ei saa ehitada...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Ehitatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Ehitatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Veose ümberlaadimine
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Rong peab olema depoos peatatud
@@ -2803,6 +2820,10 @@
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_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
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Tühista hilinemisloendur, et sõiduk ei jääks hiljaks
STR_SERVICE_HINT :{BLACK}Jäta see käsk vahele, kui hooldust ei vajata
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Hind: {CURRENCY} Tühimass: {WEIGHT_S}{}Tippkiirus: {VELOCITY} Võimsus: {POWER}{}Käituskulud: {CURRENCY}/aastas{}Kandevõime: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Lagunes
@@ -2824,6 +2845,8 @@
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_CLEAR_TIME :{BLACK}Tühista aeg
+STR_RESET_LATENESS :{BLACK}Tühista hilinemisloendur
STR_TRAIN_STOPPING :{RED}Peatub
STR_TRAIN_STOPPING_VEL :{RED}Peatub, {VELOCITY}
@@ -2832,8 +2855,16 @@
STR_TRAIN_START_NO_CATENARY :Selle raja ahel puudub, rong ei saa sõitu alustada
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Uus {STRING} saadaval!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uus {STRING} saadaval! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uus {STRING} saadaval! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Sõidukile ei saa sõiduplaani anda...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Sõidukid saavad ainult peatustes oodata.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Sellel sõidukil pole ühtegi peatust.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuda aega
+STR_TIMETABLE_STATUS_ON_TIME :See sõiduk peab ajast kinni
+STR_TIMETABLE_STATUS_LATE :See sõiduk on {STRING} hiljaks jäämas
+STR_TIMETABLE_STATUS_EARLY :See sõiduk on {STRING} varajane
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Mootorsõiduk takistab teed
@@ -2849,7 +2880,7 @@
STR_900E_MAX_SPEED :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Selle aasta kasum: {LTBLUE}{CURRENCY} (eelmisel aastal: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Tehnoseisund: {LTBLUE}{COMMA}% {BLACK}Rikkeid eelmisest hooldusest: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Ehitatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Ehitatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kandevõime: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...peab garaaþis olema
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Ei saa veokit müüa...
@@ -2925,7 +2956,7 @@
STR_9813_MAX_SPEED :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Selle aasta kasum: {LTBLUE}{CURRENCY} (viimasel: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Tehnoseisund: {LTBLUE}{COMMA}% {BLACK}Rikkeid eelmisest hooldusest: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Ehitati: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Ehitati: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kandevõime: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Ei saa peatada/käivitada laeva...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Ei saa laeva paadikuuri saata...
@@ -2993,7 +3024,7 @@
STR_A00E_MAX_SPEED :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Selle aasta kasum: {LTBLUE}{CURRENCY} (eelmisel aastal: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Tehnoseisund: {LTBLUE}{COMMA}% {BLACK}Rikkeid eelmisest hooldusest: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Ehitusaasta: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Ehitusaasta: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Ei saa lennukit angaari saata...
STR_HEADING_FOR_HANGAR :{ORANGE}Suundub {STATION} Angaari
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Suundub {STATION} angaari, {VELOCITY}
@@ -3046,6 +3077,8 @@
STR_GO_TO_AIRPORT_HANGAR :Mine {STATION} angaari
SERVICE_AT_AIRPORT_HANGAR :Hooldus {STATION} angaaris
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Sõiduplaan)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Tsepeliini õnnetus {STATION}s!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Mootorsõiduk plahvatas kokkupõrkes 'UFO-ga'!
@@ -3361,6 +3394,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Vaheta läbipaistvust ehitistel nagu: jaamad, depood, vahepunktid ja elektriliinid
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Vaheta sildade läbipaistvust
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Vaheta läbipaistvust rajatistel, nagu: majakad, antennid ja võimalik, et tulevikus ka silmailu
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Vaheta laadimisnäidikute läbipaistvust
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Üksus {COMMA}
@@ -3398,4 +3439,7 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Selle aasta kasum: {GREEN}{CURRENCY} {BLACK}(eelmisel aastal: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Selle aasta kasum: {RED}{CURRENCY} {BLACK}(eelmisel aastal: {RED}{CURRENCY}{BLACK})
+STR_GROUP_NAME :{GROUP}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/finnish.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/finnish.txt Tue Jun 26 23:40:58 2007 +0000
@@ -3,13 +3,15 @@
##isocode fi_FI
##plural 0
+#
+
##id 0x0000
STR_NULL :
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Kartan reunan ulkopuolella.
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Liian lähellä kartan reunaa.
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Käteinen ei riitä - tarvitaan {CURRENCY}.
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Tarvitaan tasaista maata.
STR_0008_WAITING :{BLACK}Lähdössä: {WHITE}{STRING}
@@ -493,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Kunta: {LTBLUE}{STRING}
STR_01A9_NONE :Ei mitään
STR_01AA_NAME :{BLACK}Nimi
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1.
@@ -1180,7 +1182,7 @@
STR_CHEATS :{WHITE}Huijaukset
STR_CHEATS_TIP :{BLACK}Valintaruudut osoittavat, oletko käyttänyt huijausta aiemmin.
STR_CHEATS_WARNING :{BLACK}Varoitus! Olet juuri pettämässä kanssakilpailijoitasi. Pidä mielessä, että tällainen häväistys pidetään mielessä ikuisuuden ajan.
-STR_CHEAT_MONEY :{LTBLUE}Anna lisää rahaa: {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Anna lisää rahaa: {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Pelaa pelaajana: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Taikapuskutraktori (siirrä teollisuutta yms.): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnelit voivat mennä ristiin: {ORANGE}{STRING}
@@ -1391,6 +1393,27 @@
STR_NETWORK_LANG_ENGLISH :englanti
STR_NETWORK_LANG_GERMAN :saksa
STR_NETWORK_LANG_FRENCH :ranska
+STR_NETWORK_LANG_DANISH :tanska
+STR_NETWORK_LANG_DUTCH :hollanti
+STR_NETWORK_LANG_ESPERANTO :esperanto
+STR_NETWORK_LANG_FINNISH :suomi
+STR_NETWORK_LANG_HUNGARIAN :unkari
+STR_NETWORK_LANG_ICELANDIC :islanti
+STR_NETWORK_LANG_ITALIAN :italia
+STR_NETWORK_LANG_JAPANESE :japani
+STR_NETWORK_LANG_KOREAN :korea
+STR_NETWORK_LANG_LITHUANIAN :liettua
+STR_NETWORK_LANG_NORWEGIAN :norja
+STR_NETWORK_LANG_POLISH :puola
+STR_NETWORK_LANG_PORTUGUESE :portugali
+STR_NETWORK_LANG_ROMANIAN :romania
+STR_NETWORK_LANG_RUSSIAN :venäjä
+STR_NETWORK_LANG_SLOVAK :slovakia
+STR_NETWORK_LANG_SLOVENIAN :sloveeni
+STR_NETWORK_LANG_SPANISH :espanja
+STR_NETWORK_LANG_SWEDISH :ruotsi
+STR_NETWORK_LANG_TURKISH :turkki
+STR_NETWORK_LANG_UKRAINIAN :ukraina
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Moninpeliaula
@@ -1410,9 +1433,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Yhtiön nimi: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Perustettu: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Yhtiön arvo: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Nykyinen kate: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Viime vuoden tulot: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Yhtiön arvo: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Nykyinen kate: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Viime vuoden tulot: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Suorite: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Liikenneväl.: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1584,6 +1607,13 @@
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Rautatie esiopastimin
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Rautatie poistumisopastimin
STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Rautatie yhdistetyin opastimin
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Rautatie esisignaaleilla
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Rautatie poistumis-signaaleilla
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Rautatie yhdistelmäsignaaleilla
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Rautatie esi- ja poistumissignaaleilla
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Rautatie esi- ja yhdistelmäsignaaleilla
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Rautatie poistumis- ja yhdistelmäsignaaleilla
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Poista asema ensin
@@ -1591,22 +1621,39 @@
STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Tie pitää siirtää ensin.
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Tietyöt ovat käynnissä.
STR_1802_ROAD_CONSTRUCTION :{WHITE}Tien rakentaminen
+STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Raitiotien rakentaminen
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Valitse maantiesilta
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... yksisuuntaisella kadulla ei voi olla risteystä
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Tietä ei voi rakentaa.
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Tähän ei voi rakentaa raitiotietä.
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Tietä ei voi poistaa.
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Tästä ei voi poistaa raitiotietä.
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Autovarikon suunta
+STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Varikon suunta
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Autovarikkoa ei voi rakentaa.
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Tähän ei voi rakentaa varikkoa.
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Linja-autoasemaa ei voi rakentaa.
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Lastauslaituria ei voi rakentaa.
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Ei voi rakentaa asemaa.
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Ei voi rakentaa rahtiasemaa.
STR_180A_ROAD_CONSTRUCTION :Tien rakentaminen
+STR_180A_TRAMWAY_CONSTRUCTION :Raitiotien rakentaminen
STR_180B_BUILD_ROAD_SECTION :{BLACK}Rakenna tieosuus.
+STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Rakenna raitiotietä
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Rakenna autovarikko (ajoneuvojen rakentamista ja huoltoa varten)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Rakenna raitiotievarikko (vaunujen rakentamiseen ja korjaamiseen)
STR_180D_BUILD_BUS_STATION :{BLACK}Rakenna linja-autoasema
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Rakenna lastauslaituri
+STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Rakenna asema
+STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Rakenna rahtiasema
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Rakenna maantiesilta
+STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Rakenna raitiotiesilta
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Rakenna maantietunneli
+STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Rakenna raitiotietunneli
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Tien rakentaminen/siirtäminen päälle/pois
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Vaihda rakentamisen ja purkamisen välillä
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Valitse autovarikon suunta.
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Valitse varikon suunta
STR_1814_ROAD :Tie
STR_1815_ROAD_WITH_STREETLIGHTS :Tie katuvaloilla
STR_1816_TREE_LINED_ROAD :Puilla reunustettu tie
@@ -1614,6 +1661,8 @@
STR_1818_ROAD_RAIL_LEVEL_CROSSING :Tasoristeys
STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Linja-autoasemaa ei voida poistaa...
STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Kuorma-auto asemaa ei voida poistaa...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Ei voi poistaa asemaa.
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Ei voi poistaa rahtiasemaa.
##id 0x2000
STR_2000_TOWNS :{WHITE}Kaupungit
@@ -1621,7 +1670,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Rakennus täytyy purkaa ensin.
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Asukasluku: {ORANGE}{COMMA}{BLACK} Taloja: {ORANGE}{COMMA}
@@ -1654,7 +1703,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Näytä tietoja paikallisviranomaisista.
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN}: viranomaiset
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Kuljetusyhtiön arvioinnit:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Tuet
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Tarjotut tuet:
STR_2027_FROM_TO :{ORANGE}{STRING} välille {STRING}-{STRING}
@@ -1725,7 +1774,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...tässä on jo puu.
STR_2804_SITE_UNSUITABLE :{WHITE}...huono paikka.
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Puuta ei voi istuttaa.
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...liian monta kylttiä.
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Kylttiä ei voi sijoittaa.
STR_280A_SIGN :Kyltti
@@ -1778,8 +1827,12 @@
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} ottaa nyt vastaan {STRING} ja {STRING}.
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Linja-autoaseman suunta
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Lastauslaiturin suunta
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Aseman suunta
+STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Rahtiaseman suunta
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Linja-autoasema pitää purkaa ensin.
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Lastauslaituri pitää purkaa ensin.
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Asema täytyy purkaa ensin
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Rahtiasema täytyy purkaa ensin
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} asema{P "" a}
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Ei mitään -
@@ -1791,6 +1844,8 @@
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Valitse rautatieaseman pituus.
STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Valitse linja-autoaseman suunta.
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Valitse lastauslaiturin suunta.
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Valitse aseman suunta
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Valitse rahtiaseman suunta
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Keskitä näkymä aseman sijaintiin.
STR_3054_SHOW_STATION_RATINGS :{BLACK}Näytä aseman arviot.
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Muuta aseman nimi.
@@ -1828,6 +1883,7 @@
STR_3805_COAST_OR_RIVERBANK :Rannikko tai joenpenkka
STR_3806_SHIP_DEPOT :Telakka
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...veteen ei voi rakentaa.
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Kanava täytyy purkaa ensin
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Tallenna peli
@@ -1837,9 +1893,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megatavu{P "" a} vapaana
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Asemaa ei voi lukea.
-STR_4007_GAME_SAVE_FAILED :{WHITE}Tallennus epäonnistui.
+STR_4007_GAME_SAVE_FAILED :{WHITE}Tallennus epäonnistui.{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Tiedostoa ei voi poistaa.
-STR_4009_GAME_LOAD_FAILED :{WHITE}Lataus epäonnistui.
+STR_4009_GAME_LOAD_FAILED :{WHITE}Lataus epäonnistui.{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Lista asemista, hakemistoista ja tallennetuista peleistä.
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Valittu nimi pelitallenteelle.
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Poista valittu pelitallenne.
@@ -2011,6 +2067,8 @@
STR_SV_STNAME_HELIPORT :{STRING}, helikopterikenttä
STR_SV_STNAME_FOREST :{STRING}, metsä
+
+
############ end of savegame specific region!
##id 0x6800
@@ -2089,7 +2147,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Pelaaja {COMMA})
STR_7004_NEW_FACE :{BLACK}Uudet kasvot
STR_7005_COLOR_SCHEME :{BLACK}Väriteema
@@ -2101,7 +2159,7 @@
STR_700B_PRESIDENT_S_NAME :Pääjohtajan nimi
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Yhtiön nimeä ei voi muuttaa...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Pääjohtajan nimeä ei voi muuttaa...
-STR_700E_FINANCES :{WHITE}Talous, {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}Talous, {COMPANY} {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Menot/tulot
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Rakentaminen
@@ -2117,20 +2175,20 @@
STR_701B_SHIP_INCOME :{GOLD}Laivojen tulot
STR_701C_LOAN_INTEREST :{GOLD}Lainan korko
STR_701D_OTHER :{GOLD}Muuta
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Yhteensä:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Tulokuvaaja
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Käyttökatekuvaaja
STR_7026_BANK_BALANCE :{WHITE}Tilin saldo
STR_7027_LOAN :{WHITE}Laina
-STR_MAX_LOAN :{WHITE}Laina enimmillään: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Lainaa {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Lyhennä lainaa {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Laina enimmillään: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Lainaa {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Lyhennä lainaa {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...suurin sallittu lainan suuruus on {CURRENCY}.
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Lisälainan otto ei onnistu...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...ei lainaa maksettavana.
@@ -2169,8 +2227,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Yhtiön suoritearvio (enimmäisarvio=1000)
STR_7052_COMPANY_VALUES :{WHITE}Yhtiöiden arvot
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Yhtiökilpataulukko
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Kuljetusyhtiö vaikeuksissa!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} myydään tai julistetaan konkurssiin, ellei suorituskyky lisäänny pian!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(pääjohtaja)
@@ -2208,7 +2266,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Maailmanlaajuinen laskukausi!{}{}Rahoitusasiantuntijat pelkäävät pahinta talouden laskiessa!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Laskukausi ohi!{}{}Kaupankäynnin käänne parempaan lisää luottamusta teollisuuteen talouden vahvistuessa!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Suuri/pieni ikkunan koko
-STR_7076_COMPANY_VALUE :{GOLD}Yhtiön arvo: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Yhtiön arvo: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Osta 25{NBSP}%:n osuus yhtiöstä
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Myy 25{NBSP}%:n osuus yhtiöstä
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Osta 25{NBSP}%:n osuus tästä yhtiöstä
@@ -2239,6 +2297,8 @@
STR_LIVERY_HELICOPTER :Helikopteri
STR_LIVERY_SMALL_PLANE :Pieni lentokone
STR_LIVERY_LARGE_PLANE :Suuri lentokone
+STR_LIVERY_PASSENGER_TRAM :Matkustajavaunu
+STR_LIVERY_FREIGHT_TRAM :Rahtivaunu
STR_LIVERY_GENERAL_TIP :{BLACK}Näytä yleiset väriteemat
STR_LIVERY_TRAIN_TIP :{BLACK}Näytä junan väriteemat
@@ -2518,7 +2578,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN}: veturitalli
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Kaupungilaiset juhlivat . . .{}Ensimmäinen juna saapuu asemalle ({STATION})!
-STR_8802_DETAILS :{WHITE}{STRING} (yksityiskohdat)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (yksityiskohdat)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Juna on tiellä.
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2539,6 +2599,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Mene pysähtymättä veturitalliin ({TOWN})
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Huolto pysähtymättä veturitallilla ({TOWN})
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Kiertävä (ei aikataulua)
+STR_TIMETABLE_TRAVEL_FOR :Kulje kohteeseen {STRING}
+STR_TIMETABLE_STAY_FOR :ja odota {STRING}
+STR_TIMETABLE_DAYS :{COMMA} päivä{P "" ä}
+STR_TIMETABLE_TICKS :{COMMA} tunti{P "" a}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Suuntana veturitalli ({TOWN})
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Suuntana veturitalli ({TOWN}), {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Huolto {TOWN} Varikko
@@ -2580,13 +2647,15 @@
STR_REFIT :{BLACK}Sovita
STR_REFIT_TIP :{BLACK}Valitse rahdin tyyppi jolla tämä käsky uudistetaan. CTRL+klikkaus poistaa uudistuksen
STR_REFIT_ORDER :(Sovita {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Aikataulu
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Näytä aikataulu
STR_8829_ORDERS :{WHITE}{VEHICLE} (aikataulu)
STR_882A_END_OF_ORDERS :{SETX 10}- - aikataulun loppu - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Huolto
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Yksikköä ei voi rakentaa...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Arvo: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Arvo: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Lastataan/puretaan
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Juna täytyy pysäyttää veturitallin sisällä
@@ -2596,6 +2665,9 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Uutta pysähdystä ei voi lisätä...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Pysähdystä ei voi poistaa...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Pysähdystä ei voi muokata...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Tätä riviä ei voi siirtää.
+STR_CAN_T_SKIP_ORDER :{WHITE}Tätä riviä ei voi ohittaa.
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}Tähän riviin ei voi siirtyä.
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Liikennevälinettä ei voi poistaa...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}Moottorivaunun takaosa seuraa aina etuosaansa
STR_8838_N_A :-{SKIP}
@@ -2627,11 +2699,16 @@
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Näytä kunkin ajoneuvon kapasiteetti.
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Näytä junan kokonaiskapasiteetti, eritelty rahtityypin mukaan.
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Aikataulu - napsauta määräystä korostaaksesi.
+STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Ohita nykyinen pysähdys ja aloita seuraava.
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Poista korostettu määräys.
STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Tee korostetusta pysäkistä pysähtymätön.
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Lisää uusi pysähdys ennen valittua, tai lisää listan viimeiseksi.
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Aseta korostettu pysähdys pakottamaan ajoneuvon odottamaan täyttä lastausta.
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Aseta korostettu pysähdys pakottamaan ajoneuvo odottamaan purkua.
+STR_TIMETABLE_TOOLTIP :{BLACK}Aikataulu - valitse rivi
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Aseta kuinka kauan käskyn tulisi kestää
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Nollaa tämän rivin aika
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nollaa myöhästymislaskuri, jotta vaunu olisi taas aikataulussa
STR_SERVICE_HINT :{BLACK}Ohita tämä määräys, ellei palvelua tarvita.
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Kulu: {CURRENCY} Paino: {WEIGHT_S}{}Nopeus: {VELOCITY} Teho: {POWER}{}Käyttökustannukset: {CURRENCY}/vuosi{}Kapasiteetti: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Rikki
@@ -2653,6 +2730,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Juna(vaunu)n tyyppiä ei voi uudelleennimetä...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Pakottaa tyhjentämään rahdin valitulla pysäkillä
STR_886F_TRANSFER :{BLACK}Siirrä
+STR_CLEAR_TIME :{BLACK}Nollaa aika
+STR_RESET_LATENESS :{BLACK}Nollaa myöhästymislaskuri
STR_TRAIN_STOPPING :{RED}Pysäytetään
STR_TRAIN_STOPPING_VEL :{RED}Pysäytetään, {VELOCITY}
@@ -2661,8 +2740,16 @@
STR_TRAIN_START_NO_CATENARY :Radasta puuttuu "catenary"; junaa ei voi käynnistää
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Uusi {STRING} on nyt saatavilla!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uusi {STRING} on nyt saatavilla! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uusi {STRING} on nyt saatavilla! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Ei voi asettaa aikataulua.
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vain asemalla voi odottaa.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Tämä ajoneuvo ei pysähdy tällä asemalla.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuta aikaa
+STR_TIMETABLE_STATUS_ON_TIME :Ajoneuvo on aikataulussa
+STR_TIMETABLE_STATUS_LATE :Ajoneuvo on {STRING} myöhässä
+STR_TIMETABLE_STATUS_EARLY :Ajoneuvo on {STRING} etuajassa
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Ajoneuvo tiellä.
@@ -2678,7 +2765,7 @@
STR_900E_MAX_SPEED :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Tuottoa tänä vuonna: {LTBLUE}{CURRENCY} (viime vuonna: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Toimintavarmuus: {LTBLUE}{COMMA}% {BLACK}Hajoamisia viime huollon jälkeen: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...sen pitää olla pysähtyneenä huoltoasemalle.
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Ajoneuvoa ei voi myydä...
@@ -2705,12 +2792,16 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Ajoneuvon valintalista - napsauta ajoneuvoa saadaksesi tietoja.
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Rakenna valittu ajoneuvo.
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Kulu: {CURRENCY}{}Nopeus: {VELOCITY}{}Käyttökustannukset: {CURRENCY}/vuosi{}Kapasiteetti: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Nimeä ajoneuvo
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Ajoneuvoa ei voi nimetä...
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Nimeä ajoneuvo
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Kaupunkilaiset juhlivat . . .{}Ensimmäinen linja-auto saapuu asemalle {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Kaupunkilaiset juhlivat . . .{}Ensimmäinen kuorma-auto saapuu asemalle {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Kaupunkilaiset juhlivat . . .{}Ensimmäinen raitiovaunu saapuu asemalle {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Kaupunkilaiset juhlivat . . .{}Ensimmäinen rahtiraitiovaunu saapuu asemalle {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Ajoneuvokolari!{}Kuljettaja kuolee junaan törmäyksen jälkeisessä tulipallossa
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Ajoneuvokolari!{}{COMMA} kuolee junaan törmäyksen jälkeisessä tulipallossa
STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Ajoneuvoa ei voi pakottaa kääntymään ympäri...
@@ -2750,7 +2841,7 @@
STR_9813_MAX_SPEED :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Tuottoa tänä vuonna: {LTBLUE}{CURRENCY} (viime vuonna: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Toimintavarmuus: {LTBLUE}{COMMA}% {BLACK}Hajoamisia viime huollon jälkeen: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Laivaa ei voi pysäyttää/laittaa liikkeelle...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Laivaa ei voi lähettää telakalle...
@@ -2818,7 +2909,7 @@
STR_A00E_MAX_SPEED :{BLACK}Huippunopeus: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY} (viime vuonna: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Luotettavuus: {LTBLUE}{COMMA}% {BLACK}Hajoamisia viime huollon jälkeen: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Lentokonetta ei voi lähettää lentokonehalliin...
STR_HEADING_FOR_HANGAR :{ORANGE}Suuntana lentokonehalli, {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Suuntana lentokonehalli, {STATION}, {VELOCITY}
@@ -2871,6 +2962,8 @@
STR_GO_TO_AIRPORT_HANGAR :Aseta kohteeksi lentokonehalli, {STATION}
SERVICE_AT_AIRPORT_HANGAR :Huolto, kohteena lentokonehalli, {STATION}
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Aikataulu)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}{STATION}: Ilmalaivaonnettomuus!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Ajoneuvo tuhoitui törmäyksessä UFO:n kanssa!
@@ -2995,6 +3088,7 @@
### depot strings
STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Olet myymässä kaikki varikon ajoneuvot. Oletko varma?
+STR_DEPOT_WRONG_DEPOT_TYPE :Väärä varikkotyyppi
STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}Myy kaikki varikolla olevat junat
STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}Myy kaikki varikolla olevat ajoneuvot
@@ -3185,3 +3279,42 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Läpinäkyvät asemat, varikot, rastit ja sähkölinjat
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Läpinäkyvät sillat
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Läpinäkyvät rakenteet kuten majakat ja antennit
+
+
+##### Mass Order
+STR_GROUP_NAME_FORMAT :Ryhmä {COMMA}
+STR_GROUP_TINY_NAME :{TINYFONT}{GROUP}
+STR_GROUP_ALL_TRAINS :Kaikki junat
+STR_GROUP_ALL_ROADS :Kaikki autot
+STR_GROUP_ALL_SHIPS :Kaikki laivat
+STR_GROUP_ALL_AIRCRAFTS :Kaikki lentoalukset
+STR_GROUP_TINY_NUM :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE :Lisää jaettuja ajoneuvoja
+STR_GROUP_REMOVE_ALL_VEHICLES :Poista kaikki ajoneuvot
+
+STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} Juna{P "" t}
+STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} Auto{P "" t}
+STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} Laiva{P "" t}
+STR_GROUP_AIRCRAFTS_CAPTION :{WHITE}{GROUP} - {COMMA} {P Lentoalus Lentoalukset}
+STR_GROUP_RENAME_CAPTION :{BLACK}Nimeä ryhmä
+STR_GROUP_REPLACE_CAPTION :{WHITE}Korvaa ryhmän "{GROUP}" ajoneuvot
+
+STR_GROUP_CAN_T_CREATE :{WHITE}Ei voi luoda ryhmää.
+STR_GROUP_CAN_T_DELETE :{WHITE}Ryhmää ei voi poistaa.
+STR_GROUP_CAN_T_RENAME :{WHITE}Ryhmää ei voi nimetä.
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Ryhmän kaikkia ajoneuvoja ei voi poistaa.
+STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Ei voi lisätä ajoneuvoa ryhmään.
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Ei voi lisätä jaettuja ajoneuvoja ryhmään.
+
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Ryhmät - Valitse ryhmä
+STR_GROUP_CREATE_TIP :{BLACK}Luo ryhmä
+STR_GROUP_DELETE_TIP :{BLACK}Poista valittu ryhmä
+STR_GROUP_RENAME_TIP :{BLACK}Nimeä valittu ryhmä
+STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Poista ryhmä automaattisesti korvattavien joukosta
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Tulos tänä vuonna: {GREEN}{CURRENCY} {BLACK}(viime vuonna: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Tulos tänä vuonna: {RED}{CURRENCY} {BLACK}(viime vuonna: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Tulos tänä vuonna: {GREEN}{CURRENCY} {BLACK}(viime vuonna: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Tulos tänä vuonna: {RED}{CURRENCY} {BLACK}(viime vuonna: {RED}{CURRENCY}{BLACK})
+
+########
--- a/src/lang/french.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/french.txt Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Hors limites
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Trop près des bords de la carte
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Fonds insuffisants{}Somme de {CURRENCY} requise
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Terrain plat requis
STR_0008_WAITING :{BLACK}En attente: {WHITE}{STRING}
@@ -496,7 +496,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Municipalité: {LTBLUE}{STRING}
STR_01A9_NONE :Aucun
STR_01AA_NAME :{BLACK}Nom
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1er
@@ -779,6 +779,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Niveau de Difficulté
STR_02C7_CONFIG_PATCHES :Configuration Avancée
STR_NEWGRF_SETTINGS :Paramètres Newgrf
+STR_TRANSPARENCY_OPTIONS :Options de transparence
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Afficher le nom des villes
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Afficher le nom des stations
@@ -806,7 +807,6 @@
STR_02DE_MAP_OF_WORLD :Carte du monde
STR_EXTRA_VIEW_PORT :Vue supplémentaire
STR_SIGN_LIST :Liste des panneaux
-STR_TRANSPARENCY_OPTIONS :Options de transparence
STR_02DF_TOWN_DIRECTORY :Annuaire des villes
STR_TOWN_POPULATION :{BLACK}Population mondiale : {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vue {COMMA}
@@ -1104,6 +1104,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Vitesse de défilement avec molette: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Utiliser les indicateurs de chargement: {ORANGE}{STRING}
+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}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Rail normal
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Rail électrifié
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Premier disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Dernier disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Le plus utilisé
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Nombre de trains max. par joueur: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Nombre de véhicules routiers max. par joueur: {ORANGE}{STRING}
@@ -1187,7 +1198,7 @@
STR_CHEATS :{WHITE}Triches
STR_CHEATS_TIP :{BLACK}Les cases à cocher indiquent que vous avez déjà utilisé cette triche auparavant
STR_CHEATS_WARNING :{BLACK}Attention ! Vous êtes sur le point de trahir vos adversaires. Gardez en tête qu'une telle honte sera gardée en mémoire pour l'éternité.
-STR_CHEAT_MONEY :{LTBLUE}Augmenter l'argent de {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Augmenter l'argent de {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Jouer en tant que joueur n°: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer magique (enlèvement industries et objets fixes): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Les tunnels peuvent se croiser: {ORANGE}{STRING}
@@ -1442,9 +1453,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Nom de la compagnie : {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguration : {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Valeur de la compagnie : {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Argent courant : {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Revenus de l'année dernière : {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Valeur de la compagnie : {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Argent courant : {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Revenus de l'année dernière : {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Performance : {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Véhicules : {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1679,7 +1690,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}L'édifice doit d'abord être démolit
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Population: {ORANGE}{COMMA}{BLACK} Maisons: {ORANGE}{COMMA}
@@ -1712,7 +1723,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Afficher des informations sur la municipalité
STR_2022_LOCAL_AUTHORITY :{WHITE}Municipalité de {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Qualité de service des compagnies:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subventions
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Offres de subvention pour le transport de:
STR_2027_FROM_TO :{ORANGE}{STRING} de {STRING} à {STRING}
@@ -1783,7 +1794,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...il y a déjà des arbres
STR_2804_SITE_UNSUITABLE :{WHITE}...l'endroit ne convient pas
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Plantation impossible...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...trop de panneaux
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Place du panneau impossible...
STR_280A_SIGN :Panneau
@@ -1892,6 +1903,7 @@
STR_3805_COAST_OR_RIVERBANK :Rivage ou berge
STR_3806_SHIP_DEPOT :Dépôt naval
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Impossible de construire sur l'eau
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Vous devez d'abord détruire le canal
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Sauvegarder la partie
@@ -1901,9 +1913,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} Mo libre{P "" s}
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Impossible d'accéder au disque
-STR_4007_GAME_SAVE_FAILED :{WHITE}La sauvegarde à échoué
+STR_4007_GAME_SAVE_FAILED :{WHITE}La sauvegarde à échoué{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Impossible de supprimer le fichier
-STR_4009_GAME_LOAD_FAILED :{WHITE}Le chargement à échoué
+STR_4009_GAME_LOAD_FAILED :{WHITE}Le chargement à échoué{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erreur interne: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Sauvegarde corrompue - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Sauvegarde modifiée avec une version plus récente
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Fichier illisibble
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Fichier non modifiable
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Liste des disques, répertoires, et fichiers de sauvegarde
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Nom sélectionné pour la sauvegarde
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Supprime la sauvegarde sélectionnée
@@ -2074,8 +2091,7 @@
STR_SV_STNAME_LOWER :Bas {STRING}
STR_SV_STNAME_HELIPORT :{STRING} Héliport
STR_SV_STNAME_FOREST :{STRING} Forêt
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} Station #{NUM}
############ end of savegame specific region!
@@ -2155,7 +2171,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Joueur {COMMA})
STR_7004_NEW_FACE :{BLACK}Nouveau visage
STR_7005_COLOR_SCHEME :{BLACK}Couleur
@@ -2167,7 +2183,7 @@
STR_700B_PRESIDENT_S_NAME :Nom du P.D.G.
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Impossible de changer le nom de compagnie...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Impossible de changer le nom du P.D.G. ...
-STR_700E_FINANCES :{WHITE}Finances: {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}Finances: {COMPANY} {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Dépenses/Revenus
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Construction
@@ -2183,20 +2199,20 @@
STR_701B_SHIP_INCOME :{GOLD}Revenu naval
STR_701C_LOAN_INTEREST :{GOLD}Intérêts du prêt
STR_701D_OTHER :{GOLD}Autres
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Total:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Graphique du Revenu
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Graphique du profit d'opération
STR_7026_BANK_BALANCE :{WHITE}Equilibre bancaire
STR_7027_LOAN :{WHITE}Prêt
-STR_MAX_LOAN :{WHITE}Emprunt maximum : {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Emprunter {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Rembourser {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Emprunt maximum : {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Emprunter {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Rembourser {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...le prêt maximum est de {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Impossible d'emprunter plus...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...Prêt déjà remboursé
@@ -2235,8 +2251,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Historique de performance (performance max=1000)
STR_7052_COMPANY_VALUES :{WHITE}Valeur de la compagnie
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Classement des compagnies
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}La compagnie de transport à des ennuis!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} va être en banqueroute si ses performances ne s'améliorent pas!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Président)
@@ -2274,7 +2290,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Récession mondiale!{}{}Les experts financiers craignent le pire!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Fin de la récession!{}{}La reprise redonne confiance aux industries!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Bascule entre une grande/petite fenêtre
-STR_7076_COMPANY_VALUE :{GOLD}Valeur de la compagnie : {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Valeur de la compagnie : {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Acheter 25% de la compagnie
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Vendre 25% de la compagnie
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Acheter 25% de la compagnie
@@ -2586,7 +2602,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Dépôt ferroviaire
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Les habitants célèbrent{}l'arrivée du premier train à {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Détails)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Détails)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Train présent
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2607,6 +2623,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Aller sans s'arrêter au dépôt de {TOWN}
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Aller faire l'entretien sans s'arrêter au dépôt de {TOWN}
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Voyager (sans horaires)
+STR_TIMETABLE_TRAVEL_FOR :Voyager pendant {STRING}
+STR_TIMETABLE_STAY_FOR :et rester pendant {STRING}
+STR_TIMETABLE_DAYS :{COMMA} jour{P "" s}
+STR_TIMETABLE_TICKS :{COMMA} tick{P "" s}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}En route pour le dépôt de {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}En route pour le dépôt de {TOWN}, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Entretien au dépôt de {TOWN}
@@ -2648,13 +2671,15 @@
STR_REFIT :{BLACK}Réaménager
STR_REFIT_TIP :{BLACK}Choisir pour quelle cargaison réaménager pour cet ordre. Ctrl-clic pour retirer l'instruction de réaménagement
STR_REFIT_ORDER :(Réaménager pour {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Horaire
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Basculer vers la vue horaire
STR_8829_ORDERS :{WHITE}{VEHICLE} (Ordres)
STR_882A_END_OF_ORDERS :{SETX 10}- - Fin des ordres - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Entretien
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Impossible de construire le véhicule ferroviaire...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construit en: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Valeur: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construit en: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Valeur: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Chargement/déchargement
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Le train doit être stoppé dans un dépôt
@@ -2704,6 +2729,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Insérer un nouvel ordre
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Forcer le véhicule à attendre un chargement complet pour l'ordre sélectionné
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Forcer le véhicule à attendre un déchargement complet pour l'ordre sélectionné
+STR_TIMETABLE_TOOLTIP :{BLACK}Horaire - cliquer sur un ordre pour le séléctionner.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modifier la durée de l'ordre séléctionné
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Annuler la durée de l'ordre séléctionné
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Remet à zéro le compteur de retard, le véhicule sera donc à l'heure
STR_SERVICE_HINT :{BLACK}Sauter cet ordre tant qu'aucun entretien n'est requis
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Prix: {CURRENCY} Poids: {WEIGHT_S}{}Vitesse: {VELOCITY} Puissance: {POWER}{}Coût d'entretien: {CURRENCY}/an{}Capacité: {CARGO}
STR_885C_BROKEN_DOWN :{RED}En panne
@@ -2725,6 +2754,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Impossible de renommer le type de train...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Forcer le véhicule à vider sa cargaison pour l'ordre sélectionné
STR_886F_TRANSFER :{BLACK}Transfert
+STR_CLEAR_TIME :{BLACK}Annuler durée
+STR_RESET_LATENESS :{BLACK}RAZ compteur de retard
STR_TRAIN_STOPPING :{RED}Ralentit
STR_TRAIN_STOPPING_VEL :{RED}Ralentit, {VELOCITY}
@@ -2733,8 +2764,20 @@
STR_TRAIN_START_NO_CATENARY :Cette voie n'a pas de caténaire, le train ne peut pas démarrer
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nouv{G eau el elle} {STRING} disponible!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nouv{G eau el elle} {STRING} disponible! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nouv{G eau el elle} {STRING} disponible! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossible d'affecter un horaire au véhicule...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Les véhicules ne peuvent attendre qu'aux stations.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Ce véhicule ne s'arrête pas à cette station.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Modifier durée
+STR_TIMETABLE_STATUS_ON_TIME :Ce véhicule est à l'heure
+STR_TIMETABLE_STATUS_LATE :Ce véhicule est en retard de {STRING}
+STR_TIMETABLE_STATUS_EARLY :Ce véhicule est en avance de {STRING}
+STR_TIMETABLE_TOTAL_TIME :Cet horaire prendra {STRING} pour s'achever
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Cet horaire prendra au moins {STRING} pour s'achever (horaire incomplet)
+STR_TIMETABLE_AUTOFILL :{BLACK}Autoremplir
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Remplit l'horaire automatiquement avec les valeurs du premier trajet
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Véhicule Routier présent
@@ -2750,7 +2793,7 @@
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_9010_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilité: {LTBLUE}{COMMA}% {BLACK}Pannes depuis le dernier entretien: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construit en: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construit en: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Capacité: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...doit être à l'arrêt dans un dépôt routier
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Impossible de vendre le véhicule...
@@ -2826,7 +2869,7 @@
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_9815_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilité: {LTBLUE}{COMMA}% {BLACK}Pannes depuis le dernier entretien: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacité: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Impossible d'arrêter/démarrer le navire...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Impossible d'envoyer le navire au dépôt...
@@ -2894,7 +2937,7 @@
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_A010_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilité: {LTBLUE}{COMMA}% {BLACK}Pannes depuis le dernier service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valeur: {LTBLUE}{CURRENCY}
+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...
STR_HEADING_FOR_HANGAR :{ORANGE}En route pour le hangar de {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}En route pour le hangar de {STATION}, {VELOCITY}
@@ -2947,6 +2990,8 @@
STR_GO_TO_AIRPORT_HANGAR :Aller au hangar {STATION}
SERVICE_AT_AIRPORT_HANGAR :Entretien au hangar {STATION}
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Horaire)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Désastre impliquant un Zeppelin à {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Un véhicule routier est détruit dans une collision avec un 'OVNI'!
@@ -3262,6 +3307,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Transparence des éléments constructibles tels que stations, dépôts, points de contrôle et caténaire
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Transparence des ponts
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Transparence des structures telles que phares et antennes
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Basculer la transparence pour les indicateurs de chargement
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Groupe {COMMA}
@@ -3299,4 +3352,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profit cette année: {GREEN}{CURRENCY} {BLACK}(an dernier: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profit cette année: {RED}{CURRENCY} {BLACK}(an dernier: {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/galician.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/galician.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Fora do borde do mapa
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Demasiado cerca do borde do mapa
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Diñeiro insuficiente - necesitas {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Necesitas terreo chan
STR_0008_WAITING :{BLACK}Esperando: {WHITE}{STRING}
@@ -478,7 +478,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Autoridade local: {LTBLUE}{STRING}
STR_01A9_NONE :Ningún
STR_01AA_NAME :{BLACK}Nome
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1º
@@ -1110,7 +1110,7 @@
STR_CHEATS :{WHITE}Trampas
STR_CHEATS_TIP :{BLACK}As caixas de confirmación indican se usaches esta trampa antes
STR_CHEATS_WARNING :{BLACK}¡Advertencia! Estás a piques de traizoa-los teus oponentes. Ten en conta que unha desgracia coma esta se lembrará eternamente.
-STR_CHEAT_MONEY :{LTBLUE}Incrementa-lo diñeiro en {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Incrementa-lo diñeiro en {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Xogar coma xogador: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Escavadora máxica(Elimina industrias, non eliminables): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Os tuneis poden cruzarse entre eles: {ORANGE}{STRING}
@@ -1334,9 +1334,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Nome da compañía: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguración: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Valor da compañía: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Balance actual: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Ingresos do ano pasado: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Valor da compañía: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Balance actual: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Ingresos do ano pasado: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Rendemento: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Vehículos: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1535,7 +1535,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Debes demole-lo edificio primeiro
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Poboación: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA}
@@ -1568,7 +1568,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Mostra-la información sobre a autoridade local
STR_2022_LOCAL_AUTHORITY :{WHITE}Autoridade local de {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Puntuacións das compañías de transporte:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subsidios
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Sibsidios en oferta para sevicios que transporten:
STR_2027_FROM_TO :{ORANGE}{STRING} dende {STRING} ata {STRING}
@@ -1639,7 +1639,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...Xa hai unha árbore aí
STR_2804_SITE_UNSUITABLE :{WHITE}...emprazamento inadecuado
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Non se pode plantar unha árbore aí...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...demasiados sinais
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Non se pode situa-lo sinal aí...
STR_280A_SIGN :Sinal
@@ -1751,9 +1751,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabytes libres
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}No se pode lee-la unidade
-STR_4007_GAME_SAVE_FAILED :{WHITE}Grabación da partida fallida
+STR_4007_GAME_SAVE_FAILED :{WHITE}Grabación da partida fallida{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Non se pode borra-lo arquivo
-STR_4009_GAME_LOAD_FAILED :{WHITE}Carga da partida fallida
+STR_4009_GAME_LOAD_FAILED :{WHITE}Carga da partida fallida{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Lista de unidades, directorios e arquivos de partida
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Nome seleccionado actualmente para o arquivo
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Borra-lo arquivo que está seleccionado
@@ -2002,7 +2002,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Xogador {COMMA})
STR_7004_NEW_FACE :{BLACK}Nova Cara
STR_7005_COLOR_SCHEME :{BLACK}Esquema de Cor
@@ -2014,7 +2014,7 @@
STR_700B_PRESIDENT_S_NAME :Nome Do Presidente
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Non se pode cambia-lo nome da compañía...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Non se pode cambia-lo nome do presidente...
-STR_700E_FINANCES :{WHITE}{COMPANY} Finanzas {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Finanzas {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Gastos/Ingresos
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Construccción
@@ -2030,20 +2030,20 @@
STR_701B_SHIP_INCOME :{GOLD}Ingresos dos Barcos
STR_701C_LOAN_INTEREST :{GOLD}Interese do Préstamo
STR_701D_OTHER :{GOLD}Outros
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Total:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Gráfico de Ingresos
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Gráfica de Beneficios Operativos
STR_7026_BANK_BALANCE :{WHITE}Balance do Banco
STR_7027_LOAN :{WHITE}Préstamo
-STR_MAX_LOAN :{WHITE}Préstamo Max: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Solicitar {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Devolver {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Préstamo Max: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Solicitar {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Devolver {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...O tamaño máximo do préstamo permitido e de {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Non se pode solicitar máis diñeiro...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...non queda préstamo a pagar
@@ -2081,8 +2081,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Puntuación de rendemento da compañía (Máximo=1000)
STR_7052_COMPANY_VALUES :{WHITE}Valor da Compañía
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Tabla da Liga de Compañías
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}¡Compañía de transporte en problemas!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} vai ser vendida ou declarada en bancarrota se non mellora o seu rendemento pronto!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Presidente)
@@ -2120,7 +2120,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}¡Recesión Mundial!{}{}¡Os expertos en finanzas témense o peor a medida que a economía afúndese!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}¡Fin da Recesión!{}{}¡A mellora no comercio inspira confianza nas industrias a media que a economía reforzase!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Intercambiar entre fiestra grande/pequena
-STR_7076_COMPANY_VALUE :{GOLD}Valor da Compañía: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Valor da Compañía: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Comprar un 25% das accións da compañía
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Vender un 25% das accións da compañía
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Comprar un 25% das accións nesta compañía
@@ -2421,7 +2421,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}Depósito de Tren de {TOWN}
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Celebración cidadá . . .{}Chega o primeiro tren a {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detalles)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detalles)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Hai un tren no camiño
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2483,8 +2483,8 @@
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Servicio
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}No se pode construí-lo vehículo de ferrocarril...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Cargando / Descargando
STR_TRAIN_MUST_BE_STOPPED :{WHITE}O tren debe estar parado nun depósito
@@ -2555,7 +2555,7 @@
STR_TRAIN_NO_POWER :{RED}Sen enerxía
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}¡Novo {STRING} agora dispoñible!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Haí un vehículo de estrada no camiño
@@ -2571,7 +2571,7 @@
STR_900E_MAX_SPEED :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Beneficio este ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidade: {LTBLUE}{COMMA}% {BLACK}Roturas dende o último servicio: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+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}...debe estar parado dentro dun depósito de vehículos de estrada
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Non se pode vende-lo vehículo de estrada...
@@ -2641,7 +2641,7 @@
STR_9813_MAX_SPEED :{BLACK}Velodidade Máx.: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Beneficio este ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidade: {LTBLUE}{COMMA}% {BLACK}Roturas dende o último servicio: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Non se pode parar/arrincar o barco...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Non se pode envia-lo barco o depósito...
@@ -2709,7 +2709,7 @@
STR_A00E_MAX_SPEED :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Beneficio este ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidade: {LTBLUE}{COMMA}% {BLACK}Roturas dende o último servicio: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Non se pode envia-la aeronave ó hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Diríxese ó hangar de {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Diríxese ó hangar de {STATION}, {VELOCITY}
--- a/src/lang/german.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/german.txt Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Zu weit vom Kartenrand entfernt
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Zu nahe am Kartenrand
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nicht genug Geld - {CURRENCY} benötigt!
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Ebenes Land erforderlich
STR_0008_WAITING :{BLACK}Wartend: {WHITE}{STRING}
@@ -496,7 +496,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Gehört zur Gemeinde: {LTBLUE}{STRING}
STR_01A9_NONE :Keine
STR_01AA_NAME :{BLACK}Name
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1.
@@ -779,6 +779,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Schwierigkeitsgrad
STR_02C7_CONFIG_PATCHES :Einstellungen der Patches
STR_NEWGRF_SETTINGS :Newgrf-Einstellungen
+STR_TRANSPARENCY_OPTIONS :Transparenzeinstellungen
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Städtenamen anzeigen
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Stationsnamen anzeigen
@@ -806,7 +807,6 @@
STR_02DE_MAP_OF_WORLD :Weltkarte
STR_EXTRA_VIEW_PORT :Zusatzansicht
STR_SIGN_LIST :Schilderliste
-STR_TRANSPARENCY_OPTIONS :Transparenzeinstellungen
STR_02DF_TOWN_DIRECTORY :Städteverzeichnis
STR_TOWN_POPULATION :{BLACK}Weltbevölkerung: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Ansicht {COMMA}
@@ -1104,6 +1104,13 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Scrollradgeschwindigkeit auf der Karte: {ORANGE}{STRING}
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_DEFAULT_RAIL_TYPE :{LTBLUE}Standard-Gleistyp (bei Spielbeginn/geladenem Spiel): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :normales Gleis
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :elektrifiziertes Gleis
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Einschienenbahn
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Magnetschwebebahn
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :zuerst verfügbarer
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Meistbenutze
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Maximale Anzahl der Züge pro Spieler: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Maximale Anzahl der Straßenfahrzeuge pro Spieler: {ORANGE}{STRING}
@@ -1187,7 +1194,7 @@
STR_CHEATS :{WHITE}Cheats
STR_CHEATS_TIP :{BLACK}Kontrollfelder zeigen, ob du diesen Cheat schonmal benutzt hast.
STR_CHEATS_WARNING :{BLACK}Achtung! Du bist im Begriff, deine Mitspieler zu betrügen. Denke daran, dass dies niemals vergessen werden wird.
-STR_CHEAT_MONEY :{LTBLUE}Kontostand um {CURRENCY64} erhöhen
+STR_CHEAT_MONEY :{LTBLUE}Kontostand um {CURRENCY} erhöhen
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Folgenden Spieler steuern: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Mächtigeres Abrisswerkzeug: {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnel dürfen sich kreuzen {ORANGE}{STRING}
@@ -1442,9 +1449,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Firmenname: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Gründung: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Firmenwert: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Kontostand: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Einkommen (letzes Jahr): {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Firmenwert: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Kontostand: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Einkommen (letzes Jahr): {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Leistung: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Fahrzeuge: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1679,7 +1686,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Gebäude muss erst abgerissen werden
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Bevölkerung: {ORANGE}{COMMA}{BLACK} Häuser: {ORANGE}{COMMA}
@@ -1712,7 +1719,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Zeige Einzelheiten der Stadtverwaltung
STR_2022_LOCAL_AUTHORITY :{WHITE}Stadtverwaltung {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Bewertung der Transportfirma:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subventionen
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Subventionsangebot für:
STR_2027_FROM_TO :{ORANGE}{STRING} von {STRING} nach {STRING}
@@ -1783,7 +1790,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...hier sind bereits Bäume
STR_2804_SITE_UNSUITABLE :{WHITE}...ungeeignetes Gelände
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Baum kann hier nicht gepflanzt werden...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...zu viele Schilder
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Schild kann hier nicht aufgestellt werden...
STR_280A_SIGN :Schild
@@ -1892,6 +1899,7 @@
STR_3805_COAST_OR_RIVERBANK :Küste oder Flussufer
STR_3806_SHIP_DEPOT :Werft
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...kann nicht auf Wasser gebaut werden
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Kanal muß erst abgerissen werden
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Spiel speichern
@@ -1901,9 +1909,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} Megabyte{P "" s} frei
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Kann vom Laufwerk nicht lesen
-STR_4007_GAME_SAVE_FAILED :{WHITE}Spielspeicherung fehlgeschlagen
+STR_4007_GAME_SAVE_FAILED :{WHITE}Spielspeicherung fehlgeschlagen{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Datei kann nicht gelöscht werden
-STR_4009_GAME_LOAD_FAILED :{WHITE}Laden des Spieles fehlgeschlagen
+STR_4009_GAME_LOAD_FAILED :{WHITE}Laden des Spieles fehlgeschlagen{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :interner Fehler: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Defekte Spielstandsdatei - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spielstand wurde mit neuerer Version erstellt
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Datei nicht lesbar
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Kann Datei nicht schreiben
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Liste der Laufwerke, Verzeichnisse und gespeicherten Spiele
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Ausgewählter Spielname
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Lösche gewählten Spielstand
@@ -2075,8 +2088,6 @@
STR_SV_STNAME_HELIPORT :{STRING} Heliport
STR_SV_STNAME_FOREST :{STRING} Wald
-STR_SV_GROUP_NAME :{GROUP}
-
############ end of savegame specific region!
##id 0x6800
@@ -2155,7 +2166,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Spieler {COMMA})
STR_7004_NEW_FACE :{BLACK}Neues Gesicht
STR_7005_COLOR_SCHEME :{BLACK}Farbauswahl
@@ -2167,7 +2178,7 @@
STR_700B_PRESIDENT_S_NAME :Name des Managers
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Firmenname kann nicht geändert werden...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Managername kann nicht geändert werden...
-STR_700E_FINANCES :{WHITE}{COMPANY} Finanzen {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Finanzen {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Ausgaben / Einnahmen
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Baukosten
@@ -2183,20 +2194,20 @@
STR_701B_SHIP_INCOME :{GOLD}Einnahmen Schiffe
STR_701C_LOAN_INTEREST :{GOLD}Kreditzinsen
STR_701D_OTHER :{GOLD}Sonstiges
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Gesamt:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Einkommensdiagramm
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Betriebsgewinndiagramm
STR_7026_BANK_BALANCE :{WHITE}Kontostand
STR_7027_LOAN :{WHITE}Kredit
-STR_MAX_LOAN :{WHITE}Maximaler Kredit: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Leihen {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Rückzahlen {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Maximaler Kredit: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Leihen {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Rückzahlen {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...Maximaler Kredit ist {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kann keinen weiteren Kredit aufnehmen ...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...Kredit bereits zurückgezahlt
@@ -2235,8 +2246,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Bewertung der Firmenleistung (Höchstwert = 1000)
STR_7052_COMPANY_VALUES :{WHITE}Firmenwertdiagramm
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Firmentabelle
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Transportfirma in der Krise!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} Falls die Firmenleitung sich nicht bessert, wird der Verkauf oder die Insolvenz eingeleitet!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Manager)
@@ -2274,7 +2285,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Weltwirtschaftskrise!{}{}Finanzexperten befürchten schlimmsten Zusammenbruch der Wirtschaft!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Wirtschaftskrise beendet!{}{}Aufschwung des Handels gibt Vertrauen in die Industrie und stärkt die Wirtschaft!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Schalter für großes/kleines Fenster
-STR_7076_COMPANY_VALUE :{GOLD}Firmenwert: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Firmenwert: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Kaufe 25% Anteil an Firma
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Verkaufe 25% Anteil an Firma
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Kaufe 25% Anteil an dieser Firma
@@ -2586,7 +2597,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Zugdepot
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Die Stadt feiert . . .{}Der erste Zug erreicht {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Details)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Details)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Zug ist im Weg
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2607,6 +2618,7 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Fahre ohne Halt zu {TOWN} Zugdepot
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Wartung (ohne Halt) bei {TOWN} Zugdepot
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Unterwegs zu {TOWN} Zugdepot
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Unterwegs zu {TOWN} Zugdepot, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Wartung in {TOWN} Zugdepot
@@ -2648,13 +2660,15 @@
STR_REFIT :{BLACK}Ersetzen
STR_REFIT_TIP :{BLACK}Wähle welche Frachtart du ersetzen möchtest. STRG+Klick um die Auswahl rückgängig zu machen
STR_REFIT_ORDER :(Ersetzen zu {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Fahrplan
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Gehe zur Fahrplanansicht
STR_8829_ORDERS :{WHITE}{VEHICLE} (Aufträge)
STR_882A_END_OF_ORDERS :{SETX 10}- - Ende der Aufträge - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Wartung
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Kann Schienenfahrzeug nicht bauen...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK} Wert: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Wert: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK} Wert: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Wert: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Laden / Entladen
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Zug muss im Depot angehalten sein
@@ -2704,6 +2718,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Füge einen neuen Auftrag vor dem markierten Auftrag ein, oder setze ihn ans Ende der Liste
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Der markierte Auftrag wird nur nach voller Beladung ausgeführt
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Beim markierten Auftrag wird die volle Entladung veranlasst
+STR_TIMETABLE_TOOLTIP :{BLACK}Fahrplan - Einträge anklicken um sie zu markieren.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ändere den Zeitrahmen für den markierten Auftrag
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Lösche den Zeitrahmen für den markierten Auftrag
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Setze den Verspätungsmelder zurück, das Fahrzeug ist dann pünktlich.
STR_SERVICE_HINT :{BLACK}Überspringe diesen Auftrag, sofern keine Wartung benötigt wird
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Kosten: {CURRENCY} Gewicht: {WEIGHT_S}{}Geschwindigk.: {VELOCITY} Leistung: {POWER}{}Betriebskosten: {CURRENCY}/Jahr{}Kapazität: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Panne
@@ -2725,6 +2743,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Zugtyp kann nicht umbenannt werden...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Beim markierten Eintrag wird die Ladung in den Bahnhof entladen (für späteren Weitertransport)
STR_886F_TRANSFER :{BLACK}Umladen
+STR_CLEAR_TIME :{BLACK}Zeit löschen
+STR_RESET_LATENESS :{BLACK}Setze Verspätungszähler zurück
STR_TRAIN_STOPPING :{RED}Halte an
STR_TRAIN_STOPPING_VEL :{RED}Halte an, {VELOCITY}
@@ -2733,8 +2753,16 @@
STR_TRAIN_START_NO_CATENARY :Wegen fehlender Oberleitung kann der Zug nicht starten.
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Neue{G r "" s} {STRING} jetzt erhältlich!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Neue{G r "" s} {STRING} jetzt erhältlich! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Neue{G r "" s} {STRING} jetzt erhältlich! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kein Fahrplan für das Fahrzeug...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Fahrzeuge halten nur an Stationen.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Das Fahrzeug hält nicht an dieser Station.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Ändere Zeit
+STR_TIMETABLE_STATUS_ON_TIME :Das Fahrzeug ist derzeit pünktlich.
+STR_TIMETABLE_AUTOFILL :{BLACK}Autom. Füllung
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Ergänze den Fahrplan automatisch mit den Werten der ersten Fahrt
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Fahrzeug ist im Weg
@@ -2750,7 +2778,7 @@
STR_900E_MAX_SPEED :{BLACK}Höchstgeschwindigk.: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit lfd. Jahr: {LTBLUE}{CURRENCY} (letztes Jahr: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Zuverlässigkeit: {LTBLUE}{COMMA}% {BLACK}Pannen seit letzter Wartung: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK} Wert: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK} Wert: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kapazität: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...muss in einem Fahrzeugdepot angehalten werden
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Kann das Fahrzeug nicht verkaufen...
@@ -2777,6 +2805,8 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Fahrzeugauswahlliste - Klicke auf ein Fahrzeug für Einzelheiten
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Baue das ausgewählte Fahrzeug
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Kosten: {CURRENCY}{}Geschwindigk.: {VELOCITY}{}Betriebskosten: {CURRENCY}/Jahr{}Ladevermögen: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Kapazität: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Name des Fahrzeuges
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Kann das Fahrzeug nicht benennen...
@@ -2824,7 +2854,7 @@
STR_9813_MAX_SPEED :{BLACK}Höchstgeschwindigk.: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit lfd. Jahr: {LTBLUE}{CURRENCY} (letztes Jahr: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Zuverlässigkeit: {LTBLUE}{COMMA}% {BLACK}Pannen seit letzter Wartung: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK} Wert: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK} Wert: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kapazität: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Kann das Schiff nicht anhalten/starten...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Kann das Schiff nicht in die Werft schicken...
@@ -2892,7 +2922,7 @@
STR_A00E_MAX_SPEED :{BLACK}Höchstgeschwindigk.: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit lfd. Jahr: {LTBLUE}{CURRENCY} (letztes Jahr: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Zuverlässigkeit: {LTBLUE}{COMMA}% {BLACK}Pannen seit letzter Wartung: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK} Wert: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Gebaut: {LTBLUE}{NUM}{BLACK} Wert: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Kann das Flugzeug nicht in den Hangar schicken...
STR_HEADING_FOR_HANGAR :{ORANGE}Unterwegs zu {STATION} Hangar
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Unterwegs zu {STATION} Hangar, {VELOCITY}
@@ -2945,6 +2975,8 @@
STR_GO_TO_AIRPORT_HANGAR :Fliege zu {STATION} Hangar
SERVICE_AT_AIRPORT_HANGAR :Wartung im {STATION} Hangar
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Fahrplan)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelinabsturz bei {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Fahrzeug bei Zusammenstoß mit einem 'UFO' zerstört!
@@ -3260,6 +3292,8 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Verändere die Transparenz für Gebäude wie Bahnhöfe, Depots, Wegpunkte und Oberleitung
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Verändere die Transparenz für Brücken
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Verändere die Transparenz für Bauten wie Leuchttürme und Antennen, evtl. in der Zukunft auch für Sehenswürdigkeiten
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Transparenz für Ladestandsanzeige umschalten
+
##### Mass Order
STR_GROUP_NAME_FORMAT :Gruppe {COMMA}
@@ -3269,20 +3303,33 @@
STR_GROUP_ALL_SHIPS :Alle Schiffe
STR_GROUP_ALL_AIRCRAFTS :Alle Flugzeuge
STR_GROUP_TINY_NUM :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE :Gemeinsame Fahrzeuge hinzufügen
STR_GROUP_REMOVE_ALL_VEHICLES :Entferne alle Fahrzeuge
+STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} Z{P ug üge}
+STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} Fahrzeug{P "" e}
+STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} Schiff{P "" e}
+STR_GROUP_AIRCRAFTS_CAPTION :{WHITE}{GROUP} - {COMMA} Flugzeug{P "" e}
STR_GROUP_RENAME_CAPTION :{BLACK}Gruppe umbenennen
+STR_GROUP_REPLACE_CAPTION :{WHITE}Fahrzeuge ersetzen von "{GROUP}"
STR_GROUP_CAN_T_CREATE :{WHITE}Kann Gruppe nicht erstellen...
STR_GROUP_CAN_T_DELETE :{WHITE}Kann diese Gruppe nicht löschen...
STR_GROUP_CAN_T_RENAME :{WHITE}Kann Gruppe nicht umbenennen...
STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Kann nicht alle Fahrzeuge dieser Gruppe entfernen...
STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Kann das Fahrzeug nicht zu dieser Gruppe hinzufügen...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Die gemeinsamen Fahrzeuge können nicht zur Gruppe hinzugefügt werden...
STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Gruppen - Klicke auf eine Gruppe für eine Liste aller Fahrzeuge der Gruppe
STR_GROUP_CREATE_TIP :{BLACK}Klicken um eine Gruppe zu erstellen
STR_GROUP_DELETE_TIP :{BLACK}Die ausgewählte Gruppe löschen
STR_GROUP_RENAME_TIP :{BLACK}Die ausgewählte Gruppe umbenennen
+STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}Hier klicken um diese Gruppe aus der automatischen Fahrzeugersetzung zu nehmen
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profit dieses Jahr: {GREEN}{CURRENCY} {BLACK}(letztes Jahr: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profit dieses Jahr: {RED}{CURRENCY} {BLACK}(letztes Jahr: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profit dieses Jahr: {GREEN}{CURRENCY} {BLACK}(letztes Jahr: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profit dieses Jahr: {RED}{CURRENCY} {BLACK}(letztes Jahr: {RED}{CURRENCY}{BLACK})
########
--- a/src/lang/hungarian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/hungarian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Kilóg a térképről
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Túl közel van a térkép széléhez
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nincs elég pénzed - {CURRENCY} kellene
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Sima talaj szükséges
STR_0008_WAITING :{BLACK}Várakozik: {WHITE}{STRING}
@@ -561,7 +561,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Helyi önkormányzat: {LTBLUE}{STRING}
STR_01A9_NONE :Nincs
STR_01AA_NAME :{BLACK}Név
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1.
@@ -844,6 +844,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Nehézségi beállítások
STR_02C7_CONFIG_PATCHES :Foltok beállítása
STR_NEWGRF_SETTINGS :Newgrf beállítások
+STR_TRANSPARENCY_OPTIONS :Átlátszósági beállítások
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Városnevek mutatása
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Állomásnevek mutatása
@@ -871,7 +872,6 @@
STR_02DE_MAP_OF_WORLD :Világtérkép
STR_EXTRA_VIEW_PORT :Extra látkép
STR_SIGN_LIST :Feliratok listája
-STR_TRANSPARENCY_OPTIONS :Átlátszósági beállítások
STR_02DF_TOWN_DIRECTORY :Városlista
STR_TOWN_POPULATION :{BLACK}Világnépesség: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}{COMMA}. látkép
@@ -1169,6 +1169,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Scrollgomb sebessége a térképen: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Betöltésjelző használata: {ORANGE}{STRING}
+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}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Normál sín
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Elektromos sín
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Egysín
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Első elérhető
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Utolsó elérhető
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Leginkább használt
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Maximum vonat játékosonként: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Maximum közúti jármű játékosonként: {ORANGE}{STRING}
@@ -1252,7 +1263,7 @@
STR_CHEATS :{WHITE}Csalások
STR_CHEATS_TIP :{BLACK}A kijelölőnégyzetek jelzik a csalások eddigi használtságát
STR_CHEATS_WARNING :{BLACK}Figyelem! Te épp a versenytársaidat készülöd elárulni. Sose felejtsd el, hogy egy ilyen szégyenletes tett sose merül feledésbe.
-STR_CHEAT_MONEY :{LTBLUE}Tőkeemelés {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Tőkeemelés {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Játszani mint játékos #{ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Csodabuldózer (lerombol gazdasági épületeket, stb): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}A csatornák keresztezhessék egymást: {ORANGE}{STRING}
@@ -1507,9 +1518,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}A cég neve: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Beiktatás: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}A cég értéke: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Jelelegi összeg: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Előző évi bevétel: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}A cég értéke: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Jelelegi összeg: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Előző évi bevétel: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Teljesítmény: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Járművek: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1744,7 +1755,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Előbb le kell rombolnod az épületet
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Lakosság: {ORANGE}{COMMA}{BLACK} Házak: {ORANGE}{COMMA}
@@ -1777,7 +1788,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Az önkormányzat adatainak megmutatása
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} önkormányzata
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Vélemény a szállítási cégekről:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Támogatások
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Támogatás jár
STR_2027_FROM_TO :{ORANGE}{STRING} szállításáért {STRING} és {STRING} között
@@ -1848,7 +1859,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...már van itt
STR_2804_SITE_UNSUITABLE :{WHITE}...nem alkalmas rá a hely
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Nem ültethetsz ide fát...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...túl sok a felirat
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Nem rakhatsz ide feliratot...
STR_280A_SIGN :Felirat
@@ -1957,6 +1968,7 @@
STR_3805_COAST_OR_RIVERBANK :Tenger- vagy folyópart
STR_3806_SHIP_DEPOT :Dokk
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...nem építhető vízen
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}A csatornát előbb le kell rombolni
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Játék mentése
@@ -1966,9 +1978,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabájt szabad
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Nem olvasható a meghajtó
-STR_4007_GAME_SAVE_FAILED :{WHITE}A mentés nem sikerült
+STR_4007_GAME_SAVE_FAILED :{WHITE}A mentés nem sikerült{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Nem sikerült törölni a fájlt
-STR_4009_GAME_LOAD_FAILED :{WHITE}A betöltés nem sikerült
+STR_4009_GAME_LOAD_FAILED :{WHITE}A betöltés nem sikerült{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Belső hiba: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Hibás játékállás-mentés - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :A játékállást újabb verzió mentette el
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :A fájl nem olvasható
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :A fájl nem írható
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Meghajtók, könyvtárak és mentések listája
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}A mentés neve
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}A kijelölt mentés törlése
@@ -2176,8 +2193,7 @@
STR_SV_STNAME_LOWER :{STRING}-alsó
STR_SV_STNAME_HELIPORT :{STRING}i helikopter-leszálló
STR_SV_STNAME_FOREST :{STRING}i erdőség
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING}{NUM}. állomás
############ end of savegame specific region!
@@ -2257,7 +2273,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :({COMMA}. játékos)
STR_7004_NEW_FACE :{BLACK}Új arc
STR_7005_COLOR_SCHEME :{BLACK}Szín váltása
@@ -2269,7 +2285,7 @@
STR_700B_PRESIDENT_S_NAME :Az elnök neve
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Nem változtathatod meg a cég nevét...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Nem változtathatod meg az elnök nevét...
-STR_700E_FINANCES :{WHITE}{COMPANY} pénzügyei {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} pénzügyei {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Kiadás/Bevétel
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Építkezés
@@ -2285,20 +2301,20 @@
STR_701B_SHIP_INCOME :{GOLD}Hajók bevétele
STR_701C_LOAN_INTEREST :{GOLD}Kölcsön kamata
STR_701D_OTHER :{GOLD}Egyéb
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Összesen:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Jövedelem grafikon
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Működési nyereség grafikon
STR_7026_BANK_BALANCE :{WHITE}Banki egyenleg
STR_7027_LOAN :{WHITE}Kölcsön
-STR_MAX_LOAN :{WHITE}Max. kölcsön: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Kölcsönkér {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Visszafizet {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Max. kölcsön: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Kölcsönkér {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Visszafizet {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...{CURRENCY} a megengedett legnagyobb kölcsön
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Nem kölcsönözhetsz több pénzt...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...már letörlesztetted az összeset
@@ -2337,8 +2353,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Cégek teljesítménye (legjobb teljesítmény=1000)
STR_7052_COMPANY_VALUES :{WHITE}Vállalatok értéke
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}A cégek helyezése
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Egy szállítási cég bajban van!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} csődöt jelent vagy el kell adni, ha teljesítménye nem nő hamarosan!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME} {}(Elnök)
@@ -2376,7 +2392,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Gazdasági visszaesés!{}{}A közgazdászok gazdasági válságtól tartanak!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Vége a visszaesésnek!{}{}A kereskedelem fellendül, ami önbizalmat ad az iparnak, és erősödik a gazdaság!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Kicsi/nagy ablakméret közötti váltás
-STR_7076_COMPANY_VALUE :{GOLD}Cég értéke: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Cég értéke: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}25% megvétele a cégből
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}25% eladása a cégből
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}25% megvétele ebből a cégből
@@ -2688,7 +2704,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN}i járműtelep
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Az emberek ünnepelnek . . .{}Megérkezett az első vonat {STATION} állomásra!
-STR_8802_DETAILS :{WHITE}{STRING} adatai
+STR_8802_DETAILS :{WHITE}{VEHICLE} adatai
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Vonat van az útban
STR_8804 :{SETX 10}{COMMA}: {STRING}{STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING}{STRING}
@@ -2709,6 +2725,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Menj megállás nélkül {TOWN}i járműtelepre
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Mindig javítsd a vonatot a {TOWN}i járműtelepen
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Útipont (időzítetlen)
+STR_TIMETABLE_TRAVEL_FOR :Menjen {STRING} állomásra
+STR_TIMETABLE_STAY_FOR :és maradjon {STRING.t}
+STR_TIMETABLE_DAYS :{COMMA} nap
+STR_TIMETABLE_TICKS :{COMMA} tick
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Úton {TOWN} járműtelepére
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Úton {TOWN} járműtelepére, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Javítás {TOWN} depójában
@@ -2750,13 +2773,15 @@
STR_REFIT :{BLACK}Átalakít
STR_REFIT_TIP :{BLACK}Válaszd ki minek a szállítására álljunk át. Ctrl+kattintással eltávolítod az átalakítási utasítást.
STR_REFIT_ORDER :(Átalakít erre: {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Menetrend
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Átkapcsolás menetrendi nézetre
STR_8829_ORDERS :{WHITE}{VEHICLE} menetrendje
STR_882A_END_OF_ORDERS :{SETX 10}- - Menetrend vége - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Javítás
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Nem veheted meg a vasúti járművet...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Vásárlás éve: {LTBLUE}{NUM}{BLACK} Érték: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Érték: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Vásárlás éve: {LTBLUE}{NUM}{BLACK} Érték: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Érték: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Felpakol / Lepakol
STR_TRAIN_MUST_BE_STOPPED :{WHITE}A remízben kellene állnia ehhez
@@ -2806,6 +2831,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Új célpont beillesztése a kijelölt elé vagy a lista végére
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}A kijelölt célponton meg kell várni, amíg telerakják a járművet
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}A kijelölt célponton le kell pakolni a rakományt
+STR_TIMETABLE_TOOLTIP :{BLACK}Menetrend - kijelöléshez kattints egy elemére
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}A kijelölt menetrend-sor végrehajtási idejét változtatja meg
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}A kijelölt menetrendi sorhoz tartozó végrehajtási idő törlése
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Késés-számláló nullázása, azaz a jármű pontos lesz
STR_SERVICE_HINT :{BLACK}Célpont kihagyása, ha javítás szükséges
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Ár: {CURRENCY} Súly: {WEIGHT_S}{}Sebesség: {VELOCITY} Teljesítmény: {POWER}{}Működtetési költség: {CURRENCY}/év{}Kapacitás: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Lerobbant
@@ -2827,6 +2856,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Nem változtathatod meg a márkanevet...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}A kiválasztott állomásnál a jármű a rakományt leteszi
STR_886F_TRANSFER :{BLACK}Elszállít
+STR_CLEAR_TIME :{BLACK}Idő törlése
+STR_RESET_LATENESS :{BLACK}Késés nullázása
STR_TRAIN_STOPPING :{RED}Lassít
STR_TRAIN_STOPPING_VEL :{RED}Lassít, {VELOCITY}
@@ -2835,8 +2866,20 @@
STR_TRAIN_START_NO_CATENARY :Ennek a sínnek nincs felsővezetéke, a vonat nem tud indulni
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Új {STRING} elérhető!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Új {STRING} elérhető! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Új {STRING} elérhető! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}A jármű nem időzíthető
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}A járművek csak az állomáson várakozhatnak
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Ez a jármű nem áll meg ezen az állomáson
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Idő megváltoztatása
+STR_TIMETABLE_STATUS_ON_TIME :Ez a jármű jelenleg pontosan közlekedik
+STR_TIMETABLE_STATUS_LATE :Ez a jármű jelenleg {STRING} késéssel közlekedik
+STR_TIMETABLE_STATUS_EARLY :Ez a jármű jelenleg {STRING} korábban közlekedik
+STR_TIMETABLE_TOTAL_TIME :Ezen menetrend teljesítési ideje: {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Ezen menetrend teljesítési ideje legalább: {STRING} (nincs minden időzítve)
+STR_TIMETABLE_AUTOFILL :{BLACK}Automata kitöltés
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}A menetrendet kitölti automatikusan az első utazás értékeivel
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Közúti jármű van az útban
@@ -2852,7 +2895,7 @@
STR_900E_MAX_SPEED :{BLACK}Végsebesség: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Idei haszon: {LTBLUE}{CURRENCY} (tavalyi: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Megbízhatóság: {LTBLUE}{COMMA}% {BLACK}Lerobbanások az utolsó javítás óta: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Vásárlás éve: {LTBLUE}{NUM}{BLACK} Érték: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Vásárlás éve: {LTBLUE}{NUM}{BLACK} Érték: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kapacitás: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...garázsban kellene állnia ehhez
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Nem adhatod el a közúti járművet...
@@ -2928,7 +2971,7 @@
STR_9813_MAX_SPEED :{BLACK}Végsebesség: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Idei haszon: {LTBLUE}{CURRENCY} (tavalyi: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Megbízhatóság: {LTBLUE}{COMMA}% {BLACK}Lerobbanások az utolsó javítás óta: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Vásárlás éve: {LTBLUE}{NUM}{BLACK} Érték: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Vásárlás éve: {LTBLUE}{NUM}{BLACK} Érték: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kapacitás: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Nem indíthatod el/ állíthatod meg a hajót...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Nem küldheted a hajót a dokkba...
@@ -2996,7 +3039,7 @@
STR_A00E_MAX_SPEED :{BLACK}Végsebesség: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Idei haszon: {LTBLUE}{CURRENCY} (tavalyi: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Megbízhatóság: {LTBLUE}{COMMA}% {BLACK}Lerobbanások az utolsó javítás óta: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Vásárlás éve: {LTBLUE}{NUM}{BLACK} Érték: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Vásárlás éve: {LTBLUE}{NUM}{BLACK} Érték: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Nem küldheted a repülőgépet a hangárba...
STR_HEADING_FOR_HANGAR :{ORANGE}Úton {STATION} hangárjába
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Úton {STATION} hangárjába, {VELOCITY}
@@ -3049,6 +3092,8 @@
STR_GO_TO_AIRPORT_HANGAR :Menj a {STATION} repülőtér hangárjába
SERVICE_AT_AIRPORT_HANGAR :Javítás a(z) {STATION} hangárban
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Menetrendesítve)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelinbaleset {STATION} közelében!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}'UFO' ütközés pusztított el egy közúti járművet!
@@ -3364,6 +3409,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Átkapcsolni az építhető elemekre (állomások, depók, útipontok és felsővezeték)
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Átkapcsolni a hidakra
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Átkapcsolni egyéb épületekre, mint világítótorony és antennák (esetleg egyéb jövőbeni díszek)
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Átlátszó betöltésjelző kapcsolása (ki/be)
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :{COMMA} csoport
@@ -3401,4 +3454,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Idei profit: {GREEN}{CURRENCY} {BLACK}(tavalyi: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Idei profit: {RED}{CURRENCY} {BLACK}(tavalyi: {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/icelandic.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/icelandic.txt Tue Jun 26 23:40:58 2007 +0000
@@ -9,8 +9,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Brún kortsins
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Of nálægt brún kortsins
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Ekki nógu mikið reiðufé - þarf {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Sléttlendi nauðsynlegt
STR_0008_WAITING :{BLACK}Bíður: {WHITE}{STRING}
@@ -493,7 +493,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Bæjaryfirvöld: {LTBLUE}{STRING}
STR_01A9_NONE :Enginn
STR_01AA_NAME :{BLACK}Nafn
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1.
@@ -1153,7 +1153,7 @@
STR_CHEATS :{WHITE}Svindl
STR_CHEATS_TIP :{BLACK}Valreitur segir til um ef þú hefur notað þetta svindl áður
STR_CHEATS_WARNING :{BLACK}Aðvörun! Þú ert í þann mund að svíkja keppinauta þína. Hafðu í huga að þess lags svívirðing mun ætíð höfð í minnum.
-STR_CHEAT_MONEY :{LTBLUE}Auka pening um {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Auka pening um {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Spila sem leikmaður: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Töfrajarðýta (eyða iðnaði og óeyðanlegu): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Göng mega skerast: {ORANGE}{STRING}
@@ -1382,9 +1382,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Nafn fyrirtækis: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Upphaf: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Heildarverðmæti fyrirtækis: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Núverandi staða: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Innkoma síðasta árs: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Heildarverðmæti fyrirtækis: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Núverandi staða: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Innkoma síðasta árs: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Frammistaða: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Farartæki: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1593,7 +1593,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Verður að eyða byggingu fyrst
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Íbúafjöldi: {ORANGE}{COMMA}{BLACK} Hús: {ORANGE}{COMMA}
@@ -1626,7 +1626,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Sýna upplýsingar um bæjaryfirvöld
STR_2022_LOCAL_AUTHORITY :{WHITE}Bæjaryfirvöld {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Einkunnir flutningsfyrirtækis:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Samstarfssamningar
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Samstarfssamningar í boði fyrir eftirfarandi þjónustur:
STR_2027_FROM_TO :{ORANGE}{STRING} frá {STRING} til {STRING}
@@ -1697,7 +1697,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...hér er nú þegar tré
STR_2804_SITE_UNSUITABLE :{WHITE}...óhentugur staður
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Ekki hægt að gróðursetja tré hér...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...of mörg skilti
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Ekki hægt að setja tré hér...
STR_280A_SIGN :Skilti
@@ -1809,9 +1809,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabæti laus
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Get ekki lesið af drifi
-STR_4007_GAME_SAVE_FAILED :{WHITE}Vistun leiks mistókst
+STR_4007_GAME_SAVE_FAILED :{WHITE}Vistun leiks mistókst{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Get ekki eytt skrá
-STR_4009_GAME_LOAD_FAILED :{WHITE}Mistókst að opna leik
+STR_4009_GAME_LOAD_FAILED :{WHITE}Mistókst að opna leik{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Listi yfir drif, möppur og vistaða leiki
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Nafn fyrir vistun leiks
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Eyða nafninu
@@ -2060,7 +2060,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Leikmaður {COMMA})
STR_7004_NEW_FACE :{BLACK}Nýtt Andlit
STR_7005_COLOR_SCHEME :{BLACK}Litaskema
@@ -2072,7 +2072,7 @@
STR_700B_PRESIDENT_S_NAME :Nafn forstöðumanns
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Ekki hægt að breyta nafni fyrirtækis...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Ekki hægt að breyta nafni forstöðumanns...
-STR_700E_FINANCES :{WHITE}{COMPANY} Fjármál {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Fjármál {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Útgjöld/Tekjur
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Bygging
@@ -2088,20 +2088,20 @@
STR_701B_SHIP_INCOME :{GOLD}Tekjur vegna skipa
STR_701C_LOAN_INTEREST :{GOLD}Lánsvextir
STR_701D_OTHER :{GOLD}Annað
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Summa:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Tekjulínurit
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Resktrartekju línurit
STR_7026_BANK_BALANCE :{WHITE}Bankainnistæða
STR_7027_LOAN :{WHITE}Lán
-STR_MAX_LOAN :{WHITE}Hámarkslán: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Taka lán {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Borga lán {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Hámarkslán: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Taka lán {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Borga lán {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...hámarksleyfi á láni er {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Ekki hægt að fá meiri pening lánaðan...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...ekkert lán til að borga
@@ -2140,8 +2140,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Einkunn fyrirtækis (hámarkseinkunn=1000)
STR_7052_COMPANY_VALUES :{WHITE}Fyrirtækisvirði
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Fyrirtækjalisti
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Flutningsfyrirtæki í vandræðum!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} mun vera selt eða skráð gjaldþrota nema það fari að taka sig á sem fyrst!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Forstöðumaður)
@@ -2179,7 +2179,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Heimssamdráttur!{}{}Hagfræðingar hræddir um efnahagshrun!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Samdráttur!{}{}Uppslag í viðskiptum gefur bjartari von um betri efnahag!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Stækka/smækka gluggastærð
-STR_7076_COMPANY_VALUE :{GOLD}Heildarverðmæti fyrirtækis: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Heildarverðmæti fyrirtækis: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Kaupa 25% hlut í fyrirtæki
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Selja 25% hlut í fyrirtæki
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Kaupa 25% hlut í þessu fyrirtæki
@@ -2489,7 +2489,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Lestar Bygging
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Bæjarbúar fagna . . .{}Fyrsta lest kemur við á {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Upplýsingar)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Upplýsingar)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Lest fyrir
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2556,8 +2556,8 @@
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Skoðun
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Get ekki byggt lest...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Framleitt: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Virði: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Framleitt: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Virði: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Fermandi / Affermandi
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Lest þarf að vera stöðvuð í skýli
@@ -2645,7 +2645,7 @@
STR_900E_MAX_SPEED :{BLACK}Hámarkshraði: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Hagnaður á þessu ári: {LTBLUE}{CURRENCY} (síðasta ár: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Áreiðanleiki: {LTBLUE}{COMMA}% {BLACK}Bilanir frá síðustu viðgerð: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Byggður: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Byggður: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Burðargeta: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...verður að stöðvast í bifreiðaskýli
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Get ekki selt bifreið...
@@ -2717,7 +2717,7 @@
STR_9813_MAX_SPEED :{BLACK}Hámarkshraði: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Tekjur þessa árs: {LTBLUE}{CURRENCY} (síðasta ár: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Áreiðanleiki: {LTBLUE}{COMMA}% {BLACK}Bilanir frá síðustu skoðun: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Smíðað: {LTBLUE}{NUM}{BLACK} Verðmæti: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Smíðað: {LTBLUE}{NUM}{BLACK} Verðmæti: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Burðargeta: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Get ekki stöðvað/ræst skip...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Get ekki sent skip í slipp...
@@ -2785,7 +2785,7 @@
STR_A00E_MAX_SPEED :{BLACK}Hámarkshraði: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Hagnaður í ár: {LTBLUE}{CURRENCY} (í fyrra: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Áreiðanleiki: {LTBLUE}{COMMA}% {BLACK}Bilanir frá síðustu skoðun: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Smíðuð: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Smíðuð: {LTBLUE}{NUM}{BLACK} Virði: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Get ekki sent flugvél í flugskýli...
STR_HEADING_FOR_HANGAR :{ORANGE}Stefnir á {STATION} flugskýli
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Stefnir á {STATION} flugskýli, {VELOCITY}
--- a/src/lang/italian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/italian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Fuori dal bordo della mappa
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Troppo vicino al bordo della mappa
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Denaro insufficiente - servono {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Richiesto terreno pianeggiante
STR_0008_WAITING :{BLACK}In attesa: {WHITE}{STRING}
@@ -497,7 +497,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Autorità locale: {LTBLUE}{STRING}
STR_01A9_NONE :Nessuno
STR_01AA_NAME :{BLACK}Nome
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -780,6 +780,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Impostazioni difficoltà
STR_02C7_CONFIG_PATCHES :Configura patch
STR_NEWGRF_SETTINGS :Impostazioni NewGRF
+STR_TRANSPARENCY_OPTIONS :Opzioni trasparenza
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Mostra nomi città
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Mostra nomi stazioni
@@ -807,7 +808,6 @@
STR_02DE_MAP_OF_WORLD :Mappa del mondo
STR_EXTRA_VIEW_PORT :Mini visuale extra
STR_SIGN_LIST :Elenco cartelli
-STR_TRANSPARENCY_OPTIONS :Opzioni trasparenza
STR_02DF_TOWN_DIRECTORY :Elenco città
STR_TOWN_POPULATION :{BLACK}Popolazione mondiale: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Mini visuale {COMMA}
@@ -1105,6 +1105,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Velocità rotellina mappa: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Utilizza gli indicatori di caricamento: {ORANGE}{STRING}
+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}Tipo predefinito rotaie (a inizio/ripresa partita): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Ferrovia normale
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Ferrovia elettrificata
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monorotaia
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Il primo disponibile
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :L'ultimo disponibile
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Il più usato
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Max treni per giocatore: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Max automezzi per giocatore: {ORANGE}{STRING}
@@ -1188,7 +1199,7 @@
STR_CHEATS :{WHITE}Trucchi
STR_CHEATS_TIP :{BLACK}Le caselle indicano se un trucco è già stato usato una volta
STR_CHEATS_WARNING :{BLACK}Attenzione! Stai per tradire i tuoi avversari. Ricordati che un così grande disonore sarà ricordato per l'eternità.
-STR_CHEAT_MONEY :{LTBLUE}Aumenta denaro di {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Aumenta denaro di {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Controlla il giocatore: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer magico (rimuove industrie e oggetti inamovibili): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}I tunnel possono incrociarsi tra loro: {ORANGE}{STRING}
@@ -1443,9 +1454,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Nome compagnia: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inaugurazione: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Valore compagnia: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Bilancio corrente: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Incassi anno scorso: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Valore compagnia: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Bilancio corrente: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Incassi anno scorso: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Prestazioni: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Veicoli: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1680,7 +1691,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}L'edificio deve essere demolito prima
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Popolazione: {ORANGE}{COMMA}{BLACK} Case: {ORANGE}{COMMA}
@@ -1713,7 +1724,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Mostra informazioni sull'autorità locale
STR_2022_LOCAL_AUTHORITY :{WHITE}Autorità locale di {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Valutazione delle compagnie di trasporto:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Sussidi
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Sussidi offerti per la realizzazione di servizi:
STR_2027_FROM_TO :{ORANGE}{STRING} da {STRING} a {STRING}
@@ -1784,7 +1795,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...albero già qui
STR_2804_SITE_UNSUITABLE :{WHITE}...sito inadatto
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Impossibile piantare l'albero qui...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...troppi cartelli
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Impossibile piazzare il cartello qui...
STR_280A_SIGN :Cartello
@@ -1893,6 +1904,7 @@
STR_3805_COAST_OR_RIVERBANK :Costa
STR_3806_SHIP_DEPOT :Deposito navale
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...impossibile costruire sull'acqua
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Bisogna demolire il canale prima
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Salva partita
@@ -1902,9 +1914,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabyte liber{P o i}
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Impossibile leggere dall'unità
-STR_4007_GAME_SAVE_FAILED :{WHITE}Salvataggio fallito
+STR_4007_GAME_SAVE_FAILED :{WHITE}Salvataggio fallito{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Impossibile eliminare il file
-STR_4009_GAME_LOAD_FAILED :{WHITE}Caricamento fallito
+STR_4009_GAME_LOAD_FAILED :{WHITE}Caricamento fallito{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Errore interno: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Salvataggio danneggiato - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvataggio creato con una versione più recente
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :File non leggibile
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :File non scrivibile
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Elenco delle unità, delle cartelle e dei file delle partite salvate
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Nome del salvataggio selezionato
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Elimina il salvataggio selezionato
@@ -2075,8 +2092,7 @@
STR_SV_STNAME_LOWER :Bassa {STRING}
STR_SV_STNAME_HELIPORT :Eliporto di {STRING}
STR_SV_STNAME_FOREST :{STRING} Foresta
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} Stazione #{NUM}
############ end of savegame specific region!
@@ -2156,7 +2172,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER : (Giocatore {COMMA})
STR_7004_NEW_FACE :{BLACK}Nuova faccia
STR_7005_COLOR_SCHEME :{BLACK}Colori compagnia
@@ -2168,7 +2184,7 @@
STR_700B_PRESIDENT_S_NAME :Nome del presidente
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Impossibile cambiare il nome della compagnia...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Impossibile cambiare il nome del presidente...
-STR_700E_FINANCES :{WHITE}Finanze della {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}Finanze della {COMPANY} {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Spese/ricavi
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Costruzioni
@@ -2184,20 +2200,20 @@
STR_701B_SHIP_INCOME :{GOLD}Ricavi navi
STR_701C_LOAN_INTEREST :{GOLD}Interessi sul prestito
STR_701D_OTHER :{GOLD}Altro
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Totale:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Grafico incassi
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Grafico profitto operativo
STR_7026_BANK_BALANCE :{WHITE}Bilancio bancario
STR_7027_LOAN :{WHITE}Prestito
-STR_MAX_LOAN :{WHITE}Prestito massimo: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Chiedi in prestito {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Ripaga {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Prestito massimo: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Chiedi in prestito {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Ripaga {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...il prestito massimo concesso è di {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Impossibile chiedere in prestito altro denaro...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...debito già estinto
@@ -2236,8 +2252,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Valutazione prestazioni compagnie (massima valutazione=1000)
STR_7052_COMPANY_VALUES :{WHITE}Valore delle compagnie
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Classifica compagnie
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Compagnia di trasporti in difficolta!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}La {COMPANY} verrà venduta o dichiarerà bancarotta a meno che le prestazioni non migliorino presto!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Presidente)
@@ -2275,7 +2291,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Recessione mondiale!{}{}Il crollo dell'economia porta gli analisti finanziari a temere il peggio!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recessione finita!{}{}La ripresa del commercio da fiducia alle industrie e rafforza l'economia!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Seleziona dimensione grande/piccola della finestra
-STR_7076_COMPANY_VALUE :{GOLD}Valore compagnia: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Valore compagnia: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Compra il 25% delle azioni
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Vendi il 25% delle azioni
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Compra il 25% delle azioni di questa compagnia
@@ -2587,7 +2603,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}Deposito ferroviario di {TOWN}
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}I cittadini festeggiano . . .{}Il primo treno arriva a {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Dettagli)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Dettagli)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Treno di mezzo
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2608,6 +2624,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Vai non-stop al Deposito ferroviario di {TOWN}
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Manutenzione non-stop al Deposito di {TOWN}
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Viaggia senza orario
+STR_TIMETABLE_TRAVEL_FOR :Viaggia per {STRING}
+STR_TIMETABLE_STAY_FOR :e sosta per {STRING}
+STR_TIMETABLE_DAYS :{COMMA} giorn{P o i}
+STR_TIMETABLE_TICKS :{COMMA} tick
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Diretto al Deposito di {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Diretto al Deposito di {TOWN}, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Manutenzione al Deposito di {TOWN}
@@ -2649,13 +2672,15 @@
STR_REFIT :{BLACK}Riadatta
STR_REFIT_TIP :{BLACK}Selezionare il tipo di carico per il quale riadattare in questo ordine. Premere CTRL+clic per rimuovere l'istruzione di riadattamento
STR_REFIT_ORDER :(Riadatta per {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Orario
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Passa alla visualizzazione della tabella oraria
STR_8829_ORDERS :{WHITE}{VEHICLE} (Ordini)
STR_882A_END_OF_ORDERS :{SETX 10}- - Fine degli ordini - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Manutieni
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Impossibile costruire il veicolo ferroviario...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Valore: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Valore: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Caricamento / Scaricamento
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Il treno deve essere fermo in un deposito
@@ -2705,12 +2730,16 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Inserisce un nuovo ordine prima di quello selezionato, o lo aggiunge alla fine della lista
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Fa in modo che l'ordine selezionato forzi il veicolo ad aspettare il carico completo
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Fa in modo che l'ordine selezionato forzi il veicolo a scaricare
+STR_TIMETABLE_TOOLTIP :{BLACK}Tabella oraria - fare clic su un ordine per selezionarlo
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambia la quantità di tempo che dovrebbe essere impiegata per l'ordine selezionato
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Elimina l'impostazione della quantità di tempo per l'ordine selezionato
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Azzera il contatore del ritardo, in modo che il veicolo sia considerato in orario
STR_SERVICE_HINT :{BLACK}Ingnora quest'ordine a meno che non sia necessaria una manutenzione
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Costo: {CURRENCY} Peso: {WEIGHT_S}{}Velocità: {VELOCITY} Potenza: {POWER}{}Costo d'esercizio: {CURRENCY}/anno{}Capacità: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Guasto
STR_885D_AGE_RUNNING_COST_YR :{BLACK}Età: {LTBLUE}{STRING}{BLACK} Costo d'esercizio: {LTBLUE}{CURRENCY}/anno
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {LTBLUE}{WEIGHT_S} {BLACK}Potenza: {LTBLUE}{POWER}{BLACK} Velocità max: {LTBLUE}{VELOCITY}
-STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_S} {BLACK}Potenza: {LTBLUE}{POWER}{BLACK} Velocità max: {LTBLUE}{VELOCITY} {BLACK}Trazione max: {LTBLUE}{FORCE}
+STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_S} {BLACK}Potenza: {LTBLUE}{POWER}{BLACK} Velocità max: {LTBLUE}{VELOCITY} {BLACK}S.T. max: {LTBLUE}{FORCE}
STR_885F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profitto quest'anno: {LTBLUE}{CURRENCY} (anno scorso: {CURRENCY})
STR_8860_RELIABILITY_BREAKDOWNS :{BLACK}Affidabilità: {LTBLUE}{COMMA}% {BLACK}Guasti dall'ultima manutenzione: {LTBLUE}{COMMA}
STR_8861_STOPPED :{RED}Fermo
@@ -2726,6 +2755,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Impossibile rinominare il tipo di veicolo ferroviario...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Fa in modo che l'ordine selezionato forzi il veicolo a trasferire il carico
STR_886F_TRANSFER :{BLACK}Trasferisci
+STR_CLEAR_TIME :{BLACK}Elimina tempo
+STR_RESET_LATENESS :{BLACK}Azzera ritardo
STR_TRAIN_STOPPING :{RED}In frenata
STR_TRAIN_STOPPING_VEL :{RED}In frenata, {VELOCITY}
@@ -2734,8 +2765,20 @@
STR_TRAIN_START_NO_CATENARY :In questo binario manca la catenaria, quindi il treno non può essere avviato
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nuov{G o a} {STRING} disponibile!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nuov{G o a} {STRING} disponibile! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nuov{G o a} {STRING} disponibile! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Impossibile dare un orario al veicolo...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}I veicoli possono attendere solo alle stazioni.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Il veicolo non ferma a questa stazione.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambia tempo
+STR_TIMETABLE_STATUS_ON_TIME :Il veicolo viaggia in orario
+STR_TIMETABLE_STATUS_LATE :Il veicolo viaggia con un ritardo di {STRING}
+STR_TIMETABLE_STATUS_EARLY :Il veicolo viaggia con un anticipo di {STRING}
+STR_TIMETABLE_TOTAL_TIME :Questo orario richiede {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Questo orario richiede almeno {STRING} (non completamente impostato)
+STR_TIMETABLE_AUTOFILL :{BLACK}Auto-imposta
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Riempie automaticamente la tabella oraria con i tempi del primo viaggio
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Automezzo di mezzo
@@ -2751,7 +2794,7 @@
STR_900E_MAX_SPEED :{BLACK}Velocità max: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profitto quest'anno: {LTBLUE}{CURRENCY} (anno scorso: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Affidabilità: {LTBLUE}{COMMA}% {BLACK}Guasti dall'ultima manutenzione: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Capacità: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...deve essere fermo nel deposito automezzi
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Impossibile vendere l'automezzo...
@@ -2827,7 +2870,7 @@
STR_9813_MAX_SPEED :{BLACK}Velocità max: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profitto quest'anno: {LTBLUE}{CURRENCY} (anno scorso: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Affidabilità: {LTBLUE}{COMMA}% {BLACK}Guasti dall'ultima manutenzione: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacità: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Impossibile fermare/avviare la nave...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Impossibile mandare la nave al deposito...
@@ -2895,7 +2938,7 @@
STR_A00E_MAX_SPEED :{BLACK}Velocità max: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profitto quest'anno: {LTBLUE}{CURRENCY} (anno scorso: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Affidabilità: {LTBLUE}{COMMA}% {BLACK}Guasti dall'ultima manutenzione: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Costruito nel: {LTBLUE}{NUM}{BLACK} Valore: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Impossibile mandare l'aeromobile all'hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Diretto all'Hangar di {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Diretto all'Hangar di {STATION}, {VELOCITY}
@@ -2948,6 +2991,8 @@
STR_GO_TO_AIRPORT_HANGAR :Vai all'Hangar di {STATION}
SERVICE_AT_AIRPORT_HANGAR :Manutenzione all'Hangar di {STATION}
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Tabella oraria)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Disastro Zeppelin a {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Automezzo distrutto in una collisione con un 'UFO'!
@@ -3162,7 +3207,7 @@
STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Riadattabile per: {GOLD}
STR_PURCHASE_INFO_ALL_TYPES :Tutti i tipi di carico
STR_PURCHASE_INFO_ALL_BUT :Tutto tranne {GOLD}
-STR_PURCHASE_INFO_MAX_TE :{BLACK}Trazione massima: {GOLD}{FORCE}
+STR_PURCHASE_INFO_MAX_TE :{BLACK}Sforzo di trazione massimo: {GOLD}{FORCE}
########### String for New Landscape Generator
@@ -3263,6 +3308,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Attiva/disattiva la trasparenza delle strutture edificabili come stazioni, depositi, waypoint e catenarie
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Attiva/disattiva la trasparenza dei ponti
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Attiva/disattiva la trasparenza di strutture come fari, antenne e altri futuri oggetti decorativi
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Attiva/disattiva la trasparenza degli indicatori di caricamento
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Gruppo {COMMA}
@@ -3289,7 +3342,7 @@
STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Impossibile aggiungere il veicolo al gruppo...
STR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Impossibile aggiungere veicoli condivisi al gruppo...
-STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Gruppi - Fare clic su un gruppo per elencare tutti i suoi veicoli
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Gruppi - fare clic su un gruppo per elencare tutti i suoi veicoli
STR_GROUP_CREATE_TIP :{BLACK}Fare clic per creare un gruppo
STR_GROUP_DELETE_TIP :{BLACK}Elimina il gruppo selezionato
STR_GROUP_RENAME_TIP :{BLACK}Rinomina il gruppo selezionato
@@ -3300,4 +3353,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profitto quest'anno: {GREEN}{CURRENCY} {BLACK}(anno scorso: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profitto quest'anno: {RED}{CURRENCY} {BLACK}(anno scorso: {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/japanese.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/japanese.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}地図の端を越えています
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}地図の端に近すぎます
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}資金が足りません。{CURRENCY}がかかります
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}平地が必要です
STR_0008_WAITING :{BLACK}到着待ち:{WHITE}{STRING}
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}町議会:{LTBLUE}{STRING}
STR_01A9_NONE :なし
STR_01AA_NAME :{BLACK}名称
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1日
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :難易度の設定
STR_02C7_CONFIG_PATCHES :パッチの設定
STR_NEWGRF_SETTINGS :NewGRFの設定
+STR_TRANSPARENCY_OPTIONS :半透明設定
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}市町村名を表示
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}駅名を表示
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :世界の地図
STR_EXTRA_VIEW_PORT :特別ビューア
STR_SIGN_LIST :標示のリスト
-STR_TRANSPARENCY_OPTIONS :半透明設定
STR_02DF_TOWN_DIRECTORY :市町村のリスト
STR_TOWN_POPULATION :{BLACK}世界人口:{COMMA}人
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}ビューア {COMMA}
@@ -1103,6 +1103,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}地図のスクロール速度:{ORANGE}{STRING}
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_DEFAULT_RAIL_TYPE :{LTBLUE}デフォルトの鉄道の種類(新規ゲーム後/ゲームの読み込み後):{ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :通常の鉄道
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :電鉄
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :モノレール
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :磁気浮上式鉄道
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :最初の鉄道種類
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :最新の鉄道種類
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :最も使われている鉄道種類
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}一人のプレヤーの列車数上限:{ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}一人のプレヤーの道路車両数上限:{ORANGE}{STRING}
@@ -1186,7 +1197,7 @@
STR_CHEATS :{WHITE}チート
STR_CHEATS_TIP :{BLACK}以前にこのチートを使用したことがあることを示します
STR_CHEATS_WARNING :{BLACK}中位!チートすると、競争者の裏切りとして見られていて、永遠にのろわれる可能性があります!
-STR_CHEAT_MONEY :{LTBLUE}残額に{CURRENCY64}を追加
+STR_CHEAT_MONEY :{LTBLUE}残額に{CURRENCY}を追加
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}プレヤーの変更:{ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}ゴジラブルドーザー(産業など何でも破壊できる):{ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}トンネルが交差可能ようにする:{ORANGE}{STRING}
@@ -1441,9 +1452,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}会社名:{WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}開業日付:{WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}企業価値:{WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}残額:{WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}昨年の損益:{WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}企業価値:{WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}残額:{WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}昨年の損益:{WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}パフォーマンス:{WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}車両:{WHITE}{NUM} {TRAIN}、{NUM} {LORRY}、{NUM} {BUS}、{NUM} {PLANE}、{NUM} {SHIP}
@@ -1678,7 +1689,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}まずは建物を破壊しなければなりません
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}人口:{ORANGE}{COMMA}人{BLACK} 建物:{ORANGE}{COMMA}戸
@@ -1711,7 +1722,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}町議会の情報を表示します
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN}の町議会
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}会社の町内の世評:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}:{ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}:{ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}助成金
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}次の運送経路に助成金を提案:
STR_2027_FROM_TO :{ORANGE}{STRING}を{STRING}から{STRING}へ
@@ -1782,7 +1793,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...木はsすでにあります
STR_2804_SITE_UNSUITABLE :{WHITE}...不適当な位置です
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}ここに木が植林できません...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...標示が多すぎます
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}ここに標示が設置できません...
STR_280A_SIGN :標示
@@ -1891,6 +1902,7 @@
STR_3805_COAST_OR_RIVERBANK :海岸または川岸
STR_3806_SHIP_DEPOT :造船所
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...水上に建設できません
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}先に運河を破壊しなければなりません
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}ゲームを保存
@@ -1900,9 +1912,14 @@
STR_4004 :{COMPANY}、{DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} MB 使用可能
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}ドライブが読み込めません
-STR_4007_GAME_SAVE_FAILED :{WHITE}ゲームの保存が失敗しました
+STR_4007_GAME_SAVE_FAILED :{WHITE}ゲームの保存が失敗しました{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}ファイルを削除できません
-STR_4009_GAME_LOAD_FAILED :{WHITE}ゲームの読み込むが失敗しました
+STR_4009_GAME_LOAD_FAILED :{WHITE}ゲームの読み込むが失敗しました{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :内部エラー:{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :壊れているセーブゲーム:{STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :セーブゲームはより新しいバージョンによって保存されました
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :ファイルを読み込むことができません
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :ファイルを書き込むことができません
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}ドライブ、フォルダ、ゲームファイルのリスト
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}ゲームのファイル名
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}選択したゲームを削除します
@@ -2073,8 +2090,7 @@
STR_SV_STNAME_LOWER :下{STRING}
STR_SV_STNAME_HELIPORT :{STRING}ヘリポート
STR_SV_STNAME_FOREST :{STRING}森林
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} 駅 {NUM}号
############ end of savegame specific region!
@@ -2154,7 +2170,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(プレヤー {COMMA})
STR_7004_NEW_FACE :{BLACK}新規顔
STR_7005_COLOR_SCHEME :{BLACK}カラースキーム
@@ -2166,7 +2182,7 @@
STR_700B_PRESIDENT_S_NAME :社長の名前
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}会社名が変更できません...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}社長の名前が変更できません...
-STR_700E_FINANCES :{WHITE}{COMPANY}の経営状況 {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY}の経営状況 {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}支払い/収益
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}建設
@@ -2182,20 +2198,20 @@
STR_701B_SHIP_INCOME :{GOLD}船舶の損益
STR_701C_LOAN_INTEREST :{GOLD}借入金の金利
STR_701D_OTHER :{GOLD}その他
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}合計:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}損益グラフ
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}営業利益グラフ
STR_7026_BANK_BALANCE :{WHITE}残額
STR_7027_LOAN :{WHITE}借入金
-STR_MAX_LOAN :{WHITE}最高借入金:{BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}を借りる
-STR_702A_REPAY :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}を返済
+STR_MAX_LOAN :{WHITE}最高借入金:{BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}{SKIP}{SKIP}{CURRENCY}を借りる
+STR_702A_REPAY :{BLACK}{SKIP}{SKIP}{CURRENCY}を返済
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...最高借入金が{CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}より借入できません...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...残額がありません
@@ -2234,8 +2250,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}会社のパフォーマンス率(最大=1000)
STR_7052_COMPANY_VALUES :{WHITE}会社の価値
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}交通会社成績表
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}交通会社が経営困難!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}もうすぐ{COMPANY}のパフォーマンスが改良なしで売却および破産のリスク!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(社長)
@@ -2273,7 +2289,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}世界中不景気!{}{}経済がスランプに陥る、アナリストの不安説!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}スランプの終わり!{}{}経済が上昇気流、産業が好転!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}大きい/小さいウィンドウサイズを切り替えます
-STR_7076_COMPANY_VALUE :{GOLD}会社の価値:{WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}会社の価値:{WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}会社の25%の株を買収
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}会社の25%の株を販売
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}この会社の25%の株を購入
@@ -2585,7 +2601,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN}電車庫
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}町民の祝賀{}初列車が{STATION}駅に到着!
-STR_8802_DETAILS :{WHITE}{STRING}(詳細)
+STR_8802_DETAILS :{WHITE}{VEHICLE}(詳細)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}列車があります
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2622,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :{TOWN}電車庫へ直行で回送
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :{TOWN}電車庫へ直行で回送して修理
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :運行(未計画)
+STR_TIMETABLE_TRAVEL_FOR :{STRING}運行
+STR_TIMETABLE_STAY_FOR :{STRING}停車
+STR_TIMETABLE_DAYS :{COMMA}日間
+STR_TIMETABLE_TICKS :{COMMA}ティック
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}{TOWN}電車庫へ行く
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}{TOWN}電車庫へ行く、{VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}{TOWN}電車庫で修理
@@ -2647,13 +2670,15 @@
STR_REFIT :{BLACK}再装備
STR_REFIT_TIP :{BLACK}貨物の種類を選択してください。Control+クリックすると、再装備をキャンセルします。
STR_REFIT_ORDER :({STRING}に再装備)
+STR_TIMETABLE_VIEW :{BLACK}時刻表
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}時刻表を表示します
STR_8829_ORDERS :{WHITE}{VEHICLE}(指令)
STR_882A_END_OF_ORDERS :{SETX 10}- - 指令終了 - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}修理
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}鉄道車両が購入できません...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 購入日付:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} 価値:{LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 購入日付:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} 価値:{LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}積み降ろし中
STR_TRAIN_MUST_BE_STOPPED :{WHITE}列車は車庫に止めなければ成らないんです
@@ -2703,6 +2728,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}選択した指令の前/リストの終わりに新規指令を挿入します
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}選択した指令に全負荷まで待つことを強制します
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}選択した指令に降ろすことを強制します
+STR_TIMETABLE_TOOLTIP :{BLACK}時刻表 - 指令を選択するにはクリックします。
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}選択した指令の実行時間を変更します
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}選択した指令の実行時間を消去します
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}遅刻回数をリセットして、車両が定刻になります
STR_SERVICE_HINT :{BLACK}修理が必要でないとこの指令をスキップ
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}価格:{CURRENCY} 重量:{WEIGHT_S}{}最大速度:{VELOCITY} 出力:{POWER}{}運転費:一年間{CURRENCY}{}容量:{CARGO}
STR_885C_BROKEN_DOWN :{RED}故障
@@ -2724,6 +2753,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}鉄道車両の名称が変更できません...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}選択した指令に貨物の降ろすことを含みます
STR_886F_TRANSFER :{BLACK}運搬
+STR_CLEAR_TIME :{BLACK}時間を消去
+STR_RESET_LATENESS :{BLACK}遅刻回数をリセット
STR_TRAIN_STOPPING :{RED}停車中
STR_TRAIN_STOPPING_VEL :{RED}停車中、{VELOCITY}
@@ -2732,8 +2763,20 @@
STR_TRAIN_START_NO_CATENARY :線路は懸垂線がないため、この列車が動けません
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}{STRING}が新登場!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING}が新登場!ー{STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING}が新登場!ー{ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}この車両に時刻表が設定できません...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}車両が駅/バス停のみで停車できます。
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}この車両はこの駅/バス停で停車しません。
+STR_TIMETABLE_CHANGE_TIME :{BLACK}時間を変更
+STR_TIMETABLE_STATUS_ON_TIME :この車両は現在定刻しています
+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}自動時刻
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}最初の旅行の時間を用いて時刻表を作成します
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}道路車両があります
@@ -2749,7 +2792,7 @@
STR_900E_MAX_SPEED :{BLACK}最大速度:{LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}今年の損益:{LTBLUE}{CURRENCY}(昨年:{CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}信頼度:{LTBLUE}{COMMA}% {BLACK}最終修理後の故障回数:{LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}容量:{LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...車庫内に停止しなければなりません
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}道路車両が販売できません...
@@ -2776,6 +2819,8 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}道路車両のリスト - 情報を見るには車両をクリックします
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}選択した道路車両を購入します
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}価格:{CURRENCY}{}最大速度:{VELOCITY}{}運転費:一年間{CURRENCY}{}容量:{CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}容量:{LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}道路車両を名付ける
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}道路車両が名付けません...
@@ -2823,7 +2868,7 @@
STR_9813_MAX_SPEED :{BLACK}最大速度:{LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}今年の損益:{LTBLUE}{CURRENCY}(昨年:{CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}信頼度:{LTBLUE}{COMMA}% {BLACK}最終修理後の故障回数:{LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}容量:{LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}船舶が開始/停止できません...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}船舶が造船所へ回送できません...
@@ -2891,7 +2936,7 @@
STR_A00E_MAX_SPEED :{BLACK}最大速度:{LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}今年の損益:{LTBLUE}{CURRENCY}(昨年:{CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}信頼度:{LTBLUE}{COMMA}% {BLACK}最終修理後の故障回数:{LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 購入年:{LTBLUE}{NUM}{BLACK} 価値:{LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}飛行機が格納庫へ回送できません...
STR_HEADING_FOR_HANGAR :{ORANGE}{STATION}格納庫へ行く
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}{STATION}格納庫へ行く、{VELOCITY}
@@ -2944,6 +2989,8 @@
STR_GO_TO_AIRPORT_HANGAR :{STATION}格納庫へ行く
SERVICE_AT_AIRPORT_HANGAR : {STATION}のハンガーでサービスします
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE}(時刻表)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}{STATION}で飛行船墜落!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}交通事故!UFO と衝突、車両が壊れた!
@@ -3259,6 +3306,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}交通社所有の建物などの透明性を入/切
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}橋の透明性を入/切
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}灯台、送信機などの透明性を入/切
+STR_TRANSPARENT_LOADING_DESC :{BLACK}積み降ろしの表示の透明性を切り替え
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :グループ {COMMA}
@@ -3296,4 +3351,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}今年の収益:{GREEN}{CURRENCY} {BLACK}(昨年:{RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}今年の収益:{RED}{CURRENCY} {BLACK}(昨年:{RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/korean.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/korean.txt Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}맵 가장자리에서 너무 멉니다!
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}맵 가장자리와 너무 가깝습니다!
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}재정이 부족합니다 - {CURRENCY} 이(가) 필요합니다
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}평지가 필요합니다!
STR_0008_WAITING :{BLACK}대기: {WHITE}{STRING}
@@ -496,7 +496,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}지역 당국: {LTBLUE}{STRING}
STR_01A9_NONE :없음
STR_01AA_NAME :{BLACK}이름
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -779,6 +779,7 @@
STR_02C5_DIFFICULTY_SETTINGS :난이도 설정
STR_02C7_CONFIG_PATCHES :패치 구성
STR_NEWGRF_SETTINGS :NewGRF 설정
+STR_TRANSPARENCY_OPTIONS :투명 옵션
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}도시 이름 표시됨
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}역 이름 표시됨
@@ -806,7 +807,6 @@
STR_02DE_MAP_OF_WORLD :전체 지도 보기
STR_EXTRA_VIEW_PORT :추가 뷰포인트
STR_SIGN_LIST :팻말 목록
-STR_TRANSPARENCY_OPTIONS :투명 옵션
STR_02DF_TOWN_DIRECTORY :도시 목록
STR_TOWN_POPULATION :{BLACK}세계 인구: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}뷰포인트 {COMMA}
@@ -1104,6 +1104,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}맵 스크롤 속도: {ORANGE}{STRING}
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_DEFAULT_RAIL_TYPE :{LTBLUE}기본 철도 종류 (새 게임/불러오기 후): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :보통 철도
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :전개 철도
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :모노레일
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :자기부상
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :처음 사용 가능한 것
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :마지막으로 사용 가능한 것
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :가장 많이 사용한 것
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}최대 열차 수: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}최대 자동차 수: {ORANGE}{STRING}
@@ -1187,7 +1198,7 @@
STR_CHEATS :{WHITE}치트
STR_CHEATS_TIP :{BLACK}체크박스는 이전에 사용한 치트를 나타냅니다.
STR_CHEATS_WARNING :{BLACK}경고! 당신은 경쟁자를 속이고 있습니다. 그러한 창피는 영원히 지워지지 않으리란 것을 명심하십시오.
-STR_CHEAT_MONEY :{LTBLUE}재정을 {CURRENCY64} 만큼 증가
+STR_CHEAT_MONEY :{LTBLUE}재정을 {CURRENCY} 만큼 증가
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}플레이어 {ORANGE}{COMMA} (으)로 플레이
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}마법 불도저 (산업시설, 움직이지 못하는 것들 제거) : {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}터널 교차를 허용 : {ORANGE}{STRING}
@@ -1442,9 +1453,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}회사 이름: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}설립: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}회사가치: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}재정 수익: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}작년 수익: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}회사가치: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}재정 수익: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}작년 수익: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}퍼포먼스: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}차량: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1679,7 +1690,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}건물을 먼저 제거하십시오!
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}인구: {ORANGE}{COMMA}{BLACK} 가구수: {ORANGE}{COMMA}
@@ -1712,7 +1723,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}지역당국 정보 보기
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} 지역당국
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}회사 운송 성취도:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}보조금
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}제공되는 보조금:
STR_2027_FROM_TO :{ORANGE}{1:STRING}에서 {2:STRING}까지 {0:STRING} 수송
@@ -1783,7 +1794,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...이미 나무가 심어져 있습니다.
STR_2804_SITE_UNSUITABLE :{WHITE}...알맞지 않은 장소
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}여기에 나무를 심을 수 없습니다...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...팻말 수가 너무 많습니다
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}여기에 팻말을 달 수 없습니다...
STR_280A_SIGN :팻말
@@ -1892,6 +1903,7 @@
STR_3805_COAST_OR_RIVERBANK :해안 또는 강기슭
STR_3806_SHIP_DEPOT :정박소
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...물 위에 지을 수 없습니다
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}운하를 먼저 제거하십시오
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}게임 저장
@@ -1901,9 +1913,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} Mb 남음
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}드라이브를 읽을 수 없음
-STR_4007_GAME_SAVE_FAILED :{WHITE}게임 저장 실패
+STR_4007_GAME_SAVE_FAILED :{WHITE}게임 저장 실패{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}파일을 삭제할 수 없음
-STR_4009_GAME_LOAD_FAILED :{WHITE}게임 불러오기 실패
+STR_4009_GAME_LOAD_FAILED :{WHITE}게임 불러오기 실패{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :내부 오류: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :손상된 세이브 게임 - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :상위 버젼의 세이브 게임입니다
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :파일을 읽을 수 없습니다
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :파일을 쓸 수 없습니다
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}드라이프, 폴더, 저장된 게임 파일의 목록입니다
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}저장될 세이브 파일의 이름입니다.
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}선택된 세이브 파일을 삭제합니다.
@@ -2074,8 +2091,7 @@
STR_SV_STNAME_LOWER :하부 {STRING}
STR_SV_STNAME_HELIPORT :{STRING} 헬리포트
STR_SV_STNAME_FOREST :{STRING} 삼림
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} 정거장 #{NUM}
############ end of savegame specific region!
@@ -2155,7 +2171,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(플레이어 {COMMA})
STR_7004_NEW_FACE :{BLACK}새 얼굴
STR_7005_COLOR_SCHEME :{BLACK}색상
@@ -2167,7 +2183,7 @@
STR_700B_PRESIDENT_S_NAME :매니저 이름
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}회사 이름을 바꿀 수 없습니다...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}매니저 이름을 바꿀 수 없습니다...
-STR_700E_FINANCES :{WHITE}{COMPANY}의 재정 {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY}의 재정 {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}지출/수입
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}건설
@@ -2183,20 +2199,20 @@
STR_701B_SHIP_INCOME :{GOLD}선박 수익
STR_701C_LOAN_INTEREST :{GOLD}이자
STR_701D_OTHER :{GOLD}기타
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}총계:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}수익 그래프
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}수행 이익 그래프
STR_7026_BANK_BALANCE :{WHITE}소유금
STR_7027_LOAN :{WHITE}대출
-STR_MAX_LOAN :{WHITE}최대 대출: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY} 빌리기
-STR_702A_REPAY :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY} 갚기
+STR_MAX_LOAN :{WHITE}최대 대출: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}{SKIP}{SKIP}{CURRENCY} 빌리기
+STR_702A_REPAY :{BLACK}{SKIP}{SKIP}{CURRENCY} 갚기
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...허용된 최대 대출금은 {CURRENCY} 입니다.
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}더이상 돈을 빌릴 수 없습니다...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...값아야할 대출금이 없습니다.
@@ -2235,8 +2251,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}회사 성취도 (최고 1000)
STR_7052_COMPANY_VALUES :{WHITE}회사 가치
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}회사 성취도 순위
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}운송회사에 문제가 생김!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY}이/가 퍼포먼스가 오르지 않아 곧 팔리거나 파산될 위기에 처했습니다!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(매니저)
@@ -2274,7 +2290,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}세계 공황!{}{}경제 전문가들이 경제 슬럼프에 대해 우려를 표망하고 있습니다!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}공황 종료!{}{}무역량의 증대로 경제를 살려낸 결과 산업시설에 대한 신뢰를 가져왔습니다!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}대형/소형 창 크기 토글
-STR_7076_COMPANY_VALUE :{GOLD}회사가치: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}회사가치: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}회사 주식의 25%를 매입
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}회사 주식의 25%를 매도
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}이 회사 주식의 25%를 매입합니다.
@@ -2586,7 +2602,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} 차량기지
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}{STATION}에 처음으로 기차가 도착했습니다!{}사람들이 환호성을 지릅니다!
-STR_8802_DETAILS :{WHITE}{STRING} (상세정보)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (상세정보)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}중간에 기차가 있습니다
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2607,6 +2623,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :{TOWN} 차량기지 급행
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :{TOWN} 차량기지 급행 (점검)
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :여행 (시간표 없음)
+STR_TIMETABLE_TRAVEL_FOR :{STRING}로 여행
+STR_TIMETABLE_STAY_FOR :그리고 {STRING}에 머무름
+STR_TIMETABLE_DAYS :{COMMA} 일
+STR_TIMETABLE_TICKS :{COMMA} 초
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}{TOWN} 차량기지로 가는 중
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}{TOWN} 차량기지로 가는 중 ({VELOCITY})
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}{TOWN} 차량기지로 점검하러 가는중
@@ -2648,13 +2671,15 @@
STR_REFIT :{BLACK}개조
STR_REFIT_TIP :{BLACK}이 경로에서 어떤 화물을 받을 것인지 선택하십시오. CTRL+클릭은 제거입니다.
STR_REFIT_ORDER :({STRING}(으)로 개조)
+STR_TIMETABLE_VIEW :{BLACK}시간표
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}시간표 보기 전환
STR_8829_ORDERS :{WHITE}{VEHICLE} (경로)
STR_882A_END_OF_ORDERS :{SETX 10}- - 경로의 끝 - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}점검
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}기차를 생성할 수 없습니다...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} 가격: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} 가격: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}싣는중 / 내리는중
STR_TRAIN_MUST_BE_STOPPED :{WHITE}차량기지 안에서 정지해있어야 합니다!
@@ -2704,6 +2729,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}선택된 경로 바로 전이나 목록 맨 끝에 새로운 경로를 삽입합니다.
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}선택된 경로에서 모든 화물을 가득 싣도록 변경합니다.
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}선택된 경로에서 모든 화물을 전부 내리도록 변경합니다.
+STR_TIMETABLE_TOOLTIP :{BLACK}시간표 - 경로를 클릭하면 선택합니다.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}선택한 경로가 대기하고 있을 시간 변경
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}선택한 경로의 시간 초기화
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}지각 카운터 초기화, 차량은 제시간으로 운행합니다.
STR_SERVICE_HINT :{BLACK}점검이 필요하면 이 경로를 건너뜁니다.
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}가격: {CURRENCY} 무게: {WEIGHT_S}{}속도: {VELOCITY} 힘: {POWER}{}운행비용: {CURRENCY}/년{}수송량: {CARGO}
STR_885C_BROKEN_DOWN :{RED}고장
@@ -2725,6 +2754,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}차량 타입의 이름을 다시 지정할 수 없습니다...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}선택된 경로에서 모든 화물을 내려서 쌓아놓도록 변경합니다.
STR_886F_TRANSFER :{BLACK}환승
+STR_CLEAR_TIME :{BLACK}시간 초기화
+STR_RESET_LATENESS :{BLACK}지각 카운터 초기화
STR_TRAIN_STOPPING :{RED}정지중
STR_TRAIN_STOPPING_VEL :{RED}{VELOCITY}의 속도로 정지중
@@ -2733,8 +2764,20 @@
STR_TRAIN_START_NO_CATENARY :연결고리가 모자라 운행을 시작할 수 없습니다.
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}신형 {STRING} 자동차가 출시되었습니다!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}신형 {STRING} 자동차가 출시되었습니다! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}신형 {STRING} 자동차가 출시되었습니다! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}차량의 시간표를 정할 수 없습니다...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}정거장에서만 기다릴 수 있습니다.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}이 차량은 이 정거장에 서지 않습니다.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}시간 변경
+STR_TIMETABLE_STATUS_ON_TIME :이 차량은 현재 제시간에 운행하고 있습니다
+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}자동채움
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}첫 여행으로부터의 값으로 시간표 자동 작성
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}중간에 자동차가 있습니다.
@@ -2750,7 +2793,7 @@
STR_900E_MAX_SPEED :{BLACK}최고속력: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}올해 수익: {LTBLUE}{CURRENCY} (작년: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}신뢰도: {LTBLUE}{COMMA}% {BLACK}최근 점검 이후의 고장: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}수송량: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...차고 안에서 정지해있어야 합니다!
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}자동차를 팔 수 없습니다...
@@ -2826,7 +2869,7 @@
STR_9813_MAX_SPEED :{BLACK}최고속력: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}올해 수익: {LTBLUE}{CURRENCY} (작년: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}신뢰도: {LTBLUE}{COMMA}% {BLACK}최근 점검 이후의 고장: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}수송량: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}선박을 운행/중지시킬 수 없습니다...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}선박을 정박소로 보낼 수 없습니다...
@@ -2894,7 +2937,7 @@
STR_A00E_MAX_SPEED :{BLACK}최고속력: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}올해 수익: {LTBLUE}{CURRENCY} (작년: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}신뢰도: {LTBLUE}{COMMA}% {BLACK}최근 점검 이후의 고장: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 생산: {LTBLUE}{NUM}{BLACK} 가격: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}항공기를 격납고로 보낼 수 없습니다...
STR_HEADING_FOR_HANGAR :{ORANGE}{STATION}공항 격납고로 가는 중
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}{STATION}공항 격납고로 가는 중 ({VELOCITY})
@@ -2947,6 +2990,8 @@
STR_GO_TO_AIRPORT_HANGAR :{STATION}공항 격납고로 가는 중
SERVICE_AT_AIRPORT_HANGAR :{STATION}공항 격납고로 점검하러 가는 중
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (시간표)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}{STATION}에서 체펠린 재앙이 발생했습니다!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}UFO의 폭격으로 자동차가 파괴되었습니다!
@@ -3262,6 +3307,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}정거장, 차량기지, 웨이포인트, 연결고리와 같은 건설 가능한 것들에 대한 투명 전환
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}다리 투명 전환
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}등대와 안테나와 같은 구조물 투명 전환
+STR_TRANSPARENT_LOADING_DESC :{BLACK}적재 정도 투명 전환
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :그룹 {COMMA}
@@ -3299,4 +3352,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}올해 수입: {GREEN}{CURRENCY} {BLACK}(작년: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}올해 수입: {RED}{CURRENCY} {BLACK}(작년: {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/lithuanian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/lithuanian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Už žemelapio kraštų
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Per arti žemėlapio krašto
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Neužtenka lėšų: reikia {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Paviršius turi būti lygus
STR_0008_WAITING :{BLACK}Laukia: {WHITE}{STRING}
@@ -526,7 +526,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Vietos valdžia: {LTBLUE}{STRING}
STR_01A9_NONE :Nėra
STR_01AA_NAME :{BLACK}Vardas
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -1185,7 +1185,7 @@
STR_CHEATS :{WHITE}Sukciavimai
STR_CHEATS_TIP :{BLACK}Laukeliai rodo ar jus naudojote si triuka pries tai
STR_CHEATS_WARNING :{BLACK}Demesio! Tu bandai isduoti vargsus savo varzovus. Tai bus tavo geda visiems laikams ir niekada neuzmirsta.
-STR_CHEAT_MONEY :{LTBLUE}Padauginti pinigu {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Padauginti pinigu {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Zaisti uz zaideja: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magiskas buldozeris (pasalina gamyklas ir kt.): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tuneliai gali susikirsti: {ORANGE}{STRING}
@@ -1414,9 +1414,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Kompanijos pavadinimas: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Pradejo zaisti: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Kompanijos verte: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Dabartinis balansas: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Praeitu metu pajamos: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Kompanijos verte: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Dabartinis balansas: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Praeitu metu pajamos: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Sparta: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Transporto priemones: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1623,7 +1623,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Pirmiau reikia nugriauti pastatą
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Populiacija: {ORANGE}{COMMA}{BLACK} Namų skaičius: {ORANGE}{COMMA}
@@ -1656,7 +1656,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Rodyti informaciją apie valdzią
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} vietinė valdžia
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Transporto kompanijų reitingai:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subsidijos
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Dar nepanaudotos subsidijos:
STR_2027_FROM_TO :{ORANGE}{STRING} iš {STRING} į {STRING}
@@ -1727,7 +1727,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...medis jau yra
STR_2804_SITE_UNSUITABLE :{WHITE}...netinkama vieta
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Neįmanoma pasodinti medžio...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...per daug ženklų
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Čia ženklo statyti negalima...
STR_280A_SIGN :Ženklas
@@ -1839,9 +1839,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} Mb laisva
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Negali pasiekti disko
-STR_4007_GAME_SAVE_FAILED :{WHITE}Zaidimo issaugoti nepavyko
+STR_4007_GAME_SAVE_FAILED :{WHITE}Zaidimo issaugoti nepavyko{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Failo istrinti nepavyko
-STR_4009_GAME_LOAD_FAILED :{WHITE}Zaidimo atverti nepavyko
+STR_4009_GAME_LOAD_FAILED :{WHITE}Zaidimo atverti nepavyko{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Disku, katalogu ir issaugotu zaidimu sarasas
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Pasirinktas zaidimas
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Istrinti pasirinkta zaidima
@@ -2090,7 +2090,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Zaidejas {COMMA})
STR_7004_NEW_FACE :{BLACK}Naujas veidas
STR_7005_COLOR_SCHEME :{BLACK}Spalva
@@ -2102,7 +2102,7 @@
STR_700B_PRESIDENT_S_NAME :Direktoriaus vardas
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Kompanijos vardo pakeisti negalima...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Direktoriaus vardo pakeisti negalima...
-STR_700E_FINANCES :{WHITE}{COMPANY} Finansai {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Finansai {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Sanaudos/Pajamos
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Konstrukcijos
@@ -2118,20 +2118,20 @@
STR_701B_SHIP_INCOME :{GOLD}Laivu pajamos
STR_701C_LOAN_INTEREST :{GOLD}Paskolos palukanos
STR_701D_OTHER :{GOLD}Kita
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Viso:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Pajamu diagrama
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Įprastinės veiklos pelno diagrama
STR_7026_BANK_BALANCE :{WHITE}Saskaitos balansas
STR_7027_LOAN :{WHITE}Paskola
-STR_MAX_LOAN :{WHITE}Maksimali paskola: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Skolintis{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Grazinti{SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Maksimali paskola: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Skolintis{SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Grazinti{SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...skolintis maksimaliai galima {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Daugiau skolintis negalima...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...kreditas grazintas
@@ -2170,8 +2170,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Kompanijos pajegumo reitingas (maksimalus=1000)
STR_7052_COMPANY_VALUES :{WHITE}Kompanijos verte
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Kompaniju lentele
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Transporto kompanija susidure su sunkumais!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} kompanija bus parduota arba bankrutuos nebent reikalai pasitaisys!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Valdytojas)
@@ -2209,7 +2209,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Pasauline krize!{}{}Ekonomikai griuvant, finansu ekspertai bijo paties blogiausio!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Krize iveikta!{}{}Prekybos pagyvejimas suteikia naujas viltis pramones imonems!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Pakeisti lango dydi
-STR_7076_COMPANY_VALUE :{GOLD}Kompanijos verte: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Kompanijos verte: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Pirkti 25% kompanijos akciju
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Parduoti 25% kompanijos akciju
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Pirkti 25% sios kompanijos akciju
@@ -2519,7 +2519,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Traukinių depas
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Gyventojai džiūgauja. . .{}Pirmas traukinys atvažiavo į {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detales)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detales)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Traukinys kelyje
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2586,8 +2586,8 @@
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Remontas
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Gelezinkelio transporto priemones nupirkti negalima...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Pastatyta: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Verte: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Pastatyta: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Verte: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Pasikrauna / Issikrauna
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Traukinys turi buti sustabdytas depe
@@ -2675,7 +2675,7 @@
STR_900E_MAX_SPEED :{BLACK}Maks. greitis: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Pelnas šiais metais: {LTBLUE}{CURRENCY} (pernai: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Patikimumas: {LTBLUE}{COMMA}% {BLACK}Sugedo po paskutinio remonto: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Talpa: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...automobilis turi buti sustabdytas garaze
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Automobilio parduoti negalima...
@@ -2747,7 +2747,7 @@
STR_9813_MAX_SPEED :{BLACK}Maks. greitis: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Pelnas šiais metais: {LTBLUE}{CURRENCY} (pernai: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Patikimumas: {LTBLUE}{COMMA}% {BLACK}Gedimai po paskutinio remonto: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Talpa: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Sustabdyti/paleisti laivo negalima...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Nusiusti i laivu depa negalima...
@@ -2815,7 +2815,7 @@
STR_A00E_MAX_SPEED :{BLACK}Maks. greitis: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Pelnas šiais metais: {LTBLUE}{CURRENCY} (pernai: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Patikimumas: {LTBLUE}{COMMA}% {BLACK}Gedimai po paskutinio remonto: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Pastatytas: {LTBLUE}{NUM}{BLACK} Verte: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Negalima lektuvo nusiusti i angara...
STR_HEADING_FOR_HANGAR :{ORANGE}Kursas: {STATION} angaras
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Kursas: {STATION} angarasangar, {VELOCITY}
--- a/src/lang/norwegian_bokmal.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/norwegian_bokmal.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Utenfor kartet
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}For nært kanten av kartet
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Du har ikke nok penger - du trenger {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Flatt land er nødvendig
STR_0008_WAITING :{BLACK}Venter: {WHITE}{STRING}
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Lokal myndighet: {LTBLUE}{STRING}
STR_01A9_NONE :Ingen
STR_01AA_NAME :{BLACK}Navn
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1.
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Vanskelighetsgrad
STR_02C7_CONFIG_PATCHES :Konfigurer patcher
STR_NEWGRF_SETTINGS :Innstillinger for ny grafikk
+STR_TRANSPARENCY_OPTIONS :Instillinger for gjennomsiktighet
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Vis bynavn
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Vis stasjonsnavn
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :Verdenskart
STR_EXTRA_VIEW_PORT :Ekstra vindu
STR_SIGN_LIST :Skiltliste
-STR_TRANSPARENCY_OPTIONS :Instillinger for gjennomsiktighet
STR_02DF_TOWN_DIRECTORY :Byoversikt
STR_TOWN_POPULATION :{BLACK}Verdensbefolkning: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vindu {COMMA}
@@ -1183,7 +1183,7 @@
STR_CHEATS :{WHITE}Juks
STR_CHEATS_TIP :{BLACK}Avkrysningsbokser indikerer at du har brukt denne juksekoden tidligere.
STR_CHEATS_WARNING :{BLACK}Advarsel! Vær klar over at du er i ferd med å bedra dine motstandere og at straffen for slike handlinger er evig tid i skjærsilden.
-STR_CHEAT_MONEY :{LTBLUE}Øk pengebeholdningen med {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Øk pengebeholdningen med {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Spiller som spiller: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magisk bulldoser (fjern industrier, ufjernbare ting): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tuneller kan krysse hverandre: {ORANGE}{STRING}
@@ -1430,9 +1430,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Firmaname: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Innviet: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Firmaverdi: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Balanse nå: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Inntekt i fjor: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Firmaverdi: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Balanse nå: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Inntekt i fjor: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Nettverksytelse: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Kjøretøy: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1648,7 +1648,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Bygningen må rives først
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Innbyggertall: {ORANGE}{COMMA}{BLACK} Antall hus: {ORANGE}{COMMA}
@@ -1681,7 +1681,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Vis informasjon om bystyret
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN}s bystyre
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Vurdering av transportfirma:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subsidier
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Tilbudte subsidier:
STR_2027_FROM_TO :{ORANGE}{STRING} fra {STRING} til {STRING}
@@ -1752,7 +1752,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...det er allerede et tre her
STR_2804_SITE_UNSUITABLE :{WHITE}...upassende område
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Kan ikke plante trær her...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...for mange skilt
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Kan ikke plassere skilt her...
STR_280A_SIGN :Skilt
@@ -1864,9 +1864,11 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabyte ledig
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke lese fra disk
-STR_4007_GAME_SAVE_FAILED :{WHITE}Lagring av spillet mislyktes
+STR_4007_GAME_SAVE_FAILED :{WHITE}Lagring av spillet mislyktes{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil
-STR_4009_GAME_LOAD_FAILED :{WHITE}Feil ved fremhenting av spill
+STR_4009_GAME_LOAD_FAILED :{WHITE}Feil ved fremhenting av spill{}{STRING}
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Kan ikke lese filen
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Kan ikke skrive til filen
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Liste over disker, mapper og lagrede spill
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Gjeldende navn for valgt lagret spill
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Slett valgte lagring
@@ -2037,7 +2039,7 @@
STR_SV_STNAME_LOWER :Nedre {STRING}
STR_SV_STNAME_HELIPORT :{STRING} helikopterstasjon
STR_SV_STNAME_FOREST :{STRING}skogen
-
+STR_SV_STNAME_FALLBACK :{STRING} Stasjon #{NUM}
############ end of savegame specific region!
@@ -2074,6 +2076,7 @@
############ range for difficulty settings ends
STR_26816_NONE :Ingen
+STR_NUM_VERY_LOW :Veldig lav
STR_6816_LOW :Lite
STR_6817_NORMAL :Normal
STR_6818_HIGH :Høyt
@@ -2116,7 +2119,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Spiller {COMMA})
STR_7004_NEW_FACE :{BLACK}Nytt ansikt
STR_7005_COLOR_SCHEME :{BLACK}Firmafarge
@@ -2128,7 +2131,7 @@
STR_700B_PRESIDENT_S_NAME :Sjefens navn
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Kan ikke endre firmanavn...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Kan ikke bytte navn på sjefen...
-STR_700E_FINANCES :{WHITE}{COMPANY}s regnskap{BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY}s regnskap{BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Kostnader/inntekter
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Konstruksjon
@@ -2144,20 +2147,20 @@
STR_701B_SHIP_INCOME :{GOLD}Inntekter fra skip
STR_701C_LOAN_INTEREST :{GOLD}Renter
STR_701D_OTHER :{GOLD}Annet
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Totalt:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Inntektsgraf
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Overskuddsgraf
STR_7026_BANK_BALANCE :{WHITE}Saldo
STR_7027_LOAN :{WHITE}Lån
-STR_MAX_LOAN :{WHITE}Maks lån: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Låne mer ({SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY})
-STR_702A_REPAY :{BLACK}Betale tilbake ({SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY})
+STR_MAX_LOAN :{WHITE}Maks lån: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Låne mer ({SKIP}{SKIP}{CURRENCY})
+STR_702A_REPAY :{BLACK}Betale tilbake ({SKIP}{SKIP}{CURRENCY})
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maksimalt lån er {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan ikke låne mer penger...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...lånet er allerede betalt tilbake
@@ -2196,8 +2199,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Prestasjonsvudering av firma (maks poeng=1000)
STR_7052_COMPANY_VALUES :{WHITE}Firmaverdi
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Firmarangering
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Transportfirma har problemer!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} vil bli solgt eller nedlagt, hvis ikke firmaets økonomi tar seg opp!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Sjef)
@@ -2235,7 +2238,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Verdenskrise!{}{}Økonomer frykter det verste. Nedgangstider i møte.
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Verdenskrise over!{}{}Opptur i markedet gir industrien selvsikkerheten tilbake.
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Bytte mellom stor/liten vindustørrelse
-STR_7076_COMPANY_VALUE :{GOLD}Firmaverdi: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Firmaverdi: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Kjøp 25 % av aksjene i firmaet
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Selg 25 % av aksjene du eier
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Kjøp 25 % av aksjene i firmaet
@@ -2545,7 +2548,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} togstall
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Innbyggerne jubler . . .{}Første tog ankommer {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detaljer)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detaljer)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Tog i veien
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2566,6 +2569,9 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Kjør uten å stoppe til {TOWN} togstall
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Vedlikehold (uten å stoppe) ved {TOWN} togstall
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_DAYS :{COMMA} dag{P "" s}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Er på vei til {TOWN} togstall
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Er på vei til {TOWN} togstall, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Vedlikehold ved {TOWN} togstall
@@ -2607,13 +2613,14 @@
STR_REFIT :{BLACK}Bygg om
STR_REFIT_TIP :{BLACK}Velg varetypen det skal endres til. CTRL-klikk for å omgjøre.
STR_REFIT_ORDER :(Bygg om til {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Tidstabell
STR_8829_ORDERS :{WHITE}{VEHICLE} (Ordre)
STR_882A_END_OF_ORDERS :{SETX 10}- - Slutt på ordre - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Vedlikehold
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Kan ikke bygge jernbanekjøretøy...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Verdi: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Laster på/av
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Toget må være stoppet i togstallen
@@ -2623,6 +2630,9 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Kan ikke sette inn ny ordre...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Kan ikke slette denne ordren...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Kan ikke endre denne ordren...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Kan ikke flytte ordren...
+STR_CAN_T_SKIP_ORDER :{WHITE}Kan ikke hoppe over nåverende ordre...
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}Kan ikke hoppe over den valgte ordren...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Kan ikke flytte kjøretøy...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}Bakmaskinen vil alltid følge det fremste motstykket
STR_8838_N_A :N/A{SKIP}
@@ -2688,8 +2698,16 @@
STR_TRAIN_START_NO_CATENARY :Dette sporet mangler et kjede, så toget kan ikke starte
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Ny {STRING} nå tilgjengelig!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING} Nå tilgjengelig! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING} Nå tilgjengelig! - {ENGINE}
+
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Kjøretøy kan bare vente på stasjoner.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Dette kjøretøyet stopper ikke på denne stasjonen.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Skift Tid
+STR_TIMETABLE_STATUS_ON_TIME :Dette kjøretøyet går på tid
+STR_TIMETABLE_STATUS_LATE :Dette kjøretøyet er {STRING} for sent ute
+STR_TIMETABLE_STATUS_EARLY :Dette kjøretøyet er {STRING} for tidlig ute
+STR_TIMETABLE_AUTOFILL :{BLACK}Fyll automatisk
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Kjøretøy i veien
@@ -2705,7 +2723,7 @@
STR_900E_MAX_SPEED :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY} (sist år: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Pålitelighet: {LTBLUE}{COMMA} % {BLACK}Havarier siden forrige vedlikehold: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kapasitet: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...må være stoppet i en garasje
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Kan ikke selge kjøretøy...
@@ -2732,6 +2750,8 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Kjøretøyliste - trykk på kjøretøy for mer informasjon
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Bygg det valgte kjøretøyet
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Koster: {CURRENCY}{}Fart: {VELOCITY}{}Driftkostnader: {CURRENCY}/år{}Kapasitet: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Kapasitet: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Navngi kjøretøy
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Kan ikke navngi kjøretøy...
@@ -2777,7 +2797,7 @@
STR_9813_MAX_SPEED :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY} (sist år: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Pålitelighet: {LTBLUE}{COMMA} % {BLACK}Havarier siden forrige vedlikehold: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kapasitet: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Kan ikke starte/stoppe skip...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Kan ikke sende skip til depotet...
@@ -2845,7 +2865,7 @@
STR_A00E_MAX_SPEED :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY} (forrige år: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Pålitelighet: {LTBLUE}{COMMA} % {BLACK}Havarier siden forrige vedlikehold: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygget: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Kan ikke sende fly til hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Er på vei til {STATION} hangar
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Er på vei til {STATION} hangar, {VELOCITY}
@@ -2898,6 +2918,8 @@
STR_GO_TO_AIRPORT_HANGAR :Fly til {STATION} hangar
SERVICE_AT_AIRPORT_HANGAR :Vedlikehold ved {STATION} hangar
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Tidstabell)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelinulykke på {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Kjøretøy ødelagt i UFO-kollisjon!
@@ -3211,10 +3233,50 @@
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Skru på gjennomsiktighet for broer
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Skru på gjennomsiktighet for fyrtårn og antenner
-##### Mass Order
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+##### Mass Order
+STR_GROUP_NAME_FORMAT :Gruppe {COMMA}
+STR_GROUP_TINY_NAME :{TINYFONT}{GROUP}
+STR_GROUP_ALL_TRAINS :Alle tog
+STR_GROUP_ALL_ROADS :Alle kjøretøyer
+STR_GROUP_ALL_SHIPS :Alle båter
+STR_GROUP_ALL_AIRCRAFTS :Alle flyfartøy
+STR_GROUP_TINY_NUM :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE :Legg til delte kjøretøy
+STR_GROUP_REMOVE_ALL_VEHICLES :Fjern alle kjøretøy
+STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} Tog{P "" s}
+STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} Kjøretøy{P "" s}
+STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} Skip{P "" s}
+STR_GROUP_AIRCRAFTS_CAPTION :{WHITE}{GROUP} - {COMMA} Luftfartøy
+STR_GROUP_RENAME_CAPTION :{BLACK}Gi nytt navn på gruppen
+STR_GROUP_REPLACE_CAPTION :{WHITE}Skift kjøretøyer i "{GROUP}"
+STR_GROUP_CAN_T_CREATE :{WHITE}Kan ikke opprette gruppe...
+STR_GROUP_CAN_T_DELETE :{WHITE}Kan ikke slette denne gruppen...
+STR_GROUP_CAN_T_RENAME :{WHITE}Kan ikke gi nytt navn på denne gruppen...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Kan ikke fjerne alle kjøretøy fra denne gruppen...
+STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Kan ikke legge til kjøretøy i denne grupppen...
+STR_GROUP_DELETE_TIP :{BLACK}Fjern den valgte gruppen
+STR_GROUP_RENAME_TIP :{BLACK}Gi nytt navn på den valgte gruppen
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Overskudd i år: {GREEN}{CURRENCY} {BLACK}(i fjor: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Overskudd i år: {RED}{CURRENCY} {BLACK}(i fjor: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Overskudd i år: {GREEN}{CURRENCY} {BLACK}(i fjor: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Overskudd i år: {RED}{CURRENCY} {BLACK}(i fjor: {RED}{CURRENCY}{BLACK})
+
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
########
--- a/src/lang/norwegian_nynorsk.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/norwegian_nynorsk.txt Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Utføre kartet
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}For nært kanten av kartet
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Du har ikkje nok pengar - du treng {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Flatt land er naudsynt
STR_0008_WAITING :{BLACK}Ventar: {WHITE}{STRING}
@@ -496,7 +496,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Lokale styresmaktar: {LTBLUE}{STRING}
STR_01A9_NONE :Ingen
STR_01AA_NAME :{BLACK}Namn
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1.
@@ -779,6 +779,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Vanskegrad
STR_02C7_CONFIG_PATCHES :Konfigurer patcher
STR_NEWGRF_SETTINGS :Instillingar for ny grafikk
+STR_TRANSPARENCY_OPTIONS :Gjennomsiktigheitsinnstillingar
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Vis namn på by
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Vis namn på stasjon
@@ -806,7 +807,6 @@
STR_02DE_MAP_OF_WORLD :Verdskart
STR_EXTRA_VIEW_PORT :Ekstra vindauge
STR_SIGN_LIST :Skiltliste
-STR_TRANSPARENCY_OPTIONS :Gjennomsiktigheitsinnstillingar
STR_02DF_TOWN_DIRECTORY :Byoversikt
STR_TOWN_POPULATION :{BLACK}Verdsinnbyggjartal: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vindauge {COMMA}
@@ -1090,6 +1090,7 @@
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Gjer vedlikehald på helikopter automatisk på helikopterlandingsplassar: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Koble landskapsverktøylinja til tog-/vei-/vass- og flyplassverktøylinjene: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Ved rulling med musa, flytt synsvinkelen i den motsette retninga: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}glatt scrolling: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Vis eit målingverktøytips når ymse byggjeverktøy brukast: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Vis firmaovertakingar: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES_NONE :Ingen
@@ -1103,6 +1104,9 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Fart på rullehjul: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Bruk lasteindikatorar: {ORANGE}{STRING}
+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_MAX_TRAINS :{LTBLUE}Maks antal tog per speler: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Maks antal køyretøy per spelar: {ORANGE}{STRING}
@@ -1186,7 +1190,7 @@
STR_CHEATS :{WHITE}Juks
STR_CHEATS_TIP :{BLACK}Avkrysningsbokser fortel at du har nytta denne juksekoden tidlegare
STR_CHEATS_WARNING :{BLACK}Åtvaring! Du skal vete at du er i ferd med å gjera motspelarane ein stor urett. Gud tilgjev, men det er ikkje sikkert at venene dine gjer det same.
-STR_CHEAT_MONEY :{LTBLUE}Auk lommeboka di med {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Auk lommeboka di med {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Spelar som speler: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magisk bulldoser (fjern industriar, ufjernbare ting): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnelar kan krysse kvarandre: {ORANGE}{STRING}
@@ -1441,9 +1445,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Firmanamn: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Skipa: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Firmaverdi: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Noverande saldo: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Inntekt i fjor: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Firmaverdi: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Noverande saldo: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Inntekt i fjor: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Nettverksyting: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Køyretøy: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1678,7 +1682,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Bygningen må rivst først
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Innbyggjartal: {ORANGE}{COMMA}{BLACK} Antal hus: {ORANGE}{COMMA}
@@ -1711,7 +1715,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Vis informasjon om bystyret
STR_2022_LOCAL_AUTHORITY :{WHITE}Bystyret i {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Vurdering av transportfirma:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subsidiar
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Tilbydde subsidiar:
STR_2027_FROM_TO :{ORANGE}{STRING} frå {STRING} til {STRING}
@@ -1782,7 +1786,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...det er allereie eit tre her
STR_2804_SITE_UNSUITABLE :{WHITE}...uhøveleg område
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Kan ikkje plante tre her...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...for mange skilt
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Kan ikkje plassere skilt her...
STR_280A_SIGN :Skilt
@@ -1891,6 +1895,7 @@
STR_3805_COAST_OR_RIVERBANK :Kyst eller elvebreidd
STR_3806_SHIP_DEPOT :Skipsdepot
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Kan ikkje byggje på vatn
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Må fjerna kanal først
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Lagre spel
@@ -1900,9 +1905,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabyte ledig
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikkje lese frå disk
-STR_4007_GAME_SAVE_FAILED :{WHITE}Lagring av spelet mislukkast
+STR_4007_GAME_SAVE_FAILED :{WHITE}Lagring av spelet mislukkast{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikkje slette fil
-STR_4009_GAME_LOAD_FAILED :{WHITE}Feil ved henting av spel
+STR_4009_GAME_LOAD_FAILED :{WHITE}Feil ved henting av spel{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern feil: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Det lagra spelet er øydelagd - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Dette spelet er lagra frå ei nyare utgåve
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Kan ikkje lesa fil
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Kan ikkje skriva fil
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Liste over diskar, mapper og lagra spel
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Gjeldande namn for vald lagra spel
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Slett valde lagra spel
@@ -2074,7 +2084,7 @@
STR_SV_STNAME_HELIPORT :{STRING} helikopterstasjon
STR_SV_STNAME_FOREST :{STRING}skogen
-STR_SV_GROUP_NAME :{GROUP}
+
############ end of savegame specific region!
@@ -2154,7 +2164,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Spelar {COMMA})
STR_7004_NEW_FACE :{BLACK}Nytt andlet
STR_7005_COLOR_SCHEME :{BLACK}Firmafarge
@@ -2166,7 +2176,7 @@
STR_700B_PRESIDENT_S_NAME :Namnet til sjefen
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Kan ikkje endre firmanamn...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Kan ikkje byte namn på sjefen...
-STR_700E_FINANCES :{WHITE}Rekneskapen til {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}Rekneskapen til {COMPANY} {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Kostnader/inntekter
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Konstruksjon
@@ -2182,20 +2192,20 @@
STR_701B_SHIP_INCOME :{GOLD}Inntekter frå skip
STR_701C_LOAN_INTEREST :{GOLD}Renter
STR_701D_OTHER :{GOLD}Anna
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Totalt:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Graf over inntekter
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Graf over overskot
STR_7026_BANK_BALANCE :{WHITE}Saldo
STR_7027_LOAN :{WHITE}Lån
-STR_MAX_LOAN :{WHITE}Maks lån: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Lån meir ({SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY})
-STR_702A_REPAY :{BLACK}Betal attende ({SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY})
+STR_MAX_LOAN :{WHITE}Maks lån: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Lån meir ({SKIP}{SKIP}{CURRENCY})
+STR_702A_REPAY :{BLACK}Betal attende ({SKIP}{SKIP}{CURRENCY})
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maksimalt lån er {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan ikkje låne meir pengar...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...lånet er allereie betalt attende
@@ -2234,8 +2244,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Prestasjonsvurdering av firma (maks poeng=1000)
STR_7052_COMPANY_VALUES :{WHITE}Firmaverdi
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Firmarangering
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Transportfirma har problemer!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} vil verte seld eller nedlagt, dersom ikkje økonomien til firmaet tek seg opp!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Sjef)
@@ -2273,7 +2283,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Verdskrise!{}{}Økonomar fryktar det verste. Nedgangstider i kjømda.
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Verdskrise over!{}{}Opptur i marknaden gjer industrien sjølvkjensla attende.
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Byt mellom stor/liten storleik på vindauga
-STR_7076_COMPANY_VALUE :{GOLD}Firmaverdi: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Firmaverdi: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Kjøp 25 % av aksjane i firmaet
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Sel 25 % av aksjane du eig
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Kjøp 25 % av aksjane i firmaet
@@ -2585,7 +2595,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} togstall
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Innbyggjarane jublar . . .{}Første tog kjem til {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detaljar)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detaljar)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Tog i vegen
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2616,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Køyr utan stopp til togstallen i {TOWN}
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Vedlikehald (utan å stoppe) ved {TOWN} togstall
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Reis (ikke på rutetabell)
+STR_TIMETABLE_TRAVEL_FOR :Reis i {STRING}
+STR_TIMETABLE_STAY_FOR :stå i {STRING}
+STR_TIMETABLE_DAYS :{COMMA} dag{P "" ar}
+STR_TIMETABLE_TICKS :{COMMA} Tjukk{P "" s}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Er på veg til {TOWN} togstall
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Er på veg til {TOWN} togstall, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Vedlikehald ved {TOWN} togstall
@@ -2647,13 +2664,15 @@
STR_REFIT :{BLACK}Bygg om
STR_REFIT_TIP :{BLACK}Vel varetypen det skal skiftast til. CTRL-klikk for å fjerne ombyggingsinstruksjonar
STR_REFIT_ORDER :(Bygg om til {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Rutetabell
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Bytt til rutetabellvinauge
STR_8829_ORDERS :{WHITE}{VEHICLE} (Ordre)
STR_882A_END_OF_ORDERS :{SETX 10}- - Slutt på ordre - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Vedlikehald
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Kan ikkje byggje jernbanekøyretøy...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Verdi: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Lastar på/av
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Toget må vere stoppa i togstallen
@@ -2663,6 +2682,7 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Kan ikkje setje inn ny ordre...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Kan ikkje slette denne ordren...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Kan ikkje endre denne ordren...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Kan ikkje flytte denne ordra
STR_CAN_T_SKIP_ORDER :{WHITE}Kan ikkje hoppa over gjeldande ordre
STR_CAN_T_SKIP_TO_ORDER :{WHITE}Kan ikkje hoppa til valde ordre
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Kan ikkje flytte køyretøy...
@@ -2702,6 +2722,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Sett inn ein ordre før den valde ordren, eller i slutten av lista
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Alltid fyll køyretøyet ved den valde stasjonen
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Alltid tøm køyretøyet ved den valde stasjonen
+STR_TIMETABLE_TOOLTIP :{BLACK}Rutetabell - klikk på ei ordre for å merka den
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Bytt tida den merka ordra skal bruke
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Fjern tida den merka ordra skal bruke
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Still attende teljaren for forseining, slik at køyretøyet vert presis
STR_SERVICE_HINT :{BLACK}Hopp over ordren dersom ikkje vedlikehald trengst
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Kostnad: {CURRENCY} Vekt: {WEIGHT_S}{}Fart: {VELOCITY} Kraft: {POWER}{}Driftskostnader: {CURRENCY}/år{}Kapasitet: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Havarert
@@ -2723,6 +2747,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Kan ikkje gje tog/vogn nytt namn...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Få den merka ordren til å tvinge køyretøyet til å dumpe lasta
STR_886F_TRANSFER :{BLACK}Overfør
+STR_CLEAR_TIME :{BLACK}Fjern Tid
+STR_RESET_LATENESS :{BLACK}Still attende teljaren for forseining
STR_TRAIN_STOPPING :{RED}Stoppar
STR_TRAIN_STOPPING_VEL :{RED}Stoppar, {VELOCITY}
@@ -2731,8 +2757,16 @@
STR_TRAIN_START_NO_CATENARY :Dette sporet manglar eit kjede, så toget kan ikkje starte
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Ny {STRING}type er tilgjengeleg!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING}type er tilgjengeleg! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING}type er tilgjengeleg! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan ikkje lage rutetabell for køyretøyet
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Køyretøy kan berre venta på stasjonar
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Dette køyretøyet stoppar ikkje på denne stasjonen
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Bytt Tid
+STR_TIMETABLE_STATUS_ON_TIME :Dette køyretøyet er presis
+STR_TIMETABLE_STATUS_LATE :Dette køyretøyet er {STRING} for seint
+STR_TIMETABLE_STATUS_EARLY :Dette køyretøyet er {STRING} for tidleg
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Køyretøy i vegen
@@ -2748,7 +2782,7 @@
STR_900E_MAX_SPEED :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY} (førre år: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Pålitelegskap: {LTBLUE}{COMMA} % {BLACK}Havari sidan førre vedlikehald: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kapasitet: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...må verte stoppa i ein garasje
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Kan ikkje selje køyretøy...
@@ -2775,6 +2809,8 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Køyretøyliste - trykk på køyretøy for meir informasjon
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Bygg det valde køyretøyet
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Kostnad: {CURRENCY}{}Fart: {VELOCITY}{}Driftskostnader: {CURRENCY}/år{}Kapasitet: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Kapasitet: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Namngje køyretøy
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Kan ikkje namngje køyretøy...
@@ -2822,7 +2858,7 @@
STR_9813_MAX_SPEED :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY} (førre år: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Pålitelegskap: {LTBLUE}{COMMA} % {BLACK}Havari sidan førre vedlikehald: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kapasitet: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Kan ikkje starte/stoppe skip...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Kan ikkje sende skip til depotet...
@@ -2890,7 +2926,7 @@
STR_A00E_MAX_SPEED :{BLACK}Maks. fart: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Inntekt i år: {LTBLUE}{CURRENCY} (førre år: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Pålitelegskap: {LTBLUE}{COMMA} % {BLACK}Havari sidan førre vedlikehald: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Bygd: {LTBLUE}{NUM}{BLACK} Verdi: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Kan ikkje sende fly til hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Er på veg til {STATION} hangar
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Er på veg til {STATION} hangar, {VELOCITY}
@@ -2943,6 +2979,8 @@
STR_GO_TO_AIRPORT_HANGAR :Fly til {STATION} hangar
SERVICE_AT_AIRPORT_HANGAR :Service ved {STATION} Hangar.
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Rutetabell)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelinerulukke på {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Køyretøy øydelagd i kollisjon med UFO!
@@ -3258,6 +3296,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Byt gjennomsyn for bygningar som kan byggast, til dømes depot og vegmerker
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Byt gjennomsyn for bruer
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Byt gjennomsyn for bygningar som fyrtårn og antenner, kanskje i framtida for fine effekter
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Bytt gjennomsyn for lasteindikatorar
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Gruppe {COMMA}
@@ -3295,4 +3341,5 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Forteneste i år: {GREEN}{CURRENCY} {BLACK}(førre år: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Forteneste i år: {RED}{CURRENCY} {BLACK}(førre år: {RED}{CURRENCY}{BLACK})
+
########
--- a/src/lang/piglatin.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/piglatin.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Offway edgeway ofway apmay
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Ootay oseclay otay edgeway ofway apmay
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Otnay enoughway ashcay - equiresray {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Atflay andlay equiredray
STR_0008_WAITING :{BLACK}Aitingway: {WHITE}{STRING}
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Ocallay authorityway: {LTBLUE}{STRING}
STR_01A9_NONE :Onenay
STR_01AA_NAME :{BLACK}Amenay
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1stay
@@ -1103,6 +1103,8 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Apmay ollwheelscray eedspay: {ORANGE}{STRING}
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_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_MAX_TRAINS :{LTBLUE}Axmay ainstray erpay ayerplay: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Axmay oadray ehiclesvay erpay ayerplay: {ORANGE}{STRING}
@@ -1186,7 +1188,7 @@
STR_CHEATS :{WHITE}Eatschay
STR_CHEATS_TIP :{BLACK}Eckboxeschay indicateway ifway ouyay avehay usedway isthay eatchay eforebay
STR_CHEATS_WARNING :{BLACK}Arningway! Ouyay areway aboutway otay etraybay ouryay ellowfay ompetitorscay. Eepkay inway indmay atthay uchsay away isgraceday illway ebay ememberedray orfay eternityway.
-STR_CHEAT_MONEY :{LTBLUE}Increaseway oneymay ybay {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Increaseway oneymay ybay {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Ayingplay asway ayerplay: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Agicmay ulldozerbay (emoveray industriesway, unmovablesway): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Unnelstay aymay osscray eachway otherway: {ORANGE}{STRING}
@@ -1441,9 +1443,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Ompanycay amenay: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inaugurationway: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Ompanycay aluevay: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Urrentcay alancebay: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Astlay ear'syay incomeway: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Ompanycay aluevay: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Urrentcay alancebay: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Astlay ear'syay incomeway: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Erformancepay: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Ehiclesvay: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1678,7 +1680,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Uildingbay ustmay ebay emolishedday irstfay
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Opulationpay: {ORANGE}{COMMA}{BLACK} Ouseshay: {ORANGE}{COMMA}
@@ -1711,7 +1713,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Owshay informationway onway ocallay authorityway
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} ocallay authorityway
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Ansporttray ompanycay atingsray:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Ubsidiessay
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Ubsidiessay onway offerway orfay ervicessay akingtay:
STR_2027_FROM_TO :{ORANGE}{STRING} omfray {STRING} otay {STRING}
@@ -1782,7 +1784,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...eetray alreadyway erehay
STR_2804_SITE_UNSUITABLE :{WHITE}...itesay unsuitableway
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}An'tcay antplay eetray erehay...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...ootay anymay ignssay
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}An'tcay aceplay ignsay erehay...
STR_280A_SIGN :Ignsay
@@ -1891,6 +1893,7 @@
STR_3805_COAST_OR_RIVERBANK :Oastcay orway iverbankray
STR_3806_SHIP_DEPOT :Ipshay epotday
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...An'tcay uildbay onway aterway
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Ustmay emolishday analcay irstfay
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Avesay Amegay
@@ -1900,9 +1903,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} egabyte{P "" s}may eefray
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Unableway otay eadray ivedray
-STR_4007_GAME_SAVE_FAILED :{WHITE}Amegay Avesay Ailedfay
+STR_4007_GAME_SAVE_FAILED :{WHITE}Amegay Avesay Ailedfay{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Unableway otay eleteday ilefay
-STR_4009_GAME_LOAD_FAILED :{WHITE}Amegay Oadlay Ailedfay
+STR_4009_GAME_LOAD_FAILED :{WHITE}Amegay Oadlay Ailedfay{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Istlay ofway ivesdray, irectoriesday andway avedsay-amegay ilesfay
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Urrentlycay electedsay amenay orfay avedsay-amegay
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Eleteday ethay urrentlycay electedsay avedsay-amegay
@@ -2074,7 +2077,7 @@
STR_SV_STNAME_HELIPORT :{STRING} Eliporthay
STR_SV_STNAME_FOREST :{STRING} Orestfay
-STR_SV_GROUP_NAME :{GROUP}
+
############ end of savegame specific region!
@@ -2154,7 +2157,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Ayerplay {COMMA})
STR_7004_NEW_FACE :{BLACK}Ewnay Acefay
STR_7005_COLOR_SCHEME :{BLACK}Olourcay Emeschay
@@ -2166,7 +2169,7 @@
STR_700B_PRESIDENT_S_NAME :Anager'smay Amenay
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}An'tcay angechay ompanycay amenay...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}An'tcay angechay anager'smay amenay...
-STR_700E_FINANCES :{WHITE}{COMPANY} Inancesfay {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Inancesfay {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Expenditureway/Incomeway
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Onstructioncay
@@ -2182,20 +2185,20 @@
STR_701B_SHIP_INCOME :{GOLD}Ipshay Incomeway
STR_701C_LOAN_INTEREST :{GOLD}Oanlay Interestway
STR_701D_OTHER :{GOLD}Otherway
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Otaltay:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Incomeway Aphgray
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Operatingway Ofitpray Aphgray
STR_7026_BANK_BALANCE :{WHITE}Ankbay Alancebay
STR_7027_LOAN :{WHITE}Oanlay
-STR_MAX_LOAN :{WHITE}Axmay Oanlay: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Orrowbay {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Epayray {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Axmay Oanlay: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Orrowbay {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Epayray {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...aximummay ermittedpay oanlay izesay isway {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}An'tcay orrowbay anyway oremay oneymay...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...onay oanlay otay epayray
@@ -2234,8 +2237,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Ompanycay erformancepay atingsray (aximummay atingray=1000)
STR_7052_COMPANY_VALUES :{WHITE}Ompanycay aluesvay
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Ompanycay Eaguelay Abletay
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Ansporttray ompanycay inway oubletray!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} illway ebay oldsay offway orway eclaredday ankruptbay unlessway erformancepay increasesway oonsay!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Anagermay)
@@ -2273,7 +2276,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Orldway Ecessionray!{}{}Inancialfay expertsway earfay orstway asway economyway umpsslay!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Ecessionray Overway!{}{}Upturnway inway adetray ivesgay onfidencecay otay industriesway asway economyway engthensstray!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Oggletay argelay/allsmay indowway izesay
-STR_7076_COMPANY_VALUE :{GOLD}Ompanycay aluevay: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Ompanycay aluevay: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Uybay 25% areshay inway ompanycay
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Ellsay 25% areshay inway ompanycay
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Uybay 25% areshay inway isthay ompanycay
@@ -2585,7 +2588,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Aintray Epotday
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Itizenscay elebratecay . . .{}Irstfay aintray arrivesway atway {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Etailsday)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Etailsday)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Aintray inway ethay ayway
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2609,11 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Ogay onnay-opstay otay {TOWN} Aintray Epotday
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Ervicesay onnay-opstay atway {TOWN} Aintray Epotday
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Aveltray (otnay imetabledtay)
+STR_TIMETABLE_STAY_FOR :andway aystay orfay {STRING}
+STR_TIMETABLE_DAYS :{COMMA} ay{P "" s}day
+STR_TIMETABLE_TICKS :{COMMA} ick{P "" s}tay
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Eadinghay orfay {TOWN} Aintray Epotday
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Eadinghay orfay {TOWN} Aintray Epotday, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Ervicesay atway {TOWN} Aintray Epotday
@@ -2647,13 +2655,15 @@
STR_REFIT :{BLACK}Efitray
STR_REFIT_TIP :{BLACK}Electsay atwhay argocay ypetay otay efitray otay inway isthay orderway. Ontrolcay ickclay otay emoveray efitray instructionway
STR_REFIT_ORDER :(Efitray otay {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Imetabletay
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Itchsway otay ethay imetabletay iewvay
STR_8829_ORDERS :{WHITE}{VEHICLE} (Ordersway)
STR_882A_END_OF_ORDERS :{SETX 10}- - Endway ofway Ordersway - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Ervicesay
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}An'tcay uildbay ailwayray ehiclevay...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Oadinglay / Unloadingway
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Aintray ustmay ebay oppedstay insideway away epotday
@@ -2703,6 +2713,9 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Insertway away ewnay orderway eforebay ethay ighlightedhay orderway, orway addway otay endway ofway istlay
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Akemay ethay ighlightedhay orderway orcefay ethay ehiclevay otay aitway orfay away ullfay oadlay
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Akemay ethay ighlightedhay orderway orcefay ethay ehiclevay otay unloadway
+STR_TIMETABLE_TOOLTIP :{BLACK}Imetabletay - ickclay onway anway orderway otay ighlighthay itway.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Angechay ethay amountway ofway imetay atthay ethay ighlightedhay orderway ouldshay aketay
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Earclay ethay amountway ofway imetay orfay ethay ighlightedhay orderway
STR_SERVICE_HINT :{BLACK}Ipskay isthay orderway unlessway away ervicesay isway eedednay
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Ostcay: {CURRENCY} Eightway: {WEIGHT_S}{}Eedspay: {VELOCITY} Owerpay: {POWER}{}Unningray Ostcay: {CURRENCY}/yray{}Apacitycay: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Okenbray ownday
@@ -2732,8 +2745,9 @@
STR_TRAIN_START_NO_CATENARY :Isthay acktray ackslay atenarycay, osay ethay aintray an'tcay artstay
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Ewnay {STRING} ownay availableway!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ewnay {STRING} ownay availableway! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ewnay {STRING} ownay availableway! - {ENGINE}
+
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Oadray ehiclevay inway ethay ayway
@@ -2749,7 +2763,7 @@
STR_900E_MAX_SPEED :{BLACK}Axmay. eedspay: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Ofitpray isthay earyay: {LTBLUE}{CURRENCY} (astlay earyay: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Eliabilityray: {LTBLUE}{COMMA}% {BLACK}Eakdownsbray incesay astlay ervicesay: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Apacitycay: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...ustmay ebay oppedstay insideway away oadray ehiclevay epotday
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}An'tcay ellsay oadray ehiclevay...
@@ -2825,7 +2839,7 @@
STR_9813_MAX_SPEED :{BLACK}Axmay. eedspay: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Ofitpray isthay earyay: {LTBLUE}{CURRENCY} (astlay earyay: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Eliabilityray: {LTBLUE}{COMMA}% {BLACK}Eakdownsbray incesay astlay ervicesay: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Apacitycay: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}An'tcay opstay/artstay ipshay...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}An'tcay endsay ipshay otay epotday...
@@ -2893,7 +2907,7 @@
STR_A00E_MAX_SPEED :{BLACK}Axmay. eedspay: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Ofitpray isthay earyay: {LTBLUE}{CURRENCY} (astlay earyay: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Eliabilityray: {LTBLUE}{COMMA}% {BLACK}Eakdownsbray incesay astlay ervicesay: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Uiltbay: {LTBLUE}{NUM}{BLACK} Aluevay: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}An'tcay endsay aircraftway otay angarhay...
STR_HEADING_FOR_HANGAR :{ORANGE}Eadinghay orfay {STATION} Angarhay
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Eadinghay orfay {STATION} Angarhay, {VELOCITY}
@@ -2946,6 +2960,7 @@
STR_GO_TO_AIRPORT_HANGAR :Ogay otay {STATION} Angarhay
SERVICE_AT_AIRPORT_HANGAR :Ervicesay atway {STATION} Angarhay
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Eppelinzay isasterday atway {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Oadray ehiclevay estroyedday inway 'UFO'WAY ollisioncay!
@@ -3262,6 +3277,7 @@
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Oggletay ansparencytray orfay idgesbray
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Oggletay ansparencytray orfay ucturesstray ikelay ighthouseslay andway antennasway, aybemay inway uturefay orfay eyecandyway
+
##### Mass Order
STR_GROUP_NAME_FORMAT :Oupgray {COMMA}
STR_GROUP_TINY_NAME :{TINYFONT}{GROUP}
--- a/src/lang/polish.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/polish.txt Tue Jun 26 23:40:58 2007 +0000
@@ -5,13 +5,15 @@
##case d c b n m w
##gender m f n
+#
+
##id 0x0000
STR_NULL :
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Poza krawędzią mapy
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Zbyt blisko krawędzi mapy
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Za mało pieniędzy - wymagane {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Wymagany płaski teren
STR_0008_WAITING :{BLACK}Czeka: {WHITE}{STRING}
@@ -546,7 +548,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Lokalne władze: {LTBLUE}{STRING}
STR_01A9_NONE :Brak
STR_01AA_NAME :{BLACK}Nazwa
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1szy
@@ -804,7 +806,7 @@
STR_0283_CONSTRUCT_TOFFEE_QUARRY :{BLACK}Zbuduj Odkrywkę Toffi
STR_0284_CONSTRUCT_SUGAR_MINE :{BLACK}Zbuduj Kopalnię cukru
STR_0285_CAN_T_BUILD_HERE :{WHITE}Nie można tutaj wybudować: {STRING}...
-STR_0286_MUST_BUILD_TOWN_FIRST :{WHITE}...najpierw trzeba wybudować miasto
+STR_0286_MUST_BUILD_TOWN_FIRST :{WHITE}...należy najpierw wybudować miasto
STR_0287_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}...dozwolone jedno na miasto
STR_0288_PLANT_TREES :{BLACK}Posadź drzewa
STR_0289_PLACE_SIGN :{BLACK}Umieść napis
@@ -863,6 +865,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Ustawienia trudności
STR_02C7_CONFIG_PATCHES :Konfiguracja wtyczek
STR_NEWGRF_SETTINGS :Ustawienia newgrf
+STR_TRANSPARENCY_OPTIONS :Opcje przeźroczystości
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Wyświetlanie nazw miast
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Wyświetlanie nazw stacji
@@ -890,7 +893,6 @@
STR_02DE_MAP_OF_WORLD :Mapa świata
STR_EXTRA_VIEW_PORT :Dodatkowy podgląd
STR_SIGN_LIST :Lista tablic
-STR_TRANSPARENCY_OPTIONS :Opcje przeźroczystości
STR_02DF_TOWN_DIRECTORY :Lista miast
STR_TOWN_POPULATION :{BLACK}Populacja świata: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Podgląd {COMMA}
@@ -1007,7 +1009,7 @@
STR_CURR_NLG :Gulden holenderski (NLG)
STR_CURR_NOK :Korona norweska (NOK)
STR_CURR_PLN :Złoty polski (PLN)
-STR_CURR_ROL :Lewy rumuńskie (ROL)
+STR_CURR_ROL :Lej rumuński (ROL)
STR_CURR_RUR :Rubel rosyjski (RUR)
STR_CURR_SIT :Tolar słowenski (SIT)
STR_CURR_SEK :Korona szwedzka (SEK)
@@ -1172,7 +1174,7 @@
STR_CONFIG_PATCHES_STATION_SPREAD :{LTBLUE}Maks. wielkość stacji: {ORANGE}{STRING} {RED}Uwaga: Duże wartości spowalniają grę
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Automatycznie serwisuj helikoptery na lądowiskach: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Przyłącz okno narzędzi krajobrazu do okien środków transportu: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Przewijaj obraz myszka w przeciwnym kierunku: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Przewijaj obraz myszką w przeciwnym kierunku: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Pokaż dymek z pomiarem podczas używania rożnych narzędzi: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Pokaż poboczne schematy koloru: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES_NONE :Żadne
@@ -1215,7 +1217,7 @@
STR_CONFIG_PATCHES_STARTING_YEAR :{LTBLUE}Data rozpoczęcia gry: {ORANGE}{STRING}
STR_CONFIG_PATCHES_ENDING_YEAR :{LTBLUE}Data zakończenia gry: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Pozwól na łagodną ekonomię (więcej małych zmian)
-STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Pozwól kupować odziały w innych firmach
+STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Pozwól kupować udziały w innych firmach
STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}W trakcie przeciągania ustaw sygnały co: {ORANGE}{STRING} kratk{P e i ek}
STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}Automatycznie buduj semafory przed: {ORANGE}{STRING}
@@ -1268,7 +1270,7 @@
STR_CHEATS :{WHITE}Oszukiwanie
STR_CHEATS_TIP :{BLACK}Checkboxy pokazują czy używano już tego oszustwa
STR_CHEATS_WARNING :{BLACK}Uwaga! Właśnie chcesz zdradzić swoich wspólników.{}Miej na uwadze, że zostanie to zapamiętane na wieki!
-STR_CHEAT_MONEY :{LTBLUE}Zwiększ ilość pieniędzy o {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Zwiększ ilość pieniędzy o {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Graj jako gracz: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magiczny buldożer (usuwanie przedsiębiorstw, itp.): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunele mogą się krzyżować: {ORANGE}{STRING}
@@ -1397,8 +1399,8 @@
STR_NETWORK_CONNECTION :{BLACK}Połączenie:
STR_NETWORK_CONNECTION_TIP :{BLACK}Wybierz między grą w internecie a grą w sieci lokalnej
-STR_NETWORK_START_SERVER :{BLACK}Uruchomienie serwera
-STR_NETWORK_START_SERVER_TIP :{BLACK}Uruchomienie własnego serwera
+STR_NETWORK_START_SERVER :{BLACK}Uruchom serwer
+STR_NETWORK_START_SERVER_TIP :{BLACK}Uruchom własny serwer
STR_NETWORK_GAME_NAME :{BLACK}Nazwa
STR_NETWORK_GAME_NAME_TIP :{BLACK}Nazwa gry
@@ -1466,7 +1468,7 @@
STR_NETWORK_NUMBER_OF_SPECTATORS :{BLACK}Maksymalna ilość widzów:
STR_NETWORK_NUMBER_OF_SPECTATORS_TIP :{BLACK}Ogranicz serwer do określonej ilości widzów
STR_NETWORK_COMBO4 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
-STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Wzywany język w grze:
+STR_NETWORK_LANGUAGE_SPOKEN :{BLACK}Używany język:
STR_NETWORK_LANGUAGE_TIP :{BLACK}Inni gracze będą poinformowani jaki język jest używany na serwerze
STR_NETWORK_COMBO5 :{BLACK}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{SKIP}{STRING}
STR_NETWORK_START_GAME :{BLACK}Rozpocznij grę
@@ -1479,6 +1481,31 @@
STR_NETWORK_LANG_ENGLISH :Angielski
STR_NETWORK_LANG_GERMAN :Niemiecki
STR_NETWORK_LANG_FRENCH :Francuski
+STR_NETWORK_LANG_BRAZILIAN :Brazylijski
+STR_NETWORK_LANG_BULGARIAN :Bułgarski
+STR_NETWORK_LANG_CHINESE :Chiński
+STR_NETWORK_LANG_CZECH :Czeski
+STR_NETWORK_LANG_DANISH :Duński
+STR_NETWORK_LANG_DUTCH :Holenderski
+STR_NETWORK_LANG_ESPERANTO :Esperanto
+STR_NETWORK_LANG_FINNISH :Fiński
+STR_NETWORK_LANG_HUNGARIAN :Węgierski
+STR_NETWORK_LANG_ICELANDIC :Islandzki
+STR_NETWORK_LANG_ITALIAN :Włoski
+STR_NETWORK_LANG_JAPANESE :Japoński
+STR_NETWORK_LANG_KOREAN :Koreański
+STR_NETWORK_LANG_LITHUANIAN :Litewski
+STR_NETWORK_LANG_NORWEGIAN :Norweski
+STR_NETWORK_LANG_POLISH :Polski
+STR_NETWORK_LANG_PORTUGUESE :Portugalski
+STR_NETWORK_LANG_ROMANIAN :Rumuński
+STR_NETWORK_LANG_RUSSIAN :Rosyjski
+STR_NETWORK_LANG_SLOVAK :Słowacki
+STR_NETWORK_LANG_SLOVENIAN :Słoweński
+STR_NETWORK_LANG_SPANISH :Hiszpański
+STR_NETWORK_LANG_SWEDISH :Szwedzki
+STR_NETWORK_LANG_TURKISH :Turecki
+STR_NETWORK_LANG_UKRAINIAN :Ukraiński
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Lobby gry wieloosobowej
@@ -1498,9 +1525,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Nazwa firmy: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguracja: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Wartość firmy: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Bieżący bilans: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Przychód w ostatnim roku: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Wartość firmy: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Bieżący bilans: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Przychód w ostatnim roku: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Wydajność: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Pojazdy: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1639,7 +1666,7 @@
STR_1004_TOO_HIGH :{WHITE}Zbyt wysoko
STR_1005_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nieodpowiednie tory
STR_1007_ALREADY_BUILT :{WHITE}...już zbudowano
-STR_1008_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Najpierw trzeba usunąć tory
+STR_1008_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Należy najpierw usunąć tory
STR_100A_RAILROAD_CONSTRUCTION :{WHITE}Konstrukcja torowiska
STR_TITLE_ELRAIL_CONSTRUCTION :{WHITE}Konstrukcja elektryfikowanego torowiska
STR_100B_MONORAIL_CONSTRUCTION :{WHITE}Konstrukcja torowiska jednoszynowego
@@ -1651,7 +1678,7 @@
STR_1011_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Nie można tutaj ułożyć torów...
STR_1012_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nie można stąd usunąć torów...
STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Nie można stąd usunąć sygnałów...
-STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Orientacja zajezdni
+STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Ukierunkowanie zajezdni
STR_1015_RAILROAD_CONSTRUCTION :Konstrukcja torowiska
STR_TOOLB_ELRAIL_CONSTRUCTION :Konstrukcja elektryfikowanego torowiska
STR_1016_MONORAIL_CONSTRUCTION :Konstrukcja torowiska jednoszynowego
@@ -1664,37 +1691,60 @@
STR_101D_BUILD_RAILROAD_TUNNEL :{BLACK}Budowa tunelu kolejowego
STR_101E_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Przełącz buduj/usuń dla torów i semaforów
STR_101F_BRIDGE_SELECTION_CLICK :{BLACK}Wybór mostu - klik na wybranym moście aby go zbudować
-STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO :{BLACK}Wybierz orientacje zajezdni kolejowej
-STR_1021_RAILROAD_TRACK :Tory
+STR_1020_SELECT_RAILROAD_DEPOT_ORIENTATIO :{BLACK}Wybierz ukierunkowanie zajezdni kolejowej
+STR_1021_RAILROAD_TRACK :Tory kolejowe
STR_1023_RAILROAD_TRAIN_DEPOT :Zajezdnia kolejowa
STR_1024_AREA_IS_OWNED_BY_ANOTHER :{WHITE}...teren jest własnością innej firmy
STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Tory kolejowe ze zwykłą sygnalizacją
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Tory kolejowe z pre-sygnałami
-STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Tory kolejowe z sygnalizacją wyjsciową
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Tory kolejowe z sygnalizacja combo
+STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Tory kolejowe z exit-sygnałami
+STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Tory kolejowe z combo-sygnałami
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Torry kolejowe z normalnymi i pre-sygnałami
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Tory kolejowe z normalnymi i exit-sygnałami
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Tory kolejowe z normalnymi i combo-sygnałami
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Tory kolejowe z pre- i exit-sygnałami
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Tory kolejowe z pre- i combo-sygnałami
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Tory kolejowe z exit- i combo-sygnałami
##id 0x1800
-STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Trzeba najpierw usunąć drogę
+STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Należy najpierw usunąć drogę
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trwają roboty drogowe
STR_1802_ROAD_CONSTRUCTION :{WHITE}Tworzenie dróg
+STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Budowa torowiska tramwajowego
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Wybierz most drogowy
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... drogi jednokierunkowe nie mogą mieć skrzyżowań
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Nie można tutaj zbudować drogi...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Nie można tutaj zbudować torowiska...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Nie można usunąć drogi z tego miejsca...
-STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Orientacja zajezdni samochodowej
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Nie można torowiska z tego miejsca...
+STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Ukierunkowanie zajezdni samochodowej
+STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Orientacja zajezdni
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Nie można tutaj zbudować zajezdni...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Nie można tutaj zbudować zajezdni...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Nie można zbudować przystanku...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Nie można zbudować stacji ciężarówek...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nie można zbudować przystanku tramwajowego...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nie można zbudować tramwajowej stacji załadunkowej...
STR_180A_ROAD_CONSTRUCTION :Budowa drogi
+STR_180A_TRAMWAY_CONSTRUCTION :Budowa torowiska tramwajowego
STR_180B_BUILD_ROAD_SECTION :{BLACK}Sekcja budowy dróg
-STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Zbuduj zajezdnie samochodową (do budowania i serwisowania pojazdów)
+STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Zbuduj fragment torowiska tramwajowego
+STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Zbuduj zajezdnię samochodową (do budowania i serwisowania pojazdów)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Zbuduj zajezdnię tramwajową (do budowania i serwisowania pojazdów)
STR_180D_BUILD_BUS_STATION :{BLACK}Budowa przystanku
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Zbuduj stację załadunku ciężarówek
+STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Zbuduj przystanek tramwajowy
+STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Zbuduj tramwajową stację załadunkową
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Budowa mostu drogowego
+STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Zbuduj most tramwajowy
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Budowa tunelu drogowego
+STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Zbuduj tunel tramwajowy
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Przełącz buduj/usuń dla konstrukcji dróg
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Przełącz buduj/usuń dla konstrukcji torowiska tramwajowego
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Wybierz umiejscowienie zajezdni samochodowej
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Wybierz ukierunkowanie zajezdni tramwajowej
STR_1814_ROAD :Droga
STR_1815_ROAD_WITH_STREETLIGHTS :Droga z oświetleniem ulicznym
STR_1816_TREE_LINED_ROAD :Droga z drzewami
@@ -1702,6 +1752,8 @@
STR_1818_ROAD_RAIL_LEVEL_CROSSING :Przejazd kolejowy
STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Nie można usunąć przystanku...
STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Nie można usunąć stacji załadunkowej...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Nie można usunąć przystanku tramwajowego...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Nie można usunąć tramwajowej stacji załadunkowej...
##id 0x2000
STR_2000_TOWNS :{WHITE}Miasta
@@ -1709,8 +1761,8 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
-STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Budynek musi być najpierw zburzony
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
+STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Należy najpierw zburzyć budynek
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Populacja: {ORANGE}{COMMA}{BLACK} Domów: {ORANGE}{COMMA}
STR_2007_RENAME_TOWN :Zmień nazwę miasta
@@ -1742,7 +1794,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Pokaż informacje o lokalnych władzach
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} lokalne władze
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Ocena transportu firmy:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subsydia
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Oferta subsydiów dla usługi przewozu:
STR_2027_FROM_TO :{ORANGE}{STRING} z {STRING} do {STRING}
@@ -1813,7 +1865,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...drzewo już tu jest
STR_2804_SITE_UNSUITABLE :{WHITE}...niewłaściwe miejsce
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Nie można posadzić drzewa...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...zbyt wiele napisów
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Nie można umieścić napisu...
STR_280A_SIGN :Napis
@@ -1827,7 +1879,7 @@
##id 0x3000
STR_3000_RAIL_STATION_SELECTION :{WHITE}Wybór stacji
STR_3001_AIRPORT_SELECTION :{WHITE}Wybór lotniska
-STR_3002_ORIENTATION :{BLACK}Orientacja
+STR_3002_ORIENTATION :{BLACK}Ukierunkowanie
STR_3003_NUMBER_OF_TRACKS :{BLACK}Ilość peronów
STR_3004_PLATFORM_LENGTH :{BLACK}Długość peronu
STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE}Zbyt blisko innej stacji
@@ -1838,9 +1890,9 @@
STR_3008B_TOO_MANY_TRUCK_STOPS :{WHITE}Za dużo wiele stacji załadunku ciężarówek
STR_3009_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Zbyt blisko innej stacji
STR_300A_0 :{WHITE}{STATION} {STATIONFEATURES}
-STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Najpierw musisz zniszczyć stację
+STR_300B_MUST_DEMOLISH_RAILROAD :{WHITE}Należy najpierw usunąc stację
STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Zbyt blisko innego lotniska
-STR_300E_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Najpierw musisz zniszczyć lotnisko
+STR_300E_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Należy najpierw usunąć lotnisko
STR_3030_RENAME_STATION_LOADING :Zmień nazwę stacji
STR_3031_CAN_T_RENAME_STATION :{WHITE}Nie można zmienić nazwy.
@@ -1864,21 +1916,27 @@
STR_303F_NO_LONGER_ACCEPTS_OR :{WHITE}{STATION} już nie akceptuje {STRING.d} ani {STRING.d}
STR_3040_NOW_ACCEPTS :{WHITE}{STATION} już akceptuje {STRING}
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} już akceptuje {STRING} i {STRING}
-STR_3042_BUS_STATION_ORIENTATION :{WHITE}Orientacja przystanku
-STR_3043_TRUCK_STATION_ORIENT :{WHITE}Orientacja st. załadunku
-STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Najpierw musisz zniszczyć przystanek
-STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Najpierw musisz zniszczyć stację załadunku ciężarówek
+STR_3042_BUS_STATION_ORIENTATION :{WHITE}Ukierunkowanie przystanku
+STR_3043_TRUCK_STATION_ORIENT :{WHITE}Ukierunkowanie st. załadunku
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Ukierunkowanie przystanku tramwajowego
+STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Ukierunkowanie tramwajowej stacji załadunkowej
+STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Należy najpierw usunąć przystanek
+STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Należy najpierw usunąć stację załadunku ciężarówek
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Najpierw musisz zniszczyć przystanek tramwajowy
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Najpierw musisz zniszczyć tramwajową stację załadunkową
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA}
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Nic -
STR_304B_SITE_UNSUITABLE :{WHITE}...niewłaściwe miejsce
STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Zbyt blisko innego portu
-STR_304D_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Najpierw musisz zniszczyć port
-STR_304E_SELECT_RAILROAD_STATION :{BLACK}Wybierz orientacje stacji
+STR_304D_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Należy najpierw usunąć port
+STR_304E_SELECT_RAILROAD_STATION :{BLACK}Wybierz ukierunkowanie stacji
STR_304F_SELECT_NUMBER_OF_PLATFORMS :{BLACK}Wybierz ilość peronów na stacji
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Wybierz długość stacji
-STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Wybierz orientacje przystanku
-STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Orientacja stacji załadunku ciężarówek
+STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Wybierz ukierunkowanie przystanku
+STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Ukierunkowanie stacji załadunku ciężarówek
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Wybierz ukierunkowanie przystanku tramwajowego
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Wybierz ukierunkowanie tramwajowej stacji załadunkowej
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Centruj główny widok na stacji
STR_3054_SHOW_STATION_RATINGS :{BLACK}Pokaż ocenę stacji
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Zmień nazwę stacji
@@ -1908,14 +1966,15 @@
STR_STAT_CLASS_WAYP :Pkt. kontrolne
##id 0x3800
-STR_3800_SHIP_DEPOT_ORIENTATION :{WHITE}Orientacja stoczni
+STR_3800_SHIP_DEPOT_ORIENTATION :{WHITE}Ukierunkowanie stoczni
STR_3801_MUST_BE_BUILT_ON_WATER :{WHITE}...musi być wybudowane na wodzie
STR_3802_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Nie można tutaj wybudować stoczni...
-STR_3803_SELECT_SHIP_DEPOT_ORIENTATION :{BLACK}wybierz orientację stoczni
+STR_3803_SELECT_SHIP_DEPOT_ORIENTATION :{BLACK}wybierz ukierunkowanie stoczni
STR_3804_WATER :Woda
STR_3805_COAST_OR_RIVERBANK :Wybrzeże lub brzeg rzeki
STR_3806_SHIP_DEPOT :Stocznia
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Nie można wybudować na wodzie
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Należy najpierw usunąć kanał
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Zapisz grę
@@ -1925,9 +1984,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} MB wolnego miejsca
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Nie można odczytać napędu
-STR_4007_GAME_SAVE_FAILED :{WHITE}Nie można zapisać gry
+STR_4007_GAME_SAVE_FAILED :{WHITE}Nie można zapisać gry{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Nie można usunąć pliku
-STR_4009_GAME_LOAD_FAILED :{WHITE}Nie można wczytać gry
+STR_4009_GAME_LOAD_FAILED :{WHITE}Nie można wczytać gry{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Błąd wewnętrzny: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Zepsuta zapisana gra - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Zapisana gra zrobiona w nowszej wersji
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Plik nie jest odczytywalny
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Plik nie jest zapisywalny
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Lista napędów, katalogów i zapisanych gier
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Obecnie zaznaczona nazwa dla zapisanej gry
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Skasuj zaznaczoną zapisaną grę
@@ -2046,8 +2110,8 @@
STR_5001_ROAD_VEHICLE_IN_TUNNEL :{WHITE}Samochód w tunelu
STR_5003_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Inny tunel na drodze
STR_5005_UNABLE_TO_EXCAVATE_LAND :{WHITE}Nie można wydrążyć drugiego końca tunelu
-STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Trzeba najpierw zniszczyć tunel
-STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Trzeba najpierw zniszczyć most
+STR_5006_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Należy najpierw usunąć tunel
+STR_5007_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Należy najpierw usunąć most
STR_5008_CANNOT_START_AND_END_ON :{WHITE}Nie można zaczynać i kończyć w tym samym miejscu
STR_5009_LEVEL_LAND_OR_WATER_REQUIRED :{WHITE}Wymagany równy ląd lub woda pod mostem
STR_500A_START_AND_END_MUST_BE_IN :{WHITE}Początek i koniec muszą być w jednej linii
@@ -2134,6 +2198,7 @@
STR_SV_STNAME_LOWER :{STRING} Dolny
STR_SV_STNAME_HELIPORT :{STRING} Lądowisko
STR_SV_STNAME_FOREST :{STRING} Las
+STR_SV_STNAME_FALLBACK :{STRING} Stacja #{NUM}
############ end of savegame specific region!
@@ -2212,7 +2277,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Gracz {COMMA})
STR_7004_NEW_FACE :{BLACK}Nowa Twarz
STR_7005_COLOR_SCHEME :{BLACK}Schemat Koloru
@@ -2224,7 +2289,7 @@
STR_700B_PRESIDENT_S_NAME :Nazwisko prezesa
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Nie można zmienić nazwy firmy...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Nie można zmienić nazwiska prezesa...
-STR_700E_FINANCES :{WHITE}{COMPANY} Finanse {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Finanse {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Wydatki/Przychody
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Konstrukcje
@@ -2240,20 +2305,20 @@
STR_701B_SHIP_INCOME :{GOLD}Przychód ze statków
STR_701C_LOAN_INTEREST :{GOLD}Odsetki od pożyczki
STR_701D_OTHER :{GOLD}Inne
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Łącznie:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Wykres przychodów
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Wykres obrotów
STR_7026_BANK_BALANCE :{WHITE}Bilans bankowy
STR_7027_LOAN :{WHITE}Pożyczka
-STR_MAX_LOAN :{WHITE}Maks. pożyczka: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Pożyczka {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Zwrot {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Maks. pożyczka: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Pożyczka {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Zwrot {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maksymalna dozwolona pożyczka wynosi {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Nie można pożyczyć więcej pieniędzy...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...pożyczka już jest spłacona
@@ -2292,8 +2357,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Ocena działalności firmy (max. ocena=1000)
STR_7052_COMPANY_VALUES :{WHITE}Wartości firm
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Tabela Ligi Firm
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Firma ma problemy!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} będzie odsprzedane lub ogłoszone upadłym jeżeli zysk firmy nie wzrośnie!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Prezes)
@@ -2331,7 +2396,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Światowa recesja!{}{}Eksperci finansowi obawiają się najgorszego z powodu kryzysu!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Koniec recesji!{}{}Polepszenie się transakcji handlowych daje pewność przedsiębiorstwom dzięki umacniającej się ekonomii!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Przełącz duży/mały rozmiar okna
-STR_7076_COMPANY_VALUE :{GOLD}Wartość firmy: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Wartość firmy: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Kup 25% udziałów w firmie
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Sprzedaj 25% udziałów w firmie
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Kup 25% udziałów w tej firmie
@@ -2362,6 +2427,8 @@
STR_LIVERY_HELICOPTER :Helikopter
STR_LIVERY_SMALL_PLANE :Mały samolot
STR_LIVERY_LARGE_PLANE :Duży samolot
+STR_LIVERY_PASSENGER_TRAM :Tramwaj pasażerski
+STR_LIVERY_FREIGHT_TRAM :Tramwaj towarowy
STR_LIVERY_GENERAL_TIP :{BLACK}Pokaż ogólne schematy koloru
STR_LIVERY_TRAIN_TIP :{BLACK}Pokaż schematy koloru pociągów
@@ -2647,7 +2714,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}Zajezdnia w {TOWN}
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Mieszkańcy świętują . . .{}Pierwszy pociąg przybył do {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Szczegóły)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Szczegóły)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Pociąg na drodze
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2668,6 +2735,7 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Idź bez zatrzymywania do zajezdni w {TOWN}
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Idź bez zatrzymywania do serwisu w zajezdni w {TOWN}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Zmierza do zajezdni w {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Zmierza do zajezdni w {TOWN}, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Serwisuj w Zajezdni w {TOWN}
@@ -2714,8 +2782,8 @@
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Serwis
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Nie można wybudować lokomotywy...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Budowa: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Wartość: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Budowa: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Wartość: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Załadunek / Wyładunek
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Pociąg musi być zatrzymany w zajezdni
@@ -2725,6 +2793,8 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Nie można wstawić polecenia...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Nie można usunąć tego polecenia...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Nie można zmodyfikować tego polecenia...
+STR_CAN_T_SKIP_ORDER :{WHITE}Nie można pominąć obecnego zadania...
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}Nie można przejść do wybranego zadania...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Nie można ruszyć pojazdem...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}Tylna lokomotywa zawsze porusza się razem z przednią
STR_8838_N_A :N/D{SKIP}
@@ -2790,8 +2860,9 @@
STR_TRAIN_START_NO_CATENARY :Ta trasa nie jest zelektryfikowana, wiec pociąg nie wystartuje
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Dostępn{G y a e} now{G y a e} {STRING}!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Dostępn{G y a e} now{G y a e} {STRING} - {STRING}!
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Dostępn{G y a e} now{G y a e} {STRING} - {ENGINE}!
+
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Samochód na drodze
@@ -2807,7 +2878,7 @@
STR_900E_MAX_SPEED :{BLACK}Max. prędkość: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Zysk w tym roku: {LTBLUE}{CURRENCY} (ostatni rok: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Niezawodność: {LTBLUE}{COMMA}% {BLACK}Awarie od ostatniego serwisowania: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Zbudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Zbudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Pojemność: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...musi być zatrzymany w zajezdni samochodowej
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Nie można sprzedać samochodu...
@@ -2834,12 +2905,16 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Lista wyboru samochodów - klik na pojeździe po więcej informacji
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Zbuduj wybrany samochód
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Koszt: {CURRENCY}{}Prędkość: {VELOCITY}{}Utrzymanie: {CURRENCY}/rok{}Pojemność: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Pojemność: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Nazwij samochód
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Nie można nazwać samochodu...
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Nazwij samochód
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Mieszkańcy świętują . . .{}Pierwszy autobus przybył do {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Mieszkańcy świętują . . .{}Pierwsza ciężarówka przybyła do {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Mieszkańcy świętują . . .{}Pierwszy tramwaj pasażerski przybył do {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Mieszkańcy świętują . . .{}Pierwszy tramwaj towarowy przybył do {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Wypadek samochodowy!{}Kierowca zginął w zderzeniu z pociągiem
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Wypadek samochodowy!{}{COMMA} ofiar{P a y ""} zderzenia z pociągiem
STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Nie można zawrócić samochodu...
@@ -2879,7 +2954,7 @@
STR_9813_MAX_SPEED :{BLACK}Max. prędkość: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Zysk w tym roku: {LTBLUE}{CURRENCY} (w ostatnim roku: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Niezawodność: {LTBLUE}{COMMA}% {BLACK}Awarie od ostatniego serwisowania: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Wybudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Wybudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Pojemność: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Nie można zatrzymać/ruszyć statku...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Nie można wysłać statku do stoczni...
@@ -2947,7 +3022,7 @@
STR_A00E_MAX_SPEED :{BLACK}Max. prędkość: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Zysk w tym roku: {LTBLUE}{CURRENCY} (w ostatnim roku: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Niezawodność: {LTBLUE}{COMMA}% {BLACK}Awarie od ostatniego serwisowania: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Zbudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Zbudowany: {LTBLUE}{NUM}{BLACK} Wartość: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Nie można wysłać samolotu do hangaru...
STR_HEADING_FOR_HANGAR :{ORANGE}Zmierza do hangaru w {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Zmierza do hangaru w {STATION}, {VELOCITY}
@@ -3000,6 +3075,8 @@
STR_GO_TO_AIRPORT_HANGAR :Idź do hangaru na {STATION}
SERVICE_AT_AIRPORT_HANGAR :Serwisuj w hangarze na {STATION}
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Rozkład jazdy)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Katastrofa Zeppelina na {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Samochód zniszczony w kolizji z 'UFO'!
@@ -3124,6 +3201,7 @@
### depot strings
STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Sprzedasz wszystkie pojazdy z zajezdni. Jesteś pewien?
+STR_DEPOT_WRONG_DEPOT_TYPE :Zły typ zajezdni
STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}Sprzedaj wszystkie pociągi z zajezdni
STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}Sprzedaj wszystkie samochody z zajezdni
@@ -3240,6 +3318,8 @@
STR_START_DATE_QUERY_CAPT :{WHITE}Zmień datę rozpoczęcia
STR_HEIGHTMAP_SCALE_WARNING_CAPTION :{WHITE}Ostrzeżenie o skali
STR_HEIGHTMAP_SCALE_WARNING_MESSAGE :{YELLOW}Nie zaleca się zbyt dużej zmiany wielkości mapy źrodłowej. Kontynuować tworzenie?
+STR_TOWN_LAYOUT_WARNING_CAPTION :{WHITE}Ostrzeżenie o planie miasta
+STR_TOWN_LAYOUT_WARNING_MESSAGE :{YELLOW}Model rozwoju miasta "bez nowych dróg" nie jest polecany. Kontynuować tworzenie?
STR_SNOW_LINE_HEIGHT_NUM :{NUM}
STR_HEIGHTMAP_NAME :{BLACK}Nazwa mapy wysokosci:
STR_HEIGHTMAP_SIZE :{BLACK}Rozmiar: {ORANGE}{NUM} x {NUM}
@@ -3312,3 +3392,51 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Przełącz przeźroczystość infrastruktury takiej jak stacje, zajezdnie, punkty kontrolne i trakcja elektryczna
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Przełącz przeźroczystość mostów
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Przełącz przeźroczystość obiektów takich jak latarnie morskie i nadajniki, być może w przyszłości dodatki graficzne
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Przełącz przeźroczystość wskaźników załadunku
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+
+##### Mass Order
+STR_GROUP_NAME_FORMAT :Grupa {COMMA}
+STR_GROUP_TINY_NAME :{TINYFONT}{GROUP}
+STR_GROUP_ALL_TRAINS :Wszystkie pociągi
+STR_GROUP_ALL_ROADS :Wszystkie samochody
+STR_GROUP_ALL_SHIPS :Wszystkie statki
+STR_GROUP_ALL_AIRCRAFTS :Wszystkie samoloty
+STR_GROUP_TINY_NUM :{TINYFONT}{COMMA}
+STR_GROUP_REMOVE_ALL_VEHICLES :Usuń wszystkie pojazdy
+
+STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} Pociąg{P "" i ów}
+STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} Samoch{P ód ody odów}
+STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} Stat{P ek ki ków}
+STR_GROUP_AIRCRAFTS_CAPTION :{WHITE}{GROUP} - {COMMA} Samolot{P "" y ów}
+STR_GROUP_RENAME_CAPTION :{BLACK}Zmień nazwę grupy
+
+STR_GROUP_CAN_T_CREATE :{WHITE}Nie można stworzyć grupy...
+STR_GROUP_CAN_T_DELETE :{WHITE}Nie można usunąć tej grupy...
+STR_GROUP_CAN_T_RENAME :{WHITE}Nie można zmienić nazwy grupy...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Nie można usunąć wszystkich pojazdów z tej grupy...
+STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Nie można dodać pojazdu do tej grupy...
+
+STR_GROUP_CREATE_TIP :{BLACK}Kliknij aby stworzyć grupę
+STR_GROUP_DELETE_TIP :{BLACK}Usuń zaznaczoną grupę
+STR_GROUP_RENAME_TIP :{BLACK}Zmień nazwę zaznaczonej grupy
+
+STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Zysk w tym roku: {GREEN}{CURRENCY} {BLACK}(w ostatnim roku: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Zysk w tym roku: {RED}{CURRENCY} {BLACK}(w ostatnim roku: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Zysk w tym roku: {GREEN}{CURRENCY} {BLACK}(w ostatnim roku: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Zysk w tym roku: {RED}{CURRENCY} {BLACK}(w ostatnim roku: {RED}{CURRENCY}{BLACK})
+
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
+########
--- a/src/lang/portuguese.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/portuguese.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Fora da borda do mapa
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Muito perto da borda do mapa
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Dinheiro insuficiente - necessário {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}É necessário terreno plano
STR_0008_WAITING :{BLACK}Em espera: {WHITE}{STRING}
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Autoridade local: {LTBLUE}{STRING}
STR_01A9_NONE :Nenhum
STR_01AA_NAME :{BLACK}Nome
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Configurações de dificuldade
STR_02C7_CONFIG_PATCHES :Configurar correcções
STR_NEWGRF_SETTINGS :Definições Newgrf
+STR_TRANSPARENCY_OPTIONS :Opções de Transparência
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Mostrar nomes de cidades
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Mostrar nomes de estações
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :Mapa do mundo
STR_EXTRA_VIEW_PORT :Visualizador extra
STR_SIGN_LIST :Lista de sinais
-STR_TRANSPARENCY_OPTIONS :Opções de Transparência
STR_02DF_TOWN_DIRECTORY :Lista de cidades
STR_TOWN_POPULATION :{BLACK}População Mundial: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Visualizador {COMMA}
@@ -1184,7 +1184,7 @@
STR_CHEATS :{WHITE}Truques
STR_CHEATS_TIP :{BLACK}As caixas de verificação indicam se já usou este truque antes
STR_CHEATS_WARNING :{BLACK}Atenção! Está prestes a trair os seus oponentes. Tenha em conta que isto ficará registado para sempre.
-STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Aumentar dinheiro em {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Jogar pelo jogador: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer mágico (destrói indústrias, etc.): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Os túneis poderão cruzar-se: {ORANGE}{STRING}
@@ -1439,9 +1439,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Nome da empresa: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguração: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Valor da Companhia: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Balanço actual: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Rendimento do último ano: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Valor da Companhia: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Balanço actual: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Rendimento do último ano: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Desempenho: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Veículos: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1651,7 +1651,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}O edifício deve ser demolido primeiro
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}População: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA}
@@ -1684,7 +1684,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Ver informações sobre a autoridade local
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} autoridade local
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Avaliações da companhia de transporte
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subsídios
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Oferta de subsídios para os serviços:
STR_2027_FROM_TO :{ORANGE}{STRING} de {STRING} para {STRING}
@@ -1755,7 +1755,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...árvore já plantada aqui
STR_2804_SITE_UNSUITABLE :{WHITE}...local impróprio
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Impossível plantar árvore aqui...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...demasiados sinais
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Não pode colocar um sinal aqui...
STR_280A_SIGN :Sinal
@@ -1867,9 +1867,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabytes livres
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler unidade
-STR_4007_GAME_SAVE_FAILED :{WHITE}Falha ao Guardar Jogo
+STR_4007_GAME_SAVE_FAILED :{WHITE}Falha ao Guardar Jogo{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível eliminar ficheiro
-STR_4009_GAME_LOAD_FAILED :{WHITE}Falha ao Abrir Jogo
+STR_4009_GAME_LOAD_FAILED :{WHITE}Falha ao Abrir Jogo{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Lista de unidades, directorias e ficheiros de jogos guardados
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Nome escolhido para guardar o jogo
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Eliminar o jogo guardado seleccionado
@@ -2041,7 +2041,7 @@
STR_SV_STNAME_HELIPORT :Heliporto de {STRING}
STR_SV_STNAME_FOREST :Floresta de {STRING}
-STR_SV_GROUP_NAME :{GROUP}
+
############ end of savegame specific region!
@@ -2121,7 +2121,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Jogador {COMMA})
STR_7004_NEW_FACE :{BLACK}Nova Cara
STR_7005_COLOR_SCHEME :{BLACK}Cores
@@ -2133,7 +2133,7 @@
STR_700B_PRESIDENT_S_NAME :Nome do Presidente
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Não é possível alterar o nome da empresa...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Não é possível alterar o nome do presidente...
-STR_700E_FINANCES :{WHITE}{COMPANY} Finanças {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Finanças {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Despesas/Lucros
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Construção
@@ -2149,20 +2149,20 @@
STR_701B_SHIP_INCOME :{GOLD}Lucros dos Barcos
STR_701C_LOAN_INTEREST :{GOLD}Juros do Empréstimo
STR_701D_OTHER :{GOLD}Outros
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Total:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Gráfico de Rendimentos
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Gráfico de Benefícios Operativos
STR_7026_BANK_BALANCE :{WHITE}Balanço Bancário
STR_7027_LOAN :{WHITE}Empréstimo
-STR_MAX_LOAN :{WHITE}Empréstimo Máximo: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Pedir emprestado {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Pagar empréstimo {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Empréstimo Máximo: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Pedir emprestado {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Pagar empréstimo {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...o empréstimo máximo permitido é de {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Não é possível pedir mais dinheiro emprestado...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...não há empréstimo para pagar
@@ -2201,8 +2201,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Avaliações da empresa (máximo=1000)
STR_7052_COMPANY_VALUES :{WHITE}Valor da empresa
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Classificação de Empresas
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Empresa de transportes em dificuldades!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} será vendida ou declarada falida a menos que melhore os seus rendimentos em breve!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Presidente)
@@ -2240,7 +2240,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Retrocesso Mundial!{}{}Especialistas financeiros temem crise económica!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Fim do retrocesso!{}{}Melhoras no comércio inspiram confiança nas indústrias à medida que a economia se fortalece!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Alternar entre janela grande/pequena
-STR_7076_COMPANY_VALUE :{GOLD}Valor da empresa: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Valor da empresa: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Comprar 25% de acções
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Vender 25% de acções
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Comprar 25% de acções nesta empresa
@@ -2550,7 +2550,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Depósito Ferroviário
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Cidadãos celebram . . .{}Primeiro comboio chega a {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detalhes)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detalhes)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Comboio no caminho
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2571,6 +2571,7 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Ir sem parar para o depósito de {TOWN}
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Manutenção no depósito de {TOWN} sem parar
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Dirige-se ao depósito de {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Dirige-se ao depósito de {TOWN}, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Serviço no depósito de {TOWN}
@@ -2617,8 +2618,8 @@
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Manutenção
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Não é possível construir veículo ferroviário...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}A carregar / descarregar
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Comboio tem que estar parado dentro do depósito
@@ -2693,8 +2694,9 @@
STR_TRAIN_START_NO_CATENARY :Esta linha não tem catenária, o comboio não pode arrancar
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Novo {STRING} agora disponível!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo {STRING} agora disponível! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo {STRING} agora disponível! - {ENGINE}
+
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Veículo de estrada no caminho
@@ -2710,7 +2712,7 @@
STR_900E_MAX_SPEED :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidade: {LTBLUE}{COMMA}% {BLACK}Avarias desde a última manutenção: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+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}...deve estar parado num depósito de veículos de estrada
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Não é possível vender veículo de estrada...
@@ -2737,6 +2739,7 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Lista de veículos de estrada - clique num veículo para informações
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Construir o veículo de estrada seleccionado
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Custo: {CURRENCY}{}Velocidade: {VELOCITY}{}Custo de circulação: {CURRENCY}/ano{}Capacidade: {CARGO}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Renomear veículo de estrada
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Não é possível renomear veículo de estrada...
@@ -2782,7 +2785,7 @@
STR_9813_MAX_SPEED :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidade: {LTBLUE}{COMMA}% {BLACK}Avarias desde a última manutenção: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacidade: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Não é possível iniciar/parar barco...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Não é possível mandar barco para o depósito...
@@ -2850,7 +2853,7 @@
STR_A00E_MAX_SPEED :{BLACK}Velocidade Máx.: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucros deste ano: {LTBLUE}{CURRENCY} (último ano: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidade: {LTBLUE}{COMMA}% {BLACK}Avarias desde a última manutenção: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construído: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Não é possível mandar aeronave para o hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Dirige-se ao hangar de {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Dirige-se ao hangar de {STATION}, {VELOCITY}
@@ -2903,6 +2906,7 @@
STR_GO_TO_AIRPORT_HANGAR :Ir para o hangar de {STATION}
SERVICE_AT_AIRPORT_HANGAR :Manutenção no hangar de {STATION}
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Acidente de Zepelim em {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Veículo de estrada destruído em colisão com OVNI!
@@ -3218,6 +3222,13 @@
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Comutar transparência para pontes
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Comutar transparência para estruturas como faróis-terrestres e antenas (talvez, no futuro, para embelezamentos)
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+
##### Mass Order
STR_GROUP_NAME_FORMAT :Grupo {COMMA}
STR_GROUP_TINY_NAME :{TINYFONT}{GROUP}
--- a/src/lang/romanian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/romanian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Depăşeşte limita hărţii
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Prea aproape de marginea hărţii
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nu ai destui bani - îţi trebuie {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Necesită teren plat
STR_0008_WAITING :{BLACK}În aşteptare: {WHITE}{STRING}
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Autoritatea localã: {LTBLUE}{STRING}
STR_01A9_NONE :nici una
STR_01AA_NAME :{BLACK}Nume
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Setări dificultate
STR_02C7_CONFIG_PATCHES :Configurare patch
STR_NEWGRF_SETTINGS :Setari Newgrf
+STR_TRANSPARENCY_OPTIONS :Optiuni transparenta
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Afişează numele oraşelor
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Afişează numele staţiilor
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :Harta lumii (F4)
STR_EXTRA_VIEW_PORT :Extra ecran
STR_SIGN_LIST :Lista de semne
-STR_TRANSPARENCY_OPTIONS :Optiuni transparenta
STR_02DF_TOWN_DIRECTORY :Lista oraşelor
STR_TOWN_POPULATION :{BLACK}Populatia totala: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Ecran{COMMA}
@@ -1038,7 +1038,7 @@
STR_CONFIG_PATCHES_MULTIPINDTOWN :{LTBLUE}Permite mai multe industrii similare in acelasi oras: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SAMEINDCLOSE :{LTBLUE}Industrii identice pot fi construite aproape una de cealaltã: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LONGDATE :{LTBLUE}Afiseazã intotdeauna data in format lung in bara de stare: {ORANGE}{STRING}
-STR_CONFIG_PATCHES_SIGNALSIDE :{LTBLUE}Afiseazã semnalele pe partea de circulatie: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SIGNALSIDE :{LTBLUE}Afişează semafoarele pe partea de circulaţie: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SHOWFINANCES :{LTBLUE}Afiseazã finantele la sfârsitul fiecãrui an: {ORANGE}{STRING}
STR_CONFIG_PATCHES_NEW_NONSTOP :{LTBLUE}Utilizeazã o metodã gen TTDPatch pentru 'non stop': {ORANGE}{STRING}
STR_CONFIG_PATCHES_ROADVEH_QUEUE :{LTBLUE}Autovehiculele formeazã o coadã (cu efecte cuantice): {ORANGE}{STRING}
@@ -1089,6 +1089,7 @@
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Service automat pentru elicoptere la helipaduri: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Conecteaza bara de instrumente pentru peisaj cu cea de constructii feroviare/auto/aeriane: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Cand faci scroll cu mouse-ul muta ecranul in directia opusã: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}Derulare usoara ecran: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Arata o bara de unelte de masuratori la folosirea uneltelor de constructie: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Arata uniformele companiilor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES_NONE :Niciunul
@@ -1101,6 +1102,18 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_OFF :inactiva
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Viteza harta la rotita mouse: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Foloseste indicatorii de incarcare: {ORANGE}{STRING}
+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}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Sina normala
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Sina electrificata
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Mono-sina
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Prima disponibila
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Ultima disponibila
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Cea mai folosita
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Nr. max. de trenuri per jucãtor: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Nr. max. de autovehicule pentru un jucãtor: {ORANGE}{STRING}
@@ -1132,7 +1145,7 @@
STR_CONFIG_PATCHES_ENDING_YEAR :{LTBLUE}Termina jocul in: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMOOTH_ECONOMY :{LTBLUE}Economie cu schimbãri de productie mai reduse, dar mai frecvente
STR_CONFIG_PATCHES_ALLOW_SHARES :{LTBLUE}Permite cumpararea de actiuni de la alte companii
-STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Plasare automatã a semnalelor la fiecare: {ORANGE}{STRING} pãtrãtele
+STR_CONFIG_PATCHES_DRAG_SIGNALS_DENSITY :{LTBLUE}Plasare automată a semafoarelor la fiecare: {ORANGE}{STRING} pătrăţele
STR_CONFIG_PATCHES_SEMAPHORE_BUILD_BEFORE_DATE :{LTBLUE}Construieste automat semafaore înainte de: {ORANGE}{STRING}
STR_CONFIG_PATCHES_TOWN_LAYOUT_INVALID :{WHITE}Apectul de oras "fara alte drumuri" nu este valid in editorul de scenarii
@@ -1184,7 +1197,7 @@
STR_CHEATS :{WHITE}Cheat-uri
STR_CHEATS_TIP :{BLACK}Checkbox-urile aratã un cheat folosit anterior
STR_CHEATS_WARNING :{BLACK}Atentie! Esti pe cale sã-ti trãdezi colegii de joc! Nu uita cã aceastã rusine va rãmâne înregistratã pentru totdeauna!
-STR_CHEAT_MONEY :{LTBLUE}Mãreste fondurile cu {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Mãreste fondurile cu {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Joacã în locul jucãtorului: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Buldozer magic (demoleazã industrii si lucruri amovibile): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunelele se pot intersecta: {ORANGE}{STRING}
@@ -1439,9 +1452,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Numele companiei: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inaugurarea: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Valoarea companiei: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Balanţa curentă: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Venituri anul trecut: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Valoarea companiei: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Balanţa curentă: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Venituri anul trecut: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Performanta: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Vehicule: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1588,10 +1601,10 @@
STR_100D_SELECT_RAIL_BRIDGE :{WHITE}Alege podul de cale ferată
STR_100E_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Nu pot construi un depou feroviar aici...
STR_100F_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Nu pot construi o gară aici...
-STR_1010_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Nu pot plasa semnale aici...
+STR_1010_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Nu pot plasa semafoare aici...
STR_1011_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Nu pot construi cale ferată aici...
STR_1012_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nu pot înlătura calea ferată...
-STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Nu pot înlătura semnalele de aici...
+STR_1013_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Nu pot înlătura semafoarele de aici...
STR_1014_TRAIN_DEPOT_ORIENTATION :{WHITE}Orientarea depoului feroviar
STR_1015_RAILROAD_CONSTRUCTION :Construcţii feroviare
STR_TOOLB_ELRAIL_CONSTRUCTION :Construcţie cale ferată electrificată
@@ -1600,7 +1613,7 @@
STR_1018_BUILD_RAILROAD_TRACK :{BLACK}Construieşte cale ferată
STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construieşte un depou feroviar (pentru construire şi întreţinere de trenuri)
STR_101A_BUILD_RAILROAD_STATION :{BLACK}Construieşte gară
-STR_101B_BUILD_RAILROAD_SIGNALS :{BLACK}Plasează semnale feroviare
+STR_101B_BUILD_RAILROAD_SIGNALS :{BLACK}Plasează semafoare feroviare
STR_101C_BUILD_RAILROAD_BRIDGE :{BLACK}Construieşte pod de cale ferată
STR_101D_BUILD_RAILROAD_TUNNEL :{BLACK}Construieşte tunel feroviar
STR_101E_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Comutator pentru construcţie/înlăturare căi ferate şi semnale
@@ -1609,10 +1622,16 @@
STR_1021_RAILROAD_TRACK :Cale ferată
STR_1023_RAILROAD_TRAIN_DEPOT :Depou de cale ferată
STR_1024_AREA_IS_OWNED_BY_ANOTHER :{WHITE}...terenul se află în proprietatea altei companii
-STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS :Cale feratã cu semnale normale
-STR_RAILROAD_TRACK_WITH_PRESIGNALS :Cale feratã cu pre-semnalizare
-STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Cale feratã cu semnale de iesire
-STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Cale feratã cu semnale combinate
+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 ferată cu semafoare 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 ferată cu semafoare normale şi semafoare combinate
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Cale ferată cu pre-semafoare şi semafoare de ieşire
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Cale ferată cu pre-semafoare şi semafoare combinate
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Sina de cale ferata cu semnale de iesire si combinate
STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Trebuie mai intai sa demolati gara
@@ -1623,6 +1642,7 @@
STR_1802_ROAD_CONSTRUCTION :{WHITE}Construcţii rutiere
STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Construcţie Tramvai
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Alege pod rutier
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... drumurile cu sens unic nu pot avea bifurcatii
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Nu pot construi şosea aici...
STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Nu pot construi şină de tramvai aici...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Nu pot înlătura şoseaua...
@@ -1640,13 +1660,17 @@
STR_180B_BUILD_ROAD_SECTION :{BLACK}Construieşte secţiune de şosea
STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Construcieşte şină de tramvai
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construieşte o autobază (pentru construire şi întreţinere de autovehicule)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construieste depou tramvaie (pentru constructii si reparatii vehicule)
STR_180D_BUILD_BUS_STATION :{BLACK}Plasează staţie de autobuz
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Construieşte platformă pentru camioane
+STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construieste statie de tramvai pentru calatori
+STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Construieste statie de transport marfar
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Construieşte pod rutier
STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Construieşte pod pentru tramvaie
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Construieşte tunel rutier
STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Construieşte tunel pentru tramvaie
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Comutator pentru construcţie/înlăturare şosele
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Comuta constructie/stergere pentru constructia de linii de tramvaie
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Alege orientarea autobazei
STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Alege orientarea depoului de tramvaie
STR_1814_ROAD :Şosea
@@ -1665,7 +1689,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Mai întâi trebuie demolată clădirea
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Populaţia: {ORANGE}{COMMA}{BLACK} Locuinţe: {ORANGE}{COMMA}
@@ -1698,7 +1722,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Afişează informaţii referitoare la autoritatea locală
STR_2022_LOCAL_AUTHORITY :{WHITE}Autoritatea locală din {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Evaluarea companiilor de transport:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subvenţii (F6)
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Subvenţii disponibile:
STR_2027_FROM_TO :{ORANGE}- {STRING} de la {STRING} la {STRING}
@@ -1769,7 +1793,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...sunt deja plantaţi arbori
STR_2804_SITE_UNSUITABLE :{WHITE}...locaţie nepotrivită
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Nu pot planta arbori aici...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...prea multe semne
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Nu pot plasa un semn aici...
STR_280A_SIGN :Semn
@@ -1878,6 +1902,7 @@
STR_3805_COAST_OR_RIVERBANK :Mal/Coastă
STR_3806_SHIP_DEPOT :Şantier naval
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Nu pot construi pe apă
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Trebuie sa demolezi canalul inainte
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Salvează joc
@@ -1887,9 +1912,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabyte{P "" s} liberi
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Nu pot citi acest disc
-STR_4007_GAME_SAVE_FAILED :{WHITE}Salvarea jocului eşuată
+STR_4007_GAME_SAVE_FAILED :{WHITE}Salvarea jocului eşuată{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Ştergerea jocului eşuată
-STR_4009_GAME_LOAD_FAILED :{WHITE}Încărcarea jocului eşuată
+STR_4009_GAME_LOAD_FAILED :{WHITE}Încărcarea jocului eşuată{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Eroare interna: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Salvare eronata - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Slavarea a fost facuta cu o versiune mai noua
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Fisierul nu poate fi citit
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Fisierul nu poate fi scris
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Lista de discuri, directoare şi fişiere cu jocuri salvate
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Numele selectat pentru un joc salvat
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Şterge jocul salvat selectat
@@ -2060,8 +2090,7 @@
STR_SV_STNAME_LOWER :{STRING} de Jos
STR_SV_STNAME_HELIPORT :Heliportul {STRING}
STR_SV_STNAME_FOREST :Pãdurea {STRING}
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} Statia #{NUM}
############ end of savegame specific region!
@@ -2141,7 +2170,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Jucătorul {COMMA})
STR_7004_NEW_FACE :{BLACK}Schimbă poza
STR_7005_COLOR_SCHEME :{BLACK}Culoare
@@ -2153,7 +2182,7 @@
STR_700B_PRESIDENT_S_NAME :Noul nume al preşedintelui
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Nu pot schimba numele companiei...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Nu pot schimba numele preşedintelui...
-STR_700E_FINANCES :{WHITE}Situaţia financiară a companiei {COMPANY} {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}Situaţia financiară a companiei {COMPANY} {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Cheltuieli/Venituri
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Construcţii
@@ -2169,20 +2198,20 @@
STR_701B_SHIP_INCOME :{GOLD}Venituri nave
STR_701C_LOAN_INTEREST :{GOLD}Dobânda la credit
STR_701D_OTHER :{GOLD}Altele
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Total:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Graficul veniturilor
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Graficul profitului din operare
STR_7026_BANK_BALANCE :{WHITE}Balanţă curentă
STR_7027_LOAN :{WHITE}Credite
-STR_MAX_LOAN :{WHITE}Limită credite: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Împrumută {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Plăteşte înapoi {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Limită credite: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Împrumută {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Plăteşte înapoi {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...creditul maxim permis este de {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Nu mai poţi împrumuta bani...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...nu ai nici un credit de plătit
@@ -2221,8 +2250,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Evaluarea performanţelor companiilor (maxim=1000)
STR_7052_COMPANY_VALUES :{WHITE}Valorile companiilor
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Clasamentul companiilor
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Companie de transport cu probleme!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} va fi vândută dacă situaţia financiară nu se va îmbunătăţi curând!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Preşedinte)
@@ -2260,7 +2289,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Recesiune mondială!{}{}Experţii financiari se tem de ceea ce e mai rău odată cu prăbuşirea economică!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recesiunea s-a încheiat!{}{}Creşterea comerţului dă încredere industriei, iar economia se redresează!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Comutator pentru mărimea ferestrei
-STR_7076_COMPANY_VALUE :{GOLD}Valoarea companiei: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Valoarea companiei: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Cumpără 25% din acţiunile companiei
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Vinde 25% din acţiunile companiei
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Cumpără 25% din acţiunile acestei companii
@@ -2291,6 +2320,8 @@
STR_LIVERY_HELICOPTER :Elicopter
STR_LIVERY_SMALL_PLANE :Aeroplan mic
STR_LIVERY_LARGE_PLANE :Aeroplan mare
+STR_LIVERY_PASSENGER_TRAM :Tramvai calatori
+STR_LIVERY_FREIGHT_TRAM :Tramvai marfa
STR_LIVERY_GENERAL_TIP :{BLACK}Afiseaza schemele generale de culori
STR_LIVERY_TRAIN_TIP :{BLACK}Arata schemele de culori pentru trenuri
@@ -2570,7 +2601,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}Depoul {TOWN}
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Cetăţenii sărbătoresc {}sosirea primului tren la {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detalii)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detalii)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Tren în drum
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2591,6 +2622,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Mergi fără oprire la Depoul {TOWN}
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Non-stop pt. service la Depoul {TOWN}
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Calatorie (fara orar)
+STR_TIMETABLE_TRAVEL_FOR :Calatorii pentru {STRING}
+STR_TIMETABLE_STAY_FOR :si opriri pentru {STRING}
+STR_TIMETABLE_DAYS :{COMMA} zi{P "" s}
+STR_TIMETABLE_TICKS :{COMMA} programare{P "" s}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Merge la Depoul {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Merge la Depoul {TOWN}, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Service la Depoul {TOWN}
@@ -2632,13 +2670,15 @@
STR_REFIT :{BLACK}Rearanjeaza
STR_REFIT_TIP :{BLACK}Alege tipul de marfa pentru rearanjare. Control+click pt a anula rearanjarea
STR_REFIT_ORDER :(Rearanjeaza in {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Orar
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Comuta in modul de vizualizare orar
STR_8829_ORDERS :{WHITE}{VEHICLE} (Comenzi)
STR_882A_END_OF_ORDERS :{SETX 10}- - Sfârşitul comenzilor - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Service
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Nu pot construi vehiculul...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Cumpărat: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Valoare: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Cumpărat: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Valoare: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Încărcare / Descărcare
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Trenul trebuie oprit intr-un depou
@@ -2648,6 +2688,8 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Nu pot adăuga o comandă nouă...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Nu pot şterge această comandă...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Nu pot modifica această comandă...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Nu pot muta acest ordin...
+STR_CAN_T_SKIP_ORDER :{WHITE}Nu pot renunta la comanda actuala...
STR_CAN_T_SKIP_TO_ORDER :{WHITE}Nu pot sări la ordinul selectat...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Nu pot muta vehiculul...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}Al doilea vagon+motor va avea mereu aceeasi destinatie ca si primul
@@ -2680,11 +2722,16 @@
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Afiseazã capacitãtile componentelor trenului
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Afiseazã capacitãtile totale ale trenului, diferentiate pe tip de încãrcãturã
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Lista de comenzi - clic pe comandã pentru a o selecta
+STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Renunta la comanta acruala si preia-o pe urmatoarea. CTRL + click face salt la comanda selectata
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Sterge comanda selectatã
STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Circulă fără oprire până la destinaţia selectată
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Introdu o comandã înaintea celei selectate sau adaugã o comandã la sfârsitul listei
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Forteazã trenul sã astepte la destinatia selectatã pânã la umplerea la capacitate maximã
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Forteazã trenul sã descarce marfa la destinatia selectatã
+STR_TIMETABLE_TOOLTIP :{BLACK}Orar - click on an order to highlight it.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modifica durata de timp alocata pentru comanda selectata
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Elimina durata de timp pentru comanda selectata
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reinitializeaza contorul de intarziere, astfel ca vehiculul sa ajunga la timp
STR_SERVICE_HINT :{BLACK}Sari peste aceastã comandã dacã nu este necesar un service
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Cost: {CURRENCY} Greutate: {WEIGHT_S}{}Vitezã: {VELOCITY} Putere: {POWER}{}Cost de rulare: {CURRENCY}/an{}Capacitate: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Defectiune
@@ -2706,6 +2753,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Nu pot redenumi modelul acestui vehicul...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Comanda selectatã forteazã vehiculul sã arunce încãrcãtura
STR_886F_TRANSFER :{BLACK}Transferã
+STR_CLEAR_TIME :{BLACK}Curata timp
+STR_RESET_LATENESS :{BLACK}Reinitializeaza contorul de intarziere
STR_TRAIN_STOPPING :{RED}Oprire
STR_TRAIN_STOPPING_VEL :{RED}Oprire, {VELOCITY}
@@ -2714,8 +2763,20 @@
STR_TRAIN_START_NO_CATENARY :Aceasta sina nu este electrificata, deci trenul nu poate porni
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Un nou {STRING} este acum disponibil!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Un nou {STRING} este acum disponibil! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Un nou {STRING} este acum disponibil! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Nu pot programa vehiculul...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vehiculele pot astepta numai in statii.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Acest vehicul nu opreste in aceasta statie.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Modifica timpul
+STR_TIMETABLE_STATUS_ON_TIME :Acest vehicul se incadreaza in timp
+STR_TIMETABLE_STATUS_LATE :Momentan, acest vehicul este in intarziere {STRING}
+STR_TIMETABLE_STATUS_EARLY :Momentan, acest vehicul si-a devansat programul {STRING}
+STR_TIMETABLE_TOTAL_TIME :Acest orar va lua {STRING} pentru finalizare
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Acest orar va lua cel putin {STRING} pentru finalizare (nu in intregime programat)
+STR_TIMETABLE_AUTOFILL :{BLACK}Auto-completare
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Completeaza automat orarul cu valorile primei calatorii
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Autovehicul in cale
@@ -2731,7 +2792,7 @@
STR_900E_MAX_SPEED :{BLACK}Vitezã max.: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit anul acesta: {LTBLUE}{CURRENCY} (anul trecut: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Eficientã: {LTBLUE}{COMMA}% {BLACK}Defectiuni de la ultimul service: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Cumpãrat: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Cumpãrat: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Capacitate: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...trebuie oprit intr-o autobazã
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Nu pot vinde autovehiculul...
@@ -2807,7 +2868,7 @@
STR_9813_MAX_SPEED :{BLACK}Viteza max.: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit anul acesta: {LTBLUE}{CURRENCY} (anul trecut: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Eficientã: {LTBLUE}{COMMA}% {BLACK}Defectiuni de la ultimul service: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construit: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacitate: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Nu pot opri/porni nava...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Nu pot trimite nava în santier...
@@ -2875,7 +2936,7 @@
STR_A00E_MAX_SPEED :{BLACK}Vitezã max.: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Profit anul acesta: {LTBLUE}{CURRENCY} (anul trecut: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Eficientã: {LTBLUE}{COMMA}% {BLACK}Defectiuni de la ultimul service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Cumpãrat în: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Cumpãrat în: {LTBLUE}{NUM}{BLACK} Valoare: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Nu pot trimite nava într+un hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}Merge la Hangarul {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Merge la Hangarul {STATION}, {VELOCITY}
@@ -2928,6 +2989,8 @@
STR_GO_TO_AIRPORT_HANGAR :Mergi la Hangarul {STATION}
SERVICE_AT_AIRPORT_HANGAR :Întreţinere la hangarul {STATION}
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Orar)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Accident de zepelin la{STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Autovehicul distrus în urma coliziunii cu un OZN!
@@ -3243,25 +3306,56 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Comuta transparenta pentru construibile, precum statii, depouri, indicatoare si linii electrificate
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Comuta transparenta pentru poduri
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Comuta transparenta pentru structuri ca farurile si antenele - poate in viitor, pentru efect
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Comuta transparenta pentru indicatorii de incarcare
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
+STR_GROUP_NAME_FORMAT :Grup {COMMA}
STR_GROUP_TINY_NAME :{TINYFONT}{GROUP}
STR_GROUP_ALL_TRAINS :Toate trenurile
STR_GROUP_ALL_ROADS :Toate autovehiculele
STR_GROUP_ALL_SHIPS :Toate navele
STR_GROUP_ALL_AIRCRAFTS :Toate aeronavele
STR_GROUP_TINY_NUM :{TINYFONT}{COMMA}
+STR_GROUP_ADD_SHARED_VEHICLE :Adauga vehiculele partajate
+STR_GROUP_REMOVE_ALL_VEHICLES :Elimina toate vehiculele
STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} Tren{P "" uri}
STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} Autovehicul{P "" e}
STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} Nav{P a e}
STR_GROUP_AIRCRAFTS_CAPTION :{WHITE}{GROUP} - {COMMA} Aeronav{P a e}
+STR_GROUP_RENAME_CAPTION :{BLACK}Redenumeste un grup
+STR_GROUP_REPLACE_CAPTION :{WHITE}Inlocuieste vehiculele din "{GROUP}"
+STR_GROUP_CAN_T_CREATE :{WHITE}Nu pot crea grup...
+STR_GROUP_CAN_T_DELETE :{WHITE}Nu pot şterge grup...
+STR_GROUP_CAN_T_RENAME :{WHITE}Nu pot redenumi grupul...
+STR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Nu pot elimina toate vehiculele din acest grup...
+STR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Nu pot adauga vehiculul in acest grup...
+STR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Nu pot adauga vehicule partajate in grup...
+STR_GROUPS_CLICK_ON_GROUP_FOR_TIP :{BLACK}Grupuri - Da click pe un grup pentru lista completa a vehiculelor acestuia
+STR_GROUP_CREATE_TIP :{BLACK}Da click pentru a creea un grup
+STR_GROUP_DELETE_TIP :{BLACK}Sterge grupul selectat
+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_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profit anul acesta: {GREEN}{CURRENCY} {BLACK}(anul trecut: {GREEN}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Profit anul acesta: {RED}{CURRENCY} {BLACK}(anul trecut: {GREEN}{CURRENCY}{BLACK})
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profit anul acesta: {GREEN}{CURRENCY} {BLACK}(anul trecut: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Profit anul acesta: {RED}{CURRENCY} {BLACK}(anul trecut: {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/russian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/russian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Край карты
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Слишком близко к краю карты
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Недостаточно денег - требуется {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Необходимо ровное место
STR_0008_WAITING :{BLACK}Ожидает: {WHITE}{STRING}
@@ -497,7 +497,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Администрация: {LTBLUE}{STRING}
STR_01A9_NONE :Нет
STR_01AA_NAME :{BLACK}Имя
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1ое
@@ -780,6 +780,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Настройки сложности
STR_02C7_CONFIG_PATCHES :Настройки патчей
STR_NEWGRF_SETTINGS :Настройки NewGRF
+STR_TRANSPARENCY_OPTIONS :Настройки прозрачности
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Показ названий городов
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Показ названий станций
@@ -807,7 +808,6 @@
STR_02DE_MAP_OF_WORLD :Карта мира
STR_EXTRA_VIEW_PORT :Доп. окно просмотра
STR_SIGN_LIST :Список меток
-STR_TRANSPARENCY_OPTIONS :Настройки прозрачности
STR_02DF_TOWN_DIRECTORY :Список городов
STR_TOWN_POPULATION :{BLACK}Население: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Окно просмотра {COMMA}
@@ -985,8 +985,8 @@
STR_CANT_COPY_ORDER_LIST :{WHITE}Невозможно скопировать список заданий
STR_END_OF_SHARED_ORDERS :{SETX 10}- - Конец общих заданий - -
-STR_TRAIN_IS_LOST :{WHITE}Поезд {COMMA} не может найти пути
-STR_TRAIN_IS_UNPROFITABLE :{WHITE}Поезд {COMMA} за прошлый год принёс {CURRENCY} убытка
+STR_TRAIN_IS_LOST :{WHITE}Поезд {COMMA} заблудился
+STR_TRAIN_IS_UNPROFITABLE :{WHITE}Доход поезда {COMMA} за прошлый год составил {CURRENCY}
STR_EURO_INTRODUCE :{BLACK}{BIGFONT}Создана зона евро!{}{}Теперь в вашей стране в качестве единой валюты используется евро!
# Start of order review system.
@@ -1050,6 +1050,7 @@
STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Алгоритм навигации NPF (замена оригинального): {ORANGE}{STRING}
STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Множитель увеличения веса груза для товарных поездов: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Позволять строить остановки на городских дорогах: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Разрешить строительство смежных станций: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Малые аэропорты всегда доступны: {ORANGE}{STRING}
@@ -1090,6 +1091,7 @@
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Включить обслуживание на вертолетных площадках: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Связать ландшафтную панель с транспортной: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}Обратить направление перемещения обзора мышью: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}Плавный скроллинг окна просмотра: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Показывать замеры при строительстве: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Показывать окраску транспорта: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES_NONE :нет
@@ -1103,6 +1105,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Скорость смещения обзора прокруткой колеса мыши: {ORANGE}{STRING}
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_DEFAULT_RAIL_TYPE :{LTBLUE}Тип рельс по умолчанию (после старта/загрузки игры): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Обычные
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Электро
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Монорельс
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Маглев
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Перв. доступн.
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Посл. доступн.
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Наиб. исп.
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Максимальное количество поездов на игрока: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Максимальное количество автотранспорта на игрока: {ORANGE}{STRING}
@@ -1186,7 +1199,7 @@
STR_CHEATS :{WHITE}ЧИТЫ
STR_CHEATS_TIP :{BLACK}Галочка показывает, использовали ли Вы этот ЧИТ раньше
STR_CHEATS_WARNING :{BLACK}Внимание, вы собираетесь предать своих соперников! Этого вам никогда не простят!
-STR_CHEAT_MONEY :{LTBLUE}Увеличить деньги на {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Увеличить деньги на {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Играть за компанию: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Волшебный динамит (снос _ВСЕГО_): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Туннели могут пересекаться: {ORANGE}{STRING}
@@ -1397,6 +1410,31 @@
STR_NETWORK_LANG_ENGLISH :Английский
STR_NETWORK_LANG_GERMAN :Немецкий
STR_NETWORK_LANG_FRENCH :Французский
+STR_NETWORK_LANG_BRAZILIAN :Бразильский
+STR_NETWORK_LANG_BULGARIAN :Болгарский
+STR_NETWORK_LANG_CHINESE :Китайский
+STR_NETWORK_LANG_CZECH :Чешский
+STR_NETWORK_LANG_DANISH :Датский
+STR_NETWORK_LANG_DUTCH :Немецкий
+STR_NETWORK_LANG_ESPERANTO :Эсперанто
+STR_NETWORK_LANG_FINNISH :Финский
+STR_NETWORK_LANG_HUNGARIAN :Венгерский
+STR_NETWORK_LANG_ICELANDIC :Исландский
+STR_NETWORK_LANG_ITALIAN :Итальянский
+STR_NETWORK_LANG_JAPANESE :Японский
+STR_NETWORK_LANG_KOREAN :Корейский
+STR_NETWORK_LANG_LITHUANIAN :Латвийский
+STR_NETWORK_LANG_NORWEGIAN :Норвержский
+STR_NETWORK_LANG_POLISH :Польский
+STR_NETWORK_LANG_PORTUGUESE :Португальский
+STR_NETWORK_LANG_ROMANIAN :Румынский
+STR_NETWORK_LANG_RUSSIAN :Русский
+STR_NETWORK_LANG_SLOVAK :Словацкий
+STR_NETWORK_LANG_SLOVENIAN :Словенский
+STR_NETWORK_LANG_SPANISH :Испанский
+STR_NETWORK_LANG_SWEDISH :Шведский
+STR_NETWORK_LANG_TURKISH :Турецкий
+STR_NETWORK_LANG_UKRAINIAN :Украинский
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Состояние сетевой игры
@@ -1416,9 +1454,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Имя компании: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Основана: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Оценочная стоимость: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Текущий баланс: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Доход в прошлом году: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Оценочная стоимость: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Текущий баланс: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Доход в прошлом году: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Результативность: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Трансп. средства: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1560,7 +1598,7 @@
STR_1008_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Сначала надо удалить рельсы
STR_100A_RAILROAD_CONSTRUCTION :{WHITE}Железные дороги
STR_TITLE_ELRAIL_CONSTRUCTION :{WHITE}Электрифицированные ж/д
-STR_100B_MONORAIL_CONSTRUCTION :{WHITE}Монорельсы
+STR_100B_MONORAIL_CONSTRUCTION :{WHITE}Монорельс
STR_100C_MAGLEV_CONSTRUCTION :{WHITE}Магнитные поезда
STR_100D_SELECT_RAIL_BRIDGE :{WHITE}Выберите железнодорожный мост
STR_100E_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Невозможно построить депо здесь...
@@ -1590,6 +1628,13 @@
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}Сначала удалите ЖД станцию
@@ -1597,22 +1642,39 @@
STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Сначала удалите дорогу
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Идут дорожные работы...
STR_1802_ROAD_CONSTRUCTION :{WHITE}Строительство дорог
+STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Трамваи
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Выберите тип моста
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... односторонние дороги не могут иметь такое пересечение
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}Не могу проложить дорогу здесь...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Нельзя построить здесь трамвай...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}Не могу удалить дорогу...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Не могу удалить этот трамвай...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Направление гаража
+STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Ориентация трамвайного депо
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}Не могу построить гараж здесь...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}Не могу построить здесь трамвайное депо...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}Не могу построить остановку здесь...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}Не могу построить грузовую станцию...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Не могу построить пассажирскую трамвайную остановку...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Не могу построить грузовую трамвайную остановку...
STR_180A_ROAD_CONSTRUCTION :Строительство дорог
+STR_180A_TRAMWAY_CONSTRUCTION :Трамваи
STR_180B_BUILD_ROAD_SECTION :{BLACK}Проложить дорогу
+STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Проложить трамвайные пути
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Построить гараж (для закупки и обслуживания машин)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Построить трамвайное депо (для закупки и обслуживания трамваев)
STR_180D_BUILD_BUS_STATION :{BLACK}Построить автобусную остановку
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Построить погрузочную станцию
+STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Построить пассажирскую трамвайную остановку
+STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Построить грузовую трамвайную остановку
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Построить мост (авто)
+STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Построить трамвайный мост
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Построить туннель (авто)
+STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Построить трамвайный туннель
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Переключение строительства/удаления автомобильной инфраструктуры
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Переключение строительства/удаления трамвайной инфраструктуры
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Выбор ориентации гаража
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Выбор ориентации трамвайного депо
STR_1814_ROAD :Дорога
STR_1815_ROAD_WITH_STREETLIGHTS :Дорога с уличным освещением
STR_1816_TREE_LINED_ROAD :Шоссе
@@ -1620,6 +1682,8 @@
STR_1818_ROAD_RAIL_LEVEL_CROSSING :Железнодорожный переезд
STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Невозможно удалить автобусную остановку...
STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Невозможно удалить грузовой терминал...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Не могу удалить пассажирскую трамвайную станцию...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Не могу удалить грузовую трамвайную станцию...
##id 0x2000
STR_2000_TOWNS :{WHITE}Города
@@ -1627,7 +1691,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Сначала надо уничтожить здания
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Население: {ORANGE}{COMMA}{BLACK} Зданий: {ORANGE}{COMMA}
@@ -1660,7 +1724,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Информация о местных властях
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} местные власти
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Рейтинг транспортной компании
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Субсидии
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Свободные субсидии
STR_2027_FROM_TO :{ORANGE}{STRING.p} по маршруту из {STRING} в {STRING}
@@ -1731,7 +1795,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...уже есть дерево
STR_2804_SITE_UNSUITABLE :{WHITE}...неподходящее место
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Невозможно высадить деревья...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...слишком много знаков
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Невозможно установить знак...
STR_280A_SIGN :Знак
@@ -1784,8 +1848,12 @@
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} теперь принимает {STRING} и {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Направление остановки
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Ориентация станции
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Направление пассажирской трамвайной остановки
+STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Направление грузовой трамвайной остановки
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Сначала удалите автобусную остановку
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Сначала удалите грузовой терминал
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Сначала надо уничтожить пассажирскую трамвайную остановку
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Сначала надо уничтожить грузовую трамвайную остановку
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Станц{P 2 ия ии ий}
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Нет -
@@ -1797,6 +1865,8 @@
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Выберите длину ж/д станции
STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Выберите направление автобусной остановки
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Выберите направление погрузочной станции
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Выберите направление пассажирской трамвайной остановки
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Выберите направление грузовой трамвайной остановки
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Показать станцию в основном окне
STR_3054_SHOW_STATION_RATINGS :{BLACK}Показать рейтинг станции
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Переименовать станцию
@@ -1834,6 +1904,7 @@
STR_3805_COAST_OR_RIVERBANK :Морской или речной берег
STR_3806_SHIP_DEPOT :Верфь
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Невозможно построить на воде
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Сначала надо уничтожить канал
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Сохранить игру
@@ -1843,9 +1914,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} Мб свободно
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Не удалось прочитать диск
-STR_4007_GAME_SAVE_FAILED :{WHITE}Невозможно сохранить игру
+STR_4007_GAME_SAVE_FAILED :{WHITE}Невозможно сохранить игру{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Невозможно удалить файл
-STR_4009_GAME_LOAD_FAILED :{WHITE}Невозможно загрузить игру
+STR_4009_GAME_LOAD_FAILED :{WHITE}Невозможно загрузить игру{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Внутренняя ошибка: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Нарушена структура сэйва - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Сэйв сделан в более новой версии
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Файл не читается
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Незаписываемый файл
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Список дисков, папок и сохраненных игр
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Выбранное имя для сохранения игры
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Удалить выбранную сохраненную игру
@@ -1984,12 +2060,12 @@
STR_SV_AIRCRAFT_NAME :Самолет {COMMA}
STR_SV_STNAME :{STRING}
-STR_SV_STNAME_NORTH :Северный {STRING}
-STR_SV_STNAME_SOUTH :Южный {STRING}
-STR_SV_STNAME_EAST :Восточный {STRING}
-STR_SV_STNAME_WEST :Западный {STRING}
+STR_SV_STNAME_NORTH :Северная {STRING}
+STR_SV_STNAME_SOUTH :Южная {STRING}
+STR_SV_STNAME_EAST :Восточная {STRING}
+STR_SV_STNAME_WEST :Западная {STRING}
STR_SV_STNAME_CENTRAL :Центральный {STRING}
-STR_SV_STNAME_TRANSFER :Перегонный {STRING}
+STR_SV_STNAME_TRANSFER :Перегонная {STRING}
STR_SV_STNAME_HALT :{STRING}-привал
STR_SV_STNAME_VALLEY :Долина {STRING}
STR_SV_STNAME_HEIGHTS :{STRING}-высотная
@@ -2010,14 +2086,13 @@
STR_SV_STNAME_BUOY_8 :{STRING} Буй 8
STR_SV_STNAME_BUOY_9 :{STRING} Буй 9
STR_SV_STNAME_ANNEXE :{STRING}-дополнительная
-STR_SV_STNAME_SIDINGS :{STRING}-запасный
+STR_SV_STNAME_SIDINGS :{STRING}-запасная
STR_SV_STNAME_BRANCH :{STRING}-ветка
-STR_SV_STNAME_UPPER :Верхний {STRING}
-STR_SV_STNAME_LOWER :Нижний {STRING}
+STR_SV_STNAME_UPPER :Верхняя {STRING}
+STR_SV_STNAME_LOWER :Нижняя {STRING}
STR_SV_STNAME_HELIPORT :Площадка {STRING}
STR_SV_STNAME_FOREST :Лес {STRING}
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING}-{NUM}
############ end of savegame specific region!
@@ -2108,7 +2183,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Игрок {COMMA})
STR_7004_NEW_FACE :{BLACK}Лицо
STR_7005_COLOR_SCHEME :{BLACK}Цвет
@@ -2120,7 +2195,7 @@
STR_700B_PRESIDENT_S_NAME :Имя директора
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Невозможно изменить название компании...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Невозможно изменить имя директора...
-STR_700E_FINANCES :{WHITE}{COMPANY} Денежные средства {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Денежные средства {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Расход/доход
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Строительство
@@ -2136,20 +2211,20 @@
STR_701B_SHIP_INCOME :{GOLD}Доход от водного транспорта
STR_701C_LOAN_INTEREST :{GOLD}Проценты по займу
STR_701D_OTHER :{GOLD}Другое
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}ИТОГО:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}График доходов
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}График прибыли от основной деятельности
STR_7026_BANK_BALANCE :{WHITE}Баланс
STR_7027_LOAN :{WHITE}Ссуда
-STR_MAX_LOAN :{WHITE}Макс. Ссуда: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Занять {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Отдать {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Макс. Ссуда: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Занять {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Отдать {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...максимально допустимый размер ссуды - {CURRENCY}.
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Невозможно занять больше денег...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...нет ссуды для выплачивания
@@ -2188,8 +2263,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Рейтинг деятельности компании (макс=1000)
STR_7052_COMPANY_VALUES :{WHITE}Стоимость активов компании
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Сравнительная таблица компаний
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Транспортная компания в опасном положении!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT} {COMPANY} будет продана или объявлена банкротом, если ситуация не изменится!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Директор)
@@ -2227,7 +2302,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Мировой спад{}{}Финансовые эксперты дают ужасные прогнозы в связи с кризисом экономики!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Спад закончился!{}{}Увеличение объемов торговли внушает уверенность владельцам предприятий. Экономика укрепляет свои позиции.
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Большое/маленькое окно
-STR_7076_COMPANY_VALUE :{GOLD}Стоимость компании: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Стоимость компании: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Купить 25% акций компании
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Продать 25% акций компании
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Купить 25% акций этой компании
@@ -2258,6 +2333,8 @@
STR_LIVERY_HELICOPTER :Вертолет
STR_LIVERY_SMALL_PLANE :Малый самолет
STR_LIVERY_LARGE_PLANE :Большой самолет
+STR_LIVERY_PASSENGER_TRAM :Пассажирский трамвай
+STR_LIVERY_FREIGHT_TRAM :Грузовой трамвай
STR_LIVERY_GENERAL_TIP :{BLACK}Настройка основной цветовой схемы
STR_LIVERY_TRAIN_TIP :{BLACK}Настройка цветовой схемы поездов
@@ -2537,7 +2614,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}Депо {TOWN}
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Жители празднуют!{}Первый поезд прибыл на станцию {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Детали)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Детали)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Поезд мешает
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2558,6 +2635,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Ехать в депо {TOWN} без остановки
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Обслужиться в депо {TOWN} без остановки
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Путешествует (не учитывается)
+STR_TIMETABLE_TRAVEL_FOR :Идти до {STRING}
+STR_TIMETABLE_STAY_FOR :и ждать {STRING}
+STR_TIMETABLE_DAYS :{COMMA} д{P ень ня ней}
+STR_TIMETABLE_TICKS :{COMMA} тик{P "" а ов}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Следует в депо {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Следует в Депо {TOWN}, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Обслуж. в депо {TOWN}
@@ -2599,13 +2683,15 @@
STR_REFIT :{BLACK}Переоб.
STR_REFIT_TIP :{BLACK}Выберите тип грузов для переоборудования. CTRL+клик - для удаления.
STR_REFIT_ORDER :(Переоборуд. для {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Расписание
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Просмотр расписания
STR_8829_ORDERS :{WHITE}{VEHICLE} (Задания)
STR_882A_END_OF_ORDERS :{SETX 10}- - Конец заданий - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Обслуж.
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Невозможно построить ж/д транспорт...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Построен: {LTBLUE}{NUM}{BLACK} Стоимость: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Стоимость: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Построен: {LTBLUE}{NUM}{BLACK} Стоимость: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Стоимость: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Разгрузка/Погрузка
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Поезд должен быть остановлен в депо
@@ -2615,6 +2701,9 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Невозможно вставить новое задание...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Невозможно удалить это задание...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Невозможно изменить это задание...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Не могу переместить это задание ...
+STR_CAN_T_SKIP_ORDER :{WHITE}Не могу пропустить это задание...
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}Не могу пропустить выделенное задание...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Невозможно переместить трансп. средство...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}Тыловой локомотив всегда следует за его передней частью
STR_8838_N_A :отсутствует{SKIP}
@@ -2646,11 +2735,16 @@
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Показать вместимость вагонов
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Показать общую вместимость поезда по типам грузов
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Показ списка заданий - щелкните для выделения. Если зажать CTRL - обзор станции.
+STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Пропустить данное задание и начать следующее. CTRL + клик пропускает выделенное задание.
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Удалить выделенное задание
STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Ехать по выбранному заданию без остановок
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Вставить новое задание перед выделенным, или в конец списка
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Задать ожидание полной загрузки
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Задать ожидание полной разгрузки
+STR_TIMETABLE_TOOLTIP :{BLACK}Расписание - выберите задание.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Изменить время для выделенного задания
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Очистить время в выделенном задании
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Сбросить задержку счетчика, так чтобы транспорт прибыл вовремя.
STR_SERVICE_HINT :{BLACK}Пропустить это задание, если обслуживание не требуется
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Цена: {CURRENCY} Вес: {WEIGHT_S}{}Скорость: {VELOCITY} Мощность: {POWER}{}Цена обслуж.: {CURRENCY}/год{}Емкость: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Поломка
@@ -2672,6 +2766,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Невозможно переименовать тип вагона ...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}По выделенному приказу произойдет принудительная разгрузка транспортного средства
STR_886F_TRANSFER :{BLACK}Трансфер
+STR_CLEAR_TIME :{BLACK}Сбросить Время
+STR_RESET_LATENESS :{BLACK}Сброс счетчика
STR_TRAIN_STOPPING :{RED}Остановлен
STR_TRAIN_STOPPING_VEL :{RED}Останавливаю, {VELOCITY}
@@ -2680,8 +2776,18 @@
STR_TRAIN_START_NO_CATENARY :Кто-то украл все провода, поезд не может ехать...
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Появился новый {STRING}!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Появился новый {STRING}! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Появился новый {STRING}! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Не могу составить расписание для этого транспорта...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Транспорт может только ждать на станции.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Этот транспорт не останавливается на этой станции.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Изм. время
+STR_TIMETABLE_STATUS_ON_TIME :Этот транспорт приходит вовремя
+STR_TIMETABLE_STATUS_LATE :Этот транспорт приходит на {STRING} позже
+STR_TIMETABLE_STATUS_EARLY :Этот транспорт приходит на {STRING} раньше
+STR_TIMETABLE_AUTOFILL :{BLACK}Автомат.
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Заполнить расписание автоматически данными из первой поездки
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Машина на пути
@@ -2697,7 +2803,7 @@
STR_900E_MAX_SPEED :{BLACK}Макс. скорость: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Прибыль в этом году: {LTBLUE}{CURRENCY} (прошлый год: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Надежность: {LTBLUE}{COMMA}% {BLACK}Поломок с последнего ремонта: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Построено: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Построено: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Емкость: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...должен быть остановлен в гараже
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Невозможно продать автомобиль...
@@ -2724,12 +2830,16 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Список автотранспорта - кликните для получения информации
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Построить выделенный автомобиль
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Цена: {CURRENCY}{}Скорость: {VELOCITY}{}Стоимость обслуживания: {CURRENCY}/год{}Емкость: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Емкость: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Назвать автотранспорт
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Невозможно переименовать автотранспорт ...
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Назвать автотранспорт
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Жители празднуют!{}Первый автобус прибыл на остановку {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Жители празднуют!{}Первый грузовик прибыл на станцию {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Жители празднуют . . .{}Первый трамвай прибыл на {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Жители празднуют . . .{}Первый грузовой трамвай прибыл на {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}АВАРИЯ!{}Водитель погиб при столкновении с поездом
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}АВАРИЯ!{}{COMMA} человек{P "" а ""} погиб{P "" ло ли} в столкновении с поездом!
STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Невозможно развернуть автомобиль...
@@ -2769,7 +2879,7 @@
STR_9813_MAX_SPEED :{BLACK}Макс. скорость: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Прибыль в этом году: {LTBLUE}{CURRENCY} (прошлый год: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Надежность: {LTBLUE}{COMMA}% {BLACK}Поломок с последнего обслуж.: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Построено: {LTBLUE}{NUM}{BLACK} Стоимость: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Построено: {LTBLUE}{NUM}{BLACK} Стоимость: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Емкость: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Не могу остановить/запустить корабль...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Не могу отправить корабль в док...
@@ -2837,7 +2947,7 @@
STR_A00E_MAX_SPEED :{BLACK}Макс. скорость: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Прибыль в этом году: {LTBLUE}{CURRENCY} (прошлый год: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Надежность: {LTBLUE}{COMMA}% {BLACK}Поломок с последнего ремонта: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Построено: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Построено: {LTBLUE}{NUM}{BLACK} Цена: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Невозможно отправить его в ангар...
STR_HEADING_FOR_HANGAR :{ORANGE}Летит в Ангар {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Следует в Ангар {STATION}, {VELOCITY}
@@ -2890,6 +3000,8 @@
STR_GO_TO_AIRPORT_HANGAR :Лететь в Ангар {STATION}
SERVICE_AT_AIRPORT_HANGAR :Сервис в ангаре {STATION}
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Расписание)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Крушение дирижабля в {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Автомобиль уничтожен при столкновении с НЛО!
@@ -3014,6 +3126,7 @@
### depot strings
STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Весь транспорт в депо будет продан. Вы уверены?
+STR_DEPOT_WRONG_DEPOT_TYPE :Неверный тип депо
STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}Продать все поезда в депо
STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}Продать все авто в гараже
@@ -3204,6 +3317,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Переключить прозрачность зданий, которые можно строить игроком. Например -- станции, депо, точки пути и столбы для электричества.
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Переключить прозрачность мостов
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Переключить прозрачность зданий, вроде антенн и маяков.
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Переключить прозрачность для индикаторов загрузки
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Группа {COMMA}
@@ -3241,4 +3362,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Прибыль за год: {GREEN}{CURRENCY} {BLACK}(прошлый год: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Прибыль за год: {RED}{CURRENCY} {BLACK}(прошлый год: {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/simplified_chinese.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/simplified_chinese.txt Tue Jun 26 23:40:58 2007 +0000
@@ -8,8 +8,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}超过地图边界
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}距离地图边界过近
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}没有足够的现金 - 需要 {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}需要平坦的地面
STR_0008_WAITING :{BLACK}等待:{WHITE}{STRING}
@@ -493,7 +493,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}地方政府:{LTBLUE}{STRING}
STR_01A9_NONE :没有
STR_01AA_NAME :{BLACK}名称
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1日
@@ -1171,7 +1171,7 @@
STR_CHEATS :{WHITE}作弊
STR_CHEATS_TIP :{BLACK}标志你是否用过此项作弊手段的单选框
STR_CHEATS_WARNING :{BLACK}警告!你将要背叛你的盟友,这将被永久记录!
-STR_CHEAT_MONEY :{LTBLUE}增加 {CURRENCY64} 现金
+STR_CHEAT_MONEY :{LTBLUE}增加 {CURRENCY} 现金
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}作为玩家 {ORANGE}{COMMA} 进行游戏
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}神奇推土机 (清除工业设施或不可移除物): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}隧道可以相交:{ORANGE}{STRING}
@@ -1401,9 +1401,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}公司信息:{WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}开业时间:{WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}公司市值:{WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}流动资金:{WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}去年收入:{WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}公司市值:{WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}流动资金:{WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}去年收入:{WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}表现情况:{WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}车辆:{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1612,7 +1612,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}必须先摧毁建筑
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}人口:{ORANGE}{COMMA}{BLACK} 房屋:{ORANGE}{COMMA}
@@ -1645,7 +1645,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}显示地方政府的信息
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} 地方政府
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}对运输公司评价:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}财政补贴项目
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}尚未中标的项目:
STR_2027_FROM_TO :{ORANGE}将 {STRING} 从 {STRING} 运送到 {STRING}
@@ -1716,7 +1716,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}……此处已经有树木了
STR_2804_SITE_UNSUITABLE :{WHITE}……地点不合适
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}不能在这里植树……
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}……标志太多了
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}不能在这里放置标志……
STR_280A_SIGN :标志
@@ -1828,9 +1828,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabyte(s) 可用
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}不能读取驱动器
-STR_4007_GAME_SAVE_FAILED :{WHITE}保存游戏失败
+STR_4007_GAME_SAVE_FAILED :{WHITE}保存游戏失败{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}不能删除文件
-STR_4009_GAME_LOAD_FAILED :{WHITE}游戏存档读取失败
+STR_4009_GAME_LOAD_FAILED :{WHITE}游戏存档读取失败{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}驱动器、目录和游戏存档列表
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}保存当前游戏用的存档名字
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}删除选定的游戏存档
@@ -2079,7 +2079,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Player {COMMA})
STR_7004_NEW_FACE :{BLACK}新的肖像
STR_7005_COLOR_SCHEME :{BLACK}配色方案
@@ -2091,7 +2091,7 @@
STR_700B_PRESIDENT_S_NAME :总裁姓名
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}不能为公司更名……
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}不能更改总裁的名字……
-STR_700E_FINANCES :{WHITE}{COMPANY} 财务报表 {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} 财务报表 {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}收入/支出
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}建设费用
@@ -2107,20 +2107,20 @@
STR_701B_SHIP_INCOME :{GOLD}水上运输收入
STR_701C_LOAN_INTEREST :{GOLD}贷款利息
STR_701D_OTHER :{GOLD}其他费用
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}总计:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}收入图表
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}利润图表
STR_7026_BANK_BALANCE :{WHITE}流动资金
STR_7027_LOAN :{WHITE}贷款
-STR_MAX_LOAN :{WHITE}最大贷款额度:{BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}贷款 {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}还款 {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}最大贷款额度:{BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}贷款 {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}还款 {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}最大贷款额度是{CURRENCY}……
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}不能再贷款了……
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}没有要偿还的贷款了
@@ -2159,8 +2159,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}公司表现指数 (最大指数为1000)
STR_7052_COMPANY_VALUES :{WHITE}公司市值
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}公司评价表
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}运输公司陷入困境!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} 如果不能在短期摆脱困境,则将被收购或破产!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(总裁)
@@ -2198,7 +2198,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}大萧条!{}{}金融专家预测世界经济将全面倒退!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}大萧条结束!{}{}贸易复苏带动经济全面启动!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}切换窗口大小
-STR_7076_COMPANY_VALUE :{GOLD}公司市值:{WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}公司市值:{WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}购买其 25% 的股份
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}出售其 25% 的股份
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}购买此公司 25% 的股份
@@ -2508,7 +2508,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} 列车车库
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}市民举行庆祝仪式……{}第一列火车抵达 {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (详细信息)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (详细信息)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}指定位置有列车
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2575,8 +2575,8 @@
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}保养
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}不能购买列车……
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 建造时间:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} 价值:{LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 建造时间:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} 价值:{LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}装载/卸货
STR_TRAIN_MUST_BE_STOPPED :{WHITE}列车必须停在一个车库中
@@ -2651,8 +2651,8 @@
STR_TRAIN_START_NO_CATENARY :这不是电气化铁路,电力机车不能启动
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}新 {STRING} 上市了!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}新 {STRING} 上市了! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}新 {STRING} 上市了! - {ENGINE}
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}指定的位置有汽车
@@ -2668,7 +2668,7 @@
STR_900E_MAX_SPEED :{BLACK}最大时速: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}今年的利润: {LTBLUE}{CURRENCY} (last year: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}可靠性: {LTBLUE}{COMMA}% {BLACK}上次保养后抛锚的次数: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 建造年份: {LTBLUE}{NUM}{BLACK} 价值: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 建造年份: {LTBLUE}{NUM}{BLACK} 价值: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}装载能力:{LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...必须完全停在一个车库中
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}不能出售汽车...
@@ -2740,7 +2740,7 @@
STR_9813_MAX_SPEED :{BLACK}最大速度:{LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}今年利润:{LTBLUE}{CURRENCY} (去年:{CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}可靠性:{LTBLUE}{COMMA}% {BLACK}上次保养后的故障次数:{LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 建造时间:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 建造时间:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}运载能力: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}不能停止/启动船只……
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}不能命令船只前往船坞……
@@ -2808,7 +2808,7 @@
STR_A00E_MAX_SPEED :{BLACK}最大速度:{LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}今年的利润:{LTBLUE}{CURRENCY} (去年:{CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}可靠性:{LTBLUE}{COMMA}% {BLACK}上次保养后的故障次数:{LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 制造年份:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 制造年份:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}不能命令飞机返回机库……
STR_HEADING_FOR_HANGAR :{ORANGE}正在前往 {STATION} 的机库
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}正在前往 {STATION} 的机库,{VELOCITY}
--- a/src/lang/slovak.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/slovak.txt Tue Jun 26 23:40:58 2007 +0000
@@ -12,8 +12,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Za okrajom mapy
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Príliš blízko okraja mapy
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Malá hotovost - potrebných {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Potrebný rovný terén
STR_0008_WAITING :{BLACK}Caka: {WHITE}{STRING}
@@ -559,7 +559,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Miestna správa: {LTBLUE}{STRING}
STR_01A9_NONE :Neznáme
STR_01AA_NAME :{BLACK}Meno
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1.
@@ -842,6 +842,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Nastavenia obtiaznosti
STR_02C7_CONFIG_PATCHES :Nastavenia patchov
STR_NEWGRF_SETTINGS :Nastavenie newgrf
+STR_TRANSPARENCY_OPTIONS :Nastavenia priehladnosti
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Zobrazit nazvy miest
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Zobrazit nazvy stanic
@@ -869,7 +870,6 @@
STR_02DE_MAP_OF_WORLD :Mapa sveta
STR_EXTRA_VIEW_PORT :Dalsi pohlad
STR_SIGN_LIST :Zoznam popisov
-STR_TRANSPARENCY_OPTIONS :Nastavenia priehladnosti
STR_02DF_TOWN_DIRECTORY :Zoznam miest
STR_TOWN_POPULATION :{BLACK}Svetova populacia: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Pohlad {COMMA}
@@ -1167,6 +1167,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Rychlost posúvania mapy: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Použit ukazovatele nakladnia: {ORANGE}{STRING}
+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}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Normálne
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Elektrifikované
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Prvé dostupné
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Posledné dostupné
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Najcastejsie používané
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Maximalny pocet vlakov hraca: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Maximalny pocet automobilov hraca: {ORANGE}{STRING}
@@ -1250,7 +1261,7 @@
STR_CHEATS :{WHITE}Cheaty
STR_CHEATS_TIP :{BLACK}Checkbox indikuje opakovane pouzite cheatu
STR_CHEATS_WARNING :{BLACK}Varovanie! Chcete podviest vasich protihracov. Tento podvod sa navzdy zapameta.
-STR_CHEAT_MONEY :{LTBLUE}Zvysit hotovost o {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Zvysit hotovost o {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Hrat ako hrac: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magicky buldozer (odstrani priemysel, budovy): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunely sa mozu navzajom krizit: {ORANGE}{STRING}
@@ -1466,6 +1477,7 @@
STR_NETWORK_LANG_CHINESE :Cinsky
STR_NETWORK_LANG_CZECH :Cesky
STR_NETWORK_LANG_DANISH :Dánsky
+STR_NETWORK_LANG_DUTCH :Holadnsky
STR_NETWORK_LANG_ESPERANTO :Esperanto
STR_NETWORK_LANG_FINNISH :Fínsky
STR_NETWORK_LANG_HUNGARIAN :Madarsky
@@ -1504,9 +1516,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Nazov spolocnosti: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Zalozene: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Hodnota spolocnosti: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Stav uctu: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Zisk v minulom roku: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Hodnota spolocnosti: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Stav uctu: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Zisk v minulom roku: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Vykon: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Vozidla: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1708,14 +1720,23 @@
STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nie je možné postavit elektrickovú osobnú stanicu ...
STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nie je možné postavit elektrickovú nákladnú stanicu ...
STR_180A_ROAD_CONSTRUCTION :Vystavba cesty
+STR_180A_TRAMWAY_CONSTRUCTION :Výstavba elektrickovej dráhy
STR_180B_BUILD_ROAD_SECTION :{BLACK}Postavit cast cesty
+STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Postavit cast elektrickovej dráhy
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Postavit garaz (na vyroby a opravy automobilov)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Postavit elektrickové depo
STR_180D_BUILD_BUS_STATION :{BLACK}Postavit autobusovu zastavku
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Postavit vykladku
+STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Postavit osobnú elektrickovú stanicu
+STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Postavit nákladnú elektrickovú stanicu
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Postavit cestny most
+STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Postavit most s elektrickovou dráhou
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Postavit cestny tunel
+STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Postavit tunel s elektrickovou dráhou
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Prepnut stavbu/odstranovanie cesty
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Prepnút stavbu/odstranovanie elektrickovej dráhy
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Vybrat orientaciu garaze
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Vybrat orientáciu elektrickového depa
STR_1814_ROAD :Cesta
STR_1815_ROAD_WITH_STREETLIGHTS :Cesta s lampami
STR_1816_TREE_LINED_ROAD :Cesta v aleji
@@ -1723,6 +1744,8 @@
STR_1818_ROAD_RAIL_LEVEL_CROSSING :Zeleznicne priecestie
STR_CAN_T_REMOVE_BUS_STATION :{WHITE}Nie je možné odstránit autobusovú stanicu ...
STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Nie je možné odstránit nakladaciu rampu ...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Nie je možné odstránit osobnú elektrickovú stanicu ...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Nie je možné odstránit nákladnú elektrickovú stanicu ...
##id 0x2000
STR_2000_TOWNS :{WHITE}Mesta
@@ -1730,7 +1753,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Budova sa musi zburat
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Obyvatelstvo: {ORANGE}{COMMA}{BLACK} Domov: {ORANGE}{COMMA}
@@ -1763,7 +1786,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Zobrazit informacie o miestnej sprave
STR_2022_LOCAL_AUTHORITY :{WHITE}Miestna sprava {TOWN}
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Hodnotenie dopravnych spolocnosti:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Dotacie
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Ponuknute dotacie:
STR_2027_FROM_TO :{ORANGE}{STRING} z {STRING} do {STRING}
@@ -1834,7 +1857,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}... strom tu uz je
STR_2804_SITE_UNSUITABLE :{WHITE}... nevhodne miesto
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Tu sa strom neda zasadit ...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}... prilis vela popisov
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Tu sa neda dat popis ...
STR_280A_SIGN :Popis
@@ -1887,8 +1910,12 @@
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} teraz prijima {STRING} a {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Orientacia stanice
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Orientacia vykladky
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Orientácia osobnej elektricky
+STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Orientácia nákladnej elektricky
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Stanica musi byt najskor zburana
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Vykladka musi byt najskor zburana
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Najprv sa musí zbúrat osobná elektricková stanica
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Najprv sa musí zbúrat nákladná elektricková stanica
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Stanic{P a e ""}
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Ziadne -
@@ -1900,6 +1927,8 @@
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Dlzka zeleznicnej stanice
STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Vybrat orientaciu stanice
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Vybrat orientaciu vykladky
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Vyberte orientáciu osobnej elektrickovej stanice
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Vyberte orientáciu nákladnej elektrickovej stanice
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Vycentrovat pohlad na poziciu stanice
STR_3054_SHOW_STATION_RATINGS :{BLACK}Zobrazit hodnotenie stanice
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Zmenit nazov stanice
@@ -1937,6 +1966,7 @@
STR_3805_COAST_OR_RIVERBANK :Pobrezie alebo nabrezie
STR_3806_SHIP_DEPOT :Lodenica
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}... nemoze byt postavene na vode
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Najprv sa musí zbúrat kanál
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Ulozit hru
@@ -1946,9 +1976,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabajtov volnych
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Zariadenie je necitatelne
-STR_4007_GAME_SAVE_FAILED :{WHITE}Ulozenie hry zlyhalo
+STR_4007_GAME_SAVE_FAILED :{WHITE}Ulozenie hry zlyhalo{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Subor sa neda vymazat
-STR_4009_GAME_LOAD_FAILED :{WHITE}Nahratie hry zlyhalo
+STR_4009_GAME_LOAD_FAILED :{WHITE}Nahratie hry zlyhalo{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interná chyba: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Poškodená uložená hra - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Hra bola uložená vo vyššej verzii
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Súbor nie je možné precítat
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Nie je možný zápis do súboru
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Zoznam diskov, adresarov a subory ulozenych hier
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Vybrany nazov pre ulozenie hry
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Vymazat vybranu ulozenu hru
@@ -2119,8 +2154,7 @@
STR_SV_STNAME_LOWER :Dolny {STRING}
STR_SV_STNAME_HELIPORT :{STRING} Heliport
STR_SV_STNAME_FOREST :{STRING} Les
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} Stanica #{NUM}
############ end of savegame specific region!
@@ -2200,7 +2234,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Hrac {COMMA})
STR_7004_NEW_FACE :{BLACK}Nová tvár
STR_7005_COLOR_SCHEME :{BLACK}Farebna schema
@@ -2212,7 +2246,7 @@
STR_700B_PRESIDENT_S_NAME :Meno prezidenta
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Nazov spolocnosti sa neda zmenit...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Meno prezidenta sa neda zmenit...
-STR_700E_FINANCES :{WHITE}{COMPANY} Financie {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Financie {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Vydavky/Prijmy
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Vystavba
@@ -2228,20 +2262,20 @@
STR_701B_SHIP_INCOME :{GOLD}Trzby lodi
STR_701C_LOAN_INTEREST :{GOLD}Uroky
STR_701D_OTHER :{GOLD}Ostatne
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Spolu:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Graf príjmov
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Graf prevadzkoveho zisku
STR_7026_BANK_BALANCE :{WHITE}Zostatok v banke
STR_7027_LOAN :{WHITE}Uver
-STR_MAX_LOAN :{WHITE}Uverovy limit: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Pozicat {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Splatit {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Uverovy limit: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Pozicat {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Splatit {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}... uverovy limit je {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Nemozno pozicat viac penazi ...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}... uver uz bol splateny
@@ -2280,8 +2314,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Hodnotenie produktivity spolocnosti (maximalna produktivita je 1000)
STR_7052_COMPANY_VALUES :{WHITE}Hodnota spolocnosti
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Hodnotenie spolocnosti
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Dopravna spolocnost ma problemy!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} bude predana alebo vyhlasi bankrot pokial coskoro nezvysi produktivitu!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Prezident)
@@ -2319,7 +2353,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Svetova kriza!{}{}Financni experti maju obavy z prepadu ekonomiky!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Koniec krizy!{}{}Ocakava sa vzostup predaja a posilnenie ekonomiky!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Prepnut velkost okna
-STR_7076_COMPANY_VALUE :{GOLD}Hodnota spolocnosti: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Hodnota spolocnosti: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Kupit 25% podiel v spolocnosti
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Predat 25% podiel v spolocnosti
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Kupit 25% podiel v tejto spolocnosti
@@ -2350,6 +2384,8 @@
STR_LIVERY_HELICOPTER :Helikoptera
STR_LIVERY_SMALL_PLANE :Male lietadlo
STR_LIVERY_LARGE_PLANE :Velke lietadlo
+STR_LIVERY_PASSENGER_TRAM :Osobná elektricka
+STR_LIVERY_FREIGHT_TRAM :Nákladná elektricka
STR_LIVERY_GENERAL_TIP :{BLACK}Zobrazit všeobecné farebné schémy
STR_LIVERY_TRAIN_TIP :{BLACK}Zobrazit farebné schémy pre vlaky
@@ -2629,7 +2665,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Depo
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Mesto oslavuje . . .{}Prvy vlak dorazil do stanice {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detaily)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detaily)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Vlak v ceste
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2650,6 +2686,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Chod bez zastavenia do depa {TOWN}
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Opravovat bez zastavenia v depe {TOWN}
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Cesta (neurcený cas)
+STR_TIMETABLE_TRAVEL_FOR :Cesta do {STRING}
+STR_TIMETABLE_STAY_FOR :prestávka {STRING}
+STR_TIMETABLE_DAYS :{COMMA} d{P en ni ní}
+STR_TIMETABLE_TICKS :{COMMA} tik{P "" y ov}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Smeruje do {TOWN} depa
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Smeruje do {TOWN} depa, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Servis v depe {TOWN}
@@ -2691,13 +2734,15 @@
STR_REFIT :{BLACK}Prestavba
STR_REFIT_TIP :{BLACK}Vyberte typ nákladu na prestavbu v tomto poradí. CTRL+klik na odstránenie príkazu prestavby
STR_REFIT_ORDER :(Prestavba na {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Cestovný poriadok
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Prepnút na zobrazenie cestovného poriadku
STR_8829_ORDERS :{WHITE}{VEHICLE} (Prikazy)
STR_882A_END_OF_ORDERS :{SETX 10}- - Koniec prikazov - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Oprava
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Nemozno kupit vlak...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Naklada/Vyklada
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Vlak musi byt zastaveny v depe
@@ -2707,6 +2752,9 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Nemozno vlozit novy prikaz...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Nemozno vymazat tebnto prikaz ...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Nemozno zmenit tento prikaz ...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Nie je možné presunút tento príkaz ...
+STR_CAN_T_SKIP_ORDER :{WHITE}Nie je možné vynechat tento príkaz ...
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}Nie je možné preskocit na vybraný príkaz ...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Nemozno posuvat vozdlo ...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}Zadný stroj vždy doprevádza svoj druhý stroj vpredu
STR_8838_N_A :Nie je{SKIP}
@@ -2738,11 +2786,16 @@
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Zobrazit kapacitu kazdeho vozidla
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Zobrazit celkovu kapacitu vlaku, rozdelenu podla typu nakladu
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Zoznam prikazov - kliknut na prikaz pre oznacenie
+STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Preskocit aktuálny príkaz a zacat další. Podržte CTRL pre skok na oznacený príkaz
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Vymazat oznaceny prikaz
STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Oznaceny prikaz bude prevedeny bez zastavenia
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Vlozit novy prikaz pred oznaceny prikaz, alebo na koniec zoznamu
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Na oznacenom prikaze bude vozidlo cakat na plne nalozenie
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Na oznacenom prikaze bude vozidlo uplne vylozene
+STR_TIMETABLE_TOOLTIP :{BLACK}Cestovný poriadok - kliknite na príkaz pre jeho oznacenie
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Zmenit dlžku trvania oznaceného príkazu
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Vymazat dlžku trvania oznaceného príkazu
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Resetnút pocítadlo meškania, takye vozidlo pojde presne
STR_SERVICE_HINT :{BLACK}Vynechat tento prikaz pokial nie je potrebna oprava
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Cena: {CURRENCY} Hmotnost: {WEIGHT_S}{}Rýchlost: {VELOCITY} Výkon: {POWER}{}Náklady na prevádzku: {CURRENCY}/rok{}Kapacita: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Pokazene
@@ -2764,6 +2817,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Typ vlaku nemoze byt premenovany ...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}U vyznaceneho prikazu musi vozidlo vylozit naklad
STR_886F_TRANSFER :{BLACK}Prekladka
+STR_CLEAR_TIME :{BLACK}Vymazat cas
+STR_RESET_LATENESS :{BLACK}Reset meskania
STR_TRAIN_STOPPING :{RED}Zastavuje
STR_TRAIN_STOPPING_VEL :{RED}Zastavuje, {VELOCITY}
@@ -2772,8 +2827,20 @@
STR_TRAIN_START_NO_CATENARY :Vlak nemoze nastartovat, pretoze trat nie je pripojena
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nové {STRING} dostupné!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nové {STRING} dostupné! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nové {STRING} dostupné! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Vozidlu nie je možné zadat cestovný poriadok ...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vozidlá možu cakat len v staniciach.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Toto vozidlo nezastavuje v tejto stanici.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Zmenit cas
+STR_TIMETABLE_STATUS_ON_TIME :Toto vozidlo ide presne
+STR_TIMETABLE_STATUS_LATE :Toto vozidlo mešká {STRING}
+STR_TIMETABLE_STATUS_EARLY :Toto vozidlo ide {STRING} skor
+STR_TIMETABLE_TOTAL_TIME :Na dokoncenie cestovného poriadku je potrebných {STRING}
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Na dokoncenie cestovného poriadku je potrebných najmenej {STRING} (nie všetko je urcené)
+STR_TIMETABLE_AUTOFILL :{BLACK}Autovyplnenie
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Vyplnit cestovný poriadok automaticky hodnotami z prvej cesty
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Automobil v ceste
@@ -2789,7 +2856,7 @@
STR_900E_MAX_SPEED :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Zisk tento rok: {LTBLUE}{CURRENCY} (posledny rok: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Spolahlivost: {LTBLUE}{COMMA}% {BLACK}Pocet poruch od posledneho servisu: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kapacita: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}... musi byt zastaveny v garazi
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Nemozno predat automobil ...
@@ -2816,12 +2883,16 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Vyber vozidiel - kliknut pre detaily
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Zakupit vybrany automobil
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Cena: {CURRENCY}{}Rychlost: {VELOCITY}{}Naklady na prevadzku: {CURRENCY}/rok{}Kapacita: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Kapacita: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Pomenovat automobil
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Nemozno pomenovat automobil ...
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Pomenovat automobil
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Mesto oslavuje . . .{}Prvy autobus dorazil do {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Mesto oslavuje . . .{}Prvy automobil dorazil do {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Mesto oslavuje . . .{}Prvá elektricka dorazila do stanice {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Mesto oslavuje . . .{}Prvá nákladná elektricka dorazila do stanice {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Dopravna nehoda!{}Vodic zahynul po kolizii s vlakom
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Dopravna nehoda!{}{COMMA} mrtvych po kolizii s vlakom
STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Nemozno otocit vozidlo ...
@@ -2861,7 +2932,7 @@
STR_9813_MAX_SPEED :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Zisk tento rok: {LTBLUE}{CURRENCY} (posledny rok: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Spolahlivost: {LTBLUE}{COMMA}% {BLACK}Pocet poruch od posledneho servisu: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kapacita: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Nemozno zastavit/spustit lod ...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Nemozno poslat lod do lodenice ...
@@ -2929,7 +3000,7 @@
STR_A00E_MAX_SPEED :{BLACK}Max. rychlost: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Zisk tento rok: {LTBLUE}{CURRENCY} (posledny rok: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Spolahlivost: {LTBLUE}{COMMA}% {BLACK}Pocet poruch od posledneho servisu: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Vyrobene: {LTBLUE}{NUM}{BLACK} Hodnota: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Nemozno poslat lietadlo do hangaru ...
STR_HEADING_FOR_HANGAR :{ORANGE}Smeruje do {STATION} hangaru
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Smeruje do {STATION} hangaru, {VELOCITY}
@@ -2982,6 +3053,8 @@
STR_GO_TO_AIRPORT_HANGAR :Chod do {STATION} Hangaru
SERVICE_AT_AIRPORT_HANGAR :Opravit v {STATION} hangári
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Cestovný poriadok)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelin zniceny pri nehode na {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Automobil bol zniceny pri kolizii s 'UFO'
@@ -3106,6 +3179,7 @@
### depot strings
STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Chystáte sa predat všetky vozidlá v depe. Ste si isý?
+STR_DEPOT_WRONG_DEPOT_TYPE :Nesprávny typ depa
STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}Predat všetky vlaky v depe
STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}Predat všetky vozidlá v garáži
@@ -3296,6 +3370,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Prepnút priehladnost staníc, garáží, tratí, ...
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Prepnút priehladnost mostov
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Prepnút priehladnost objektov ako sú majáky a antény
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Prepnút priehladnost pre ukazovatele nakladnia
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Skupina {COMMA}
@@ -3333,4 +3415,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Zisk tento rok: {GREEN}{CURRENCY} {BLACK}(minulý rok: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Zisk tento rok: {RED}{CURRENCY} {BLACK}(minulý rok: {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/slovenian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/slovenian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Čez rob zemljevida
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Preblizu roba zemljevida
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Premalo denarja - potrebuješ {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Potrebno je ravno zemljišče
STR_0008_WAITING :{BLACK}Čaka: {WHITE}{STRING}
@@ -537,7 +537,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Lokalna oblast: {LTBLUE}{STRING}
STR_01A9_NONE :Brez
STR_01AA_NAME :{BLACK}Ime
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1.
@@ -820,6 +820,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Nastavitve težavnosti
STR_02C7_CONFIG_PATCHES :Urejanje popravkov
STR_NEWGRF_SETTINGS :NewGRF nastavitve
+STR_TRANSPARENCY_OPTIONS :Nastavitve prozornega pogleda
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Imena mest prikazana
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Imena postaj prikazana
@@ -847,7 +848,6 @@
STR_02DE_MAP_OF_WORLD :Zemljevid sveta
STR_EXTRA_VIEW_PORT :Dodaten pogled
STR_SIGN_LIST :Seznam napisov
-STR_TRANSPARENCY_OPTIONS :Nastavitve prozornega pogleda
STR_02DF_TOWN_DIRECTORY :Imenik mest
STR_TOWN_POPULATION :{BLACK}Svetovno prebivalstvo: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Pogled {COMMA}
@@ -1145,6 +1145,9 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Hitrost premika s kolescem miške: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Uporabi pregledno polnenje: {ORANGE}{STRING}
+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_MAX_TRAINS :{LTBLUE}Največ vlakov na igralca: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Največ cestnih vozil na igralca: {ORANGE}{STRING}
@@ -1228,7 +1231,7 @@
STR_CHEATS :{WHITE}Goljufije
STR_CHEATS_TIP :{BLACK}Kljukice kažejo, če so bile goljufije že kdaj uporabljene
STR_CHEATS_WARNING :{BLACK}Pozor! Nameravaš izdati svoje tekmece. Tako sramotno dejanje bo zabeleženo za vselej.
-STR_CHEAT_MONEY :{LTBLUE}Povečaj denar za {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Povečaj denar za {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Igra se kot igralec: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Čarobni buldožer (odstrani tovarne, neodstranljive objekte): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tuneli se lahko križajo pod zemljo: {ORANGE}{STRING}
@@ -1483,9 +1486,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Ime podjetja: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Ustanovljeno: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Vrednost podjetja: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Trenutno stanje: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Lanski dohodek: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Vrednost podjetja: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Trenutno stanje: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Lanski dohodek: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Ocene: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Vozila: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1720,7 +1723,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Najprej mora biti stavba porušena
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Prebivalstvo: {ORANGE}{COMMA}{BLACK} Število stavb: {ORANGE}{COMMA}
@@ -1753,7 +1756,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Pokaži informacije o mestni oblasti
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} mestni svet
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Ocene prevoznega podjetja:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subvencije
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Ponudba subvencije za storitev:
STR_2027_FROM_TO :{ORANGE}Prevoz {STRING.r} iz {STRING} v {STRING}
@@ -1825,7 +1828,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE} ... drevo je že posajeno
STR_2804_SITE_UNSUITABLE :{WHITE} ... neprimerna lokacija
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Ne moreš posaditi drevesa tukaj ...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE} ... preveč znakov
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Ne moreš postaviti znaka tukaj
STR_280A_SIGN :Znak
@@ -1934,6 +1937,7 @@
STR_3805_COAST_OR_RIVERBANK :Obala ali nabrežje
STR_3806_SHIP_DEPOT :Ladjedelnica
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE} ... Nemogoča gradnja na vodi
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Najprej moraš porušiti kanal
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Shrani igro
@@ -1943,9 +1947,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabajt{P "" a i ov} prosto
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Nemogoče branje pogona
-STR_4007_GAME_SAVE_FAILED :{WHITE}Shranjevanje igre ni uspelo
+STR_4007_GAME_SAVE_FAILED :{WHITE}Shranjevanje igre ni uspelo{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Nemogoče brisanje datoteke
-STR_4009_GAME_LOAD_FAILED :{WHITE}Nalaganje igre ni uspelo
+STR_4009_GAME_LOAD_FAILED :{WHITE}Nalaganje igre ni uspelo{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interna napaka: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Napaka v shranjeni igri - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Igra je bila shranjena z novejso razlicico
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Datoteke ni mozno brati
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :V datoteko ni mozno pisati
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Seznam pogonov, map in shranjenih iger
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Trenutno izbrano ime za shranjevanje
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Izbriši trenutno izbrano shranjeno igro
@@ -2154,7 +2163,7 @@
STR_SV_STNAME_HELIPORT :{STRING} Pristajališče
STR_SV_STNAME_FOREST :{STRING} Gozd
-STR_SV_GROUP_NAME :{GROUP}
+
############ end of savegame specific region!
@@ -2234,7 +2243,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Igralec {COMMA})
STR_7004_NEW_FACE :{BLACK}Nov obraz
STR_7005_COLOR_SCHEME :{BLACK}Barvna shema
@@ -2246,7 +2255,7 @@
STR_700B_PRESIDENT_S_NAME :Ime lastnika
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Ni mogoče spremeniti imena podjetja ...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Ni mogoče spremeniti imena lastnika ...
-STR_700E_FINANCES :{WHITE}{COMPANY} Finance {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Finance {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Stroški/dohodek
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Gradnja
@@ -2262,20 +2271,20 @@
STR_701B_SHIP_INCOME :{GOLD}Prihodek ladij
STR_701C_LOAN_INTEREST :{GOLD}Obresti posojila
STR_701D_OTHER :{GOLD}Drugo
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Skupaj:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Graf prihodkov
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Graf čistega dobička
STR_7026_BANK_BALANCE :{WHITE}Bančno stanje
STR_7027_LOAN :{WHITE}Posojilo
-STR_MAX_LOAN :{WHITE}Meja posojila: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Izposoja {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Vračilo {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Meja posojila: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Izposoja {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Vračilo {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE} ... najvišje posojilo je {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Ni mogoča izposoja več denarja ...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE} ... ni posojila za odplačati
@@ -2314,8 +2323,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Ocene uspeha podjetja (max=1000)
STR_7052_COMPANY_VALUES :{WHITE}Vrednosti podjetij
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Seznam najboljših podjetij
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Podjetje v težavah!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :Podjetje {BLACK}{BIGFONT}{COMPANY} bo prodano ali prisiljeno v stečajni postopek, če se stanje kaj kmalu ne izboljša!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Lastnik)
@@ -2353,7 +2362,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Svetovna recesija!{}{}Ekonomisti se bojijo najhujšega ob trenutnem poteku dogodkov!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Konec recesije!{}{}Izboljšanje trgovanja povečuje zaupanje domače industrije, gospodarstvo napreduje!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Preklopi veliko/majhno velikost okna
-STR_7076_COMPANY_VALUE :{GOLD}Vrednost podjetja: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Vrednost podjetja: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Kupi 25% delnic podjetja
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Prodaj 25% delnic podjetja
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Kupi 25% delnic tega podjetja
@@ -2665,7 +2674,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Železniška garaža
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Prebivalci praznujejo . . .{}Prvi vlak je slovesno pripeljal{}na postajo {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Podrobnosti)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Podrobnosti)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Vlak v napoto
STR_8804 :{SETX 10}{COMMA}: {STRING}{STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING}{STRING}
@@ -2686,6 +2695,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Pojdi brez postanka do garaže {TOWN}
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Non stop na servis v {TOWN} železniško garažo
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Potovanje (brez časovnih tabel)
+STR_TIMETABLE_TRAVEL_FOR :Potuj za {STRING}
+STR_TIMETABLE_STAY_FOR :in ostani za {STRING}
+STR_TIMETABLE_DAYS :{COMMA} d{P an neva i i}
+STR_TIMETABLE_TICKS :{COMMA} pik{P a i e ""}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Pelje v {TOWN} železniško garažo
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Pelje v {TOWN} železniško garažo, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Na servis v {TOWN} železniško garažo
@@ -2727,13 +2743,15 @@
STR_REFIT :{BLACK}Predelaj
STR_REFIT_TIP :{BLACK}Izberi predelavo za vrsto tovora, ki ga želiš. CTRL + klik za odstranitev ukaza predelave
STR_REFIT_ORDER :(Predelaj za {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Časovna tabela
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Preklop na pogled časovnih tabel
STR_8829_ORDERS :{WHITE}{VEHICLE} (Ukazi)
STR_882A_END_OF_ORDERS :{SETX 10}- - Konec ukazov - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Servis
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Ni mogoče kupiti vozila ...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Zgrajeno: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Zgrajeno: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Natovarjanje / Raztovarjanje
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Vlak mora biti ustavljen v garaži
@@ -2743,6 +2761,7 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Ni mogoče vstaviti nov ukaz ...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Ni mogoče izbrisati ukaza ...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Ni mogoče spreminjati ukaza ...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Ni možen premik tega ukaza...
STR_CAN_T_SKIP_ORDER :{WHITE}Nemogoč preskok trenutnega ukaza...
STR_CAN_T_SKIP_TO_ORDER :{WHITE}Nemogoč preskok na izbran ukaz...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Ni mogoče premakniti vozila ...
@@ -2782,6 +2801,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Vstavi nov ukaz pred izbranega ali pa ga dodaj na koncu seznama
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Označi izbran ukaz, naj vozilo čaka na polno obremenitev
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Označi izbran ukaz, naj se vozilo v celoti raztovori
+STR_TIMETABLE_TOOLTIP :{BLACK}Časovna tabela - clikni na ukaz za ga označit.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Spremeni čas, ki naj bi ga označeni ukaz porabil
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Počisti čas za označen ukaz
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Resetiraj števec zamud, da bodo vozila točna
STR_SERVICE_HINT :{BLACK}Preskoči ta ukaz, razen če je potreben servis
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Cena: {CURRENCY} Teža: {WEIGHT_S}{}Hitrost: {VELOCITY} Moč: {POWER}{}Cena delovanja: {CURRENCY}/leto{}Zmogljivost: {CARGO}
STR_885C_BROKEN_DOWN :{RED}V okvari
@@ -2803,6 +2826,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Ni mogoče preimenovati železniškega vozila ...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Nastavi označen ukaz, naj prisili vozilo, da se raztovori
STR_886F_TRANSFER :{BLACK}Pretovori
+STR_CLEAR_TIME :{BLACK}Počisti čas
+STR_RESET_LATENESS :{BLACK}Resetiraj Late Counter
STR_TRAIN_STOPPING :{RED}Se ustavlja
STR_TRAIN_STOPPING_VEL :{RED}Se ustavlja, {VELOCITY}
@@ -2811,8 +2836,16 @@
STR_TRAIN_START_NO_CATENARY :Ta proga nima napetostnih vodov, zato vlak ne more z mesta
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Novo! {STRING} sedaj na razpolago!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo! {STRING} sedaj na razpolago! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo! {STRING} sedaj na razpolago! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Nemogoče določiti časa vozilu...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Vozila lahko čakajo le na postajah.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}To vozilo se ne ustavlja na tej postaji.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Spremeni čas
+STR_TIMETABLE_STATUS_ON_TIME :To vozilo trenutno vozi po točnem času
+STR_TIMETABLE_STATUS_LATE :To vozilo zamuja za {STRING} .
+STR_TIMETABLE_STATUS_EARLY :To vozilo prehiteva za {STRING} .
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Cestno vozilo na poti
@@ -2828,7 +2861,7 @@
STR_900E_MAX_SPEED :{BLACK}Max. hitrost: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Letošnji dobiček: {LTBLUE}{CURRENCY} (lanski: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Zanesljivost: {LTBLUE}{COMMA}% {BLACK}Št. okvar od zadnjega servisa: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Zgrajen: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Zgrajen: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Zmogljivost: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE} ... mora biti ustavljen v garaži
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Ni mogoče prodati cestnega vozila...
@@ -2855,6 +2888,8 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Seznam cestnih vozil - klikni na vozilo za informacije
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Zgradi izbrano cestno vozilo
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Cena: {CURRENCY}{}Hitrost: {VELOCITY}{}Cena delovanja: {CURRENCY}/leto{}Zmogljivost: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Zmogljivost: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Poimenuj cestno vozilo
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}Ni mogoče poimenovati cestnega vozila ...
@@ -2902,7 +2937,7 @@
STR_9813_MAX_SPEED :{BLACK}Max. hitrost: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Dobiček letos: {LTBLUE}{CURRENCY} (lani: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Zanesljivost: {LTBLUE}{COMMA}% {BLACK}Št. okvar po zadnjem servisu: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Zgrajen: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Zgrajen: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Zmogljivost: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Ni mogoče ustaviti/zagnati ladje...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Ni mogoče poslati ladje v garažo...
@@ -2970,7 +3005,7 @@
STR_A00E_MAX_SPEED :{BLACK}Max. hitrost: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Dobiček letos: {LTBLUE}{CURRENCY} (lani: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Zanesljivost: {LTBLUE}{COMMA}% {BLACK}Št. okvar po zadnjem servisu: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Zgrajeno: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Zgrajeno: {LTBLUE}{NUM}{BLACK} Vrednost: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Ni mogoče poslati letala v hangar ...
STR_HEADING_FOR_HANGAR :{ORANGE}Na poti v {STATION} hangar
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Na poti v {STATION} hangar, {VELOCITY}
@@ -3023,6 +3058,8 @@
STR_GO_TO_AIRPORT_HANGAR :Pojdi v {STATION} hangar
SERVICE_AT_AIRPORT_HANGAR :Na servisiranje v {STATION} Hangar
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Časovna tabela)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Nesreča cepelina na letališču {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Cestno vozilo uničeno v trku z 'NLP'!
@@ -3338,6 +3375,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Prozoren ali navaden pogled ostalih objektov kot so postaje, garaže...
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Prozoren ali navaden pogled mostov
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Prozoren ali navaden pogled struktur kot so antene, svetilniki...
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Preklop na prosojnost za prikaz polnenja
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Skupina {COMMA}
@@ -3375,4 +3420,5 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Dobiček letos: {GREEN}{CURRENCY} {BLACK}(lani: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Dobiček letos: {RED}{CURRENCY} {BLACK}(lani: {RED}{CURRENCY}{BLACK})
+
########
--- a/src/lang/spanish.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/spanish.txt Tue Jun 26 23:40:58 2007 +0000
@@ -4,13 +4,15 @@
##plural 0
##gender masculino femenino
+#
+
##id 0x0000
STR_NULL :
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Fuera del borde del mapa
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Demasiado cerca del borde del mapa
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}No hay suficiente dinero - se requiere {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Se requiere terreno llano
STR_0008_WAITING :{BLACK}Esperando: {WHITE}{STRING}
@@ -494,7 +496,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Autoridad local: {LTBLUE}{STRING}
STR_01A9_NONE :Ninguna
STR_01AA_NAME :{BLACK}Nombre
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -777,6 +779,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Configuración de dificultad
STR_02C7_CONFIG_PATCHES :Configurar parches
STR_NEWGRF_SETTINGS :Configuración Newgrf
+STR_TRANSPARENCY_OPTIONS :Opciones de transparencia
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Ver nombres de poblaciones
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Ver nombres de estaciones
@@ -804,7 +807,6 @@
STR_02DE_MAP_OF_WORLD :Mapa del mundo
STR_EXTRA_VIEW_PORT :Punto de vista extra
STR_SIGN_LIST :Lista de señales
-STR_TRANSPARENCY_OPTIONS :Opciones de transparencia
STR_02DF_TOWN_DIRECTORY :Listado de poblaciones
STR_TOWN_POPULATION :{BLACK}Población mundial: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vista {COMMA}
@@ -1047,6 +1049,7 @@
STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Nuevo sistema de busq. de rutas global (NPF, anula a NTP): {ORANGE}{STRING}
STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Carga el multiplicador de peso para simular trenes pesados: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Permite conducir en paradas sobre carreteras de ciudades: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Permitir construcción en estaciones contiguas : {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Permitir siempre aeropuertos pequeños: {ORANGE}{STRING}
@@ -1087,6 +1090,7 @@
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}Mantener los helicópteros en helipuertos automáticamente: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}Une la caja de paisaje a la barra de rail/carretera...: {ORANGE}{STRING}
STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}El scroll de ratón mueve la vista en dirección opuesta: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}Scroll de vista suavizado: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}Muestra medidas con las herramientras construcción: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}Ver estaciones de la empresa: {ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES_NONE :Ninguno
@@ -1100,6 +1104,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Velocidad del scroll sobre el mapa: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Usar indicadores de carga: {ORANGE}{STRING}
+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}Tipo de rail por defecto (después de juego nuevo/cargar juego): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Rail Normal
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Rail Electrificado
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Primero disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Último disponible
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Más usados
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Máx trenes por jugador: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Máx vehículos de carretera por jugador: {ORANGE}{STRING}
@@ -1183,7 +1198,7 @@
STR_CHEATS :{WHITE}Trucos
STR_CHEATS_TIP :{BLACK}Las casillas indican si ha usado este truco antes
STR_CHEATS_WARNING :{BLACK}Atención! Usted está a punto de traicionar a sus competidores. Tenga presente que tal deshonra será recordada para toda la eternidad.
-STR_CHEAT_MONEY :{LTBLUE}Incrementar dinero en {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Incrementar dinero en {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Jugar como el jugador: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer mágico (elimina industrias, etc.): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Los túneles pueden cruzarse: {ORANGE}{STRING}
@@ -1394,6 +1409,31 @@
STR_NETWORK_LANG_ENGLISH :Inglés
STR_NETWORK_LANG_GERMAN :Alemán
STR_NETWORK_LANG_FRENCH :Francés
+STR_NETWORK_LANG_BRAZILIAN :Brasileño
+STR_NETWORK_LANG_BULGARIAN :Búlgaro
+STR_NETWORK_LANG_CHINESE :Chino
+STR_NETWORK_LANG_CZECH :Checo
+STR_NETWORK_LANG_DANISH :Danés
+STR_NETWORK_LANG_DUTCH :Alemán
+STR_NETWORK_LANG_ESPERANTO :Esperanto
+STR_NETWORK_LANG_FINNISH :Fines
+STR_NETWORK_LANG_HUNGARIAN :Hungaro
+STR_NETWORK_LANG_ICELANDIC :Islandes
+STR_NETWORK_LANG_ITALIAN :Italiano
+STR_NETWORK_LANG_JAPANESE :Japones
+STR_NETWORK_LANG_KOREAN :Coreano
+STR_NETWORK_LANG_LITHUANIAN :Lituano
+STR_NETWORK_LANG_NORWEGIAN :Noruego
+STR_NETWORK_LANG_POLISH :Polaco
+STR_NETWORK_LANG_PORTUGUESE :Portugués
+STR_NETWORK_LANG_ROMANIAN :Rumano
+STR_NETWORK_LANG_RUSSIAN :Ruso
+STR_NETWORK_LANG_SLOVAK :Eslovaco
+STR_NETWORK_LANG_SLOVENIAN :Esloveno
+STR_NETWORK_LANG_SPANISH :Español
+STR_NETWORK_LANG_SWEDISH :Sueco
+STR_NETWORK_LANG_TURKISH :Turco
+STR_NETWORK_LANG_UKRAINIAN :Ucraniano
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}Sala de estar del juego multijugador
@@ -1413,9 +1453,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Nombre empresa: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inauguración: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Valor empresa: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Balance actual: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Ingresos último año: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Valor empresa: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Balance actual: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Ingresos último año: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Rendimiento: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Vehículos: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1587,6 +1627,13 @@
STR_RAILROAD_TRACK_WITH_PRESIGNALS :Vía del tren con pre-señales
STR_RAILROAD_TRACK_WITH_EXITSIGNALS :Vía del tren con señales de salida
STR_RAILROAD_TRACK_WITH_COMBOSIGNALS :Vía del tren con señales combo
+STR_RAILROAD_TRACK_WITH_NORMAL_PRESIGNALS :Vía de tren con señales normales y preseñalización
+STR_RAILROAD_TRACK_WITH_NORMAL_EXITSIGNALS :Vía de tren con señales normales y señales de salida
+STR_RAILROAD_TRACK_WITH_NORMAL_COMBOSIGNALS :Vía de tren con señales combo y normales
+STR_RAILROAD_TRACK_WITH_PRE_EXITSIGNALS :Vía de tren con preseñalización y señales de salida
+STR_RAILROAD_TRACK_WITH_PRE_COMBOSIGNALS :Vía de tren con preseñalización y señales combo
+STR_RAILROAD_TRACK_WITH_EXIT_COMBOSIGNALS :Vía de tren con señales de salida y señales combo
+STR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Debes quitar la estación de tren primero
@@ -1594,22 +1641,39 @@
STR_1801_MUST_REMOVE_ROAD_FIRST :{WHITE}Ha de retirar carretera primero
STR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trabajos en la carretera en progreso
STR_1802_ROAD_CONSTRUCTION :{WHITE}Construcción de carretera
+STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}Construcción de tranvía
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}Elige puente de carretera
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... carreteras de un sentido no pueden tener intersecciones
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}No se puede construir carretera aquí...
+STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}No se puede construir un tranvía aquí...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}No se puede retirar carretera de aquí...
+STR_1805_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}No se puede quitar el tranvía de aquí...
STR_1806_ROAD_DEPOT_ORIENTATION :{WHITE}Orientación del depósito
+STR_1806_TRAM_DEPOT_ORIENTATION :{WHITE}Orientación del depósito de tranvía
STR_1807_CAN_T_BUILD_ROAD_VEHICLE :{WHITE}No se puede construir depósito de carretera aquí...
+STR_1807_CAN_T_BUILD_TRAM_VEHICLE :{WHITE}No se puede construir depósito de tranvía aquí...
STR_1808_CAN_T_BUILD_BUS_STATION :{WHITE}No se puede construir estación de autobuses...
STR_1809_CAN_T_BUILD_TRUCK_STATION :{WHITE}No se puede construir estación de camiones...
+STR_1808_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}No se puede construir estación de tranvía de pasajeros...
+STR_1809_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}No puede construir estación de tranvía de carga...
STR_180A_ROAD_CONSTRUCTION :Construcción de carretera
+STR_180A_TRAMWAY_CONSTRUCTION :Construcción de tranvía
STR_180B_BUILD_ROAD_SECTION :{BLACK}Construir sección de carretera
+STR_180B_BUILD_TRAMWAY_SECTION :{BLACK}Construir sección de tranvía
STR_180C_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construir depósito de carretera (para construir y despachar vehículos)
+STR_180C_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construir depósito de tranvías (para vehículos de contrucción y servicio)
STR_180D_BUILD_BUS_STATION :{BLACK}Construir estación de autobús
STR_180E_BUILD_TRUCK_LOADING_BAY :{BLACK}Construir estación de carga para camiones
+STR_180D_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construir estación de tranvía de pasajeros
+STR_180E_BUILD_CARGO_TRAM_STATION :{BLACK}Construir estación de tranvía de carga
STR_180F_BUILD_ROAD_BRIDGE :{BLACK}Construir puente de carretera
+STR_180F_BUILD_TRAMWAY_BRIDGE :{BLACK}Construir puente de tranvía
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Construir túnel de carretera
+STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir tunel de tranvía
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Cambiar entre construir/retirar carretera
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Activar construir/quitar para construcciones de tranvía
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Elegir orientación del depósito de carretera
+STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Seleccione orientación del depósito de tranvías
STR_1814_ROAD :Road
STR_1815_ROAD_WITH_STREETLIGHTS :Carretera con farolas
STR_1816_TREE_LINED_ROAD :Carretera arbolada
@@ -1617,6 +1681,8 @@
STR_1818_ROAD_RAIL_LEVEL_CROSSING :Paso a nivel
STR_CAN_T_REMOVE_BUS_STATION :{WHITE}No se puede quitar la estación de bus...
STR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}No se puede quitar la estación de camiones...
+STR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}No se puede quitar estación de tranvía de pasajeros...
+STR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}No se puede quitar estación de tranvía de carga...
##id 0x2000
STR_2000_TOWNS :{WHITE}Poblaciones
@@ -1624,7 +1690,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}El edificio debe demolerse primero
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Habitantes: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA}
@@ -1657,7 +1723,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Mostrar información sobre autoridades locales
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} autoridad local
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Ranking de empresas de transporte:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subvenciones
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Se ofrecen subvenciones por llevar:
STR_2027_FROM_TO :{ORANGE}{STRING} desde {STRING} a {STRING}
@@ -1728,7 +1794,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...ya hay árboles aquí
STR_2804_SITE_UNSUITABLE :{WHITE}...sitio no apropiado
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}No se pueden plantar árboles aquí...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...demasiadas señales
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}No se puede colocar una señal aquí...
STR_280A_SIGN :Señal
@@ -1781,8 +1847,12 @@
STR_3041_NOW_ACCEPTS_AND :{WHITE}{STATION} acepta ahora {STRING} y {STRING}
STR_3042_BUS_STATION_ORIENTATION :{WHITE}Or. estación de autobús
STR_3043_TRUCK_STATION_ORIENT :{WHITE}Or. estación de camiones
+STR_3042_PASSENGER_TRAM_STATION_ORIENTATION :{WHITE}Orientación Tranvía Pasajeros
+STR_3043_CARGO_TRAM_STATION_ORIENT :{WHITE}Orientación Tranvía de Carga
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Primero debe demolerse estación de autobús
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Primero debe demolerse estación de camiones
+STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Debe demoler la estación del tranvía de pasajeros primero
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Debe demoler la estación del tranvía de carga primero
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} Estaciones
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Ninguna -
@@ -1794,6 +1864,8 @@
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Elige longitud de la estación de tren
STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Elige la orientación de la estación de autobús
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Elige la orientación de la estación de camiones
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Seleccione la orientación de la estación del tranvía de pasajeros
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Seleccione la orientación de la estación del tranvía de carga
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Centrar vista en la posición de la estación
STR_3054_SHOW_STATION_RATINGS :{BLACK}Ver calificación de la estación
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Cambiar nombre de la estación
@@ -1831,6 +1903,7 @@
STR_3805_COAST_OR_RIVERBANK :Costa o rivera
STR_3806_SHIP_DEPOT :Astillero
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...No se puede construir sobre el agua
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Debes demoler el canal primero
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Guardar Juego
@@ -1840,9 +1913,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabytes libres
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}No es posible leer la unidad
-STR_4007_GAME_SAVE_FAILED :{WHITE}Error guardando juego
+STR_4007_GAME_SAVE_FAILED :{WHITE}Error guardando juego{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}No es posible borrar el fichero
-STR_4009_GAME_LOAD_FAILED :{WHITE}Carga de juego erronea
+STR_4009_GAME_LOAD_FAILED :{WHITE}Carga de juego erronea{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error interno: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Partida guardada corrupta - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida guardada ha sido realizada con una versión más nueva
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :No se puede leer fichero
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Fichero no escribible
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Listado de unidades, directorios y juegos guardados
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Nombre seleccionado actualmente para el juego guardado
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Borrar el juego guardado seleccionado
@@ -2013,7 +2091,7 @@
STR_SV_STNAME_LOWER :{STRING} Bajo
STR_SV_STNAME_HELIPORT :Helipuerto de {STRING}
STR_SV_STNAME_FOREST :Bosque de {STRING}
-
+STR_SV_STNAME_FALLBACK :{STRING} Estación #{NUM}
############ end of savegame specific region!
@@ -2093,7 +2171,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Jugador {COMMA})
STR_7004_NEW_FACE :{BLACK}Nueva Cara
STR_7005_COLOR_SCHEME :{BLACK}Esquema Color
@@ -2105,7 +2183,7 @@
STR_700B_PRESIDENT_S_NAME :Nombre del Presidente
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}No se puede cambiar el nombre de la empresa...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}No se puede cambiar el nombre del presidente...
-STR_700E_FINANCES :{WHITE}{COMPANY} Finanzas {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Finanzas {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Gastos/Ingresos
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Construcción
@@ -2121,20 +2199,20 @@
STR_701B_SHIP_INCOME :{GOLD}Ingresos Barcos
STR_701C_LOAN_INTEREST :{GOLD}Intereses de Préstamo
STR_701D_OTHER :{GOLD}Otros
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Total:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Gráfico de Ingresos
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Gráfico de Beneficio Operativo
STR_7026_BANK_BALANCE :{WHITE}Saldo en Banco
STR_7027_LOAN :{WHITE}Préstamo
-STR_MAX_LOAN :{WHITE}Préstamo Máx: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Pedir Préstamo {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Pagar Préstamo {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Préstamo Máx: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Pedir Préstamo {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Pagar Préstamo {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...máxima cantidad de préstamo permitida es {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}No se puede pedir más prestamo...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...no hay préstamo que pagar
@@ -2173,8 +2251,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Calificaciones de actuación de compañías (tasa máx.=1000)
STR_7052_COMPANY_VALUES :{WHITE}Valores de las empresas
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Ranking de Empresas
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}¡Empresa en problemas!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} debe ser vendida o declarada en bancarrota a no ser que mejore su actuación!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Presidente)
@@ -2212,7 +2290,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}¡Recesión Mundial!{}{}¡Los expertos financieros son pesimistas mientras la economía se hunde!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}¡Fin de la Recesión!{}{}¡Mejora en el comercio da ánimos a las industrias mientras la economía se fortalece!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Cambiar entre tamaño de ventana grande/pequeño
-STR_7076_COMPANY_VALUE :{GOLD}Valor de la empresa: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Valor de la empresa: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Comprar un 25% de sus acciones
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Vender 25% de acciones
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Comprar 25% de acciones de esta empresa
@@ -2243,6 +2321,8 @@
STR_LIVERY_HELICOPTER :Helicoptero
STR_LIVERY_SMALL_PLANE :Aeroplano Pequeño
STR_LIVERY_LARGE_PLANE :Aeroplano Grande
+STR_LIVERY_PASSENGER_TRAM :Tranvía de Pasajeros
+STR_LIVERY_FREIGHT_TRAM :Tranvía de Carga
STR_LIVERY_GENERAL_TIP :{BLACK}Mostrar esquema de colores general
STR_LIVERY_TRAIN_TIP :{BLACK}Ver esquema de color de los trenes
@@ -2522,7 +2602,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN}, Depósito de tren
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Los ciudadanos celebran . . .{}¡Primer tren llega a {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Detalles)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detalles)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Tren en camino
STR_8804 :{SETX 10}{COMMA}: {STRING}{STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING}{STRING}
@@ -2543,6 +2623,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Ir sin parar al depósito de {TOWN}
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Ir sin parar al depósito de {TOWN} para mantenimiento
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Viaje (sin horarios)
+STR_TIMETABLE_TRAVEL_FOR :Viaje para {STRING}
+STR_TIMETABLE_STAY_FOR :y estancia en {STRING}
+STR_TIMETABLE_DAYS :{COMMA} días{P "" s}
+STR_TIMETABLE_TICKS :{COMMA} señal{P "" s}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Hacia el depósito de {TOWN}
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Hacia el depósito de {TOWN}, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Servicio en el depósito de trenes de {TOWN}
@@ -2584,13 +2671,15 @@
STR_REFIT :{BLACK}Recargar
STR_REFIT_TIP :{BLACK}Selecciona el tipo de carga a recargar en esta orden. Control+click para quitar la orden de recargar
STR_REFIT_ORDER :(Recargar en {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Horarios
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Cambiar a la vista de horarios
STR_8829_ORDERS :{WHITE}{VEHICLE} (Órdenes)
STR_882A_END_OF_ORDERS :{SETX 10}- - Fin de pedidos - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Servicio
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}No se puede construir vehículo...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Construido: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Construido: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Cargando / Descargando
STR_TRAIN_MUST_BE_STOPPED :{WHITE}El tren debe pararse dentro del depósito
@@ -2600,6 +2689,9 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}No se puede insertar un nuevo pedido...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}No se puede borrar este pedido...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}No se puede modificar este pedido...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}No se puede mover esta orden...
+STR_CAN_T_SKIP_ORDER :{WHITE}No se puede saltar la orden actual...
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}No se puede saltar a la orden seleccionada...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}No se puede mover vehículo...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}El motor posterior seguirá siempre su contraparte delantera
STR_8838_N_A :N/D{SKIP}
@@ -2631,11 +2723,16 @@
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}Mostrar capacidades de cada vehículo
STR_8852_SHOW_TOTAL_CARGO :{BLACK}Mostrar capacidad total del tren, dividida por tipo de carga
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}Lista de órdenes - click en orden para resaltarla
+STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}Saltar orden actual y comenzar la siguiente
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}Borrar orden resaltada
STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Hacer la orden resaltada sin parada
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Añadir nueva orden antes de la orden resaltada, o añadirla al final de la lista
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Hacer que en la orden resaltada, el vehículo espere a carga completa
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Hacer que en la orden resaltada, el vehículo espere a descargar completamente
+STR_TIMETABLE_TOOLTIP :{BLACK}Horarios - pulse en una orden para marcarla.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambia la cantidad de tiempo que debe tomar una orden marcada
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Limpiar la cantidad de tiempo para la orden seleccionada
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reajustar el contador del retraso, así el vehículo estará en horario
STR_SERVICE_HINT :{BLACK}Saltar esta orden a menos que el servicio sea necesario
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Coste: {CURRENCY} Peso: {WEIGHT_S}{}Velocidad: {VELOCITY} Potencia: {POWER}{}Coste Operativo: {CURRENCY}/año{}Capacidad: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Averiado
@@ -2657,6 +2754,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}No se puede renombrar tipo de vehículo...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Hacer que la orden marcada fuerce al vehículo a descargar
STR_886F_TRANSFER :{BLACK}Transferir
+STR_CLEAR_TIME :{BLACK}Limpiar Horario
+STR_RESET_LATENESS :{BLACK}Resetear Contador de Retrasos
STR_TRAIN_STOPPING :{RED}Parándose
STR_TRAIN_STOPPING_VEL :{RED}Parándose, {VELOCITY}
@@ -2665,8 +2764,20 @@
STR_TRAIN_START_NO_CATENARY :Esta vía carece la catenaria, así que el tren no puede comenzar
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nuevo{STRING} ahora disponible!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nuevo {STRING} ahora disponible! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nuevo {STRING} ahora disponible! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}No se puede ajustar horarios al vehículo...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Los vehículos solo pueden esperar en las estaciones.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Este vehículo no está parando en esta estación.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambiar Horario
+STR_TIMETABLE_STATUS_ON_TIME :Este vehículo está actualmente en hora
+STR_TIMETABLE_STATUS_LATE :Este vehículo está actualmente retrasado {STRING}
+STR_TIMETABLE_STATUS_EARLY :Este vehículo está actualmente {STRING} adelantado
+STR_TIMETABLE_TOTAL_TIME :Los horarios tomarán {STRING} para completarse
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Estos horarios tomarán {STRING} para completarse (no todos los horarios)
+STR_TIMETABLE_AUTOFILL :{BLACK}Asignar automáticamente
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Asigna automáticamente la tabla de horarios con los valores del primer viaje
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Vehículo de carretera en camino
@@ -2682,7 +2793,7 @@
STR_900E_MAX_SPEED :{BLACK}Velocidad Máx.: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Beneficio este año: {LTBLUE}{CURRENCY} (último año: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidad: {LTBLUE}{COMMA}% {BLACK}Averías desde último despacho: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Capacidad: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...debe estar detenido dentro de un depósito
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}No se puede vender vehículo...
@@ -2709,12 +2820,16 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}Lista de selección de vehículos - click en vehículo para información
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}Construir el vehículo resaltado
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}Coste: {CURRENCY}{}Velocidad: {VELOCITY}{}Coste Operativo: {CURRENCY}/año{}Capacidad: {CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}Capacidad: {LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}Nombrar vehículo
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}No se puede nombrar vehículo...
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Nombrar vehículo
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Los ciudadanos celebran . . .{}¡Primer autobús llega a {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Los ciudadanos celebran . . .{}¡Primer camión llega a {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Ciudadanos celebran . . .{}Llega primer tranvía de pasajeros a {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Ciudadanos celebran . . .{}Llega primer tranvía de carga a {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}¡Accidente de tráfico!{}El conductor fallece en la explosión tras la colisión con el tren
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Accidente de tráfico!{}{COMMA} fallecidos en la explosión tras la colisión con el tren
STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}No se puede hacer girar al vehículo...
@@ -2754,7 +2869,7 @@
STR_9813_MAX_SPEED :{BLACK}Velocidad Máx.: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Beneficio este año: {LTBLUE}{CURRENCY} (año anterior: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidad: {LTBLUE}{COMMA}% {BLACK}Averías desde último despacho: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Capacidad: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}No se puede detener/arrancar barco...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}No se puede mandar barco a astillero...
@@ -2822,7 +2937,7 @@
STR_A00E_MAX_SPEED :{BLACK}Velocidad Máx.: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Beneficio este año: {LTBLUE}{CURRENCY} (año anterior: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Fiabilidad: {LTBLUE}{COMMA}% {BLACK}Averías desde último despacho: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Const.: {LTBLUE}{NUM}{BLACK} Valor: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}No se puede enviar la aeronave al hangar
STR_HEADING_FOR_HANGAR :{ORANGE}Ir al hangar de {STATION}
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Ir al hangar de {STATION}, {VELOCITY}
@@ -2875,6 +2990,8 @@
STR_GO_TO_AIRPORT_HANGAR :Ir al hangar de {STATION}
SERVICE_AT_AIRPORT_HANGAR :Ir al hangar de {STATION} para mantenimiento
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Horarios)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}¡Desastre de zepelín en {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}¡Vehículo terrestre destruído en colisión con OVNI!
@@ -2999,6 +3116,7 @@
### depot strings
STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Vas a vender todos los vehículos que tienes en el depósito. ¿Estás seguro?
+STR_DEPOT_WRONG_DEPOT_TYPE :Tipo de depósito erroneo
STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}Vender todos los trenes del depósito
STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}Vender todos los vehículos del depósito
@@ -3189,9 +3307,18 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Activar transparencias para construcciones como estaciones, depósitos, puntos de paso, etc.
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Activar transparencias para puentes
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Activar transparencias para estructuras como faros, antenas, etc.
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Ajustar transparencia para los indicadores de carga
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Grupo {COMMA}
+STR_GROUP_TINY_NAME :{TINYFONT}{GROUP}
STR_GROUP_ALL_TRAINS :Todos los trenes
STR_GROUP_ALL_ROADS :Todos los vehículos de carretera
STR_GROUP_ALL_SHIPS :Todos los barcos
@@ -3200,7 +3327,12 @@
STR_GROUP_ADD_SHARED_VEHICLE :Todos los vehículos compartidos
STR_GROUP_REMOVE_ALL_VEHICLES :Quitar todos los vehículos
+STR_GROUP_TRAINS_CAPTION :{WHITE}{GROUP} - {COMMA} Tren{P "" s}
+STR_GROUP_ROADVEH_CAPTION :{WHITE}{GROUP} - {COMMA} Vehículo de carretera{P "" s}
+STR_GROUP_SHIPS_CAPTION :{WHITE}{GROUP} - {COMMA} Barco{P "" s}
+STR_GROUP_AIRCRAFTS_CAPTION :{WHITE}{GROUP} - {COMMA} Aeronave
STR_GROUP_RENAME_CAPTION :{BLACK}Renombrar un grupo
+STR_GROUP_REPLACE_CAPTION :{WHITE}Reemplazar vehículos de "{GROUP}"
STR_GROUP_CAN_T_CREATE :{WHITE}No se puede crear grupo...
STR_GROUP_CAN_T_DELETE :{WHITE}No se puede borrar este grupo...
@@ -3220,4 +3352,7 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Beneficio este año: {GREEN}{CURRENCY} {BLACK}(año pasado: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Beneficio este año: {RED}{CURRENCY} {BLACK}(año pasado: {RED}{CURRENCY}{BLACK})
+STR_GROUP_NAME :{GROUP}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/swedish.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/swedish.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Utanför kanten
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}För nära kanten av kartan
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Inte tillräckligt med pengar - krävs {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Platt mark krävs
STR_0008_WAITING :{BLACK}Väntar: {WHITE}{STRING}
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Lokala myndigheter: {LTBLUE}{STRING}
STR_01A9_NONE :Ingen
STR_01AA_NAME :{BLACK}Namn
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Svårighetsgrad
STR_02C7_CONFIG_PATCHES :Ändra Patchar
STR_NEWGRF_SETTINGS :NewGRF inställningar
+STR_TRANSPARENCY_OPTIONS :Genomskinlighetsinställningar
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Stadsnamn visas
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Stationsnamn visas
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :Världskarta
STR_EXTRA_VIEW_PORT :Nytt vyfönster
STR_SIGN_LIST :Skyltlista
-STR_TRANSPARENCY_OPTIONS :Genomskinlighetsinställningar
STR_02DF_TOWN_DIRECTORY :Stadslista
STR_TOWN_POPULATION :{BLACK}Världsbefolkning: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vyfönster {COMMA}
@@ -1103,6 +1103,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Mushjulshastighet: {ORANGE}{STRING}
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_LOADING_INDICATORS :{LTBLUE}Använd lastningsindikatörer: {ORANGE}{STRING}
+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}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Normal Järnvägsräls
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Elektrisk Järnvägsräls
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monorail
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Första tillgängliga
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Sista tillgängliga
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Mest använd
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Max antal tåg per spelare: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Max antal vägfordon per spelare: {ORANGE}{STRING}
@@ -1186,7 +1197,7 @@
STR_CHEATS :{WHITE}Fusk
STR_CHEATS_TIP :{BLACK}Checkboxar indikerar om du använt det här fusket förut
STR_CHEATS_WARNING :{BLACK}Varning! Du är på väg att förråda dina motståndare. Kom ihåg att detta inte kommer glömmas.
-STR_CHEAT_MONEY :{LTBLUE}Öka pengar med {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Öka pengar med {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Spela som Spelare: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magisk Bulldozer (ta bort industrier, fyrar etc.): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnlar kan korsa varandra: {ORANGE}{STRING}
@@ -1441,9 +1452,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Företagsnamn: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Etableringsår: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Företagsvärde: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Nuvarande saldo: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Förra årets inkomst: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Företagsvärde: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Nuvarande saldo: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Förra årets inkomst: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Prestandabetyg: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Fordon: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1678,7 +1689,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Byggnad måste rivas först
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Invånare: {ORANGE}{COMMA}{BLACK} Hus: {ORANGE}{COMMA}
@@ -1711,7 +1722,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Visa information om de lokala myndigheterna
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} lokala myndigheter
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Transportföretags värderingar:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Subventioner
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Aktuella subventioner:
STR_2027_FROM_TO :{ORANGE}{STRING} från {STRING} till {STRING}
@@ -1782,7 +1793,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...träd redan här
STR_2804_SITE_UNSUITABLE :{WHITE}...plats olämplig
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Kan inte plantera träd här...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...för många skyltar
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Kan inte placera skylt här...
STR_280A_SIGN :Skylt
@@ -1891,6 +1902,7 @@
STR_3805_COAST_OR_RIVERBANK :Kust eller flodbank
STR_3806_SHIP_DEPOT :Skeppsdepå
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Kan inte bygga på vatten
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Måste först ta bort kanalen
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Spara spel
@@ -1900,9 +1912,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabyte{P "" s} ledigt
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Kan inte läsa från disk
-STR_4007_GAME_SAVE_FAILED :{WHITE}Sparandet av spelet misslyckades
+STR_4007_GAME_SAVE_FAILED :{WHITE}Sparandet av spelet misslyckades{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Kan inte ta bort filen
-STR_4009_GAME_LOAD_FAILED :{WHITE}Läsningen av spelet misslyckades
+STR_4009_GAME_LOAD_FAILED :{WHITE}Läsningen av spelet misslyckades{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internt fel: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Trasig sparfil - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Sparfilen är gjord med en ny version
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Filen är inte läsbar
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Filen är inte skrivbar
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Listar enheter, kataloger och sparade spel
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Valt namn för spelet
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Ta bort markerat sparat spel
@@ -2073,8 +2090,7 @@
STR_SV_STNAME_LOWER :Nedre {STRING}
STR_SV_STNAME_HELIPORT :{STRING} Helikopterplats
STR_SV_STNAME_FOREST :{STRING} Skog
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} Station #{NUM}
############ end of savegame specific region!
@@ -2154,7 +2170,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Spelare {COMMA})
STR_7004_NEW_FACE :{BLACK}Nytt ansikte
STR_7005_COLOR_SCHEME :{BLACK}Färgval
@@ -2166,7 +2182,7 @@
STR_700B_PRESIDENT_S_NAME :Namn på VD
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Kan inte ändra företagsnamn...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Kan inte ändra namnet på VD:n...
-STR_700E_FINANCES :{WHITE}{COMPANY} Budget {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Budget {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Utgifter/inkomster
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Konstruktioner
@@ -2182,20 +2198,20 @@
STR_701B_SHIP_INCOME :{GOLD}Inkomst från skepp
STR_701C_LOAN_INTEREST :{GOLD}Ränta på lån
STR_701D_OTHER :{GOLD}Övrigt
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Totalt:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Graf över inkomster
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Graf över vinst
STR_7026_BANK_BALANCE :{WHITE}Banksaldo
STR_7027_LOAN :{WHITE}Lån
-STR_MAX_LOAN :{WHITE}Maxlån: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Låna {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Återbetala {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Maxlån: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Låna {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Återbetala {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maximal storlek på lånet är {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kan inte låna mer pengar...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...lånet redan återbetalt
@@ -2234,8 +2250,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Företagets prestationsvärderingar (maxvärdering=1000)
STR_7052_COMPANY_VALUES :{WHITE}Företagsvärde
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Företagstabell
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Transportföretag har problem!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} kommer att säljas eller gå bankrutt om det inte går bättre snart!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(VD)
@@ -2273,7 +2289,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Lågkonjuktur!{}{}Finansexperter befarar det värsta när ekonomin sjunker!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Lågkonjuktur Över!{}{}Uppsving i byteshandeln ger tillförsikt till industrier när ekonomin stärks!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Växla stor/liten fönsterstorlek
-STR_7076_COMPANY_VALUE :{GOLD}Företagets värde: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Företagets värde: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Köp 25% andelar i företaget
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Sälj 25% andelar i företaget
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Köp 25% andelar i detta företag
@@ -2585,7 +2601,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} tågdepå
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Invånarna firar . . .{}Första tåget ankommer till {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Details)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Details)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Tåg i vägen
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2606,6 +2622,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Åk non-stop till {TOWN}s tågdepå
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Servning non-stop {TOWN} tågdepå
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Avres (Inte tillagd i tidtabell)
+STR_TIMETABLE_TRAVEL_FOR :Res till {STRING}
+STR_TIMETABLE_STAY_FOR :och stanna i {STRING}
+STR_TIMETABLE_DAYS :{COMMA} dag{P "" s}
+STR_TIMETABLE_TICKS :{COMMA} tick{P "" s}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}På väg mot {TOWN}s tågdepå
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}På väg mot {TOWN}s tågdepå, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Service vid {TOWN}s tågdepå
@@ -2647,13 +2670,15 @@
STR_REFIT :{BLACK}Anpassa
STR_REFIT_TIP :{BLACK}Välj vilken godstyp anpassningen ska göras i denna order. CTRL+ klicka för att ta bort anpassningsordern
STR_REFIT_ORDER :(Anpassa för {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Tidtabell
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Ändra till tidtabellsvy
STR_8829_ORDERS :{WHITE}{VEHICLE} (Order)
STR_882A_END_OF_ORDERS :{SETX 10}- - Slut på order - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Servning
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Kan inte bygga järnvägfordon...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Värde: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Värde: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Lastar / lastar av
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Tåget måste stoppas inne i depån
@@ -2703,6 +2728,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Infoga ny order före markerad order, eller lägg till i slutet av listan
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Gör markerad order att tvinga fordonet att vänta på full last
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Gör markerad order att tvinga fordonet att vänta på tom last
+STR_TIMETABLE_TOOLTIP :{BLACK}Tidstabell - klicka på en order för att markera den.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ändra tid som den markerade ordern bör ta
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Rensa tiden för markerad order
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nollställ räknaren för sen ankomst så att fordonet kommer i tid
STR_SERVICE_HINT :{BLACK}Skippa den här ordern om inte servning behövs
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Kostnad: {CURRENCY} Vikt: {WEIGHT_S}{}Hastighet: {VELOCITY} Kraft {POWER}{}Löpande kostnad: {CURRENCY}/år{}Kapacitet: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Motorstopp
@@ -2724,6 +2753,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Kan inte byta namn på tågets fordonstyp...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Gör så att den markerade ordern tvingar fordonet att lasta av
STR_886F_TRANSFER :{BLACK}Lasta om
+STR_CLEAR_TIME :{BLACK}Rensa tid
+STR_RESET_LATENESS :{BLACK}Rensa räknaren för sen ankomst
STR_TRAIN_STOPPING :{RED}Stannar
STR_TRAIN_STOPPING_VEL :{RED}Stannar, {VELOCITY}
@@ -2732,8 +2763,20 @@
STR_TRAIN_START_NO_CATENARY :Detta spår saknar kedjekurva, så tåget kan inte starta
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Nya {STRING} är nu tillgänglig!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nya {STRING} är nu tillgänglig - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nya {STRING} är nu tillgänglig - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Kan inte lägga till fordonet i en tidtabell...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Fordon kan enbart vänta vid stationer.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Detta fordon stannar inte vid denna station.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Ändra Tid
+STR_TIMETABLE_STATUS_ON_TIME :Detta fordon ligger efter i tidtabellen
+STR_TIMETABLE_STATUS_LATE :Detta fordon är för tillfället {STRING} sen
+STR_TIMETABLE_STATUS_EARLY :Detta fordon är för tillfället {STRING} tidig
+STR_TIMETABLE_TOTAL_TIME :Denna tidtabell kommer ta {STRING} att slutföra
+STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :Denna tidtabell kommer att ta åtminstonde {STRING} att slutföra (allt är inte inlagt i en tidtabell)
+STR_TIMETABLE_AUTOFILL :{BLACK}Automatisk ifyllning
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fyll tidtabellen automatiskt med värdet från den första resan
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Vägfordon i vägen
@@ -2749,7 +2792,7 @@
STR_900E_MAX_SPEED :{BLACK}Tophastighet: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Vinst detta år: {LTBLUE}{CURRENCY} (förra året: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Tillförlitlighet: {LTBLUE}{COMMA}% {BLACK}Motorstopp sedan senaste service: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Kapacitet: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...måste stoppas inuti ett bussgarage
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Kan inte sälja vägfordon...
@@ -2825,7 +2868,7 @@
STR_9813_MAX_SPEED :{BLACK}Tophastighet: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Vinst detta år: {LTBLUE}{CURRENCY} (förra år: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Tillförlitlighet: {LTBLUE}{COMMA}% {BLACK}Motorstopp sedan senaste service: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kapacitet: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Kan inte stoppa/starta skepp...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Kan inte skicka skepp till depå...
@@ -2893,7 +2936,7 @@
STR_A00E_MAX_SPEED :{BLACK}Tophastighet: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Vinst detta år: {LTBLUE}{CURRENCY} (förra året: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Tillförlitlighet: {LTBLUE}{COMMA}% {BLACK}Motorstopp sedan senaste service: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Kan inte skicka flygplan till hangar...
STR_HEADING_FOR_HANGAR :{ORANGE}På väg mot {STATION}s hangar
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}På väg mot {STATION}s hangar, {VELOCITY}
@@ -2946,6 +2989,8 @@
STR_GO_TO_AIRPORT_HANGAR :Gå till {STATION}s hangar
SERVICE_AT_AIRPORT_HANGAR :Service vid {STATION} hangar
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Tidtabell)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeppelinare-katastrof på {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Vägfordon förstört i 'UFO'-kollision!
@@ -3261,6 +3306,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Växla genomskinlighet för byggnader såsom stationer, depåer, riktmärken eller kedjelinje
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Växla genomskinlighet för industrier
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Växla genomskinlighet för byggnader såsom fyrar och antenner, kanske i framtiden även ögongodis
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Växla genomskinlighet för lastningsindikatörer
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Grupp {COMMA}
@@ -3298,4 +3351,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Vinst detta år: {GREEN}{CURRENCY} {BLACK}(förra året: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Vinst detta år: {RED}{CURRENCY} {BLACK}(förra året: {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/traditional_chinese.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/traditional_chinese.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}超越版圖邊緣
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}太接近版圖邊緣
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}現金不足 - 需要 {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}需要平地
STR_0008_WAITING :{BLACK}等候:{WHITE}{STRING}
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}地方政府:{LTBLUE}{STRING}
STR_01A9_NONE :無
STR_01AA_NAME :{BLACK}名稱
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :難易設定
STR_02C7_CONFIG_PATCHES :設置修正
STR_NEWGRF_SETTINGS :NewGRF 設定
+STR_TRANSPARENCY_OPTIONS :透明度選項
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}顯示市鎮名稱
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}顯示車站/機場/碼頭名稱
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :世界地圖
STR_EXTRA_VIEW_PORT :打開新視野
STR_SIGN_LIST :標誌清單
-STR_TRANSPARENCY_OPTIONS :透明度選項
STR_02DF_TOWN_DIRECTORY :市鎮索引
STR_TOWN_POPULATION :{BLACK}世界人口:{COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}視野 {COMMA}
@@ -1089,6 +1089,7 @@
STR_CONFIG_PATCHES_SERVICEATHELIPAD :{LTBLUE}直升機於直升機台自動維修:{ORANGE}{STRING}
STR_CONFIG_PATCHES_LINK_TERRAFORM_TOOLBAR :{LTBLUE}地形工具列與路軌/道路/碼頭建設/機場建設合併:{ORANGE}{STRING}
STR_CONFIG_PATCHES_REVERSE_SCROLLING :{LTBLUE}倒轉滾動棒方向:{ORANGE}{STRING}
+STR_CONFIG_PATCHES_SMOOTH_SCROLLING :{LTBLUE}視野平滑移動:{ORANGE}{STRING}
STR_CONFIG_PATCHES_MEASURE_TOOLTIP :{LTBLUE}使用某些建設工具時顯示量度提示:{ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES :{LTBLUE}顯示公司標記:{ORANGE}{STRING}
STR_CONFIG_PATCHES_LIVERIES_NONE :不顯示
@@ -1102,6 +1103,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}滾輪地圖捲動速度: {ORANGE}{STRING}
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}顯示時刻表時以 Tick 為單位而不是日:{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 :電氣化鐵路
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :單軌
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :磁浮
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :最先可用的
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :最新誕生的
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :最常使用的
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}每位玩家可擁有列車數目:{ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}每位玩家可擁有車輛數目:{ORANGE}{STRING}
@@ -1185,7 +1197,7 @@
STR_CHEATS :{WHITE}作弊
STR_CHEATS_TIP :{BLACK}被勾選的項目表示你之前用過這個作弊
STR_CHEATS_WARNING :{BLACK}注意! 你要背叛你的對手喔! 你要記住這種行為會被一輩子記著的。
-STR_CHEAT_MONEY :{LTBLUE}增加金錢:{CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}增加金錢:{CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}控制玩家:{ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}神奇剷泥車 (可以移除工業等平時拆不掉的東西):{ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}隧道可以互相穿過:{ORANGE}{STRING}
@@ -1396,6 +1408,31 @@
STR_NETWORK_LANG_ENGLISH :英文
STR_NETWORK_LANG_GERMAN :德文
STR_NETWORK_LANG_FRENCH :法文
+STR_NETWORK_LANG_BRAZILIAN :巴西
+STR_NETWORK_LANG_BULGARIAN :保加利亞語
+STR_NETWORK_LANG_CHINESE :中文
+STR_NETWORK_LANG_CZECH :捷克語
+STR_NETWORK_LANG_DANISH :丹麥語
+STR_NETWORK_LANG_DUTCH :荷蘭語
+STR_NETWORK_LANG_ESPERANTO :世界語
+STR_NETWORK_LANG_FINNISH :芬蘭語
+STR_NETWORK_LANG_HUNGARIAN :匈牙利
+STR_NETWORK_LANG_ICELANDIC :冰島語
+STR_NETWORK_LANG_ITALIAN :義大利語
+STR_NETWORK_LANG_JAPANESE :日文
+STR_NETWORK_LANG_KOREAN :韓文
+STR_NETWORK_LANG_LITHUANIAN :立陶宛語
+STR_NETWORK_LANG_NORWEGIAN :挪威語
+STR_NETWORK_LANG_POLISH :波蘭語
+STR_NETWORK_LANG_PORTUGUESE :葡萄牙語
+STR_NETWORK_LANG_ROMANIAN :羅馬尼亞語
+STR_NETWORK_LANG_RUSSIAN :俄語
+STR_NETWORK_LANG_SLOVAK :斯洛法克語
+STR_NETWORK_LANG_SLOVENIAN :斯洛法尼亞語
+STR_NETWORK_LANG_SPANISH :西班牙語
+STR_NETWORK_LANG_SWEDISH :瑞典語
+STR_NETWORK_LANG_TURKISH :土耳其語
+STR_NETWORK_LANG_UKRAINIAN :烏克蘭語
############ End of leave-in-this-order
STR_NETWORK_GAME_LOBBY :{WHITE}連線遊戲大廳
@@ -1415,9 +1452,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}公司名稱:{WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}成立於:{WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}公司市值:{WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}目前餘額:{WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}去年收入:{WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}公司市值:{WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}目前餘額:{WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}去年收入:{WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}效率:{WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}運具:{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1589,6 +1626,12 @@
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}必須先移除火車站
@@ -1599,6 +1642,7 @@
STR_1802_ROAD_CONSTRUCTION :{WHITE}鋪設道路
STR_1802_TRAMWAY_CONSTRUCTION :{WHITE}鋪設電車軌
STR_1803_SELECT_ROAD_BRIDGE :{WHITE}選擇道路橋樑
+STR_ERR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... 單向的道路不能有交叉點
STR_1804_CAN_T_BUILD_ROAD_HERE :{WHITE}不能在此鋪設道路...
STR_1804_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}不可以在這裏鋪設電車軌...
STR_1805_CAN_T_REMOVE_ROAD_FROM :{WHITE}不能從此移除道路...
@@ -1645,7 +1689,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}必須先摧毀建築
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}人口:{ORANGE}{COMMA}{BLACK} 房屋:{ORANGE}{COMMA}
@@ -1678,7 +1722,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}顯示地方政府資訊
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} 地方政府
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}運輸公司評比:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}:{ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}:{ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}補助
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}提供補助的運輸服務:
STR_2027_FROM_TO :{ORANGE}將 {STRING} 從 {STRING} 運到 {STRING}
@@ -1749,7 +1793,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...這邊已經有樹了
STR_2804_SITE_UNSUITABLE :{WHITE}...地點不適合
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}不能在這邊種樹...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...太多標誌了
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}不能在這邊放標誌...
STR_280A_SIGN :標誌
@@ -1858,6 +1902,7 @@
STR_3805_COAST_OR_RIVERBANK :海岸或河邊
STR_3806_SHIP_DEPOT :船塢
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...不能建在水域
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}必須先移除運河
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}儲存遊戲
@@ -1867,9 +1912,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}空間尚有 {COMMA} MB
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}無法讀取磁碟
-STR_4007_GAME_SAVE_FAILED :{WHITE}遊戲儲存失敗
+STR_4007_GAME_SAVE_FAILED :{WHITE}遊戲儲存失敗{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}無法刪除檔案
-STR_4009_GAME_LOAD_FAILED :{WHITE}遊戲載入失敗
+STR_4009_GAME_LOAD_FAILED :{WHITE}遊戲載入失敗{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :內部錯誤:{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :損壞的存檔 - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :存檔是由較新版本的遊戲產生
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :檔案無法讀取
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :檔案無法寫入
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}列出磁碟、目錄與遊戲存檔
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}目前選定的存檔名稱
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}刪除目前選定的存檔
@@ -2040,8 +2090,7 @@
STR_SV_STNAME_LOWER :{STRING} 盆地
STR_SV_STNAME_HELIPORT :{STRING} 直升機場
STR_SV_STNAME_FOREST :{STRING} 森林
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} 車站 #{NUM}
############ end of savegame specific region!
@@ -2121,7 +2170,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(玩家 {COMMA})
STR_7004_NEW_FACE :{BLACK}新臉孔
STR_7005_COLOR_SCHEME :{BLACK}配色
@@ -2133,7 +2182,7 @@
STR_700B_PRESIDENT_S_NAME :經理姓名
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}無法修改公司名稱...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}無法修改經理名稱...
-STR_700E_FINANCES :{WHITE}{COMPANY} 財務狀況 {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} 財務狀況 {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}收入/支出
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}建造
@@ -2149,20 +2198,20 @@
STR_701B_SHIP_INCOME :{GOLD}船運收入
STR_701C_LOAN_INTEREST :{GOLD}貸款利息
STR_701D_OTHER :{GOLD}其它
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}總計:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}收入圖
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}營運損益圖
STR_7026_BANK_BALANCE :{WHITE}餘額
STR_7027_LOAN :{WHITE}貸款
-STR_MAX_LOAN :{WHITE}貸款上限::{BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}貸款 {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}償還 {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}貸款上限::{BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}貸款 {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}償還 {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...貸款額度上限是 {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}無法再借更多錢...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...不需償還貸款
@@ -2201,8 +2250,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}公司效率指標 (最高 1000)
STR_7052_COMPANY_VALUES :{WHITE}公司價值
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}公司排行榜
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}運輸公司有麻煩了!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} 將被拍賣或宣告破產,除非效率盡快提昇!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(經理)
@@ -2240,7 +2289,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}世界不景氣!{}{}財務專家對經濟蕭條做出最壞打算!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}景氣回升!{}{}湧現的訂單讓工業對經濟熱絡充滿信心!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}切換大/小視窗
-STR_7076_COMPANY_VALUE :{GOLD}公司價值:{WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}公司價值:{WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}購買 25% 公司股份
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}出售 25% 公司股份
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}購買這間公司的 25% 股份
@@ -2271,6 +2320,8 @@
STR_LIVERY_HELICOPTER :直升機
STR_LIVERY_SMALL_PLANE :小飛機
STR_LIVERY_LARGE_PLANE :大飛機
+STR_LIVERY_PASSENGER_TRAM :客運輕軌
+STR_LIVERY_FREIGHT_TRAM :貨運輕軌
STR_LIVERY_GENERAL_TIP :{BLACK}顯示通用配色
STR_LIVERY_TRAIN_TIP :{BLACK}顯示鐵道配色
@@ -2549,8 +2600,8 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} 鐵道機廠
-STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}市民慶祝 . . .{}首輛列車抵達 {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (詳細資料)
+STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}市民慶賀 . . .{}首輛列車抵達 {STATION}!
+STR_8802_DETAILS :{WHITE}{VEHICLE} (詳細資料)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}前方有列車
STR_8804 :{SETX 10}{COMMA}:{STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}:{STRING} {STRING}
@@ -2571,6 +2622,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :前往 {TOWN} 機廠 中途不停
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :在 {TOWN} 機廠維護 中途不停
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :漫遊 (無時刻表)
+STR_TIMETABLE_TRAVEL_FOR :通行於 {STRING}
+STR_TIMETABLE_STAY_FOR :並等待 {STRING}
+STR_TIMETABLE_DAYS :{COMMA} 日
+STR_TIMETABLE_TICKS :{COMMA} tick
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}正前往 {TOWN} 機廠
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}正前往 {TOWN} 機廠, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}正在 {TOWN} 機廠維護中
@@ -2612,13 +2670,15 @@
STR_REFIT :{BLACK}改裝
STR_REFIT_TIP :{BLACK}選擇這個指令要改裝的酬載種類。按住 CTRL 點選可移除改裝指令
STR_REFIT_ORDER :(改裝成 {STRING})
+STR_TIMETABLE_VIEW :{BLACK}時刻表
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}切換至時刻表檢視模式
STR_8829_ORDERS :{WHITE}{VEHICLE} (指令)
STR_882A_END_OF_ORDERS :{SETX 10}- - 指令結束 - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}維護
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}無法購買鐵道車輛...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 購於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 購於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} 價值:{LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}正在裝卸客貨
STR_TRAIN_MUST_BE_STOPPED :{WHITE}列車必須停在機廠内
@@ -2628,6 +2688,9 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}無法插入新指令...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}無法刪除這個指令...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}無法修改這個指令...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}無法移動這個命令...
+STR_CAN_T_SKIP_ORDER :{WHITE}無法跳過目前的命令...
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}無法跳過指定的命令...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}無法移動車輛...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}後端車頭一定跟著前端車頭
STR_8838_N_A :N/A{SKIP}
@@ -2659,11 +2722,16 @@
STR_8851_SHOW_CAPACITIES_OF_EACH :{BLACK}顯示車輛的容量
STR_8852_SHOW_TOTAL_CARGO :{BLACK}顯示列車的總容量,照貨物分類
STR_8852_ORDERS_LIST_CLICK_ON_ORDER :{BLACK}指令清單 - 點選指令可選擇。按住 CTRL 點選可跳到車站位置
+STR_8853_SKIP_THE_CURRENT_ORDER :{BLACK}跳過目前的命令,從下一個開始。CTRL + 左鍵 可直接跳至所選的命令
STR_8854_DELETE_THE_HIGHLIGHTED :{BLACK}刪除選定指令
STR_8855_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}使選定的指令中途不停
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}在選定的指令前插入新指令,或在最後新增指令
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}讓列車在選定的指令等待載滿
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}讓列車在選定的指令強制卸載
+STR_TIMETABLE_TOOLTIP :{BLACK}時刻表 - 點一個命令來標記它。
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}改變目前選定命令所需花費的時間
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}清除目前選定命令所設定的時間
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}將誤點/慢分歸零,如此運具將會準時抵達
STR_SERVICE_HINT :{BLACK}跳過這個指令,除非需要維護
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}價格:{CURRENCY} 重量:{WEIGHT_S}{}速度:{VELOCITY} 功率:{POWER}{}操作成本:{CURRENCY} / 年{}Capacity:{CARGO}
STR_885C_BROKEN_DOWN :{RED}故障
@@ -2685,6 +2753,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}無法修改鐵道車輛名稱...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}讓列車在選定的指令強制卸載
STR_886F_TRANSFER :{BLACK}轉運
+STR_CLEAR_TIME :{BLACK}清除時刻
+STR_RESET_LATENESS :{BLACK}歸零誤點/慢分
STR_TRAIN_STOPPING :{RED}正在停止
STR_TRAIN_STOPPING_VEL :{RED}正在停止, {VELOCITY}
@@ -2693,8 +2763,18 @@
STR_TRAIN_START_NO_CATENARY :這個軌道沒有電氣化,所以列車無法起動
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}{STRING} 問世了!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} 問世了! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} 問世了! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}無法為運具加入時刻表...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}運具只能等待於站點。
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}此運具將不停靠此站點。
+STR_TIMETABLE_CHANGE_TIME :{BLACK}變更時刻
+STR_TIMETABLE_STATUS_ON_TIME :此運具目前準點
+STR_TIMETABLE_STATUS_LATE :此運具目前慢了 {STRING}
+STR_TIMETABLE_STATUS_EARLY :此運具目前早了 {STRING}
+STR_TIMETABLE_AUTOFILL :{BLACK}自動製表
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}自動地將第一次的路程列為時刻表
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}前方有汽車
@@ -2710,7 +2790,7 @@
STR_900E_MAX_SPEED :{BLACK}極速:{LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}今年損益:{LTBLUE}{CURRENCY} (去年:{CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}可靠度:{LTBLUE}{COMMA}% {BLACK}上次維護後故障次數:{LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}容量:{LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...必須停在汽車庫内
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}無法出售汽車...
@@ -2737,12 +2817,16 @@
STR_9026_ROAD_VEHICLE_SELECTION :{BLACK}汽車清單 - 點選汽車可看到詳細資訊
STR_9027_BUILD_THE_HIGHLIGHTED_ROAD :{BLACK}購買選定的汽車
STR_902A_COST_SPEED_RUNNING_COST :{BLACK}價格:{CURRENCY}{}速度:{VELOCITY}{}營運費用:{CURRENCY}/年{}容量:{CARGO}
+STR_ARTICULATED_RV_CAPACITY :{BLACK}容量:{LTBLUE}
+STR_BARE_CARGO :{CARGO}
STR_902C_NAME_ROAD_VEHICLE :{WHITE}命名汽車
STR_902D_CAN_T_NAME_ROAD_VEHICLE :{WHITE}無法命名汽車...
STR_902E_NAME_ROAD_VEHICLE :{BLACK}命名汽車
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}市民慶賀 . . .{}首輛公車抵達 {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}市民慶賀 . . .{}首輛貨車抵達 {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}市民慶賀 . . .{}首輛客運輕軌抵達 {STATION}!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}市民慶賀 . . .{}首輛貨運輕軌抵達 {STATION}!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}汽車撞毀!{}駕駛在與列車相撞後死於火球下
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}汽車撞毀!{}與列車相撞後 {COMMA} 人死於火球下
STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}無法使汽車掉頭...
@@ -2782,7 +2866,7 @@
STR_9813_MAX_SPEED :{BLACK}極速:{LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}今年損益:{LTBLUE}{CURRENCY} (去年:{CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}可靠度:{LTBLUE}{COMMA}% {BLACK}上次維護後故障次數:{LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}容量:{LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}無法停止/起動船舶...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}無法將船舶送到船塢...
@@ -2812,7 +2896,7 @@
STR_9831_NAME_SHIP :{WHITE}命名船舶
STR_9832_CAN_T_NAME_SHIP :{WHITE}無法命名船舶...
-STR_9833_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}市民慶祝 . . .{}首艘船舶抵達 {STATION}!
+STR_9833_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}市民慶賀 . . .{}首艘船舶抵達 {STATION}!
STR_9834_POSITION_BUOY_WHICH_CAN :{BLACK}放置浮標,可用作導航點
STR_9835_CAN_T_POSITION_BUOY_HERE :{WHITE}無法在此放置浮標...
STR_9836_RENAME :{BLACK}更名
@@ -2850,7 +2934,7 @@
STR_A00E_MAX_SPEED :{BLACK}極速:{LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}今年損益:{LTBLUE}{CURRENCY} (去年:{CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}可靠度:{LTBLUE}{COMMA}% {BLACK}上次維護後故障次數:{LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} 購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} 購買於:{LTBLUE}{NUM}{BLACK} 價值:{LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}無法將飛機送回機棚...
STR_HEADING_FOR_HANGAR :{ORANGE}正前往 {STATION} 機棚
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}正前往 {STATION} 機棚, {VELOCITY}
@@ -2903,6 +2987,8 @@
STR_GO_TO_AIRPORT_HANGAR :前往 {STATION} 機棚
SERVICE_AT_AIRPORT_HANGAR :在{STATION}機棚進行檢修
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (時刻表)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}{STATION} 發生飛船災難!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}汽車被 UFO 摧毀!
@@ -3027,6 +3113,7 @@
### depot strings
STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}您正準備出售庫房内所有車輛。確定嗎?
+STR_DEPOT_WRONG_DEPOT_TYPE :錯誤的機廠類型
STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TIP :{BLACK}出售機廠内所有列車
STR_DEPOT_SELL_ALL_BUTTON_ROADVEH_TIP :{BLACK}出售車庫内所有汽車
@@ -3217,6 +3304,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}將透明度套用於建物,如車站、廠棚、路標及電線
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}將透明度套用於橋樑
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}將透明度套用於設施,如燈塔、天線塔等
+STR_TRANSPARENT_LOADING_DESC :{BLACK}將透明度套用於運載顯示表
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :群組 {COMMA}
@@ -3247,10 +3342,18 @@
STR_GROUP_CREATE_TIP :{BLACK}單擊建立群組
STR_GROUP_DELETE_TIP :{BLACK}移除選擇群組
STR_GROUP_RENAME_TIP :{BLACK}為群組重新命名
+STR_GROUP_REPLACE_PROTECTION_TIP :{BLACK}點此可避免此群組內的設備被來自全域的設定替換
STR_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}本年盈餘: {GREEN}{CURRENCY} {BLACK}(去年: {GREEN}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}本年盈餘:{RED}{CURRENCY} {BLACK}(去年: {GREEN}{CURRENCY}{BLACK})
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}本年盈餘: {GREEN}{CURRENCY} {BLACK}(去年: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}本年盈餘: {RED}{CURRENCY} {BLACK}(去年:{RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/turkish.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/turkish.txt Tue Jun 26 23:40:58 2007 +0000
@@ -10,8 +10,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Harita kenarında
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Sınıra çok yakın
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Para Yetersiz - şu kadar gerekli: {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Yerin düzleştirilmesi lazım
STR_0008_WAITING :{BLACK}Bekleyen: {WHITE}{STRING}
@@ -495,7 +495,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Belediyesi: {LTBLUE}{STRING}
STR_01A9_NONE :Hiçbiri
STR_01AA_NAME :{BLACK}İsim
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -778,6 +778,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Zorluk Ayarları
STR_02C7_CONFIG_PATCHES :Yamaları Düzenle
STR_NEWGRF_SETTINGS :Newgrf ayarları
+STR_TRANSPARENCY_OPTIONS :Şeffaflık seçenekleri
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Şehir isimlerini göster
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}İstasyon isimlerini göster
@@ -805,7 +806,6 @@
STR_02DE_MAP_OF_WORLD :Dünya haritası
STR_EXTRA_VIEW_PORT :Ekstra görünüm
STR_SIGN_LIST :Tabela listesi
-STR_TRANSPARENCY_OPTIONS :Şeffaflık seçenekleri
STR_02DF_TOWN_DIRECTORY :Şehir listesi
STR_TOWN_POPULATION :{BLACK}Dünya nüfusu: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Görünüm {COMMA}
@@ -1048,6 +1048,7 @@
STR_CONFIG_PATCHES_NEW_PATHFINDING_ALL :{LTBLUE}Yeni evrensel yol bulma (NPF, NTP üzerinde): {ORANGE}{STRING}
STR_CONFIG_PATCHES_FREIGHT_TRAINS :{LTBLUE}Ağır yük trenleri için ağırlık çarpanı: {ORANGE}{STRING}
STR_CONFIG_PATCHES_STOP_ON_TOWN_ROAD :{LTBLUE}Şehiriçi yollara durak yapmak izinli: {ORANGE}{STRING}
+STR_CONFIG_PATCHES_ADJACENT_STATIONS :{LTBLUE}Bitişik istasyonlar izinli: {ORANGE}{STRING}
STR_CONFIG_PATCHES_SMALL_AIRPORTS :{LTBLUE}Küçük havalimanı her zaman etkin: {ORANGE}{STRING}
@@ -1099,6 +1100,17 @@
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_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_LOADING_INDICATORS :{LTBLUE}Araç yükleme bilgisini göster: {ORANGE}{STRING}
+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
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Monoray
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Maglev
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :En eskisi
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :En yenisi
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :En çok kullanılan
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}
@@ -1179,7 +1191,7 @@
STR_CHEATS :{WHITE}Hileler
STR_CHEATS_TIP :{BLACK}Onay kutuları bu hilenin daha önce kullanılıp kullanmadığını bildirir.
STR_CHEATS_WARNING :{BLACK}Uyarı! Rakiplerine ihanet etmek üzeresin. Böyle bir davranışı sonsuza dek unutmayacaklarını akılda tut.
-STR_CHEAT_MONEY :{LTBLUE}Parayı {CURRENCY64} kadar arttır
+STR_CHEAT_MONEY :{LTBLUE}Parayı {CURRENCY} kadar arttır
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Oyuncunun yerine geç: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Sihirli buldözer (normalde silinemeyen binaları siler): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tüneller kesişebilir: {ORANGE}{STRING}
@@ -1390,6 +1402,14 @@
STR_NETWORK_LANG_ENGLISH :İngilizce
STR_NETWORK_LANG_GERMAN :Almanca
STR_NETWORK_LANG_FRENCH :Fransızca
+STR_NETWORK_LANG_BULGARIAN :Bulgarca
+STR_NETWORK_LANG_CHINESE :Çince
+STR_NETWORK_LANG_CZECH :Çekce
+STR_NETWORK_LANG_FINNISH :Fince
+STR_NETWORK_LANG_HUNGARIAN :Bulgarca
+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_PORTUGUESE :Portekizce
@@ -1419,9 +1439,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Şirket adı: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Kurulus: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Şirket değeri: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Şimdiki dengesi: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Geçen seneki geliri: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Şirket değeri: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Şimdiki dengesi: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Geçen seneki geliri: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Performans: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Araçlar: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1631,6 +1651,7 @@
STR_1810_BUILD_ROAD_TUNNEL :{BLACK}Tünel Yap
STR_1810_BUILD_TRAMWAY_TUNNEL :{BLACK}Tramvay tüneli yap
STR_1811_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Yol yap/sil arasında geçiş yap
+STR_1811_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Tramvay yapımı/yıkımı
STR_1813_SELECT_ROAD_VEHICLE_DEPOT :{BLACK}Garaj yönünü seç
STR_1813_SELECT_TRAM_VEHICLE_DEPOT :{BLACK}Tramvay garı yönü
STR_1814_ROAD :Yol
@@ -1649,7 +1670,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Önce bina yıkılmalı
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Nüfus: {ORANGE}{COMMA}{BLACK} Ev: {ORANGE}{COMMA}
@@ -1682,7 +1703,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Belediye hakkında bilgi göster
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} belediyesi
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Taşıma şirketi reytingleri:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}İhaleler
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Beklenen ihaleler:
STR_2027_FROM_TO :{ORANGE}{STRING} {STRING} -> {STRING}
@@ -1753,7 +1774,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...burada zaten ağaç var
STR_2804_SITE_UNSUITABLE :{WHITE}...yer uygun değil
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Buraya ağaç dikilemez...
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...çok fazla tabela
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Buraya tabela konulamiyor...
STR_280A_SIGN :Tabela
@@ -1811,6 +1832,7 @@
STR_3046_MUST_DEMOLISH_BUS_STATION :{WHITE}Önce otobüs durağı yıkılmalı
STR_3047_MUST_DEMOLISH_TRUCK_STATION :{WHITE}Önce kamyon durağı yıkılmalı
STR_3046_MUST_DEMOLISH_PASSENGER_TRAM_STATION :{WHITE}Önce yolcu tramvayı istasyonu yıkılmalı
+STR_3047_MUST_DEMOLISH_CARGO_TRAM_STATION :{WHITE}Önce yük tramvayı istasyonu kaldırılmalı
STR_3048_STATIONS :{WHITE}{COMPANY} - {COMMA} istasyonları
STR_3049_0 :{YELLOW}{STATION} {STATIONFEATURES}
STR_304A_NONE :{YELLOW}- Yok -
@@ -1822,6 +1844,8 @@
STR_3050_SELECT_LENGTH_OF_RAILROAD :{BLACK}Tren istasyonu uzunluğu seç
STR_3051_SELECT_BUS_STATION_ORIENTATION :{BLACK}Otobüs durağı yönünü seç
STR_3052_SELECT_TRUCK_LOADING_BAY :{BLACK}Kamyon durağı yönünü seç
+STR_3051_SELECT_PASSENGER_TRAM_STATION_ORIENTATION :{BLACK}Yolcu tramvayı istasyonu yönünü seçin
+STR_3052_SELECT_CARGO_TRAM_STATION_ORIENTATION :{BLACK}Yük tramvayı istasyonu yönünü seçin
STR_3053_CENTER_MAIN_VIEW_ON_STATION :{BLACK}Durağın oldugu yere git
STR_3054_SHOW_STATION_RATINGS :{BLACK}İstasyonun reytinglerini göster
STR_3055_CHANGE_NAME_OF_STATION :{BLACK}İstasyonun ismini değiştir
@@ -1859,6 +1883,7 @@
STR_3805_COAST_OR_RIVERBANK :Sahil veya göl kenarı
STR_3806_SHIP_DEPOT :Tersane
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Suya yapılamaz
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Önce kanal kaldırılmalı
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Kaydet
@@ -1868,9 +1893,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} MB bos
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Sürücü okunamıyor
-STR_4007_GAME_SAVE_FAILED :{WHITE}Oyun kaydedilemedi
+STR_4007_GAME_SAVE_FAILED :{WHITE}Oyun kaydedilemedi{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Dosya silinemedi
-STR_4009_GAME_LOAD_FAILED :{WHITE}Dosya yüklenemedi
+STR_4009_GAME_LOAD_FAILED :{WHITE}Dosya yüklenemedi{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :İç hata: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bozuk kayıtlı oyun - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Kayıtlı oyun yeni bir sürümle yapılmış
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Dosya okunabilir değil
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Dosya yazılabilir değil
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Sürücü, klasör ve kayıtli oyun listesi
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Kaydetmek için kullanılacak dosya adı
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Seçili oyunu sil
@@ -2041,8 +2071,7 @@
STR_SV_STNAME_LOWER :Asağı {STRING}
STR_SV_STNAME_HELIPORT :{STRING} Heliport
STR_SV_STNAME_FOREST :{STRING} Ormanı
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} {NUM}. istasyon
############ end of savegame specific region!
@@ -2122,7 +2151,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :({COMMA}. Oyuncu)
STR_7004_NEW_FACE :{BLACK}Yeni Surat
STR_7005_COLOR_SCHEME :{BLACK}Renkler
@@ -2134,7 +2163,7 @@
STR_700B_PRESIDENT_S_NAME :Yöneticinin ismi
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Şirket ismi değiştirilemez...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Yönetici ismi degitirilemez...
-STR_700E_FINANCES :{WHITE}{COMPANY} Hesaplar {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} Hesaplar {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Gider/Gelir
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}İnşaat
@@ -2150,20 +2179,20 @@
STR_701B_SHIP_INCOME :{GOLD}Gemi Geliri
STR_701C_LOAN_INTEREST :{GOLD}Kredi Faizi
STR_701D_OTHER :{GOLD}Diğer
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Toplam:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Gelir Grafiği
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Çalıştirma Geliri Grafiği
STR_7026_BANK_BALANCE :{WHITE}Banka Hesabı
STR_7027_LOAN :{WHITE}Kredi
-STR_MAX_LOAN :{WHITE}Mak Kredi: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Ödünç al {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Öde {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Mak Kredi: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Ödünç al {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Öde {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maksimum kredi miktarı {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Daha fazla kredi alınamaz...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...ödenecek kredi yok
@@ -2202,8 +2231,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Performans (en fazla=1000)
STR_7052_COMPANY_VALUES :{WHITE}Şirket Değerleri
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Şirketler Ligi
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Şirket tehlikede!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY}, performansı artmazsa satılacak ya da yok olacak!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Yönetici)
@@ -2241,7 +2270,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Dünyada Kriz!{}{}Çok büyük bir ekonomik kriz yaşanacağı öngörüldü!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Kriz Atlatıldı!{}{}Ekonomi yine eski güzel günlerine döndü!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Pencere boyutunu büyült/küçült
-STR_7076_COMPANY_VALUE :{GOLD}Şirket değeri: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Şirket değeri: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}%25'ini satın al
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}%25'ini geri ver
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Şirketin %25 hissesini al
@@ -2553,7 +2582,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Tren Garaji
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Kutlama Yapıldı . . .{} {STATION} istasyonuna ilk kez tren geldi!
-STR_8802_DETAILS :{WHITE}{STRING} (Detaylar)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Detaylar)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Yolda tren var
STR_8804 :{SETX 10}{COMMA}: {STRING} {STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING} {STRING}
@@ -2574,6 +2603,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Durmadan git: {TOWN} Tren Garı
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Durmadan bakıma git: {TOWN} Tren Garı
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Gezi (zamanlı değil)
+STR_TIMETABLE_TRAVEL_FOR :{STRING} için gezi
+STR_TIMETABLE_STAY_FOR :{STRING} için bekle
+STR_TIMETABLE_DAYS :{COMMA} gün
+STR_TIMETABLE_TICKS :{COMMA} birim
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}{TOWN} Tren Garına gidiyor
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}{TOWN} Tren Garına gidiyor, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}{TOWN} Garında Bakım
@@ -2615,13 +2651,15 @@
STR_REFIT :{BLACK}Modifiye
STR_REFIT_TIP :{BLACK}Bu talimatta değiştirilecek kargo türünü seçin. Değiştirmeyi kaldırmak için CTRL ile tıklayın
STR_REFIT_ORDER :(Moifiye ile > {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Zaman çizelgesi
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Zaman tablosu görünümüne geç
STR_8829_ORDERS :{WHITE}{VEHICLE} (Talimatlar)
STR_882A_END_OF_ORDERS :{SETX 10}- - Talimatların Sonu - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Bakım
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Tren satın alınamaz...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Tarih: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Değeri: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Tarih: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Değeri: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Yükleme / Boşaltma
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Tren garda durdurulmalı
@@ -2631,6 +2669,9 @@
STR_8833_CAN_T_INSERT_NEW_ORDER :{WHITE}Yeni talimat verilemiyor...
STR_8834_CAN_T_DELETE_THIS_ORDER :{WHITE}Bu talimat silinemez...
STR_8835_CAN_T_MODIFY_THIS_ORDER :{WHITE}Bu talimat değiştirilemez...
+STR_CAN_T_MOVE_THIS_ORDER :{WHITE}Talimat taşınamıyor...
+STR_CAN_T_SKIP_ORDER :{WHITE}Talimat atlanamıyor...
+STR_CAN_T_SKIP_TO_ORDER :{WHITE}Seçili talimata atlanamıyor...
STR_8837_CAN_T_MOVE_VEHICLE :{WHITE}Araç hareket edemiyor...
STR_REAR_ENGINE_FOLLOW_FRONT_ERROR :{WHITE}Arkadaki lokomotif daima önündekini takip edecek
STR_8838_N_A :yok{SKIP}
@@ -2688,6 +2729,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Tren yeniden adlandırılamaz...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Seçili talimatta aracı kargoyu boşaltmaya zorla
STR_886F_TRANSFER :{BLACK}Aktar
+STR_CLEAR_TIME :{BLACK}Zamanı Temizle
+STR_RESET_LATENESS :{BLACK}Gecikme sayacını sıfırla
STR_TRAIN_STOPPING :{RED}Frenliyor
STR_TRAIN_STOPPING_VEL :{RED}Frenliyor, {VELOCITY}
@@ -2696,8 +2739,17 @@
STR_TRAIN_START_NO_CATENARY :Bu rayda elektrik olmadiği için bu tren çalışamaz
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}{STRING} artık kullanılabilir!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} artık kullanılabilir! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} artık kullanılabilir! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Aracın zaman çizelgesi oluşturulamıyor...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Araçlar sadece istasyonlarda bekleyebilir.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Araç bu istasyonda durmuyor.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Zamanı değiştir
+STR_TIMETABLE_STATUS_ON_TIME :Bu araç zamanında çalışıyor
+STR_TIMETABLE_STATUS_LATE :Bu araç {STRING} geç çalışıyor
+STR_TIMETABLE_STATUS_EARLY :Bu araç {STRING} erken çalışıyor
+STR_TIMETABLE_AUTOFILL :{BLACK}Otomatik doldur
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Yolda araba var
@@ -2713,7 +2765,7 @@
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_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Yapım yılı: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
+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ı
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Araba satılamıyor...
@@ -2748,6 +2800,8 @@
STR_902E_NAME_ROAD_VEHICLE :{BLACK}Arabayı adlandır
STR_902F_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Kutlama yapıldı . . .{}Şuraya ilk kez otobüs geldi: {STATION}!
STR_9030_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Kutlama yapıldı . . .{}Şuraya ilk kez kamyon geldi: {STATION}!
+STR_902F_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Kutlama yapıldı . . .{}{STATION} istasyonuna ilk kez yolcu tramvayı geldi!
+STR_9030_CITIZENS_CELEBRATE_FIRST_TRAM :{BLACK}{BIGFONT}Kutlama yapıldı . . .{}{STATION} istasyonuna ilk kez yük tramvayı geldi!
STR_9031_ROAD_VEHICLE_CRASH_DRIVER :{BLACK}{BIGFONT}Trafik kazasi!{}Trenle çarpisan aracın soförü feci şekilde can verdi
STR_9032_ROAD_VEHICLE_CRASH_DIE :{BLACK}{BIGFONT}Trafik kazasi!{}{COMMA} kişi patlamadan kurtulamadı
STR_9033_CAN_T_MAKE_VEHICLE_TURN :{WHITE}Araç döndürülemiyor...
@@ -2787,7 +2841,7 @@
STR_9813_MAX_SPEED :{BLACK}Mak. Hız: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Bu seneki kâr: {LTBLUE}{CURRENCY} (geçen sene: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Güven: {LTBLUE}%{COMMA} {BLACK}Son yolculuktaki bozulmalar: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Yapım yılı: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Yapım yılı: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Kapasite: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Gemi durdurulamaz/başlatılamaz...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Gemi tersaneye gönderilemez...
@@ -2855,7 +2909,7 @@
STR_A00E_MAX_SPEED :{BLACK}Mak. hız: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Bu seneki kâr: {LTBLUE}{CURRENCY} (geçen sene: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Güvenilirlik: {LTBLUE}%{COMMA} {BLACK}Son servisten beri bozulmalar: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Yapım: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Yapım: {LTBLUE}{NUM}{BLACK} Değeri: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Hangara gönderilemiyor...
STR_HEADING_FOR_HANGAR :{ORANGE}{STATION} Hangarına gidiyor
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}{STATION} Hangarına gidiyor, {VELOCITY}
@@ -2908,6 +2962,8 @@
STR_GO_TO_AIRPORT_HANGAR :{STATION} Hangarına git
SERVICE_AT_AIRPORT_HANGAR :Servis: {STATION} Hangarı
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Zaman çizelgesi)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Zeplin düştü - {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}UFO'yla çarpışan araba parçalandı!
@@ -3220,6 +3276,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}İstasyonlar, garajlar tershaneler vb. için şeffaflık
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Köprüler için şeffaflık
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Antenler ve deniz fenerleri için şeffaflık
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Transparan yükleme göstergesi
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}%{NUM}{UPARROW}
+STR_PERCENT_UP :{WHITE}%{NUM}{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}%{NUM}{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}%{NUM}{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}%{NUM}{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}%{NUM}{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Grup {COMMA}
@@ -3250,6 +3314,18 @@
STR_GROUP_CREATE_TIP :{BLACK}Grup oluşturmak için tıklayın
STR_GROUP_DELETE_TIP :{BLACK}Seçili grubu sil
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_PROFIT_GOOD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Bu seneki gelir: {GREEN}{CURRENCY} {BLACK}(geçen sene: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_GOOD_LAST_YEAR :{TINYFONT}{BLACK}Bu seneki gelir: {RED}{CURRENCY} {BLACK}(geçen sene: {GREEN}{CURRENCY}{BLACK})
+STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Bu seneki gelir: {GREEN}{CURRENCY} {BLACK}(geçen sene: {RED}{CURRENCY}{BLACK})
+STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Bu seneki gelir: {RED}{CURRENCY} {BLACK}(geçen sene: {RED}{CURRENCY}{BLACK})
+
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
########
--- a/src/lang/ukrainian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/ukrainian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -2,8 +2,8 @@
##ownname Українська
##isocode uk_UA
##plural 6
+##gender m f s mn
##case r d z
-##gender m f s mn
#
@@ -12,8 +12,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}За межами карти
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Надто близько до краю карти
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Недостатньо коштів - потрібно {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Потрібна рівна ділянка
STR_0008_WAITING :{BLACK}Чекає: {WHITE}{STRING}
@@ -621,7 +621,7 @@
STR_01A8_LOCAL_AUTHORITY :{BLACK}Місцева влада: {LTBLUE}{STRING}
STR_01A9_NONE :немає
STR_01AA_NAME :{BLACK}Назва
-STR_01AB :{BLACK}{TINYFONT}{STRING}
+STR_01AB :{BLACK}{TINYFONT}{VEHICLE}
############ range for days starts
STR_01AC_1ST :1
@@ -904,6 +904,7 @@
STR_02C5_DIFFICULTY_SETTINGS :Налаштування складності
STR_02C7_CONFIG_PATCHES :Розширені налаштування
STR_NEWGRF_SETTINGS :Нова графіка
+STR_TRANSPARENCY_OPTIONS :Опції прозорості
STR_GAMEOPTMENU_0A :
STR_02CA_TOWN_NAMES_DISPLAYED :{SETX 12}Показ назви міст
STR_02CC_STATION_NAMES_DISPLAYED :{SETX 12}Показ назви станцій
@@ -931,7 +932,6 @@
STR_02DE_MAP_OF_WORLD :Карта світу
STR_EXTRA_VIEW_PORT :Додаткове вікно
STR_SIGN_LIST :Список позначень
-STR_TRANSPARENCY_OPTIONS :Опції прозорості
STR_02DF_TOWN_DIRECTORY :Список міст
STR_TOWN_POPULATION :{BLACK}Населення світу: {COMMA}
STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Вікно {COMMA}
@@ -1229,6 +1229,17 @@
STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER :{LTBLUE}Швидкість прокрутки колесом миші: {ORANGE}{STRING}
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_DEFAULT_RAIL_TYPE :{LTBLUE}Тип колії за замовчанням (при новій грі/завантаженні): {ORANGE}{STRING}
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_RAIL :Звичайна колія
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_ELRAIL :Електрична колія
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MONORAIL :Монорейка
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MAGLEV :Магнітна подушка
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_FIRST :Перша з доступних
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_LAST :Остання з доступних
+STR_CONFIG_PATCHES_DEFAULT_RAIL_TYPE_MOST_USED :Найчастіш використовувана
STR_CONFIG_PATCHES_MAX_TRAINS :{LTBLUE}Макс. поїздів у гравця: {ORANGE}{STRING}
STR_CONFIG_PATCHES_MAX_ROADVEH :{LTBLUE}Макс. авто у гравця: {ORANGE}{STRING}
@@ -1312,7 +1323,7 @@
STR_CHEATS :{WHITE}Гратиму нечесно
STR_CHEATS_TIP :{BLACK}Галка показує, що Ви стали грати нечесно
STR_CHEATS_WARNING :{BLACK}Попередження! Ви збираєтеся обманювати конкурентів. Зауважте, подібне безчестя запам'ятається назавжди.
-STR_CHEAT_MONEY :{LTBLUE}Збільшити кошти на {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Збільшити кошти на {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Грати за гравця: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Супер бульдозер (руйнує все): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Тунелі перетинаються: {ORANGE}{STRING}
@@ -1567,9 +1578,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Назва компанії: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Засновано: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Вартість компанії: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Поточний баланс: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Прибуток торік: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Вартість компанії: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Поточний баланс: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Прибуток торік: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Продуктивність: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Транспорт: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1804,7 +1815,7 @@
STR_TOWN_LABEL :{WHITE}{TOWN}
STR_TOWN_LABEL_TINY_BLACK :{TINYFONT}{BLACK}{TOWN}
STR_TOWN_LABEL_TINY_WHITE :{TINYFONT}{WHITE}{TOWN}
-STR_2002 :{TINYFONT}{BLACK}{STRING}
+STR_2002 :{TINYFONT}{BLACK}{SIGN}
STR_2004_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Спочатку зруйнуйте споруду
STR_2005 :{WHITE}{TOWN}
STR_2006_POPULATION :{BLACK}Населення: {ORANGE}{COMMA}{BLACK} Будинки: {ORANGE}{COMMA}
@@ -1837,7 +1848,7 @@
STR_2021_SHOW_INFORMATION_ON_LOCAL :{BLACK}Інформація про місцеву владу
STR_2022_LOCAL_AUTHORITY :{WHITE}{TOWN} місцева влада
STR_2023_TRANSPORT_COMPANY_RATINGS :{BLACK}Рейтинги компаній:
-STR_2024 :{YELLOW}{COMPANY}{PLAYERNAME}: {ORANGE}{STRING}
+STR_2024 :{YELLOW}{COMPANY}{COMPANYNUM}: {ORANGE}{STRING}
STR_2025_SUBSIDIES :{WHITE}Субсидії
STR_2026_SUBSIDIES_ON_OFFER_FOR :{BLACK}Пропонуються субсидії:-
STR_2027_FROM_TO :{ORANGE}Перевезення {STRING.r} з {STRING} до {STRING}
@@ -1908,7 +1919,7 @@
STR_2803_TREE_ALREADY_HERE :{WHITE}...Тут вже росте дерево
STR_2804_SITE_UNSUITABLE :{WHITE}...невідповідне місце
STR_2805_CAN_T_PLANT_TREE_HERE :{WHITE}Неможливо посадити тут дерево
-STR_2806 :{WHITE}{STRING}
+STR_2806 :{WHITE}{SIGN}
STR_2808_TOO_MANY_SIGNS :{WHITE}...дуже багато позначень
STR_2809_CAN_T_PLACE_SIGN_HERE :{WHITE}Неможливо позначити місце
STR_280A_SIGN :Позначення
@@ -2017,6 +2028,7 @@
STR_3805_COAST_OR_RIVERBANK :Берег
STR_3806_SHIP_DEPOT :Корабельне депо
STR_3807_CAN_T_BUILD_ON_WATER :{WHITE}...Неможливо будувати на воді
+STR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Спочатку потрібно прибрати канал
##id 0x4000
STR_4000_SAVE_GAME :{WHITE}Зберегти гру
@@ -2026,9 +2038,14 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} мегабайт{P "" и ""} вільно
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Неможливо прочитати пристрій
-STR_4007_GAME_SAVE_FAILED :{WHITE}Помилка запису гри
+STR_4007_GAME_SAVE_FAILED :{WHITE}Помилка запису гри{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Неможливо стерти файл
-STR_4009_GAME_LOAD_FAILED :{WHITE}Помилка завантаження гри
+STR_4009_GAME_LOAD_FAILED :{WHITE}Помилка завантаження гри{}{STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Внутрішня помилка: {STRING}
+STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Файл збереженої гри пошкоджений - {STRING}
+STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Файл збереженої гри зроблений більш новою версією
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Неможливо прочитати файл
+STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Неможливо записати файл
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Список пристроїв, каталогів і збережених файлів гри
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Поточне вибране ім'я файлу для збереження гри
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Стерти вибрану збережену гру
@@ -2236,8 +2253,7 @@
STR_SV_STNAME_LOWER :Нижній {STRING}
STR_SV_STNAME_HELIPORT :{STRING} ГелМайданчик
STR_SV_STNAME_FOREST :{STRING} Ліс
-
-STR_SV_GROUP_NAME :{GROUP}
+STR_SV_STNAME_FALLBACK :{STRING} Станція №{NUM}
############ end of savegame specific region!
@@ -2317,7 +2333,7 @@
##id 0x7000
STR_7000 :
-STR_7001 :{WHITE}{COMPANY} {BLACK}{PLAYERNAME}
+STR_7001 :{WHITE}{COMPANY} {BLACK}{COMPANYNUM}
STR_7002_PLAYER :(Гравець {COMMA})
STR_7004_NEW_FACE :{BLACK}Нове лице
STR_7005_COLOR_SCHEME :{BLACK}Колір
@@ -2329,7 +2345,7 @@
STR_700B_PRESIDENT_S_NAME :Ім'я керівника
STR_700C_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Неможливо змінити назву компанії...
STR_700D_CAN_T_CHANGE_PRESIDENT :{WHITE}Неможливо змінити ім'я керівника...
-STR_700E_FINANCES :{WHITE}{COMPANY} - фінанси {BLACK}{PLAYERNAME}
+STR_700E_FINANCES :{WHITE}{COMPANY} - фінанси {BLACK}{COMPANYNUM}
STR_700F_EXPENDITURE_INCOME :{WHITE}Витрати/доходи
STR_7010 :{WHITE}{NUM}
STR_7011_CONSTRUCTION :{GOLD}Будівництво
@@ -2345,20 +2361,20 @@
STR_701B_SHIP_INCOME :{GOLD}Кораблі: дохід
STR_701C_LOAN_INTEREST :{GOLD}Відсотки за кредит
STR_701D_OTHER :{GOLD}Інше
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Всього:
-STR_7021 :{COMPANY}{PLAYERNAME}
+STR_7021 :{COMPANY}{COMPANYNUM}
STR_7022_INCOME_GRAPH :{WHITE}Графік доходів
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Графік прибутку від виробництва
STR_7026_BANK_BALANCE :{WHITE}Рахунок
STR_7027_LOAN :{WHITE}Взято в кредит
-STR_MAX_LOAN :{WHITE}Макс. кредит: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
-STR_7029_BORROW :{BLACK}Позичити {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
-STR_702A_REPAY :{BLACK}Повернути {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
+STR_MAX_LOAN :{WHITE}Макс. кредит: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
+STR_7029_BORROW :{BLACK}Позичити {SKIP}{SKIP}{CURRENCY}
+STR_702A_REPAY :{BLACK}Повернути {SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...найбільший дозволений розмір кредиту {CURRENCY}
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Неможливо взяти кредит...
STR_702D_LOAN_ALREADY_REPAYED :{WHITE}...кредит вже оплачено
@@ -2397,8 +2413,8 @@
STR_7051_COMPANY_PERFORMANCE_RATINGS :{WHITE}Рейтинг продуктивності компанії(найбільший рейтинг=1000)
STR_7052_COMPANY_VALUES :{WHITE}Вартість компанії
STR_7053_COMPANY_LEAGUE_TABLE :{WHITE}Таблиця компаній
-STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
-STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{PLAYERNAME} '{STRING}'
+STR_7054 :{WHITE}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
+STR_7055 :{YELLOW}{STRING}{SETX 45}{ORANGE}{COMPANY} {BLACK}{COMPANYNUM} '{STRING}'
STR_7056_TRANSPORT_COMPANY_IN_TROUBLE :{BLACK}{BIGFONT}Компанія у скруті!
STR_7057_WILL_BE_SOLD_OFF_OR_DECLARED :{BLACK}{BIGFONT}{COMPANY} буде продано або оголошено банкрутом, якщо найблищим часом не зросте її продуктивність!
STR_7058_PRESIDENT :{BLACK}{PLAYERNAME}{}(Керівник)
@@ -2436,7 +2452,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Світова економічна криза!{}{}Фінансисти очікують спад виробництва та попиту!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Криза минула!{}{}Збільшення виробництва внаслідок стабілізації економіки надає впевненості підприємствам!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Розмір вікна великий/малий
-STR_7076_COMPANY_VALUE :{GOLD}Вартість компанії: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Вартість компанії: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Купити 25% акцій компанії
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Продати 25% акцій компанії
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Купити 25% акцій цієї компанії
@@ -2748,7 +2764,7 @@
##id 0x8800
STR_8800_TRAIN_DEPOT :{WHITE}{TOWN} Залізничне депо
STR_8801_CITIZENS_CELEBRATE_FIRST :{BLACK}{BIGFONT}Жителі святкують . . .{}Перший поїзд з'явився на {STATION}!
-STR_8802_DETAILS :{WHITE}{STRING} (Детально)
+STR_8802_DETAILS :{WHITE}{VEHICLE} (Детально)
STR_8803_TRAIN_IN_THE_WAY :{WHITE}Поїзд на шляху
STR_8804 :{SETX 10}{COMMA}: {STRING}{STRING}
STR_8805 :{RIGHTARROW}{SETX 10}{COMMA}: {STRING}{STRING}
@@ -2769,6 +2785,13 @@
STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT :Прямувати без зупинок до {TOWN} депо
STR_SERVICE_NON_STOP_AT_TRAIN_DEPOT :Ремонтуватись без зупинок в {TOWN} депо
+STR_TIMETABLE_GO_TO :{STRING} {STRING}
+STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Прямує (не за розкладом)
+STR_TIMETABLE_TRAVEL_FOR :Прямує до {STRING}
+STR_TIMETABLE_STAY_FOR :і стояти {STRING}
+STR_TIMETABLE_DAYS :{COMMA} д{P ень ні нів}
+STR_TIMETABLE_TICKS :{COMMA} одиниц{P ю і ь}
+
STR_HEADING_FOR_TRAIN_DEPOT :{ORANGE}Прямує до {TOWN} депо
STR_HEADING_FOR_TRAIN_DEPOT_VEL :{ORANGE}Прямує до {TOWN} депо, {VELOCITY}
STR_HEADING_FOR_TRAIN_DEPOT_SERVICE :{LTBLUE}Техогляд в {TOWN} депо
@@ -2810,13 +2833,15 @@
STR_REFIT :{BLACK}Переобладнати
STR_REFIT_TIP :{BLACK}Оберіть на який тип вантажу переобладнати це завдання. Control+клік видалити команду переобладнання
STR_REFIT_ORDER :(Переобладнати до {STRING})
+STR_TIMETABLE_VIEW :{BLACK}Розклад
+STR_TIMETABLE_VIEW_TOOLTIP :{BLACK}Переключитись на розклад
STR_8829_ORDERS :{WHITE}{VEHICLE} (Накази)
STR_882A_END_OF_ORDERS :{SETX 10}- - Кінець наказів - -
STR_FULLLOAD_OR_SERVICE :{SKIP}{SKIP}{STRING}
STR_SERVICE :{BLACK}Техогляд
STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE :{WHITE}Неможливо збудувати поїзд...
-STR_882C_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
-STR_882D_VALUE :{LTBLUE}{STRING}{BLACK} Ціна: {LTBLUE}{CURRENCY}
+STR_882C_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
+STR_882D_VALUE :{LTBLUE}{ENGINE}{BLACK} Ціна: {LTBLUE}{CURRENCY}
STR_882E :{WHITE}{VEHICLE}
STR_882F_LOADING_UNLOADING :{LTBLUE}Завантажуюся/Розвантажуюся
STR_TRAIN_MUST_BE_STOPPED :{WHITE}Поїзд повинен стояти в депо
@@ -2866,6 +2891,10 @@
STR_8856_INSERT_A_NEW_ORDER_BEFORE :{BLACK}Вставити новий пункт перед відміченим або додати в кінець
STR_8857_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Чекати повного завантаження на цій станції
STR_8858_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Лише розвантажитися на цій станції
+STR_TIMETABLE_TOOLTIP :{BLACK}Розклад - клікніть на наказі, щоб виділити.
+STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Змінити час, впродовж якого має виконуватись наказ
+STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Очистити час для виділеного наказу
+STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Очистити лічильник запізнення, щоб транспорт встигнув
STR_SERVICE_HINT :{BLACK}Пропустити це завдання поки обслуговування потрібне!!!
STR_VEHICLE_INFO_COST_WEIGHT_SPEED_POWER :{BLACK}Ціна: {CURRENCY} Вага: {WEIGHT_S}{}Швидкість: {VELOCITY}{}Потужність: {POWER}{}Вартість експлуатації: {CURRENCY}/рік{}Місткість: {CARGO}
STR_885C_BROKEN_DOWN :{RED}Зламався
@@ -2887,6 +2916,8 @@
STR_886B_CAN_T_RENAME_TRAIN_VEHICLE :{WHITE}Неможливо перейменувати тип поїзду...
STR_886D_MAKE_THE_HIGHLIGHTED_ORDER :{BLACK}Наказати транспорту примусово відвантажити вантаж
STR_886F_TRANSFER :{BLACK}Пересадка
+STR_CLEAR_TIME :{BLACK}Очистити час
+STR_RESET_LATENESS :{BLACK}Очистити лічильник запізнення
STR_TRAIN_STOPPING :{RED}Зупиняється
STR_TRAIN_STOPPING_VEL :{RED}Зупиняється, {VELOCITY}
@@ -2895,8 +2926,18 @@
STR_TRAIN_START_NO_CATENARY :Нема електрики, поїзд стоїть
STR_NEW_VEHICLE_NOW_AVAILABLE :{BLACK}{BIGFONT}Став доступним новий {STRING}!
-STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{STRING}
-STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Став доступним новий {STRING}! - {STRING}
+STR_NEW_VEHICLE_TYPE :{BLACK}{BIGFONT}{ENGINE}
+STR_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Став доступним новий {STRING}! - {ENGINE}
+
+STR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Не можна встановити розклад для транспорту...
+STR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Транспорт може чекати тільки на станціях.
+STR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Цей транспорт не зупиняється на цій станції.
+STR_TIMETABLE_CHANGE_TIME :{BLACK}Змінити час
+STR_TIMETABLE_STATUS_ON_TIME :Цей транспорт зараз прямує за розкладом
+STR_TIMETABLE_STATUS_LATE :Цей транспорт запізнюється на {STRING}
+STR_TIMETABLE_STATUS_EARLY :Цей транспорт випереджує розклад на {STRING}
+STR_TIMETABLE_AUTOFILL :{BLACK}Автозаповнення
+STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Автоматично заповнювати розпис згiдно з даними першої подорожі
##id 0x9000
STR_9000_ROAD_VEHICLE_IN_THE_WAY :{WHITE}На шляху авто
@@ -2912,7 +2953,7 @@
STR_900E_MAX_SPEED :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY}
STR_900F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Прибуток цього року: {LTBLUE}{CURRENCY} (минулого року: {CURRENCY})
STR_9010_RELIABILITY_BREAKDOWNS :{BLACK}Надійність: {LTBLUE}{COMMA}% {BLACK}Поломок після останнього техогляду: {LTBLUE}{COMMA}
-STR_9011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
+STR_9011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
STR_9012_CAPACITY :{BLACK}Місткість: {LTBLUE}{CARGO}
STR_9013_MUST_BE_STOPPED_INSIDE :{WHITE}...авто повинно стояти в депо
STR_9014_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Неможливо продати авто...
@@ -2988,7 +3029,7 @@
STR_9813_MAX_SPEED :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY}
STR_9814_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Прибуток цього року: {LTBLUE}{CURRENCY} (минулого року: {CURRENCY})
STR_9815_RELIABILITY_BREAKDOWNS :{BLACK}Надійність: {LTBLUE}{COMMA}% {BLACK}Поломок після останнього техогляду: {LTBLUE}{COMMA}
-STR_9816_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
+STR_9816_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
STR_9817_CAPACITY :{BLACK}Місткість: {LTBLUE}{CARGO}
STR_9818_CAN_T_STOP_START_SHIP :{WHITE}Неможливо зупинити корабель...
STR_9819_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Неможливо направити корабель в депо...
@@ -3056,7 +3097,7 @@
STR_A00E_MAX_SPEED :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY}
STR_A00F_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Прибуток цього року: {LTBLUE}{CURRENCY} (минулого року: {CURRENCY})
STR_A010_RELIABILITY_BREAKDOWNS :{BLACK}Надійність: {LTBLUE}{COMMA}% {BLACK}Поломок після останнього техогляду: {LTBLUE}{COMMA}
-STR_A011_BUILT_VALUE :{LTBLUE}{STRING}{BLACK} Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
+STR_A011_BUILT_VALUE :{LTBLUE}{ENGINE}{BLACK} Рік випуску: {LTBLUE}{NUM}{BLACK} Ціна: {LTBLUE}{CURRENCY}
STR_A012_CAN_T_SEND_AIRCRAFT_TO :{WHITE}Неможливо направити літак до ангару...
STR_HEADING_FOR_HANGAR :{ORANGE}Летить до {STATION} ангару
STR_HEADING_FOR_HANGAR_VEL :{ORANGE}Летить до {STATION} ангару, {VELOCITY}
@@ -3109,6 +3150,8 @@
STR_GO_TO_AIRPORT_HANGAR :Летіти в {STATION} ангар
SERVICE_AT_AIRPORT_HANGAR :Ремонтуватись в {STATION} ангарі
+STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (розклад)
+
##id 0xB000
STR_B000_ZEPPELIN_DISASTER_AT :{BLACK}{BIGFONT}Дирижабль впав на {STATION}!
STR_B001_ROAD_VEHICLE_DESTROYED :{BLACK}{BIGFONT}Аварія!'НЛО' зіткнулось з авто!
@@ -3424,6 +3467,14 @@
STR_TRANSPARENT_BUILDINGS_DESC :{BLACK}Переключити прозорість для споруд, таких як станції, депо, ЛЕП тощо
STR_TRANSPARENT_BRIDGES_DESC :{BLACK}Переключити прозорість для мостів
STR_TRANSPARENT_STRUCTURES_DESC :{BLACK}Переключити прозорість для споруд, таких як маяки та антенни (може, потім)
+STR_TRANSPARENT_LOADING_DESC :{BLACK}Змінити прозорість індикаторів завантаження
+
+STR_PERCENT_UP_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
##### Mass Order
STR_GROUP_NAME_FORMAT :Група {COMMA}
@@ -3461,4 +3512,11 @@
STR_PROFIT_GOOD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Прибуток цього року: {GREEN}{CURRENCY} {BLACK}(торік: {RED}{CURRENCY}{BLACK})
STR_PROFIT_BAD_THIS_YEAR_BAD_LAST_YEAR :{TINYFONT}{BLACK}Прибуток цього року: {RED}{CURRENCY} {BLACK}(торік: {RED}{CURRENCY}{BLACK})
+STR_COMPANY_NAME :{COMPANY}
+STR_ENGINE_NAME :{ENGINE}
+STR_GROUP_NAME :{GROUP}
+STR_PLAYER_NAME :{PLAYERNAME}
+STR_SIGN_NAME :{SIGN}
+STR_VEHICLE_NAME :{VEHICLE}
+
########
--- a/src/lang/unfinished/afrikaans.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/unfinished/afrikaans.txt Tue Jun 26 23:40:58 2007 +0000
@@ -8,8 +8,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Oor kant van kaart
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Te naby aan kant van kaart
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nie genoeg kontant nie - vereis {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Platte land vereis
STR_0008_WAITING :{BLACK}Wagtend: {WHITE}{STRING}
@@ -1093,7 +1093,7 @@
STR_CHEATS :{WHITE}Bedriege
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 {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Vermeerder geld by {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Speel as speler: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Tower stootskraper (uitwis nywerheide, onbeweegbares): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tonnels mag vir mekaar kruis: {ORANGE}{STRING}
@@ -1299,9 +1299,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Maatskappy naam: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Inwyding: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Maatskappy waarde: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Hudige balans: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Verlede jaar se inkome: {WHITE}{CURRENCY64}
+STR_NETWORK_VALUE :{SILVER}Maatskappy waarde: {WHITE}{CURRENCY}
+STR_NETWORK_CURRENT_BALANCE :{SILVER}Hudige balans: {WHITE}{CURRENCY}
+STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Verlede jaar se inkome: {WHITE}{CURRENCY}
STR_NETWORK_PERFORMANCE :{SILVER}Prestasie: {WHITE}{NUM}
STR_NETWORK_VEHICLES :{SILVER}Voertuie: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1697,9 +1697,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabyte{P "" s} vry
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Kan nie skyf lees nie
-STR_4007_GAME_SAVE_FAILED :{WHITE}Spel Bewaar Gedop
+STR_4007_GAME_SAVE_FAILED :{WHITE}Spel Bewaar Gedop{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Kan nie l�r uitwis nie
-STR_4009_GAME_LOAD_FAILED :{WHITE}Spel Laai Gedop
+STR_4009_GAME_LOAD_FAILED :{WHITE}Spel Laai Gedop{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Lys van skywe, voublaaie en spel-bewaar l�rs
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Huidige naam vir bewaarde-spel
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Uitwis die verkieste bewaarde-spel
@@ -1965,18 +1965,18 @@
STR_701B_SHIP_INCOME :{GOLD}Skip Inkome
STR_701C_LOAN_INTEREST :{GOLD}Lening Rente
STR_701D_OTHER :{GOLD}Ander
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Totaal:
STR_7021 :{COMPANY}{PLAYERNAME}
STR_7022_INCOME_GRAPH :{WHITE}Inkome Grafiek
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Bewerking Profyt Grafiek
STR_7026_BANK_BALANCE :{WHITE}Bank Balans
STR_7027_LOAN :{WHITE}Lening
-STR_MAX_LOAN :{WHITE}Max Lening: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
+STR_MAX_LOAN :{WHITE}Max Lening: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
STR_7029_BORROW :{BLACK}Leen {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702A_REPAY :{BLACK}Terugbetaal {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...maksimum vergun lening groote is {CURRENCY}
@@ -2055,7 +2055,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}W�eld Insinking!{}{}Finansieel eksperte vrees ergste as ekconomie 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}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Maatskappy waarde: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Koop 25% aandeel in maatskappy
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Verkoop 25% aandeel in maatskappy
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Koop 25% aandeel in die maatskappy
--- a/src/lang/unfinished/croatian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/unfinished/croatian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -11,8 +11,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Izvan rubova karte
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Preblizu rubu karte
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nedovoljno gotovine - potrebno je {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Potrebna ravna površina
STR_0008_WAITING :{BLACK}Čekanje: {WHITE}{STRING}
@@ -1152,7 +1152,7 @@
STR_CHEATS :{WHITE}Varanje
STR_CHEATS_TIP :{BLACK}Kvačice ukazuju na to jesi li koristio ovo varanje prije
STR_CHEATS_WARNING :{BLACK}Upozorenje! Upravo se spremaš izdati svoj kolege natjecatelje. Imaj na umu da se takva sramota pamti zauvijek.
-STR_CHEAT_MONEY :{LTBLUE}Povećava novce za {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Povećava novce za {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Igraj kao igrač: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Čudesni buldožer (uklanja industrije, nepokretne objekte): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tuneli se mogu ukrštavati međusobno: {ORANGE}{STRING}
@@ -1403,9 +1403,9 @@
STR_NETWORK_COMPANY_NAME :{SILVER}Ime tvrtke: {WHITE}{STRING}
STR_NETWORK_INAUGURATION_YEAR :{SILVER}Preuzimanje dužnosti: {WHITE}{NUM}
-STR_NETWORK_VALUE :{SILVER}Vrijednost tvrtke: {WHITE}{CURRENCY64}
-STR_NETWORK_CURRENT_BALANCE :{SILVER}Trenutno stanje: {WHITE}{CURRENCY64}
-STR_NETWORK_LAST_YEARS_INCOME :{SILVER}Prošlogodišnji prihod: {WHITE}{CURRENCY64}
+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_VEHICLES :{SILVER}Vozila: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {PLANE}, {NUM} {SHIP}
@@ -1828,9 +1828,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabajt{P "" a a} slobod{P an na no}
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Ne mogu pročitati disk
-STR_4007_GAME_SAVE_FAILED :{WHITE}Spremanje igre nije uspjelo
+STR_4007_GAME_SAVE_FAILED :{WHITE}Spremanje igre nije uspjelo{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Ne mogu obrisati datoteku
-STR_4009_GAME_LOAD_FAILED :{WHITE}Učitavanje igre nije uspjelo
+STR_4009_GAME_LOAD_FAILED :{WHITE}Učitavanje igre nije uspjelo{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Popis diskova, mapa i spremljenih datoteka
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Trenutno odabrano ime za spremanje igre
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Obriši trenutno odabranu spremljenu igru
@@ -2108,18 +2108,18 @@
STR_701B_SHIP_INCOME :{GOLD}Prihod od brodova
STR_701C_LOAN_INTEREST :{GOLD}Kamate
STR_701D_OTHER :{GOLD}Ostalo
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Ukupno:
STR_7021 :{COMPANY}{PLAYERNAME}
STR_7022_INCOME_GRAPH :{WHITE}Graf prihoda
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Graf operativnih prihoda
STR_7026_BANK_BALANCE :{WHITE}Bankovna bilanca
STR_7027_LOAN :{WHITE}Kredit
-STR_MAX_LOAN :{WHITE}Maks zajam: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
+STR_MAX_LOAN :{WHITE}Maks zajam: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
STR_7029_BORROW :{BLACK}Pozajmi {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702A_REPAY :{BLACK}Otplati {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...najveći dopušteni kredit iznosi {CURRENCY}
@@ -2197,7 +2197,7 @@
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_7076_COMPANY_VALUE :{GOLD}Vrijednost tvrtke: {WHITE}{CURRENCY64}
+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_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Kupi 25% udjela u ovoj tvrtci
--- a/src/lang/unfinished/frisian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/unfinished/frisian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -7,8 +7,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Bûten de map
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Te ticht by de râne fan 'e map
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Net genôch jild - {CURRENCY} nedich
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Flak lân nedich
STR_0008_WAITING :{BLACK}Wachtsjend: {WHITE}{STRING}
@@ -1048,9 +1048,9 @@
STR_4003_DELETE :{BLACK}Fuortsmite
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Koe net fan 'e skiif lêze
-STR_4007_GAME_SAVE_FAILED :{WHITE}Opslaan Mislearre
+STR_4007_GAME_SAVE_FAILED :{WHITE}Opslaan Mislearre{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Kin triem net fuortsmite
-STR_4009_GAME_LOAD_FAILED :{WHITE}Laden Mislearre
+STR_4009_GAME_LOAD_FAILED :{WHITE}Laden Mislearre{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}List fan skiven, mappen en triemen
STR_4011_LOAD_HEIGHTMAP :{WHITE}Laad Hichtemap
@@ -1193,14 +1193,14 @@
STR_701B_SHIP_INCOME :{GOLD}Ynkomsten Skepen
STR_701C_LOAN_INTEREST :{GOLD}Rinte Liening
STR_701D_OTHER :{GOLD}Oaren
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Totaal:
STR_7021 :{COMPANY}{PLAYERNAME}
STR_7022_INCOME_GRAPH :{WHITE}Ynkomsten Grafyk
STR_7024 :{COMMA}
STR_7027_LOAN :{WHITE}Liening
-STR_7028 :{BLACK}{CURRENCY64}
+STR_7028 :{BLACK}{CURRENCY}
STR_7029_BORROW :{BLACK}Lien {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702A_REPAY :{BLACK}Betelje {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY} werom
STR_702C_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Kin net mear jild liene
--- a/src/lang/unfinished/greek.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/unfinished/greek.txt Tue Jun 26 23:40:58 2007 +0000
@@ -9,8 +9,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}Απο την άκρη του χάρτη
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Πολυ κοντά στην άκρη του χάρτη
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Δεν υπάρχουν αρκετά χρήματα - απαιτούνται {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}.
-STR_0005 :{RED}{CURRENCY64}.
+STR_0004 :{WHITE}{CURRENCY}.
+STR_0005 :{RED}{CURRENCY}.
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Απαιτείται επίπεδο εδαφος
STR_0008_WAITING :{BLACK}Αναμονη: {WHITE}{STRING}
@@ -1159,7 +1159,7 @@
STR_CHEATS :{WHITE}Κλεψιές
STR_CHEATS_TIP :{BLACK}Τα κουτάκια δείχνουν αν έχετε χρησιμοποιήσει αυτό το κόλπο πρίν
STR_CHEATS_WARNING :{BLACK}Προσοχή! Είστε έτοιμος να προδώσετε τους φίλους ανταγωνιστές σας. Θυμηθείτε ότι αυτή η ντροπή θα μείνει για πάντα.
-STR_CHEAT_MONEY :{LTBLUE}Αύξηση χρημάτων κατά {CURRENCY64}
+STR_CHEAT_MONEY :{LTBLUE}Αύξηση χρημάτων κατά {CURRENCY}
STR_CHEAT_CHANGE_PLAYER :{LTBLUE}Παίξτε σαν παίκτης: {ORANGE}{COMMA}
STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Μαγική μπουλντόζα (αφαιρεί βιομηχανίες, αμετακίνητα): {ORANGE}{STRING}
STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Τα τούνελ διασταυρώνονται: {ORANGE}{STRING}
@@ -1557,9 +1557,9 @@
STR_4004 :{COMPANY}, {DATE_LONG}
STR_4005_BYTES_FREE :{BLACK}{COMMA} megabyte{P "" s} ελεύθερα
STR_4006_UNABLE_TO_READ_DRIVE :{BLACK}Αδύνατη η ανάγνωση του δίσκου
-STR_4007_GAME_SAVE_FAILED :{WHITE}Αποθήκευση Παιχνιδιού Απέτυχε
+STR_4007_GAME_SAVE_FAILED :{WHITE}Αποθήκευση Παιχνιδιού Απέτυχε{}{STRING}
STR_4008_UNABLE_TO_DELETE_FILE :{WHITE}Αδύνατη η διαγραφή του αρχείου
-STR_4009_GAME_LOAD_FAILED :{WHITE}Φόρτωση Παιχνιδιού Απέτυχε
+STR_4009_GAME_LOAD_FAILED :{WHITE}Φόρτωση Παιχνιδιού Απέτυχε{}{STRING}
STR_400A_LIST_OF_DRIVES_DIRECTORIES :{BLACK}Λίστα δίσκων, φακέλλων και αποθηκευμένων παιχνιδιών
STR_400B_CURRENTLY_SELECTED_NAME :{BLACK}Τρέχον όνομα για το αποθηκευμένο παιχνίδι
STR_400C_DELETE_THE_CURRENTLY_SELECTED :{BLACK}Διαγραφή του επιλεγμένου αποθηκευμένου παιχνιδιού
@@ -1792,8 +1792,8 @@
STR_701B_SHIP_INCOME :{GOLD}Έσοδα Πλοίων
STR_701C_LOAN_INTEREST :{GOLD}Τόκος Δανείου
STR_701D_OTHER :{GOLD}Άλλα
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7020_TOTAL :{WHITE}Σύνολο:
STR_7021 :{COMPANY}{PLAYERNAME}
STR_7022_INCOME_GRAPH :{WHITE}Γράφημα Εισοδήματος
@@ -1801,7 +1801,7 @@
STR_7025_OPERATING_PROFIT_GRAPH :{WHITE}Γράφημα Ενεργών Εσόδων
STR_7026_BANK_BALANCE :{WHITE}Ισολογισμός Τραπέζης
STR_7027_LOAN :{WHITE}Δάνειο
-STR_7028 :{BLACK}{CURRENCY64}
+STR_7028 :{BLACK}{CURRENCY}
STR_7029_BORROW :{BLACK}Δανεισμός {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702A_REPAY :{BLACK}Πληρωμή {SKIP}{SKIP}{SKIP}{SKIP}{CURRENCY}
STR_702B_MAXIMUM_PERMITTED_LOAN :{WHITE}...το μέγιστο επιτρεπόμενο δάνειο είναι {CURRENCY}
@@ -1871,7 +1871,7 @@
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}Παγκόσμια Υποχώρηση!{}{}Οι οικονομολόγοι φοβούνται τα χειρότερα καθώς η οικονομία πιάνει πάτο!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Υποχώρηση Τέλος!{}{}Κέρδη στο εμπόριο δίνει σιγουριά στις βιομηχανίες καθώς η οικονομία δυναμώνει!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Εναλλαγή μεγάλου/μικρού παραθύρου
-STR_7076_COMPANY_VALUE :{GOLD}Αξία εταιρείας: {WHITE}{CURRENCY64}
+STR_7076_COMPANY_VALUE :{GOLD}Αξία εταιρείας: {WHITE}{CURRENCY}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Αγορά μεριδίου 25% στην εταιρεία
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Πώληση μεριδίου 25% της εταιρείας
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Αγορά μεριδίου 25% της εταιρείας
--- a/src/lang/unfinished/latvian.txt Sun Jun 17 21:31:00 2007 +0000
+++ b/src/lang/unfinished/latvian.txt Tue Jun 26 23:40:58 2007 +0000
@@ -8,8 +8,8 @@
STR_0001_OFF_EDGE_OF_MAP :{WHITE}A'rpus kartes robez'as
STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Pa'ra'k tuvu kartes malai
STR_0003_NOT_ENOUGH_CASH_REQUIRES :{WHITE}Nepietiek naudas - vajag {CURRENCY}
-STR_0004 :{WHITE}{CURRENCY64}
-STR_0005 :{RED}{CURRENCY64}
+STR_0004 :{WHITE}{CURRENCY}
+STR_0005 :{RED}{CURRENCY}
STR_EMPTY :
STR_0007_FLAT_LAND_REQUIRED :{WHITE}Zemei ja'bu't plakanai
STR_0008_WAITING :{BLACK}Gaidam: {WHITE}{STRING}
@@ -1241,14 +1241,14 @@
STR_7007_NEW_COLOR_SCHEME :{WHITE}Jaunâ Krasas shçma
STR_7010 :{WHITE}{NUM}
STR_701D_OTHER :{GOLD}Citi
-STR_701E :{BLACK}-{CURRENCY64}
-STR_701F :{BLACK}+{CURRENCY64}
+STR_701E :{BLACK}-{CURRENCY}
+STR_701F :{BLACK}+{CURRENCY}
STR_7021 :{COMPANY}{PLAYERNAME}
-STR_CURRCOMPACT :{CURRCOMPACT64}
+STR_CURRCOMPACT :{CURRCOMPACT}
STR_7024 :{COMMA}
STR_7027_LOAN :{WHITE}Aizdevums
-STR_MAX_LOAN :{WHITE}Maksmalais Aizdevums: {BLACK}{CURRENCY64}
-STR_7028 :{BLACK}{CURRENCY64}
+STR_MAX_LOAN :{WHITE}Maksmalais Aizdevums: {BLACK}{CURRENCY}
+STR_7028 :{BLACK}{CURRENCY}
STR_INSUFFICIENT_FUNDS :{WHITE}Naudu, kas ir bankas aizn'e'mums, nevar dot prom...
STR_7042_NONE :{WHITE}Neviens
STR_7044_MALE :{BLACK}Viriešu
--- a/src/macros.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/macros.h Tue Jun 26 23:40:58 2007 +0000
@@ -26,6 +26,12 @@
return a >= b ? a : b;
}
+template <typename T>
+static inline T min(T a, T b)
+{
+ return a < b ? a : b;
+}
+
static inline int min(int a, int b) { if (a <= b) return a; return b; }
static inline uint minu(uint a, uint b) { if (a <= b) return a; return b; }
@@ -45,6 +51,14 @@
return a;
}
+/* Gracefully reduce a signed 64-bit int to signed 32-bit -- no bogusly truncating the sign bit */
+static inline int32 ClampToI32(int64 a)
+{
+ if (a <= (int32)0x80000000) return 0x80000000;
+ if (a >= (int32)0x7FFFFFFF) return 0x7FFFFFFF;
+ return (int32)a;
+}
+
static inline int32 BIGMULSS(int32 a, int32 b, int shift)
{
return (int32)((int64)a * (int64)b >> shift);
--- a/src/main_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/main_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -92,12 +92,12 @@
#ifdef ENABLE_NETWORK
case 3: { // Give money, you can only give money in excess of loan
const Player *p = GetPlayer(_current_player);
- int32 money = min(p->money64 - p->current_loan, atoi(str) / _currency->rate);
-
- money = clamp(money, 0, 20000000); // Clamp between 20 million and 0
+ Money money = min(p->player_money - p->current_loan, atoi(str) / _currency->rate);
+
+ uint32 money_c = clamp(ClampToI32(money), 0, 20000000); // Clamp between 20 million and 0
/* Give 'id' the money, and substract it from ourself */
- DoCommandP(0, money, id, CcGiveMoney, CMD_GIVE_MONEY | CMD_MSG(STR_INSUFFICIENT_FUNDS));
+ DoCommandP(0, money_c, id, CcGiveMoney, CMD_GIVE_MONEY | CMD_MSG(STR_INSUFFICIENT_FUNDS));
} break;
#endif /* ENABLE_NETWORK */
default: NOT_REACHED();
@@ -179,15 +179,16 @@
case 1: ShowGameDifficulty(); return;
case 2: ShowPatchesSelection(); return;
case 3: ShowNewGRFSettings(!_networking, true, true, &_grfconfig); return;
-
- case 5: TOGGLEBIT(_display_opt, DO_SHOW_TOWN_NAMES); break;
- case 6: TOGGLEBIT(_display_opt, DO_SHOW_STATION_NAMES); break;
- case 7: TOGGLEBIT(_display_opt, DO_SHOW_SIGNS); break;
- case 8: TOGGLEBIT(_display_opt, DO_WAYPOINTS); break;
- case 9: TOGGLEBIT(_display_opt, DO_FULL_ANIMATION); break;
- case 10: TOGGLEBIT(_display_opt, DO_FULL_DETAIL); break;
- case 11: ToggleTransparency(); break;
- case 12: TOGGLEBIT(_transparent_opt, TO_SIGNS); break;
+ case 4: ShowTransparencyToolbar(); break;
+
+ case 6: TOGGLEBIT(_display_opt, DO_SHOW_TOWN_NAMES); break;
+ case 7: TOGGLEBIT(_display_opt, DO_SHOW_STATION_NAMES); break;
+ case 8: TOGGLEBIT(_display_opt, DO_SHOW_SIGNS); break;
+ case 9: TOGGLEBIT(_display_opt, DO_WAYPOINTS); break;
+ case 10: TOGGLEBIT(_display_opt, DO_FULL_ANIMATION); break;
+ case 11: TOGGLEBIT(_display_opt, DO_FULL_DETAIL); break;
+ case 12: ToggleTransparency(); break;
+ case 13: TOGGLEBIT(_transparent_opt, TO_SIGNS); break;
}
MarkWholeScreenDirty();
}
@@ -218,7 +219,6 @@
case 0: ShowSmallMap(); break;
case 1: ShowExtraViewPortWindow(); break;
case 2: ShowSignList(); break;
- case 3: ShowTransparencyToolbar(); break;
}
}
@@ -346,7 +346,8 @@
{
_rename_id = si->index;
_rename_what = 0;
- ShowQueryString(si->str, STR_280B_EDIT_SIGN_TEXT, 30, 180, NULL, CS_ALPHANUMERAL);
+ SetDParam(0, si->index);
+ ShowQueryString(STR_SIGN_NAME, STR_280B_EDIT_SIGN_TEXT, 30, 180, NULL, CS_ALPHANUMERAL);
}
void ShowRenameWaypointWindow(const Waypoint *wp)
@@ -604,9 +605,8 @@
DrawPlayerIcon(p->index, x + 2, y + 1);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, GetPlayerNameString(p->index, 3));
+ SetDParam(0, p->index);
+ SetDParam(1, p->index);
color = (p->index == sel) ? 0xC : 0x10;
if (chk&1) color = 14;
@@ -791,7 +791,7 @@
static void ToolbarMapClick(Window *w)
{
- PopupMainToolbMenu(w, 4, STR_02DE_MAP_OF_WORLD, 4, 0);
+ PopupMainToolbMenu(w, 4, STR_02DE_MAP_OF_WORLD, 3, 0);
}
static void ToolbarTownClick(Window *w)
@@ -988,16 +988,16 @@
{
uint16 x = 0;
- w = PopupMainToolbMenu(w, 2, STR_02C3_GAME_OPTIONS, 13, 0);
-
- if (HASBIT(_display_opt, DO_SHOW_TOWN_NAMES)) SETBIT(x, 5);
- if (HASBIT(_display_opt, DO_SHOW_STATION_NAMES)) SETBIT(x, 6);
- if (HASBIT(_display_opt, DO_SHOW_SIGNS)) SETBIT(x, 7);
- if (HASBIT(_display_opt, DO_WAYPOINTS)) SETBIT(x, 8);
- if (HASBIT(_display_opt, DO_FULL_ANIMATION)) SETBIT(x, 9);
- if (HASBIT(_display_opt, DO_FULL_DETAIL)) SETBIT(x, 10);
- if (GB(_transparent_opt, 1, 7) != 0) SETBIT(x, 11);
- if (HASBIT(_transparent_opt, TO_SIGNS)) SETBIT(x, 12);
+ w = PopupMainToolbMenu(w, 2, STR_02C3_GAME_OPTIONS, 14, 0);
+
+ if (HASBIT(_display_opt, DO_SHOW_TOWN_NAMES)) SETBIT(x, 6);
+ if (HASBIT(_display_opt, DO_SHOW_STATION_NAMES)) SETBIT(x, 7);
+ if (HASBIT(_display_opt, DO_SHOW_SIGNS)) SETBIT(x, 8);
+ if (HASBIT(_display_opt, DO_WAYPOINTS)) SETBIT(x, 9);
+ if (HASBIT(_display_opt, DO_FULL_ANIMATION)) SETBIT(x, 10);
+ if (HASBIT(_display_opt, DO_FULL_DETAIL)) SETBIT(x, 11);
+ if (GB(_transparent_opt, 1, 7) != 0) SETBIT(x, 12);
+ if (HASBIT(_transparent_opt, TO_SIGNS)) SETBIT(x, 13);
WP(w,menu_d).checked_items = x;
}
@@ -1886,7 +1886,7 @@
case WKC_F7: ShowPlayerStations(_local_player); break;
case WKC_F8: ShowPlayerFinances(_local_player); break;
case WKC_F9: ShowPlayerCompany(_local_player); break;
- case WKC_F10:ShowOperatingProfitGraph(); break;
+ case WKC_F10: ShowOperatingProfitGraph(); break;
case WKC_F11: ShowCompanyLeagueTable(); break;
case WKC_F12: ShowBuildIndustryWindow(); break;
case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_player, VEH_TRAIN); break;
@@ -1898,7 +1898,7 @@
case WKC_SHIFT | WKC_F7: ShowBuildRailToolbar(_last_built_railtype, -1); break;
case WKC_SHIFT | WKC_F8: ShowBuildRoadToolbar(_last_built_roadtype); break;
case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
- case WKC_SHIFT | WKC_F10:ShowBuildAirToolbar(); break;
+ case WKC_SHIFT | WKC_F10: ShowBuildAirToolbar(); break;
case WKC_SHIFT | WKC_F11: ShowBuildTreesToolbar(); break;
case WKC_SHIFT | WKC_F12: ShowMusicWindow(); break;
case WKC_CTRL | 'S': MenuClickSmallScreenshot(); break;
@@ -2091,7 +2091,7 @@
case WE_KEYPRESS:
switch (e->we.keypress.keycode) {
- case WKC_F1: ToolbarPauseClick(w); break;
+ case WKC_F1: case WKC_PAUSE: ToolbarPauseClick(w); break;
case WKC_F2: ShowGameOptions(); break;
case WKC_F3: MenuClickSaveLoad(0); break;
case WKC_F4: ToolbarScenGenLand(w); break;
@@ -2208,7 +2208,7 @@
if (p != NULL) {
/* Draw player money */
- SetDParam64(0, p->money64);
+ SetDParam(0, p->player_money);
DrawStringCentered(570, 1, p->player_money >= 0 ? STR_0004 : STR_0005, 0);
}
@@ -2226,8 +2226,7 @@
} else {
if (p != NULL) {
/* This is the default text */
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
+ SetDParam(0, p->index);
DrawStringCentered(320, 1, STR_02BA, 0);
}
}
--- a/src/misc.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/misc.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -93,6 +93,7 @@
void InitializeTrees();
void InitializeSigns();
void InitializeStations();
+void InitializeCargoPackets();
static void InitializeNameMgr();
void InitializePlayers();
static void InitializeCheats();
@@ -109,6 +110,7 @@
_pause_game = 0;
_fast_forward = 0;
_tick_counter = 0;
+ _realtime_tick = 0;
_date_fract = 0;
_cur_tileloop_tile = 0;
@@ -134,6 +136,7 @@
InitializeTrees();
InitializeSigns();
InitializeStations();
+ InitializeCargoPackets();
InitializeIndustries();
InitializeBuildingCounts();
InitializeMainGui();
--- a/src/misc_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/misc_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -24,7 +24,7 @@
* @param p1 unused
* @param p2 face bitmasked
*/
-int32 CmdSetPlayerFace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetPlayerFace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
PlayerFace pf = (PlayerFace)p2;
@@ -34,7 +34,7 @@
GetPlayer(_current_player)->face = pf;
MarkWholeScreenDirty();
}
- return 0;
+ return CommandCost();
}
/** Change the player's company-colour
@@ -45,7 +45,7 @@
* p1 bits 8-9 set in use state or first/second colour
* @param p2 new colour for vehicles, property, etc.
*/
-int32 CmdSetPlayerColor(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetPlayerColor(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Player *p, *pp;
byte colour;
@@ -114,7 +114,7 @@
}
MarkWholeScreenDirty();
}
- return 0;
+ return CommandCost();
}
/** Increase the loan of your company.
@@ -125,7 +125,7 @@
* when 1: loans the maximum loan permitting money (press CTRL),
* when 2: loans the amount specified in p1
*/
-int32 CmdIncreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdIncreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Player *p = GetPlayer(_current_player);
@@ -134,7 +134,7 @@
return_cmd_error(STR_702B_MAXIMUM_PERMITTED_LOAN);
}
- int32 loan;
+ Money loan;
switch (p2) {
default: return CMD_ERROR; // Invalid method
case 0: // Take some extra loan
@@ -149,14 +149,16 @@
break;
}
+ /* Overflow protection */
+ if (p->player_money + p->current_loan + loan < p->player_money) return CMD_ERROR;
+
if (flags & DC_EXEC) {
- p->money64 += loan;
+ p->player_money += loan;
p->current_loan += loan;
- UpdatePlayerMoney32(p);
InvalidatePlayerWindows(p);
}
- return 0;
+ return CommandCost();
}
/** Decrease the loan of your company.
@@ -167,20 +169,20 @@
* when 1: pays back the maximum loan permitting money (press CTRL),
* when 2: pays back the amount specified in p1
*/
-int32 CmdDecreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDecreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Player *p = GetPlayer(_current_player);
if (p->current_loan == 0) return_cmd_error(STR_702D_LOAN_ALREADY_REPAYED);
- int32 loan;
+ Money loan;
switch (p2) {
default: return CMD_ERROR; // Invalid method
case 0: // Pay back one step
- loan = min(p->current_loan, LOAN_INTERVAL);
+ loan = min(p->current_loan, (Money)LOAN_INTERVAL);
break;
case 1: // Pay back as much as possible
- loan = max(min(p->current_loan, p->player_money), (int32)LOAN_INTERVAL);
+ loan = max(min(p->current_loan, p->player_money), (Money)LOAN_INTERVAL);
loan -= loan % LOAN_INTERVAL;
break;
case 2: // Repay the given amount of loan
@@ -195,12 +197,11 @@
}
if (flags & DC_EXEC) {
- p->money64 -= loan;
+ p->player_money -= loan;
p->current_loan -= loan;
- UpdatePlayerMoney32(p);
InvalidatePlayerWindows(p);
}
- return 0;
+ return CommandCost();
}
/** Change the name of the company.
@@ -209,7 +210,7 @@
* @param p1 unused
* @param p2 unused
*/
-int32 CmdChangeCompanyName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangeCompanyName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
StringID str;
Player *p;
@@ -228,7 +229,7 @@
DeleteName(str);
}
- return 0;
+ return CommandCost();
}
/** Change the name of the president.
@@ -237,7 +238,7 @@
* @param p1 unused
* @param p2 unused
*/
-int32 CmdChangePresidentName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangePresidentName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
StringID str;
Player *p;
@@ -264,7 +265,7 @@
DeleteName(str);
}
- return 0;
+ return CommandCost();
}
/** Pause/Unpause the game (server-only).
@@ -276,7 +277,7 @@
* @param p1 0 = decrease pause counter; 1 = increase pause counter
* @param p2 unused
*/
-int32 CmdPause(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPause(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (flags & DC_EXEC) {
_pause_game += (p1 == 1) ? 1 : -1;
@@ -284,7 +285,7 @@
InvalidateWindow(WC_STATUS_BAR, 0);
InvalidateWindow(WC_MAIN_TOOLBAR, 0);
}
- return 0;
+ return CommandCost();
}
/** Change the financial flow of your company.
@@ -295,13 +296,13 @@
* @param p1 the amount of money to receive (if negative), or spend (if positive)
* @param p2 unused
*/
-int32 CmdMoneyCheat(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMoneyCheat(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
#ifndef _DEBUG
if (_networking) return CMD_ERROR;
#endif
SET_EXPENSES_TYPE(EXPENSES_OTHER);
- return -(int32)p1;
+ return CommandCost(-(Money)p1);
}
/** Transfer funds (money) from one player to another.
@@ -313,22 +314,22 @@
* @param p1 the amount of money to transfer; max 20.000.000
* @param p2 the player to transfer the money to
*/
-int32 CmdGiveMoney(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdGiveMoney(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
const Player *p = GetPlayer(_current_player);
- int32 amount = min((int32)p1, 20000000);
+ CommandCost amount(min((Money)p1, (Money)20000000LL));
SET_EXPENSES_TYPE(EXPENSES_OTHER);
/* You can only transfer funds that is in excess of your loan */
- if (p->money64 - p->current_loan < amount || amount <= 0) return CMD_ERROR;
+ if (p->player_money - p->current_loan < amount.GetCost() || amount.GetCost() <= 0) return CMD_ERROR;
if (!_networking || !IsValidPlayer((PlayerID)p2)) return CMD_ERROR;
if (flags & DC_EXEC) {
/* Add money to player */
PlayerID old_cp = _current_player;
_current_player = (PlayerID)p2;
- SubtractMoneyFromPlayer(-amount);
+ SubtractMoneyFromPlayer(CommandCost(-amount.GetCost()));
_current_player = old_cp;
}
@@ -346,7 +347,7 @@
* itself is changed. The new value is inside p2
* @param p2 new value for a difficulty setting or difficulty level
*/
-int32 CmdChangeDifficultyLevel(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangeDifficultyLevel(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (p1 != (uint32)-1L && ((int32)p1 >= GAME_DIFFICULTY_NUM || (int32)p1 < 0)) return CMD_ERROR;
@@ -364,5 +365,5 @@
if (_networking && !_network_server && FindWindowById(WC_GAME_OPTIONS, 0) != NULL)
ShowGameDifficulty();
}
- return 0;
+ return CommandCost();
}
--- a/src/misc_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/misc_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -89,8 +89,8 @@
Player *p;
Window *w;
Town *t;
- int64 old_money;
- int64 costclear;
+ Money old_money;
+ CommandCost costclear;
AcceptedCargo ac;
TileDesc td;
StringID str;
@@ -103,11 +103,10 @@
p = GetPlayer(IsValidPlayer(_local_player) ? _local_player : PLAYER_FIRST);
t = ClosestTownFromTile(tile, _patches.dist_local_authority);
- old_money = p->money64;
- p->money64 = p->player_money = 0x7fffffff;
+ old_money = p->player_money;
+ p->player_money = INT64_MAX;
costclear = DoCommand(tile, 0, 0, 0, CMD_LANDSCAPE_CLEAR);
- p->money64 = old_money;
- UpdatePlayerMoney32(p);
+ p->player_money = old_money;
/* Because build_date is not set yet in every TileDesc, we make sure it is empty */
td.build_date = 0;
@@ -122,8 +121,8 @@
GetString(_landinfo_data[1], STR_01A7_OWNER, lastof(_landinfo_data[1]));
str = STR_01A4_COST_TO_CLEAR_N_A;
- if (!CmdFailed(costclear)) {
- SetDParam(0, costclear);
+ if (CmdSucceeded(costclear)) {
+ SetDParam(0, costclear.GetCost());
str = STR_01A5_COST_TO_CLEAR;
}
GetString(_landinfo_data[2], str, lastof(_landinfo_data[2]));
@@ -218,16 +217,16 @@
" Jaroslav Mazanec (KUDr) - YAPG (Yet Another Pathfinder God) ;)",
" Jonathan Coome (Maedhros) - High priest of the newGRF Temple",
" Attila Bán (MiHaMiX) - WebTranslator, Nightlies, Wiki and bugtracker host",
+ " Owen Rudge (orudge) - Forum host, OS/2 port",
" Peter Nelson (peter1138) - Spiritual descendant from newgrf gods",
" Remko Bijker (Rubidium) - THE desync hunter",
" Christoph Mallon (Tron) - Programmer, code correctness police",
- " Patric Stout (TrueLight) - Coder, network guru, SVN- and website host",
+ " Patric Stout (TrueLight) - Coder, network guru, SVN-, MS- and website host",
"",
"Retired Developers:",
" Ludvig Strigeus (ludde) - OpenTTD author, main coder (0.1 - 0.3.3)",
" Serge Paquet (vurlix) - Assistant project manager, coder (0.1 - 0.3.3)",
" Dominik Scherer (dominik81) - Lead programmer, GUI expert (0.3.0 - 0.3.6)",
- " Owen Rudge (orudge) - Forum- and masterserver host, OS/2 port (0.1 - 0.4.8)",
"",
"Special thanks go out to:",
" Josef Drexler - For his great work on TTDPatch",
@@ -479,7 +478,7 @@
AllocateWindowDescFront(&_build_trees_scen_desc, 0);
}
-static uint32 _errmsg_decode_params[20];
+static uint64 _errmsg_decode_params[20];
static StringID _errmsg_message_1, _errmsg_message_2;
static uint _errmsg_duration;
@@ -611,7 +610,7 @@
}
-void ShowEstimatedCostOrIncome(int32 cost, int x, int y)
+void ShowEstimatedCostOrIncome(Money cost, int x, int y)
{
StringID msg = STR_0805_ESTIMATED_COST;
@@ -623,7 +622,7 @@
ShowErrorMessage(INVALID_STRING_ID, msg, x, y);
}
-void ShowCostOrIncomeAnimation(int x, int y, int z, int32 cost)
+void ShowCostOrIncomeAnimation(int x, int y, int z, Money cost)
{
StringID msg;
Point pt = RemapCoords(x,y,z);
@@ -634,15 +633,38 @@
msg = STR_0803_INCOME;
}
SetDParam(0, cost);
- AddTextEffect(msg, pt.x, pt.y, 0x250);
+ AddTextEffect(msg, pt.x, pt.y, 0x250, TE_RISING);
}
-void ShowFeederIncomeAnimation(int x, int y, int z, int32 cost)
+void ShowFeederIncomeAnimation(int x, int y, int z, Money cost)
{
Point pt = RemapCoords(x,y,z);
SetDParam(0, cost);
- AddTextEffect(STR_FEEDER, pt.x, pt.y, 0x250);
+ AddTextEffect(STR_FEEDER, pt.x, pt.y, 0x250, TE_RISING);
+}
+
+TextEffectID ShowFillingPercent(int x, int y, int z, uint8 percent, StringID string)
+{
+ Point pt = RemapCoords(x, y, z);
+
+ assert(string != STR_NULL);
+
+ SetDParam(0, percent);
+ return AddTextEffect(string, pt.x, pt.y, 0xFFFF, TE_STATIC);
+}
+
+void UpdateFillingPercent(TextEffectID te_id, uint8 percent, StringID string)
+{
+ assert(string != STR_NULL);
+
+ SetDParam(0, percent);
+ UpdateTextEffect(te_id, string);
+}
+
+void HideFillingPercent(TextEffectID te_id)
+{
+ if (te_id != INVALID_TE_ID) RemoveTextEffect(te_id);
}
static const Widget _tooltips_widgets[] = {
@@ -684,7 +706,7 @@
* @param paramcount number of params to deal with
* @param params (optional) up to 5 pieces of additional information that may be
* added to a tooltip; currently only supports parameters of {NUM} (integer) */
-void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint32 params[])
+void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint64 params[])
{
char buffer[512];
BoundingRect br;
@@ -1195,8 +1217,8 @@
struct query_d {
void (*proc)(Window*, bool); ///< callback function executed on closing of popup. Window* points to parent, bool is true if 'yes' clicked, false otherwise
+ uint64 params[10]; ///< local copy of _decode_parameters
StringID message; ///< message shown for query window
- uint32 params[20]; ///< local copy of _decode_parameters
bool calledback; ///< has callback been executed already (internal usage for WE_DESTROY event)
};
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(query_d));
@@ -1394,9 +1416,8 @@
Let's use the name of player #0 for now. */
const Player *p = GetPlayer(IsValidPlayer(_local_player) ? _local_player : PLAYER_FIRST);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, _date);
+ SetDParam(0, p->index);
+ SetDParam(1, _date);
GetString(_edit_str_buf, STR_4004, lastof(_edit_str_buf));
SanitizeFilename(_edit_str_buf);
}
@@ -1827,7 +1848,7 @@
if (ce->flags & CE_CLICK) {
DrawFrameRect(x + 20, y + 1, x + 30 + 9, y + 9, 0, (clk - (i * 2) == 1) ? FR_LOWERED : FR_NONE);
if (i == 0) { // XXX - hack/hack for first element which is increase money. Told ya it's a mess
- SetDParam64(0, 10000000);
+ SetDParam(0, 10000000);
} else {
SetDParam(0, false);
}
--- a/src/network/network.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/network/network.h Tue Jun 26 23:40:58 2007 +0000
@@ -44,9 +44,9 @@
char company_name[NETWORK_NAME_LENGTH]; // Company name
char password[NETWORK_PASSWORD_LENGTH]; // The password for the player
Year inaugurated_year; // What year the company started in
- int64 company_value; // The company value
- int64 money; // The amount of money the company has
- int64 income; // How much did the company earned last year
+ Money company_value; // The company value
+ Money money; // The amount of money the company has
+ Money income; // How much did the company earned last year
uint16 performance; // What was his performance last month?
bool use_password; // Is there a password
uint16 num_vehicle[NETWORK_VEHICLE_TYPES]; // How many vehicles are there of this type?
--- a/src/network/network_client.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/network/network_client.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -671,7 +671,8 @@
if (!IsValidPlayer(ci_to->client_playas)) return NETWORK_RECV_STATUS_OKAY;
/* fallthrough */
case NETWORK_ACTION_CHAT_COMPANY: {
- StringID str = IsValidPlayer(ci_to->client_playas) ? GetPlayer(ci_to->client_playas)->name_1 : (uint16)STR_NETWORK_SPECTATORS;
+ StringID str = IsValidPlayer(ci_to->client_playas) ? STR_COMPANY_NAME : STR_NETWORK_SPECTATORS;
+ SetDParam(0, ci_to->client_playas);
GetString(name, str, lastof(name));
ci = NetworkFindClientInfoFromIndex(_network_own_client_index);
--- a/src/network/network_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/network/network_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -894,15 +894,15 @@
DrawString(x, y, STR_NETWORK_INAUGURATION_YEAR, 2); // inauguration year
y += 10;
- SetDParam64(0, _network_player_info[nd->company].company_value);
+ SetDParam(0, _network_player_info[nd->company].company_value);
DrawString(x, y, STR_NETWORK_VALUE, 2); // company value
y += 10;
- SetDParam64(0, _network_player_info[nd->company].money);
+ SetDParam(0, _network_player_info[nd->company].money);
DrawString(x, y, STR_NETWORK_CURRENT_BALANCE, 2); // current balance
y += 10;
- SetDParam64(0, _network_player_info[nd->company].income);
+ SetDParam(0, _network_player_info[nd->company].income);
DrawString(x, y, STR_NETWORK_LAST_YEARS_INCOME, 2); // last year's income
y += 10;
@@ -1047,7 +1047,8 @@
static const Widget _client_list_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_NONE, 14, 11, 249, 0, 13, STR_NETWORK_CLIENT_LIST, STR_018C_WINDOW_TITLE_DRAG_THIS},
+{ WWT_CAPTION, RESIZE_NONE, 14, 11, 237, 0, 13, STR_NETWORK_CLIENT_LIST, STR_018C_WINDOW_TITLE_DRAG_THIS},
+{ WWT_STICKYBOX, RESIZE_NONE, 14, 238, 249, 0, 13, STR_NULL, STR_STICKY_BUTTON},
{ WWT_PANEL, RESIZE_NONE, 14, 0, 249, 14, 14 + CLNWND_ROWSIZE + 1, 0x0, STR_NULL},
{ WIDGETS_END},
@@ -1061,7 +1062,7 @@
static WindowDesc _client_list_desc = {
WDP_AUTO, WDP_AUTO, 250, 1,
WC_CLIENT_LIST, WC_NONE,
- WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
+ WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
_client_list_widgets,
ClientListWndProc
};
@@ -1157,7 +1158,7 @@
if (w->height != CLNWND_OFFSET + num + 1) {
// XXX - magic unfortunately; (num + 2) has to be one bigger than heigh (num + 1)
SetWindowDirty(w);
- w->widget[2].bottom = w->widget[2].top + num + 2;
+ w->widget[3].bottom = w->widget[3].top + num + 2;
w->height = CLNWND_OFFSET + num + 1;
SetWindowDirty(w);
return false;
@@ -1519,8 +1520,8 @@
FOR_ALL_TOWNS_FROM(t, *item - MAX_CLIENT_INFO) {
/* Get the town-name via the string-system */
- SetDParam(0, t->townnameparts);
- GetString(chat_tab_temp_buffer, t->townnametype, lastof(chat_tab_temp_buffer));
+ SetDParam(0, t->index);
+ GetString(chat_tab_temp_buffer, STR_TOWN, lastof(chat_tab_temp_buffer));
return &chat_tab_temp_buffer[0];
}
}
--- a/src/network/network_server.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/network/network_server.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -1090,7 +1090,8 @@
if (ci != NULL && show_local) {
if (from_index == NETWORK_SERVER_INDEX) {
char name[NETWORK_NAME_LENGTH];
- StringID str = IsValidPlayer(ci_to->client_playas) ? GetPlayer(ci_to->client_playas)->name_1 : (uint16)STR_NETWORK_SPECTATORS;
+ StringID str = IsValidPlayer(ci_to->client_playas) ? STR_COMPANY_NAME : STR_NETWORK_SPECTATORS;
+ SetDParam(0, ci_to->client_playas);
GetString(name, str, lastof(name));
NetworkTextMessage(action, GetDrawStringPlayerColor(ci_own->client_playas), true, name, "%s", msg);
} else {
@@ -1259,9 +1260,8 @@
ttd_strlcpy(_network_player_info[p->index].password, password, sizeof(_network_player_info[p->index].password));
// Grap the company name
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- GetString(_network_player_info[p->index].company_name, STR_JUST_STRING, lastof(_network_player_info[p->index].company_name));
+ SetDParam(0, p->index);
+ GetString(_network_player_info[p->index].company_name, STR_COMPANY_NAME, lastof(_network_player_info[p->index].company_name));
// Check the income
if (_cur_year - 1 == p->inaugurated_year) {
@@ -1278,7 +1278,7 @@
// Set some general stuff
_network_player_info[p->index].inaugurated_year = p->inaugurated_year;
_network_player_info[p->index].company_value = p->old_economy[0].company_value;
- _network_player_info[p->index].money = p->money64;
+ _network_player_info[p->index].money = p->player_money;
_network_player_info[p->index].performance = p->old_economy[0].performance_history;
}
--- a/src/network/network_udp.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/network/network_udp.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -124,7 +124,7 @@
packet.Send_uint16(_network_player_info[player->index].performance);
/* Send 1 if there is a passord for the company else send 0 */
- packet.Send_bool (StrEmpty(_network_player_info[player->index].password));
+ packet.Send_bool (!StrEmpty(_network_player_info[player->index].password));
for (i = 0; i < NETWORK_VEHICLE_TYPES; i++)
packet.Send_uint16(_network_player_info[player->index].num_vehicle[i]);
@@ -395,7 +395,6 @@
config->status = GCS_NOT_FOUND;
} else {
config->filename = f->filename;
- config->full_path = f->full_path;
config->name = f->name;
config->info = f->info;
}
--- a/src/newgrf.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -42,6 +42,7 @@
#include "industry.h"
#include "newgrf_canal.h"
#include "newgrf_commons.h"
+#include "newgrf_townname.h"
/* TTDPatch extended GRF format codec
* (c) Petr Baudis 2004 (GPL'd)
@@ -3898,6 +3899,106 @@
}
}
+/* Action 0x0F */
+static void FeatureTownName(byte *buf, int len)
+{
+ /* <0F> <id> <style-name> <num-parts> <parts>
+ *
+ * B id ID of this definition in bottom 7 bits (final definition if bit 7 set)
+ * V style-name Name of the style (only for final definition)
+ * B num-parts Number of parts in this definition
+ * V parts The parts */
+
+ if (!check_length(len, 1, "FeatureTownName: definition ID")) return;
+ buf++; len--;
+
+ uint32 grfid = _cur_grffile->grfid;
+
+ GRFTownName *townname = AddGRFTownName(grfid);
+
+ byte id = grf_load_byte(&buf);
+ len--;
+ grfmsg(6, "FeatureTownName: definition 0x%02X", id & 0x7F);
+
+ if (HASBIT(id, 7)) {
+ /* Final definition */
+ CLRBIT(id, 7);
+ bool new_scheme = _cur_grffile->grf_version >= 7;
+
+ if (!check_length(len, 1, "FeatureTownName: lang_id")) return;
+ byte lang = grf_load_byte(&buf);
+ len--;
+
+ byte nb_gen = townname->nb_gen;
+ do {
+ CLRBIT(lang, 7);
+
+ if (!check_length(len, 1, "FeatureTownName: style name")) return;
+ const char *name = grf_load_string(&buf, len);
+ len -= strlen(name) + 1;
+ grfmsg(6, "FeatureTownName: lang 0x%X -> '%s'", lang, TranslateTTDPatchCodes(name));
+
+ townname->name[nb_gen] = AddGRFString(grfid, id, lang, new_scheme, name, STR_UNDEFINED);
+
+ if (!check_length(len, 1, "FeatureTownName: lang_id")) return;
+ lang = grf_load_byte(&buf);
+ len--;
+ } while (lang != 0);
+ townname->id[nb_gen] = id;
+ townname->nb_gen++;
+ }
+
+ if (!check_length(len, 1, "FeatureTownName: number of parts")) return;
+ byte nb = grf_load_byte(&buf);
+ len--;
+ grfmsg(6, "FeatureTownName: %d parts", nb, nb);
+
+ townname->nbparts[id] = nb;
+ townname->partlist[id] = CallocT<NamePartList>(nb);
+
+ for (int i = 0; i < nb; i++) {
+ if (!check_length(len, 3, "FeatureTownName: parts header")) return;
+ byte nbtext = grf_load_byte(&buf);
+ townname->partlist[id][i].bitstart = grf_load_byte(&buf);
+ townname->partlist[id][i].bitcount = grf_load_byte(&buf);
+ townname->partlist[id][i].maxprob = 0;
+ townname->partlist[id][i].partcount = nbtext;
+ townname->partlist[id][i].parts = CallocT<NamePart>(nbtext);
+ len -= 3;
+ grfmsg(6, "FeatureTownName: part %d contains %d texts and will use GB(seed, %d, %d)", i, nbtext, townname->partlist[id][i].bitstart, townname->partlist[id][i].bitcount);
+
+ for (int j = 0; j < nbtext; j++) {
+ if (!check_length(len, 2, "FeatureTownName: part")) return;
+ byte prob = grf_load_byte(&buf);
+ len--;
+
+ if (HASBIT(prob, 7)) {
+ byte ref_id = grf_load_byte(&buf);
+ len--;
+
+ if (townname->nbparts[ref_id] == 0) {
+ grfmsg(0, "FeatureTownName: definition 0x%02X doesn't exist, deactivating", ref_id);
+ DelGRFTownName(grfid);
+ _cur_grfconfig->status = GCS_DISABLED;
+ _skip_sprites = -1;
+ return;
+ }
+
+ grfmsg(6, "FeatureTownName: part %d, text %d, uses intermediate definition 0x%02X (with probability %d)", i, j, ref_id, prob & 0x7F);
+ townname->partlist[id][i].parts[j].data.id = ref_id;
+ } else {
+ const char *text = grf_load_string(&buf, len);
+ len -= strlen(text) + 1;
+ townname->partlist[id][i].parts[j].data.text = TranslateTTDPatchCodes(text);
+ grfmsg(6, "FeatureTownName: part %d, text %d, '%s' (with probability %d)", i, j, townname->partlist[id][i].parts[j].data.text, prob);
+ }
+ townname->partlist[id][i].parts[j].prob = prob;
+ townname->partlist[id][i].maxprob += GB(prob, 0, 7);
+ }
+ grfmsg(6, "FeatureTownName: part %d, total probability %d", i, townname->partlist[id][i].maxprob);
+ }
+}
+
/* Action 0x10 */
static void DefineGotoLabel(byte *buf, int len)
{
@@ -4241,7 +4342,7 @@
| ((_patches.freight_trains > 1 ? 1 : 0) << 0x18) // freighttrains
| (1 << 0x19) // newhouses
| (1 << 0x1A) // newbridges
- | (0 << 0x1B) // newtownnames
+ | (1 << 0x1B) // newtownnames
| (0 << 0x1C) // moreanimations
| ((_patches.wagon_speed_limits ? 1 : 0) << 0x1D) // wagonspeedlimits
| (1 << 0x1E) // newshistory
@@ -4418,6 +4519,7 @@
static void ResetNewGRFData()
{
CleanUpStrings();
+ CleanUpGRFTownNames();
/* Copy/reset original engine info data */
memcpy(&_engine_info, &orig_engine_info, sizeof(orig_engine_info));
@@ -4557,7 +4659,7 @@
if (newfile == NULL) error ("Out of memory");
- newfile->filename = strdup(config->full_path);
+ newfile->filename = strdup(config->filename);
newfile->sprite_offset = sprite_offset;
/* Copy the initial parameter list */
@@ -4787,7 +4889,7 @@
/* 0x0C */ { NULL, NULL, NULL, GRFComment, NULL, GRFComment, },
/* 0x0D */ { NULL, SafeParamSet, NULL, ParamSet, ParamSet, ParamSet, },
/* 0x0E */ { NULL, SafeGRFInhibit, NULL, GRFInhibit, GRFInhibit, GRFInhibit, },
- /* 0x0F */ { NULL, NULL, NULL, NULL, NULL, NULL, },
+ /* 0x0F */ { NULL, GRFUnsafe, NULL, FeatureTownName, NULL, NULL, },
/* 0x10 */ { NULL, NULL, DefineGotoLabel, NULL, NULL, NULL, },
/* 0x11 */ { NULL, GRFUnsafe, NULL, NULL, NULL, GRFSound, },
/* 0x12 */ { NULL, NULL, NULL, NULL, NULL, LoadFontGlyph, },
@@ -4834,7 +4936,7 @@
void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
{
- const char *filename = config->full_path;
+ const char *filename = config->filename;
uint16 num;
/* A .grf file is activated only if it was active when the game was
@@ -4917,6 +5019,8 @@
void InitDepotWindowBlockSizes();
+extern void SortTownGeneratorNames();
+
static void AfterLoadGRFs()
{
/* Update the bitmasks for the vehicle lists */
@@ -4941,6 +5045,9 @@
/* Map cargo strings. This is a separate step because cargos are
* loaded before strings... */
MapNewCargoStrings();
+
+ /* Update the townname generators list */
+ SortTownGeneratorNames();
}
void LoadNewGRF(uint load_index, uint file_index)
@@ -4959,9 +5066,10 @@
_cur_spriteid = load_index;
for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) {
if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue;
+ if (stage > GLS_INIT && HASBIT(c->flags, GCF_INIT_ONLY)) continue;
/* @todo usererror() */
- if (!FioCheckFileExists(c->full_path)) error("NewGRF file is missing '%s'", c->filename);
+ if (!FioCheckFileExists(c->filename)) error("NewGRF file is missing '%s'", c->filename);
if (stage == GLS_LABELSCAN) InitNewGRFFile(c, _cur_spriteid);
LoadNewGRFFile(c, slot++, stage);
--- a/src/newgrf_commons.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_commons.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -220,6 +220,29 @@
_industry_specs[ind_id].enabled = true;
}
+void IndustryTileOverrideManager::SetEntitySpec(const IndustryTileSpec *its)
+{
+ IndustryGfx indt_id = this->AddEntityID(its->grf_prop.local_id, its->grf_prop.grffile->grfid, its->grf_prop.subst_id);
+
+ if (indt_id == invalid_ID) {
+ grfmsg(1, "IndustryTile.SetEntitySpec: Too many industry tiles allocated. Ignoring.");
+ return;
+ }
+
+ memcpy(&_industry_tile_specs[indt_id], its, sizeof(*its));
+
+ /* Now add the overrides. */
+ for (int i = 0; i < max_offset; i++) {
+ IndustryTileSpec *overridden_its = &_industry_tile_specs[i];
+
+ if (entity_overrides[i] != its->grf_prop.local_id) continue;
+
+ overridden_its->grf_prop.override = indt_id;
+ overridden_its->enabled = false;
+ entity_overrides[i] = invalid_ID;
+ }
+}
+
/** Function used by houses (and soon industries) to get information
* on type of "terrain" the tile it is queries sits on.
* @param tile TileIndex of the tile been queried
--- a/src/newgrf_commons.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_commons.h Tue Jun 26 23:40:58 2007 +0000
@@ -76,8 +76,19 @@
void SetEntitySpec(const IndustrySpec *inds);
};
+
+struct IndustryTileSpec;
+class IndustryTileOverrideManager : public OverrideManagerBase
+{
+ public:
+ IndustryTileOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) :
+ OverrideManagerBase(offset, maximum, invalid) {};
+ void SetEntitySpec(const IndustryTileSpec *indts);
+};
+
extern HouseOverrideManager _house_mngr;
extern IndustryOverrideManager _industry_mngr;
+extern IndustryTileOverrideManager _industile_mngr;
uint32 GetTerrainType(TileIndex tile);
TileIndex GetNearbyTile(byte parameter, TileIndex tile);
--- a/src/newgrf_config.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_config.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -40,7 +40,7 @@
size_t len;
/* open the file */
- f = FioFOpenFile(config->full_path);
+ f = FioFOpenFile(config->filename);
if (f == NULL) return false;
/* calculate md5sum */
@@ -59,16 +59,11 @@
/* Find the GRFID and calculate the md5sum */
bool FillGRFDetails(GRFConfig *config, bool is_static)
{
- if (!FioCheckFileExists(config->full_path)) {
+ if (!FioCheckFileExists(config->filename)) {
config->status = GCS_NOT_FOUND;
return false;
}
- if (config->filename == NULL) {
- const char *t = strrchr(config->full_path, PATHSEPCHAR);
- config->filename = strdup(t != NULL ? t + 1 : config->full_path);
- }
-
/* Find and load the Action 8 information */
/* 62 is the last file slot before sample.cat.
* Should perhaps be some "don't care" value */
@@ -94,7 +89,6 @@
/* GCF_COPY as in NOT strdupped/alloced the filename, name and info */
if (!HASBIT((*config)->flags, GCF_COPY)) {
free((*config)->filename);
- free((*config)->full_path);
free((*config)->name);
free((*config)->info);
@@ -124,8 +118,9 @@
/** Copy a GRF Config list
* @param dst pointer to destination list
* @param src pointer to source list values
+ * @param init_only the copied GRF will be processed up to GLS_INIT
* @return pointer to the last value added to the destination list */
-GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src)
+GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src, bool init_only)
{
/* Clear destination as it will be overwritten */
ClearGRFConfigList(dst);
@@ -133,7 +128,6 @@
GRFConfig *c = CallocT<GRFConfig>(1);
*c = *src;
if (src->filename != NULL) c->filename = strdup(src->filename);
- if (src->full_path != NULL) c->full_path = strdup(src->full_path);
if (src->name != NULL) c->name = strdup(src->name);
if (src->info != NULL) c->info = strdup(src->info);
if (src->error != NULL) {
@@ -143,6 +137,9 @@
if (src->error->custom_message != NULL) c->error->custom_message = strdup(src->error->custom_message);
}
+ CLRBIT(c->flags, GCF_INIT_ONLY);
+ if (init_only) SETBIT(c->flags, GCF_INIT_ONLY);
+
*dst = c;
dst = &c->next;
}
@@ -190,7 +187,7 @@
GRFConfig **tail = dst;
while (*tail != NULL) tail = &(*tail)->next;
- CopyGRFConfigList(tail, _grfconfig_static);
+ CopyGRFConfigList(tail, _grfconfig_static, false);
RemoveDuplicatesFromGRFConfigList(*dst);
}
@@ -210,14 +207,7 @@
/* Reset the current GRF Config to either blank or newgame settings */
void ResetGRFConfig(bool defaults)
{
- GRFConfig **c = &_grfconfig;
-
- if (defaults) {
- c = CopyGRFConfigList(c, _grfconfig_newgame);
- } else {
- ClearGRFConfigList(c);
- }
-
+ CopyGRFConfigList(&_grfconfig, _grfconfig_newgame, !defaults);
AppendStaticGRFConfigs(&_grfconfig);
}
@@ -268,9 +258,7 @@
* already a local one, so there is no need to replace it. */
if (!HASBIT(c->flags, GCF_COPY)) {
free(c->filename);
- free(c->full_path);
c->filename = strdup(f->filename);
- c->full_path = strdup(f->full_path);
memcpy(c->md5sum, f->md5sum, sizeof(c->md5sum));
if (c->name == NULL && f->name != NULL) c->name = strdup(f->name);
if (c->info == NULL && f->info != NULL) c->info = strdup(f->info);
@@ -317,7 +305,7 @@
if (strcasecmp(ext, ".grf") != 0) continue;
GRFConfig *c = CallocT<GRFConfig>(1);
- c->full_path = strdup(filename + basepath_length);
+ c->filename = strdup(filename + basepath_length);
bool added = true;
if (FillGRFDetails(c, false)) {
@@ -344,7 +332,6 @@
/* 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->full_path);
free(c->name);
free(c->info);
free(c);
--- a/src/newgrf_config.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_config.h Tue Jun 26 23:40:58 2007 +0000
@@ -14,6 +14,7 @@
GCF_STATIC, ///< GRF file is used statically (can be used in any MP game)
GCF_COMPATIBLE,///< GRF file does not exactly match the requested GRF (different MD5SUM), but grfid matches)
GCF_COPY, ///< The data is copied from a grf in _all_grfs
+ GCF_INIT_ONLY, ///< GRF file is processed up to GLS_INIT
};
enum GRFStatus {
@@ -46,7 +47,6 @@
struct GRFConfig : public GRFIdentifier {
char *filename;
- char *full_path;
char *name;
char *info;
GRFError *error;
@@ -74,7 +74,7 @@
void ScanNewGRFFiles();
const GRFConfig *FindGRFConfig(uint32 grfid, const uint8 *md5sum = NULL);
GRFConfig *GetGRFConfig(uint32 grfid);
-GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src);
+GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src, bool init_only);
void AppendStaticGRFConfigs(GRFConfig **dst);
void AppendToGRFConfigList(GRFConfig **dst, GRFConfig *el);
void ClearGRFConfig(GRFConfig **config);
--- a/src/newgrf_engine.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_engine.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -705,10 +705,10 @@
case 0x39: return v->cargo_type;
case 0x3A: return v->cargo_cap;
case 0x3B: return GB(v->cargo_cap, 8, 8);
- case 0x3C: return v->cargo_count;
- case 0x3D: return GB(v->cargo_count, 8, 8);
- case 0x3E: return v->cargo_source;
- case 0x3F: return v->cargo_days;
+ case 0x3C: return v->cargo.Count();
+ case 0x3D: return GB(v->cargo.Count(), 8, 8);
+ case 0x3E: return v->cargo.Source();
+ case 0x3F: return v->cargo.DaysInTransit();
case 0x40: return v->age;
case 0x41: return GB(v->age, 8, 8);
case 0x42: return v->max_age;
@@ -727,19 +727,19 @@
case 0x4F: return GB(v->reliability, 8, 8);
case 0x50: return v->reliability_spd_dec;
case 0x51: return GB(v->reliability_spd_dec, 8, 8);
- case 0x52: return v->profit_this_year;
- case 0x53: return GB(v->profit_this_year, 8, 24);
- case 0x54: return GB(v->profit_this_year, 16, 16);
- case 0x55: return GB(v->profit_this_year, 24, 8);
- case 0x56: return v->profit_last_year;
- case 0x57: return GB(v->profit_last_year, 8, 24);
- case 0x58: return GB(v->profit_last_year, 16, 16);
- case 0x59: return GB(v->profit_last_year, 24, 8);
+ case 0x52: return ClampToI32(v->profit_this_year);
+ case 0x53: return GB(ClampToI32(v->profit_this_year), 8, 24);
+ case 0x54: return GB(ClampToI32(v->profit_this_year), 16, 16);
+ case 0x55: return GB(ClampToI32(v->profit_this_year), 24, 8);
+ case 0x56: return ClampToI32(v->profit_last_year);
+ case 0x57: return GB(ClampToI32(v->profit_last_year), 8, 24);
+ case 0x58: return GB(ClampToI32(v->profit_last_year), 16, 16);
+ case 0x59: return GB(ClampToI32(v->profit_last_year), 24, 8);
case 0x5A: return v->next == NULL ? INVALID_VEHICLE : v->next->index;
- case 0x5C: return v->value;
- case 0x5D: return GB(v->value, 8, 24);
- case 0x5E: return GB(v->value, 16, 16);
- case 0x5F: return GB(v->value, 24, 8);
+ case 0x5C: return ClampToI32(v->value);
+ case 0x5D: return GB(ClampToI32(v->value), 8, 24);
+ case 0x5E: return GB(ClampToI32(v->value), 16, 16);
+ case 0x5F: return GB(ClampToI32(v->value), 24, 8);
case 0x60: return v->string_id;
case 0x61: return GB(v->string_id, 8, 8);
case 0x72: return v->cargo_subtype;
@@ -811,12 +811,12 @@
totalsets = in_motion ? group->g.real.num_loaded : group->g.real.num_loading;
- if (v->cargo_count == v->cargo_cap || totalsets == 1) {
+ if (v->cargo.Count() == v->cargo_cap || totalsets == 1) {
set = totalsets - 1;
- } else if (v->cargo_count == 0 || totalsets == 2) {
+ } else if (v->cargo.Empty() || totalsets == 2) {
set = 0;
} else {
- set = v->cargo_count * (totalsets - 2) / max((uint16)1, v->cargo_cap) + 1;
+ set = v->cargo.Count() * (totalsets - 2) / max((uint16)1, v->cargo_cap) + 1;
}
return in_motion ? group->g.real.loaded[set] : group->g.real.loading[set];
--- a/src/newgrf_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -156,6 +156,11 @@
break;
}
+ case WE_DOUBLE_CLICK:
+ if (e->we.click.widget != 3) break;
+ e->we.click.widget = 6;
+ /* Fall through */
+
case WE_CLICK:
switch (e->we.click.widget) {
case 3: {
@@ -186,7 +191,6 @@
GRFConfig *c = CallocT<GRFConfig>(1);
*c = *src;
c->filename = strdup(src->filename);
- if (src->full_path != NULL) c->full_path = strdup(src->full_path);
if (src->name != NULL) c->name = strdup(src->name);
if (src->info != NULL) c->info = strdup(src->info);
c->next = NULL;
@@ -307,12 +311,12 @@
GRFConfig *c;
int i = 0;
- CopyGRFConfigList(nd->orig_list, *nd->list);
+ CopyGRFConfigList(nd->orig_list, *nd->list, false);
ReloadNewGRFData();
/* Show new, updated list */
for (c = *nd->list; c != NULL && c != nd->sel; c = c->next, i++);
- CopyGRFConfigList(nd->list, *nd->orig_list);
+ CopyGRFConfigList(nd->list, *nd->orig_list, false);
for (c = *nd->list; c != NULL && i > 0; c = c->next, i--);
nd->sel = c;
@@ -469,7 +473,9 @@
NewGRFConfirmationCallback
);
} else {
- CopyGRFConfigList(WP(w, newgrf_d).orig_list, *WP(w, newgrf_d).list);
+ CopyGRFConfigList(WP(w, newgrf_d).orig_list, *WP(w, newgrf_d).list, true);
+ ResetGRFConfig(false);
+ ReloadNewGRFData();
}
break;
@@ -498,7 +504,9 @@
case WE_DESTROY:
if (!WP(w, newgrf_d).execute) {
- CopyGRFConfigList(WP(w, newgrf_d).orig_list, *WP(w, newgrf_d).list);
+ CopyGRFConfigList(WP(w, newgrf_d).orig_list, *WP(w, newgrf_d).list, true);
+ ResetGRFConfig(false);
+ ReloadNewGRFData();
}
/* Remove the temporary copy of grf-list used in window */
ClearGRFConfigList(WP(w, newgrf_d).list);
@@ -565,7 +573,7 @@
if (w == NULL) return;
w->resize.step_height = 14;
- CopyGRFConfigList(&local, *config);
+ CopyGRFConfigList(&local, *config, false);
/* Clear selections */
WP(w, newgrf_d).sel = NULL;
--- a/src/newgrf_industries.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_industries.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -19,6 +19,7 @@
* to those used by the game, the IDs used for overriding old industries must be
* translated when the idustry spec is set. */
IndustryOverrideManager _industry_mngr(NEW_INDUSTRYOFFSET, NUM_INDUSTRYTYPES, INVALID_INDUSTRYTYPE);
+IndustryTileOverrideManager _industile_mngr(NEW_INDUSTRYTILEOFFSET, NUM_INDUSTRYTILES, INVALID_INDUSTRYTILE);
/**
* Finds the distance for the closest tile with water/land given a tile
--- a/src/newgrf_industrytiles.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_industrytiles.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -143,6 +143,44 @@
res->reseed = 0;
}
+void IndustryDrawTileLayout(const TileInfo *ti, const SpriteGroup *group, byte rnd_color, byte stage, IndustryGfx gfx)
+{
+ const DrawTileSprites *dts = group->g.layout.dts;
+ const DrawTileSeqStruct *dtss;
+
+ SpriteID image = dts->ground_sprite;
+ SpriteID pal = dts->ground_pal;
+
+ if (GB(image, 0, SPRITE_WIDTH) != 0) DrawGroundSprite(image, pal);
+
+ foreach_draw_tile_seq(dtss, dts->seq) {
+ if (GB(dtss->image, 0, SPRITE_WIDTH) == 0) continue;
+
+ image = dtss->image + stage;
+ pal = dtss->pal;
+
+ if (!HASBIT(image, SPRITE_MODIFIER_OPAQUE) && HASBIT(_transparent_opt, TO_INDUSTRIES)) {
+ SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
+ pal = PALETTE_TO_TRANSPARENT;
+ } else if (HASBIT(image, PALETTE_MODIFIER_COLOR)) {
+ pal = GENERAL_SPRITE_COLOR(rnd_color);
+ } else {
+ pal = PAL_NONE;
+ }
+
+ if ((byte)dtss->delta_z != 0x80) {
+ AddSortableSpriteToDraw(
+ image, pal,
+ ti->x + dtss->delta_x, ti->y + dtss->delta_y,
+ dtss->size_x, dtss->size_y,
+ dtss->size_z, ti->z + dtss->delta_z
+ );
+ } else {
+ AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y);
+ }
+ }
+}
+
uint16 GetIndustryTileCallback(uint16 callback, uint32 param1, uint32 param2, IndustryGfx gfx_id, Industry *industry, TileIndex tile)
{
ResolverObject object;
@@ -158,3 +196,33 @@
return group->g.callback.result;
}
+
+bool DrawNewIndustryTile(TileInfo *ti, Industry *i, IndustryGfx gfx, const IndustryTileSpec *inds)
+{
+ const SpriteGroup *group;
+ ResolverObject object;
+
+ if (ti->tileh != SLOPE_FLAT) {
+ bool draw_old_one = true;
+ if (HASBIT(inds->callback_flags, CBM_INDT_DRAW_FOUNDATIONS)) {
+ /* Called to determine the type (if any) of foundation to draw for industry tile */
+ uint32 callback_res = GetIndustryTileCallback(CBID_INDUSTRY_DRAW_FOUNDATIONS, 0, 0, gfx, i, ti->tile);
+ draw_old_one = callback_res == 0 || callback_res == CALLBACK_FAILED;
+ }
+
+ if (draw_old_one) DrawFoundation(ti, ti->tileh);
+ }
+
+ NewIndustryTileResolver(&object, gfx, ti->tile, i);
+
+ group = Resolve(inds->grf_prop.spritegroup, &object);
+ if (group == NULL || group->type != SGT_TILELAYOUT) {
+ return false;
+ } else {
+ /* Limit the building stage to the number of stages supplied. */
+ byte stage = GetIndustryConstructionStage(ti->tile);
+ stage = clamp(stage - 4 + group->g.layout.num_sprites, 0, group->g.layout.num_sprites - 1);
+ IndustryDrawTileLayout(ti, group, i->random_color, stage, gfx);
+ return true;
+ }
+}
--- a/src/newgrf_industrytiles.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_industrytiles.h Tue Jun 26 23:40:58 2007 +0000
@@ -5,7 +5,7 @@
#ifndef NEWGRF_INDUSTRYTILES_H
#define NEWGRF_INDUSTRYTILES_H
-void DrawNewIndustryTile(TileInfo *ti, IndustryGfx gfx);
+bool DrawNewIndustryTile(TileInfo *ti, Industry *i, IndustryGfx gfx, const IndustryTileSpec *inds);
uint16 GetIndustryTileCallback(uint16 callback, uint32 param1, uint32 param2, IndustryGfx gfx_id, Industry *industry, TileIndex tile);
#endif /* NEWGRF_INDUSTRYTILES_H */
--- a/src/newgrf_station.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/newgrf_station.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -400,7 +400,7 @@
uint32 value = 0;
for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
- if (HASBIT(st->goods[cargo_type].waiting_acceptance, 15)) SETBIT(value, cargo_type);
+ if (st->goods[cargo_type].acceptance) SETBIT(value, cargo_type);
}
return value;
}
@@ -431,12 +431,12 @@
const GoodsEntry *ge = &st->goods[c];
switch (variable) {
- case 0x60: return GB(ge->waiting_acceptance, 0, 12);
+ case 0x60: return min(ge->cargo.Count(), 4095);
case 0x61: return ge->days_since_pickup;
case 0x62: return ge->rating;
- case 0x63: return ge->enroute_time;
+ case 0x63: return ge->cargo.DaysInTransit();
case 0x64: return ge->last_speed | (ge->last_age << 8);
- case 0x65: return GB(ge->waiting_acceptance, 12, 4);
+ case 0x65: return ge->acceptance << 3;
}
}
@@ -444,12 +444,12 @@
if (variable >= 0x8C && variable <= 0xEC) {
const GoodsEntry *g = &st->goods[GB(variable - 0x8C, 3, 4)];
switch (GB(variable - 0x8C, 0, 3)) {
- case 0: return g->waiting_acceptance;
- case 1: return GB(g->waiting_acceptance, 8, 8);
+ case 0: return g->cargo.Count();
+ case 1: return GB(min(g->cargo.Count(), 4095), 0, 4) | (g->acceptance << 7);
case 2: return g->days_since_pickup;
case 3: return g->rating;
- case 4: return g->enroute_from;
- case 5: return g->enroute_time;
+ case 4: return g->cargo.Source();
+ case 5: return g->cargo.DaysInTransit();
case 6: return g->last_speed;
case 7: return g->last_age;
}
@@ -484,12 +484,12 @@
case CT_DEFAULT:
for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
- cargo += GB(st->goods[cargo_type].waiting_acceptance, 0, 12);
+ cargo += st->goods[cargo_type].cargo.Count();
}
break;
default:
- cargo = GB(st->goods[cargo_type].waiting_acceptance, 0, 12);
+ cargo = st->goods[cargo_type].cargo.Count();
break;
}
@@ -545,7 +545,7 @@
for (CargoID cargo = 0; cargo < NUM_CARGO; cargo++) {
const CargoSpec *cs = GetCargo(cargo);
if (cs->IsValid() && object->u.station.statspec->spritegroup[cargo] != NULL &&
- GB(object->u.station.st->goods[cargo].waiting_acceptance, 0, 12) != 0) {
+ !object->u.station.st->goods[cargo].cargo.Empty()) {
ctype = cargo;
break;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_townname.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,132 @@
+/* $Id$ */
+
+/** @file newgrf_townname.cpp
+ * Implementation of Action 0F "universal holder" structure and functions.
+ * This file implements a linked-lists of townname generators,
+ * holding everything that the newgrf action 0F will send over to OpenTTD.
+ */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "table/strings.h"
+#include "newgrf_townname.h"
+#include "string.h"
+
+static GRFTownName *_grf_townnames = NULL;
+
+GRFTownName *GetGRFTownName(uint32 grfid)
+{
+ GRFTownName *t = _grf_townnames;
+ for (; t != NULL; t = t->next) {
+ if (t->grfid == grfid) return t;
+ }
+ return NULL;
+}
+
+GRFTownName *AddGRFTownName(uint32 grfid)
+{
+ GRFTownName *t = GetGRFTownName(grfid);
+ if (t == NULL) {
+ t = CallocT<GRFTownName>(1);
+ t->grfid = grfid;
+ t->next = _grf_townnames;
+ _grf_townnames = t;
+ }
+ return t;
+}
+
+void DelGRFTownName(uint32 grfid)
+{
+ GRFTownName *t = _grf_townnames;
+ GRFTownName *p = NULL;
+ for (;t != NULL; p = t, t = t->next) if (t->grfid == grfid) break;
+ if (t != NULL) {
+ for (int i = 0; i < 128; i++) {
+ for (int j = 0; j < t->nbparts[i]; j++) {
+ for (int k = 0; k < t->partlist[i][j].partcount; k++) {
+ if (!HASBIT(t->partlist[i][j].parts[k].prob, 7)) free(t->partlist[i][j].parts[k].data.text);
+ }
+ free(t->partlist[i][j].parts);
+ }
+ free(t->partlist[i]);
+ }
+ if (p != NULL) {
+ p->next = t->next;
+ } else {
+ _grf_townnames = t->next;
+ }
+ free(t);
+ }
+}
+
+static char *RandomPart(char *buf, GRFTownName *t, uint32 seed, byte id, const char *last)
+{
+ assert(t != NULL);
+ for (int i = 0; i < t->nbparts[id]; i++) {
+ byte count = t->partlist[id][i].bitcount;
+ uint16 maxprob = t->partlist[id][i].maxprob;
+ uint32 r = (GB(seed, t->partlist[id][i].bitstart, count) * maxprob) >> count;
+ for (int j = 0; j < t->partlist[id][i].partcount; j++) {
+ byte prob = t->partlist[id][i].parts[j].prob;
+ maxprob -= GB(prob, 0, 7);
+ if (maxprob > r) continue;
+ if (HASBIT(prob, 7)) {
+ buf = RandomPart(buf, t, seed, t->partlist[id][i].parts[j].data.id, last);
+ } else {
+ buf = strecat(buf, t->partlist[id][i].parts[j].data.text, last);
+ }
+ break;
+ }
+ }
+ return buf;
+}
+
+char *GRFTownNameGenerate(char *buf, uint32 grfid, uint16 gen, uint32 seed, const char *last)
+{
+ strecpy(buf, "", last);
+ for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) {
+ if (t->grfid == grfid) {
+ assert(gen < t->nb_gen);
+ buf = RandomPart(buf, t, seed, t->id[gen], last);
+ break;
+ }
+ }
+ return buf;
+}
+
+StringID *GetGRFTownNameList()
+{
+ int nb_names = 0, n = 0;
+ for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) nb_names += t->nb_gen;
+ StringID *list = MallocT<StringID>(nb_names + 1);
+ for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) {
+ for (int j = 0; j < t->nb_gen; j++) list[n++] = t->name[j];
+ }
+ list[n] = INVALID_STRING_ID;
+ return list;
+}
+
+void CleanUpGRFTownNames()
+{
+ while (_grf_townnames != NULL) DelGRFTownName(_grf_townnames->grfid);
+}
+
+uint32 GetGRFTownNameId(int gen)
+{
+ for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) {
+ if (gen < t->nb_gen) return t->grfid;
+ gen -= t->nb_gen;
+ }
+ /* Fallback to no NewGRF */
+ return 0;
+}
+
+uint16 GetGRFTownNameType(int gen)
+{
+ for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) {
+ if (gen < t->nb_gen) return gen;
+ gen -= t->nb_gen;
+ }
+ /* Fallback to english original */
+ return SPECSTR_TOWNNAME_ENGLISH;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_townname.h Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,44 @@
+/* $Id$ */
+#ifndef NEWGRF_TOWNNAME_H
+#define NEWGRF_TOWNNAME_H
+
+/** @file newgrf_townname.h
+ * Header of Action 0F "universal holder" structure and functions
+ */
+
+struct NamePart {
+ byte prob; ///< The relative probablity of the following name to appear in the bottom 7 bits.
+ union {
+ char *text; ///< If probability bit 7 is clear
+ byte id; ///< If probability bit 7 is set
+ } data;
+};
+
+struct NamePartList {
+ byte partcount;
+ byte bitstart;
+ byte bitcount;
+ uint16 maxprob;
+ NamePart *parts;
+};
+
+struct GRFTownName {
+ uint32 grfid;
+ byte nb_gen;
+ byte id[128];
+ StringID name[128];
+ byte nbparts[128];
+ NamePartList *partlist[128];
+ GRFTownName *next;
+};
+
+GRFTownName *AddGRFTownName(uint32 grfid);
+GRFTownName *GetGRFTownName(uint32 grfid);
+void DelGRFTownName(uint32 grfid);
+void CleanUpGRFTownNames();
+StringID *GetGRFTownNameList();
+char *GRFTownNameGenerate(char *buf, uint32 grfid, uint16 gen, uint32 seed, const char *last);
+uint32 GetGRFTownNameId(int gen);
+uint16 GetGRFTownNameType(int gen);
+
+#endif /* NEWGRF_TOWNNAME_H */
--- a/src/news.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/news.h Tue Jun 26 23:40:58 2007 +0000
@@ -17,7 +17,7 @@
TileIndex data_a;
TileIndex data_b;
- uint32 params[10];
+ uint64 params[10];
};
typedef bool ValidationProc ( uint data_a, uint data_b );
--- a/src/oldloader.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/oldloader.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -541,7 +541,7 @@
/* We use a struct to store the prices, but they are ints in a row..
so just access the struct as an array of int32's */
- ((int32*)&_price)[num] = _old_price;
+ ((Money*)&_price)[num] = _old_price;
_price_frac[num] = _old_price_frac;
return true;
@@ -565,15 +565,18 @@
return true;
}
-static uint8 _old_platforms;
-static uint _current_station_id;
+static uint8 _old_platforms;
+static uint _current_station_id;
+static uint16 _waiting_acceptance;
+static uint8 _cargo_source;
+static uint8 _cargo_days;
static const OldChunks goods_chunk[] = {
- OCL_SVAR( OC_UINT16, GoodsEntry, waiting_acceptance ),
+ OCL_VAR ( OC_UINT16, 1, &_waiting_acceptance ),
OCL_SVAR( OC_UINT8, GoodsEntry, days_since_pickup ),
OCL_SVAR( OC_UINT8, GoodsEntry, rating ),
- OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, GoodsEntry, enroute_from ),
- OCL_SVAR( OC_UINT8, GoodsEntry, enroute_time ),
+ OCL_VAR ( OC_UINT8, 1, &_cargo_source ),
+ OCL_VAR ( OC_UINT8, 1, &_cargo_days ),
OCL_SVAR( OC_UINT8, GoodsEntry, last_speed ),
OCL_SVAR( OC_UINT8, GoodsEntry, last_age ),
@@ -583,7 +586,17 @@
static bool LoadOldGood(LoadgameState *ls, int num)
{
Station *st = GetStation(_current_station_id);
- return LoadChunk(ls, &st->goods[num], goods_chunk);
+ GoodsEntry *ge = &st->goods[num];
+ bool ret = LoadChunk(ls, ge, goods_chunk);
+ if (ret && GB(_waiting_acceptance, 0, 12) != 0) {
+ CargoPacket *cp = new CargoPacket();
+ cp->source = (_cargo_source == 0xFF) ? INVALID_STATION : _cargo_source;
+ cp->count = GB(_waiting_acceptance, 0, 12);
+ cp->days_in_transit = _cargo_days;
+ ge->acceptance = HASBIT(_waiting_acceptance, 15);
+ ge->cargo.Append(cp);
+ }
+ return ret;
}
static const OldChunks station_chunk[] = {
@@ -814,7 +827,7 @@
p->name_1 = RemapOldStringID(_old_string_id);
p->president_name_1 = RemapOldStringID(_old_string_id_2);
- p->money64 = p->player_money;
+ p->player_money = p->player_money;
if (num == 0) {
/* If the first player has no name, make sure we call it UNNAMED */
@@ -832,7 +845,7 @@
Ps: this also means that if you had exact 893288 pounds, you will go back
to 10000.. this is a very VERY small chance ;) */
if (p->player_money == 893288)
- p->money64 = p->player_money = p->current_loan = 100000;
+ p->player_money = p->current_loan = 100000;
_player_colors[num] = p->player_color;
p->inaugurated_year -= ORIGINAL_BASE_YEAR;
@@ -944,6 +957,8 @@
return res;
}
+static uint16 _cargo_count;
+
static const OldChunks vehicle_chunk[] = {
OCL_SVAR( OC_UINT8, Vehicle, type ),
OCL_SVAR( OC_UINT8, Vehicle, subtype ),
@@ -986,9 +1001,9 @@
OCL_SVAR( OC_UINT8, Vehicle, cargo_type ),
OCL_SVAR( OC_UINT16, Vehicle, cargo_cap ),
- OCL_SVAR( OC_UINT16, Vehicle, cargo_count ),
- OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Vehicle, cargo_source ),
- OCL_SVAR( OC_UINT8, Vehicle, cargo_days ),
+ OCL_VAR ( OC_UINT16, 1, &_cargo_count ),
+ OCL_VAR ( OC_UINT8, 1, &_cargo_source ),
+ OCL_VAR ( OC_UINT8, 1, &_cargo_days ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Vehicle, age ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Vehicle, max_age ),
@@ -1066,6 +1081,12 @@
/* Vehicle-subtype is different in TTD(Patch) */
if (v->type == VEH_SPECIAL) v->subtype = v->subtype >> 1;
+
+ if (_cargo_count != 0) {
+ CargoPacket *cp = new CargoPacket((_cargo_source == 0xFF) ? INVALID_STATION : _cargo_source, _cargo_count);
+ cp->days_in_transit = _cargo_days;
+ v->cargo.Append(cp);
+ }
}
return true;
--- a/src/openttd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/openttd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -86,6 +86,7 @@
extern void SetDifficultyLevel(int mode, GameOptions *gm_opt);
extern Player* DoStartupNewPlayer(bool is_ai);
extern void ShowOSErrorBox(const char *buf);
+extern void SetDefaultRailGui();
const char *_default_blitter = "8bpp-optimized";
@@ -310,6 +311,7 @@
CleanPool(&_Sign_pool);
CleanPool(&_Order_pool);
CleanPool(&_Group_pool);
+ CleanPool(&_CargoPacket_pool);
free((void*)_town_sort);
free((void*)_industry_sort);
@@ -700,6 +702,7 @@
DoCommandP(0, (_patches.autorenew << 15 ) | (_patches.autorenew_months << 16) | 4, _patches.autorenew_money, NULL, CMD_SET_AUTOREPLACE);
SettingsDisableElrail(_patches.disable_elrails);
+ SetDefaultRailGui();
MarkWholeScreenDirty();
}
@@ -748,7 +751,8 @@
/* invalid type */
if (_file_to_saveload.mode == SL_INVALID) {
DEBUG(sl, 0, "Savegame is obsolete or invalid format: '%s'", _file_to_saveload.name);
- ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+ SetDParamStr(0, GetSaveLoadErrorString());
+ ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
_game_mode = GM_MENU;
return;
}
@@ -763,7 +767,8 @@
/* Load game */
if (SaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, SCENARIO_DIR) != SL_OK) {
LoadIntroGame();
- ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+ SetDParamStr(0, GetSaveLoadErrorString());
+ ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
}
_opt_ptr = &_opt;
@@ -871,7 +876,8 @@
if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, NO_DIRECTORY)) {
LoadIntroGame();
- ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+ SetDParamStr(0, GetSaveLoadErrorString());
+ ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
} else {
/* Update the local player for a loaded game. It is either always
* player #1 (eg 0) or in the case of a dedicated server a spectator */
@@ -909,7 +915,8 @@
SetLocalPlayer(OWNER_NONE);
_patches_newgame.starting_year = _cur_year;
} else {
- ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
+ SetDParamStr(0, GetSaveLoadErrorString());
+ ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
}
break;
}
@@ -920,7 +927,8 @@
case SM_SAVE: /* Save game */
if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, NO_DIRECTORY) != SL_OK) {
- ShowErrorMessage(INVALID_STRING_ID, STR_4007_GAME_SAVE_FAILED, 0, 0);
+ SetDParamStr(0, GetSaveLoadErrorString());
+ ShowErrorMessage(INVALID_STRING_ID, STR_012D, 0, 0);
} else {
DeleteWindowById(WC_SAVELOAD, 0);
}
@@ -939,6 +947,31 @@
}
}
+#include "cargopacket.h"
+void CheckCargoPacketLeaks()
+{
+ CargoPacket *cp;
+ FOR_ALL_CARGOPACKETS(cp) cp->touched = false;
+
+ Vehicle *v;
+ FOR_ALL_VEHICLES(v) {
+ const CargoList::List *packets = v->cargo.Packets();
+ for (CargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) (*it)->touched = true;
+ }
+
+ Station *st;
+ FOR_ALL_STATIONS(st) {
+ for (CargoID c = 0; c < NUM_CARGO; c++) {
+ GoodsEntry *ge = &st->goods[c];
+
+ const CargoList::List *packets = ge->cargo.Packets();
+ for (CargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) (*it)->touched = true;
+ }
+ }
+
+ FOR_ALL_CARGOPACKETS(cp) assert(cp->touched);
+}
+
/* State controlling game loop.
* The state must not be changed from anywhere
@@ -973,6 +1006,7 @@
CallWindowTickEvent();
NewsLoop();
_current_player = p;
+ CheckCargoPacketLeaks();
}
}
@@ -989,11 +1023,8 @@
#endif /* PSP */
if (_patches.keep_all_autosave && _local_player != PLAYER_SPECTATOR) {
- const Player *p = GetPlayer(_local_player);
-
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, _date);
+ SetDParam(0, _local_player);
+ SetDParam(1, _date);
GetString(buf, STR_4004, lastof(buf));
ttd_strlcpy(buf, ".sav", sizeof(buf));
} else {
@@ -1081,7 +1112,7 @@
}
_caret_timer += 3;
- _timer_counter += 8;
+ _palette_animation_counter += 8;
CursorTick();
#ifdef ENABLE_NETWORK
@@ -1250,7 +1281,10 @@
/* Check if all NewGRFs are present, we are very strict in MP mode */
GRFListCompatibility gcf_res = IsGoodGRFConfigList();
- if (_networking && gcf_res != GLC_ALL_GOOD) return false;
+ if (_networking && gcf_res != GLC_ALL_GOOD) {
+ SetSaveLoadError(STR_NETWORK_ERR_CLIENT_NEWGRF_MISMATCH);
+ return false;
+ }
switch (gcf_res) {
case GLC_COMPATIBLE: _switch_mode_errorstr = STR_NEWGRF_COMPATIBLE_LOAD_WARNING; break;
@@ -1295,7 +1329,7 @@
/* make sure there is a town in the game */
if (_game_mode == GM_NORMAL && !ClosestTownFromTile(0, (uint)-1)) {
- _error_message = STR_NO_TOWN_IN_SCENARIO;
+ SetSaveLoadError(STR_NO_TOWN_IN_SCENARIO);
return false;
}
@@ -1835,6 +1869,7 @@
if (CheckSavegameVersion(38)) _patches.disable_elrails = false;
/* do the same as when elrails were enabled/disabled manually just now */
SettingsDisableElrail(_patches.disable_elrails);
+ SetDefaultRailGui();
/* From version 53, the map array was changed for house tiles to allow
* space for newhouses grf features. A new byte, m7, was also added. */
@@ -1905,13 +1940,19 @@
if (CheckSavegameVersion(44)) {
Vehicle *v;
/* If we remove a station while cargo from it is still enroute, payment calculation will assume
- * 0, 0 to be the origin of the cargo, resulting in very high payments usually. v->cargo_source_xy
+ * 0, 0 to be the source of the cargo, resulting in very high payments usually. v->source_xy
* stores the coordinates, preserving them even if the station is removed. However, if a game is loaded
- * where this situation exists, the cargo-source information is lost. in this case, we set the origin
+ * where this situation exists, the cargo-source information is lost. in this case, we set the source
* to the current tile of the vehicle to prevent excessive profits
*/
FOR_ALL_VEHICLES(v) {
- v->cargo_source_xy = IsValidStationID(v->cargo_source) ? GetStation(v->cargo_source)->xy : v->tile;
+ const CargoList::List *packets = v->cargo.Packets();
+ for (CargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) {
+ CargoPacket *cp = *it;
+ cp->source_xy = IsValidStationID(cp->source) ? GetStation(cp->source)->xy : v->tile;
+ cp->loaded_at_xy = cp->source_xy;
+ }
+ v->cargo.InvalidateCache();
}
/* Store position of the station where the goods come from, so there
@@ -1924,12 +1965,12 @@
for (CargoID c = 0; c < NUM_CARGO; c++) {
GoodsEntry *ge = &st->goods[c];
- /* In old versions, enroute_from used 0xFF as INVALID_STATION */
- if (CheckSavegameVersion(7) && ge->enroute_from == 0xFF) {
- ge->enroute_from = INVALID_STATION;
+ const CargoList::List *packets = ge->cargo.Packets();
+ for (CargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) {
+ CargoPacket *cp = *it;
+ cp->source_xy = IsValidStationID(cp->source) ? GetStation(cp->source)->xy : st->xy;
+ cp->loaded_at_xy = cp->source_xy;
}
-
- ge->enroute_from_xy = IsValidStationID(ge->enroute_from) ? GetStation(ge->enroute_from)->xy : st->xy;
}
}
}
@@ -1942,12 +1983,13 @@
* loading again, even if it didn't actually load anything, so now the
* amount of cargo that has been paid for is stored. */
FOR_ALL_VEHICLES(v) {
- if (HASBIT(v->vehicle_flags, 2)) {
- v->cargo_paid_for = v->cargo_count;
- CLRBIT(v->vehicle_flags, 2);
- } else {
- v->cargo_paid_for = 0;
+ const CargoList::List *packets = v->cargo.Packets();
+ for (CargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) {
+ CargoPacket *cp = *it;
+ cp->paid_for = HASBIT(v->vehicle_flags, 2);
}
+ CLRBIT(v->vehicle_flags, 2);
+ v->cargo.InvalidateCache();
}
}
@@ -2036,6 +2078,16 @@
}
}
+ if (CheckSavegameVersion(69)) {
+ /* In some old savegames a bit was cleared when it should not be cleared */
+ Vehicle *v;
+ FOR_ALL_VEHICLES(v) {
+ if (v->type == VEH_ROAD && (v->u.road.state == 250 || v->u.road.state == 251)) {
+ SETBIT(v->u.road.state, RVS_IS_STOPPING);
+ }
+ }
+ }
+
/* Recalculate */
Group *g;
FOR_ALL_GROUPS(g) {
--- a/src/openttd.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/openttd.h Tue Jun 26 23:40:58 2007 +0000
@@ -52,11 +52,14 @@
typedef uint16 EngineID;
typedef uint16 UnitID;
typedef uint16 StringID;
+#define INVALID_STRING_ID 0xFFFF
+
typedef EngineID *EngineList; ///< engine list type placeholder acceptable for C code (see helpers.cpp)
/* IDs used in Pools */
typedef uint16 VehicleID;
typedef uint16 StationID;
+static const StationID INVALID_STATION = 0xFFFF;
typedef uint16 RoadStopID;
typedef uint16 TownID;
typedef uint16 IndustryID;
@@ -67,6 +70,7 @@
typedef uint16 GroupID;
typedef uint16 EngineRenewID;
typedef uint16 DestinationID;
+typedef int64 Money;
/* DestinationID must be at least as large as every these below, because it can
* be any of them
@@ -189,6 +193,7 @@
TO_BUILDINGS,
TO_BRIDGES,
TO_STRUCTURES,
+ TO_LOADING,
};
/* Landscape types */
@@ -224,53 +229,53 @@
};
struct Prices {
- int32 station_value;
- int32 build_rail;
- int32 build_road;
- int32 build_signals;
- int32 build_bridge;
- int32 build_train_depot;
- int32 build_road_depot;
- int32 build_ship_depot;
- int32 build_tunnel;
- int32 train_station_track;
- int32 train_station_length;
- int32 build_airport;
- int32 build_bus_station;
- int32 build_truck_station;
- int32 build_dock;
- int32 build_railvehicle;
- int32 build_railwagon;
- int32 aircraft_base;
- int32 roadveh_base;
- int32 ship_base;
- int32 build_trees;
- int32 terraform;
- int32 clear_1;
- int32 purchase_land;
- int32 clear_2;
- int32 clear_3;
- int32 remove_trees;
- int32 remove_rail;
- int32 remove_signals;
- int32 clear_bridge;
- int32 remove_train_depot;
- int32 remove_road_depot;
- int32 remove_ship_depot;
- int32 clear_tunnel;
- int32 clear_water;
- int32 remove_rail_station;
- int32 remove_airport;
- int32 remove_bus_station;
- int32 remove_truck_station;
- int32 remove_dock;
- int32 remove_house;
- int32 remove_road;
- int32 running_rail[3];
- int32 aircraft_running;
- int32 roadveh_running;
- int32 ship_running;
- int32 build_industry;
+ Money station_value;
+ Money build_rail;
+ Money build_road;
+ Money build_signals;
+ Money build_bridge;
+ Money build_train_depot;
+ Money build_road_depot;
+ Money build_ship_depot;
+ Money build_tunnel;
+ Money train_station_track;
+ Money train_station_length;
+ Money build_airport;
+ Money build_bus_station;
+ Money build_truck_station;
+ Money build_dock;
+ Money build_railvehicle;
+ Money build_railwagon;
+ Money aircraft_base;
+ Money roadveh_base;
+ Money ship_base;
+ Money build_trees;
+ Money terraform;
+ Money clear_1;
+ Money purchase_land;
+ Money clear_2;
+ Money clear_3;
+ Money remove_trees;
+ Money remove_rail;
+ Money remove_signals;
+ Money clear_bridge;
+ Money remove_train_depot;
+ Money remove_road_depot;
+ Money remove_ship_depot;
+ Money clear_tunnel;
+ Money clear_water;
+ Money remove_rail_station;
+ Money remove_airport;
+ Money remove_bus_station;
+ Money remove_truck_station;
+ Money remove_dock;
+ Money remove_house;
+ Money remove_road;
+ Money running_rail[3];
+ Money aircraft_running;
+ Money roadveh_running;
+ Money ship_running;
+ Money build_industry;
};
#define GAME_DIFFICULTY_NUM 18
@@ -349,7 +354,7 @@
StringID str;
Owner owner;
Date build_date;
- uint32 dparam[2];
+ uint64 dparam[2];
};
struct ViewportSign {
@@ -358,10 +363,82 @@
byte width_1, width_2;
};
+/**
+ * Common return value for all commands. Wraps the cost and
+ * a possible error message/state together.
+ */
+class CommandCost {
+ Money cost; ///< The cost of this action
+ StringID message; ///< Warning message for when success is unset
+ bool success; ///< Whether the comment went fine up to this moment
+
+public:
+ /**
+ * Creates a command cost return with no cost and no error
+ */
+ CommandCost() : cost(0), message(INVALID_STRING_ID), success(true) {}
+
+ /**
+ * Creates a command return value the is failed with the given message
+ */
+ CommandCost(StringID msg) : cost(0), message(msg), success(false) {}
+
+ /**
+ * Creates a command return value with the given start cost
+ * @param cst the initial cost of this command
+ */
+ CommandCost(Money cst) : cost(cst), message(INVALID_STRING_ID), success(true) {}
+
+ /**
+ * Adds the cost of the given command return value to this cost.
+ * Also takes a possible error message when it is set.
+ * @param ret the command to add the cost of.
+ * @return this class.
+ */
+ CommandCost AddCost(CommandCost ret);
+
+ /**
+ * Adds the given cost to the cost of the command.
+ * @param cost the cost to add
+ * @return this class.
+ */
+ CommandCost AddCost(Money cost);
+
+ /**
+ * Multiplies the cost of the command by the given factor.
+ * @param cost factor to multiply the costs with
+ * @return this class
+ */
+ CommandCost MultiplyCost(int factor);
+
+ /**
+ * The costs as made up to this moment
+ * @return the costs
+ */
+ Money GetCost() const;
+
+ /**
+ * Sets the global error message *if* this class has one.
+ */
+ void SetGlobalErrorMessage() const;
+
+ /**
+ * Did this command succeed?
+ * @return true if and only if it succeeded
+ */
+ bool Succeeded() const;
+
+ /**
+ * Did this command fail?
+ * @return true if and only if it failed
+ */
+ bool Failed() const;
+};
+
typedef void DrawTileProc(TileInfo *ti);
typedef uint GetSlopeZProc(TileIndex tile, uint x, uint y);
-typedef int32 ClearTileProc(TileIndex tile, byte flags);
+typedef CommandCost ClearTileProc(TileIndex tile, byte flags);
typedef void GetAcceptedCargoProc(TileIndex tile, AcceptedCargo res);
typedef void GetTileDescProc(TileIndex tile, TileDesc *td);
/**
@@ -495,6 +572,7 @@
WC_GENERATE_PROGRESS_WINDOW,
WC_CONFIRM_POPUP_QUERY,
WC_TRANSPARENCY_TOOLBAR,
+ WC_VEHICLE_TIMETABLE,
};
@@ -588,8 +666,6 @@
VARDEF byte _savegame_sort_order;
-#define INVALID_STRING_ID 0xFFFF
-
enum {
MAX_SCREEN_WIDTH = 2048,
MAX_SCREEN_HEIGHT = 1200,
--- a/src/order.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/order.h Tue Jun 26 23:40:58 2007 +0000
@@ -86,7 +86,7 @@
/* If you change this, keep in mind that it is saved on 3 places:
* - Load_ORDR, all the global orders
* - Vehicle -> current_order
- * - REF_SHEDULE (all REFs are currently limited to 16 bits!!)
+ * - REF_ORDER (all REFs are currently limited to 16 bits!!)
*/
struct Order {
Order *next; ///< Pointer to next order. If NULL, end of list
@@ -100,6 +100,9 @@
CargoID refit_cargo; // Refit CargoID
byte refit_subtype; // Refit subtype
+ uint16 wait_time; ///< How long in ticks to wait at the destination.
+ uint16 travel_time; ///< How long in ticks the journey to this destination should take.
+
bool IsValid() const;
void Free();
void FreeChain();
@@ -197,6 +200,8 @@
order.index = 0; // avoid compiler warning
order.refit_cargo = CT_NO_REFIT;
order.refit_subtype = 0;
+ order.wait_time = 0;
+ order.travel_time = 0;
return order;
}
--- a/src/order_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/order_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -18,6 +18,7 @@
#include "saveload.h"
#include "vehicle_gui.h"
#include "cargotype.h"
+#include "strings.h"
/**
* Called if a new block is added to the order-pool
@@ -48,6 +49,8 @@
order.refit_cargo = CT_NO_REFIT;
order.refit_subtype = 0;
+ order.wait_time = 0;
+ order.travel_time = 0;
order.index = 0; // avoid compiler warning
// Sanity check
@@ -75,6 +78,8 @@
order.index = 0; // avoid compiler warning
order.refit_cargo = CT_NO_REFIT;
order.refit_subtype = 0;
+ order.wait_time = 0;
+ order.travel_time = 0;
return order;
}
@@ -85,8 +90,9 @@
*/
void InvalidateVehicleOrder(const Vehicle *v)
{
- InvalidateWindow(WC_VEHICLE_VIEW, v->index);
- InvalidateWindow(WC_VEHICLE_ORDERS, v->index);
+ InvalidateWindow(WC_VEHICLE_VIEW, v->index);
+ InvalidateWindow(WC_VEHICLE_ORDERS, v->index);
+ InvalidateWindow(WC_VEHICLE_TIMETABLE, v->index);
}
/**
@@ -127,6 +133,8 @@
order->next = NULL;
order->refit_cargo = CT_NO_REFIT;
order->refit_subtype = 0;
+ order->wait_time = 0;
+ order->travel_time = 0;
return order;
}
@@ -152,6 +160,9 @@
order->refit_cargo = data.refit_cargo;
order->refit_subtype = data.refit_subtype;
+
+ order->wait_time = data.wait_time;
+ order->travel_time = data.travel_time;
}
@@ -190,7 +201,7 @@
* only the first 8 bits used currently (bit 16 - 23) (max 255)
* @param p2 packed order to insert
*/
-int32 CmdInsertOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdInsertOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
VehicleID veh = GB(p1, 0, 16);
@@ -441,21 +452,21 @@
RebuildVehicleLists();
}
- return 0;
+ return CommandCost();
}
/** Declone an order-list
* @param *dst delete the orders of this vehicle
* @param flags execution flags
*/
-static int32 DecloneOrder(Vehicle *dst, uint32 flags)
+static CommandCost DecloneOrder(Vehicle *dst, uint32 flags)
{
if (flags & DC_EXEC) {
DeleteVehicleOrders(dst);
InvalidateVehicleOrder(dst);
RebuildVehicleLists();
}
- return 0;
+ return CommandCost();
}
/**
@@ -483,7 +494,7 @@
* @param p1 the ID of the vehicle
* @param p2 the order to delete (max 255)
*/
-int32 CmdDeleteOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDeleteOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v, *u;
VehicleID veh_id = p1;
@@ -554,7 +565,7 @@
RebuildVehicleLists();
}
- return 0;
+ return CommandCost();
}
/** Goto order of order-list.
@@ -563,7 +574,7 @@
* @param p1 The ID of the vehicle which order is skipped
* @param p2 the selected order to which we want to skip
*/
-int32 CmdSkipToOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSkipToOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
VehicleID veh_id = p1;
@@ -595,7 +606,7 @@
if (v->type == VEH_AIRCRAFT) InvalidateWindowClasses(WC_AIRCRAFT_LIST);
if (v->type == VEH_SHIP) InvalidateWindowClasses(WC_SHIPS_LIST);
- return 0;
+ return CommandCost();
}
/**
@@ -608,7 +619,7 @@
* @note The target order will move one place down in the orderlist
* if you move the order upwards else it'll move it one place down
*/
-int32 CmdMoveOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMoveOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
VehicleID veh = p1;
VehicleOrderID moving_order = GB(p2, 0, 16);
@@ -681,7 +692,7 @@
RebuildVehicleLists();
}
- return 0;
+ return CommandCost();
}
/** Modify an order in the orderlist of a vehicle.
@@ -694,7 +705,7 @@
* only the first 8 bits used currently (bit 16 - 23) (max 255)
* @param p2 mode to change the order to (always set)
*/
-int32 CmdModifyOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdModifyOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
Order *order;
@@ -763,7 +774,7 @@
}
}
- return 0;
+ return CommandCost();
}
/** Clone/share/copy an order-list of an other vehicle.
@@ -774,7 +785,7 @@
* - p1 = (bit 16-31) - source vehicle to clone orders from, if any (none for CO_UNSHARE)
* @param p2 mode of cloning: CO_SHARE, CO_COPY, or CO_UNSHARE
*/
-int32 CmdCloneOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdCloneOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *dst;
VehicleID veh_src = GB(p1, 16, 16);
@@ -896,7 +907,7 @@
default: return CMD_ERROR;
}
- return 0;
+ return CommandCost();
}
/** Add/remove refit orders from an order
@@ -908,7 +919,7 @@
* - bit 8-15 Cargo subtype
* - bit 16-23 number of order to modify
*/
-int32 CmdOrderRefit(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdOrderRefit(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
const Vehicle *v;
Order *order;
@@ -945,7 +956,7 @@
}
}
- return 0;
+ return CommandCost();
}
/**
@@ -964,7 +975,8 @@
if (!IsCustomName(v->string_id)) {
bak->name[0] = '\0';
} else {
- GetName(bak->name, v->string_id & 0x7FF, lastof(bak->name));
+ SetDParam(0, v->index);
+ GetString(bak->name, STR_VEHICLE_NAME, lastof(bak->name));
}
/* If we have shared orders, store it on a special way */
@@ -1039,7 +1051,7 @@
* If we do want to backup/restore it, just add UnitID uid to BackuppedOrders, and
* restore it as parameter 'y' (ugly hack I know) for example. "v->unitnumber = y;"
*/
-int32 CmdRestoreOrderIndex(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRestoreOrderIndex(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
VehicleOrderID cur_ord = GB(p2, 0, 16);
@@ -1058,7 +1070,7 @@
v->service_interval = serv_int;
}
- return 0;
+ return CommandCost();
}
@@ -1315,8 +1327,10 @@
SLE_VAR(Order, flags, SLE_UINT8),
SLE_VAR(Order, dest, SLE_UINT16),
SLE_REF(Order, next, REF_ORDER),
- SLE_CONDVAR(Order, refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION),
- SLE_CONDVAR(Order, refit_subtype, SLE_UINT8, 36, SL_MAX_VERSION),
+ SLE_CONDVAR(Order, refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION),
+ SLE_CONDVAR(Order, refit_subtype, SLE_UINT8, 36, SL_MAX_VERSION),
+ SLE_CONDVAR(Order, wait_time, SLE_UINT16, 67, SL_MAX_VERSION),
+ SLE_CONDVAR(Order, travel_time, SLE_UINT16, 67, SL_MAX_VERSION),
/* Leftover from the minor savegame version stuff
* We will never use those free bytes, but we have to keep this line to allow loading of old savegames */
--- a/src/order_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/order_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -24,11 +24,13 @@
#include "train.h"
#include "water_map.h"
#include "vehicle_gui.h"
+#include "timetable.h"
#include "cargotype.h"
enum OrderWindowWidgets {
ORDER_WIDGET_CLOSEBOX = 0,
ORDER_WIDGET_CAPTION,
+ ORDER_WIDGET_TIMETABLE_VIEW,
ORDER_WIDGET_ORDER_LIST,
ORDER_WIDGET_SCROLLBAR,
ORDER_WIDGET_SKIP,
@@ -174,8 +176,7 @@
}
}
- SetDParam(0, v->string_id);
- SetDParam(1, v->unitnumber);
+ SetDParam(0, v->index);
DrawWindowWidgets(w);
y = 15;
@@ -540,6 +541,13 @@
assert(w->widget[ORDER_WIDGET_REFIT].bottom == w->widget[ORDER_WIDGET_UNLOAD].bottom);
assert(w->widget[ORDER_WIDGET_REFIT].display_flags == w->widget[ORDER_WIDGET_UNLOAD].display_flags);
}
+
+ if (_patches.timetabling) {
+ w->widget[ORDER_WIDGET_CAPTION].right -= 61;
+ } else {
+ HideWindowWidget(w, ORDER_WIDGET_TIMETABLE_VIEW);
+ }
+
break;
case WE_PAINT:
@@ -623,6 +631,11 @@
case ORDER_WIDGET_TRANSFER:
OrderClick_Transfer(w, v);
break;
+
+ case ORDER_WIDGET_TIMETABLE_VIEW:
+ ShowTimetableWindow(v);
+ break;
+
case ORDER_WIDGET_SHARED_ORDER_LIST:
ShowVehicleListWindow(v);
break;
@@ -733,6 +746,7 @@
static const Widget _orders_train_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX
{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 398, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION
+ { WWT_PUSHTXTBTN, RESIZE_LR, 14, 338, 398, 0, 13, STR_TIMETABLE_VIEW, STR_TIMETABLE_VIEW_TOOLTIP}, // ORDER_WIDGET_TIMETABLE_VIEW
{ WWT_PANEL, RESIZE_RB, 14, 0, 386, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST
@@ -769,6 +783,7 @@
static const Widget _orders_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX
{ WWT_CAPTION, RESIZE_RIGHT, 14, 11, 409, 0, 13, STR_8829_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION
+ { WWT_PUSHTXTBTN, RESIZE_LR, 14, 349, 409, 0, 13, STR_TIMETABLE_VIEW, STR_TIMETABLE_VIEW_TOOLTIP}, // ORDER_WIDGET_TIMETABLE_VIEW
{ WWT_PANEL, RESIZE_RB, 14, 0, 397, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST
@@ -803,27 +818,28 @@
* Widget definition for competitor orders
*/
static const Widget _other_orders_widgets[] = {
- { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX
- { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 331, 0, 13, STR_A00B_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION
-
- { WWT_PANEL, RESIZE_RB, 14, 0, 319, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST
-
- { WWT_SCROLLBAR, RESIZE_LRB, 14, 320, 331, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // ORDER_WIDGET_SCROLLBAR
+ { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // ORDER_WIDGET_CLOSEBOX
+ { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 331, 0, 13, STR_A00B_ORDERS, STR_018C_WINDOW_TITLE_DRAG_THIS}, // ORDER_WIDGET_CAPTION
+ { WWT_PUSHTXTBTN, RESIZE_LR, 14, 271, 331, 0, 13, STR_TIMETABLE_VIEW, STR_TIMETABLE_VIEW_TOOLTIP}, // ORDER_WIDGET_TIMETABLE_VIEW
- { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_SKIP
- { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_DELETE
- { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_NON_STOP
- { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_GOTO
- { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_FULL_LOAD
- { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_UNLOAD
- { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_REFIT
- { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_TRANSFER
+ { WWT_PANEL, RESIZE_RB, 14, 0, 319, 14, 75, 0x0, STR_8852_ORDERS_LIST_CLICK_ON_ORDER}, // ORDER_WIDGET_ORDER_LIST
- { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_SHARED_ORDER_LIST
+ { WWT_SCROLLBAR, RESIZE_LRB, 14, 320, 331, 14, 75, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, // ORDER_WIDGET_SCROLLBAR
- { WWT_PANEL, RESIZE_RTB, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_RESIZE_BAR
+ { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_SKIP
+ { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_DELETE
+ { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_NON_STOP
+ { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_GOTO
+ { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_FULL_LOAD
+ { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_UNLOAD
+ { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_REFIT
+ { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_TRANSFER
- { WWT_RESIZEBOX, RESIZE_LRTB, 14, 320, 331, 76, 87, 0x0, STR_RESIZE_BUTTON}, // ORDER_WIDGET_RESIZE
+ { WWT_EMPTY, RESIZE_NONE, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_SHARED_ORDER_LIST
+
+ { WWT_PANEL, RESIZE_RTB, 14, 0, 319, 76, 87, 0x0, STR_NULL}, // ORDER_WIDGET_RESIZE_BAR
+
+ { WWT_RESIZEBOX, RESIZE_LRTB, 14, 320, 331, 76, 87, 0x0, STR_RESIZE_BUTTON}, // ORDER_WIDGET_RESIZE
{ WIDGETS_END},
};
--- a/src/os/macosx/splash.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/os/macosx/splash.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -128,7 +128,7 @@
_cur_palette[0xff].b = 0;
_pal_first_dirty = 0;
- _pal_last_dirty = 0xff;
+ _pal_count_dirty = 255;
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
fclose(f);
--- a/src/os2.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/os2.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -12,6 +12,7 @@
#include "functions.h"
#include "macros.h"
#include "fileio.h"
+#include "fios.h" // opendir/readdir/closedir
#include <dirent.h>
#include <unistd.h>
@@ -124,7 +125,7 @@
return ent->d_name[0] == '.';
}
-void ShowInfo(const unsigned char *str)
+void ShowInfo(const char *str)
{
HAB hab;
HMQ hmq;
@@ -134,14 +135,14 @@
hmq = WinCreateMsgQueue((hab = WinInitialize(0)), 0);
// display the box
- rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, str, (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_INFORMATION);
+ rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, (const unsigned char *)str, (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_INFORMATION);
// terminate PM env.
WinDestroyMsgQueue(hmq);
WinTerminate(hab);
}
-void ShowOSErrorBox(const unsigned char *buf)
+void ShowOSErrorBox(const char *buf)
{
HAB hab;
HMQ hmq;
@@ -151,7 +152,7 @@
hmq = WinCreateMsgQueue((hab = WinInitialize(0)), 0);
// display the box
- rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, buf, (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_ERROR);
+ rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, (const unsigned char *)buf, (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_ERROR);
// terminate PM env.
WinDestroyMsgQueue(hmq);
--- a/src/pathfind.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/pathfind.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -254,37 +254,13 @@
48, 56, 56, 58, 56, 60, 60, 62,
};
-static void TPFMode1(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction)
-{
- uint bits;
- int i;
- RememberData rd;
- TileIndex tile_org = tile;
+static void TPFMode1(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction);
- if (IsTileType(tile, MP_TUNNELBRIDGE)) {
- if (IsTunnel(tile)) {
- if (GetTunnelDirection(tile) != direction ||
- GetTunnelTransportType(tile) != tpf->tracktype) {
- return;
- }
- tile = SkipToEndOfTunnel(tpf, tile, direction);
- } else {
- TileIndex tile_end;
- if (GetBridgeRampDirection(tile) != direction ||
- GetBridgeTransportType(tile) != tpf->tracktype) {
- return;
- }
- //fprintf(stderr, "%s: Planning over bridge\n", __func__);
- // TODO doesn't work - WHAT doesn't work?
- TPFSetTileBit(tpf, tile, 14);
- tile_end = GetOtherBridgeEnd(tile);
- tpf->rd.cur_length += DistanceManhattan(tile, tile_end);
- tile = tile_end;
- TPFSetTileBit(tpf, tile, 14);
- }
- }
- tile += TileOffsByDiagDir(direction);
-
+/** Most code of the "Normal" case of TPF Mode 1; for signals special tricks
+ * have to be done, but those happen in TPFMode1; this is just to prevent
+ * gotos ;). */
+static inline void TPFMode1_NormalCase(TrackPathFinder* tpf, TileIndex tile, TileIndex tile_org, DiagDirection direction)
+{
/* Check in case of rail if the owner is the same */
if (tpf->tracktype == TRANSPORT_RAIL) {
/* don't enter train depot from the back */
@@ -322,7 +298,7 @@
tpf->rd.cur_length++;
- bits = GetTileTrackStatus(tile, tpf->tracktype, tpf->sub_type);
+ uint bits = GetTileTrackStatus(tile, tpf->tracktype, tpf->sub_type);
if ((byte)bits != tpf->var2) {
bits &= _tpfmode1_and[direction];
@@ -333,11 +309,11 @@
if (bits != 0) {
if (!tpf->disable_tile_hash || (tpf->rd.cur_length <= 64 && (KILL_FIRST_BIT(bits) == 0 || ++tpf->rd.depth <= 7))) {
do {
- i = FIND_FIRST_BIT(bits);
+ int i = FIND_FIRST_BIT(bits);
bits = KILL_FIRST_BIT(bits);
tpf->the_dir = (Trackdir)((_otherdir_mask[direction] & (byte)(1 << i)) ? (i + 8) : i);
- rd = tpf->rd;
+ RememberData rd = tpf->rd;
if (TPFSetTileBit(tpf, tile, tpf->the_dir) &&
!tpf->enum_proc(tile, tpf->userdata, tpf->the_dir, tpf->rd.cur_length, &tpf->rd.pft_var6) ) {
@@ -347,6 +323,45 @@
} while (bits != 0);
}
}
+}
+
+static void TPFMode1(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction)
+{
+ TileIndex tile_org = tile;
+
+ if (IsTileType(tile, MP_TUNNELBRIDGE)) {
+ if (IsTunnel(tile)) {
+ if (GetTunnelTransportType(tile) != tpf->tracktype) {
+ return;
+ }
+ /* Only skip through the tunnel if heading inwards. We can
+ * be headed outwards if our starting position was in a
+ * tunnel and we're pathfinding backwards */
+ if (GetTunnelDirection(tile) == direction) {
+ tile = SkipToEndOfTunnel(tpf, tile, direction);
+ } else if (GetTunnelDirection(tile) != ReverseDiagDir(direction)) {
+ /* We don't support moving through the sides of a tunnel
+ * entrance :-) */
+ return;
+ }
+ } else {
+ TileIndex tile_end;
+ if (GetBridgeRampDirection(tile) != direction ||
+ GetBridgeTransportType(tile) != tpf->tracktype) {
+ return;
+ }
+ //fprintf(stderr, "%s: Planning over bridge\n", __func__);
+ // TODO doesn't work - WHAT doesn't work?
+ TPFSetTileBit(tpf, tile, 14);
+ tile_end = GetOtherBridgeEnd(tile);
+ tpf->rd.cur_length += DistanceManhattan(tile, tile_end);
+ tile = tile_end;
+ TPFSetTileBit(tpf, tile, 14);
+ }
+ }
+ tile += TileOffsByDiagDir(direction);
+
+ TPFMode1_NormalCase(tpf, tile, tile_org, direction);
/* the next is only used when signals are checked.
* seems to go in 2 directions simultaneously */
@@ -363,7 +378,7 @@
direction = ReverseDiagDir(direction);
tile += TileOffsByDiagDir(direction);
- bits = GetTileTrackStatus(tile, tpf->tracktype, tpf->sub_type);
+ uint bits = GetTileTrackStatus(tile, tpf->tracktype, tpf->sub_type);
bits |= (bits >> 8);
if ( (byte)bits != tpf->var2) {
@@ -375,11 +390,11 @@
return;
do {
- i = FIND_FIRST_BIT(bits);
+ uint i = FIND_FIRST_BIT(bits);
bits = KILL_FIRST_BIT(bits);
tpf->the_dir = (Trackdir)((_otherdir_mask[direction] & (byte)(1 << i)) ? (i + 8) : i);
- rd = tpf->rd;
+ RememberData rd = tpf->rd;
if (TPFSetTileBit(tpf, tile, tpf->the_dir) &&
!tpf->enum_proc(tile, tpf->userdata, tpf->the_dir, tpf->rd.cur_length, &tpf->rd.pft_var6) ) {
TPFMode1(tpf, tile, _tpf_new_direction[tpf->the_dir]);
--- a/src/player.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/player.h Tue Jun 26 23:40:58 2007 +0000
@@ -12,11 +12,11 @@
#include "livery.h"
struct PlayerEconomyEntry {
- int32 income;
- int32 expenses;
+ Money income;
+ Money expenses;
int32 delivered_cargo;
int32 performance_history; ///< player score (scale 0-1000)
- int64 company_value;
+ Money company_value;
};
/* The "steps" in loan size, in British Pounds! */
@@ -35,9 +35,8 @@
PlayerFace face;
- int32 player_money;
- int32 current_loan;
- int64 money64; ///< internal 64-bit version of the money. the 32-bit field will be clamped to plus minus 2 billion
+ Money player_money;
+ Money current_loan;
byte player_color;
Livery livery[LS_END];
@@ -60,13 +59,13 @@
byte quarters_of_bankrupcy;
byte bankrupt_asked; ///< which players were asked about buying it?
int16 bankrupt_timeout;
- int32 bankrupt_value;
+ Money bankrupt_value;
bool is_active;
bool is_ai;
bool is_noai; ///< This is a NoAI player (for loading old savegames properly). Part of the NoAI 'hack' to retain savegame compatability with trunk.
- int64 yearly_expenses[3][13];
+ Money yearly_expenses[3][13];
PlayerEconomyEntry cur_economy;
PlayerEconomyEntry old_economy[24];
EngineRenewList engine_renew_list; ///< Defined later
@@ -81,9 +80,8 @@
void ChangeOwnershipOfPlayerItems(PlayerID old_player, PlayerID new_player);
void GetNameOfOwner(Owner owner, TileIndex tile);
-int64 CalculateCompanyValue(const Player* p);
+Money CalculateCompanyValue(const Player* p);
void InvalidatePlayerWindows(const Player* p);
-void UpdatePlayerMoney32(Player *p);
void SetLocalPlayer(PlayerID new_player);
#define FOR_ALL_PLAYERS(p) for (p = _players; p != endof(_players); p++)
@@ -205,7 +203,7 @@
* @param flags The calling command flags.
* @return 0 on success, CMD_ERROR on failure.
*/
-static inline int32 AddEngineReplacementForPlayer(Player *p, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags) { return AddEngineReplacement(&p->engine_renew_list, old_engine, new_engine, group, flags); }
+static inline CommandCost AddEngineReplacementForPlayer(Player *p, EngineID old_engine, EngineID new_engine, GroupID group, uint32 flags) { return AddEngineReplacement(&p->engine_renew_list, old_engine, new_engine, group, flags); }
/**
* Remove an engine replacement for the player.
@@ -214,7 +212,7 @@
* @param flags The calling command flags.
* @return 0 on success, CMD_ERROR on failure.
*/
-static inline int32 RemoveEngineReplacementForPlayer(Player *p, EngineID engine, GroupID group, uint32 flags) {return RemoveEngineReplacement(&p->engine_renew_list, engine, group, flags); }
+static inline CommandCost RemoveEngineReplacementForPlayer(Player *p, EngineID engine, GroupID group, uint32 flags) {return RemoveEngineReplacement(&p->engine_renew_list, engine, group, flags); }
/**
* Reset the livery schemes to the player's primary colour.
--- a/src/player_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/player_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -31,8 +31,8 @@
static void DrawPlayerEconomyStats(const Player *p, byte mode)
{
int x, y, i, j, year;
- const int64 (*tbl)[13];
- int64 sum, cost;
+ const Money (*tbl)[13];
+ Money sum, cost;
StringID str;
if (!(mode & 1)) { // normal sized economics window (mode&1) is minimized status
@@ -60,14 +60,14 @@
str = STR_701E;
if (cost < 0) { cost = -cost; str++; }
- SetDParam64(0, cost);
+ SetDParam(0, cost);
DrawStringRightAligned(x, 27 + i * 10, str, 0);
}
}
str = STR_701E;
if (sum < 0) { sum = -sum; str++; }
- SetDParam64(0, sum);
+ SetDParam(0, sum);
DrawStringRightAligned(x, 27 + 13 * 10 + 2, str, 0);
GfxFillRect(x - 75, 27 + 10 * 13, x, 27 + 10 * 13, 215);
@@ -80,27 +80,27 @@
y = 171;
/* draw max loan aligned to loan below (y += 10) */
- SetDParam64(0, (uint64)_economy.max_loan);
+ SetDParam(0, _economy.max_loan);
DrawString(202, y + 10, STR_MAX_LOAN, 0);
} else {
y = 15;
}
DrawString(2, y, STR_7026_BANK_BALANCE, 0);
- SetDParam64(0, p->money64);
+ SetDParam(0, p->player_money);
DrawStringRightAligned(182, y, STR_7028, 0);
y += 10;
DrawString(2, y, STR_7027_LOAN, 0);
- SetDParam64(0, p->current_loan);
+ SetDParam(0, p->current_loan);
DrawStringRightAligned(182, y, STR_7028, 0);
y += 12;
GfxFillRect(182 - 75, y - 2, 182, y - 2, 215);
- SetDParam64(0, p->money64 - p->current_loan);
+ SetDParam(0, p->player_money - p->current_loan);
DrawStringRightAligned(182, y, STR_7028, 0);
}
@@ -165,10 +165,9 @@
SetWindowWidgetDisabledState(w, 7, p->current_loan == 0);
}
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, GetPlayerNameString(player, 3));
- SetDParam(4, LOAN_INTERVAL);
+ SetDParam(0, p->index);
+ SetDParam(1, p->index);
+ SetDParam(2, LOAN_INTERVAL);
DrawWindowWidgets(w);
DrawPlayerEconomyStats(p, (byte)WP(w, def_d).data_1);
@@ -708,9 +707,8 @@
if (amt != 0) {
num++;
- SetDParam(num * 3 + 0, amt * 25);
- SetDParam(num * 3 + 1, p2->name_1);
- SetDParam(num * 3 + 2, p2->name_2);
+ SetDParam(num * 2 + 0, amt * 25);
+ SetDParam(num * 2 + 1, p2->index);
if (num != 0) break;
}
@@ -757,9 +755,8 @@
}
}
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, GetPlayerNameString((PlayerID)w->window_number, 3));
+ SetDParam(0, p->index);
+ SetDParam(1, p->index);
DrawWindowWidgets(w);
@@ -774,11 +771,10 @@
DrawPlayerFace(p->face, p->player_color, 2, 16);
- SetDParam(0, p->president_name_1);
- SetDParam(1, p->president_name_2);
+ SetDParam(0, p->index);
DrawStringMultiCenter(48, 141, STR_7037_PRESIDENT, 94);
- SetDParam64(0, CalculateCompanyValue(p));
+ SetDParam(0, CalculateCompanyValue(p));
DrawString(110, 114, STR_7076_COMPANY_VALUE, 0);
DrawCompanyOwnerText(p);
@@ -812,16 +808,16 @@
case PCW_WIDGET_PRESIDENT_NAME: {
const Player *p = GetPlayer((PlayerID)w->window_number);
WP(w, def_d).byte_1 = 0;
- SetDParam(0, p->president_name_2);
- ShowQueryString(p->president_name_1, STR_700B_PRESIDENT_S_NAME, 31, 94, w, CS_ALPHANUMERAL);
+ SetDParam(0, p->index);
+ ShowQueryString(STR_PLAYER_NAME, STR_700B_PRESIDENT_S_NAME, 31, 94, w, CS_ALPHANUMERAL);
break;
}
case PCW_WIDGET_COMPANY_NAME: {
Player *p = GetPlayer((PlayerID)w->window_number);
WP(w, def_d).byte_1 = 1;
- SetDParam(0, p->name_2);
- ShowQueryString(p->name_1, STR_700A_COMPANY_NAME, 31, 150, w, CS_ALPHANUMERAL);
+ SetDParam(0, p->index);
+ ShowQueryString(STR_COMPANY_NAME, STR_700A_COMPANY_NAME, 31, 150, w, CS_ALPHANUMERAL);
break;
}
@@ -939,15 +935,13 @@
switch (e->event) {
case WE_PAINT: {
Player *p = GetPlayer((PlayerID)w->window_number);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
+ SetDParam(0, p->index);
DrawWindowWidgets(w);
DrawPlayerFace(p->face, p->player_color, 2, 16);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, p->bankrupt_value);
+ SetDParam(0, p->index);
+ SetDParam(1, p->bankrupt_value);
DrawStringMultiCenter(214, 65, STR_705B_WE_ARE_LOOKING_FOR_A_TRANSPORT, 238);
break;
}
@@ -1028,16 +1022,13 @@
/* We need to get performance from last year because the image is shown
* at the start of the new year when these things have already been copied */
if (WP(w, highscore_d).background_img == SPR_TYCOON_IMG2_BEGIN) { // Tycoon of the century \o/
- SetDParam(0, p->president_name_1);
- SetDParam(1, p->president_name_2);
- SetDParam(2, p->name_1);
- SetDParam(3, p->name_2);
- SetDParam(4, EndGameGetPerformanceTitleFromValue(p->old_economy[0].performance_history));
+ SetDParam(0, p->index);
+ SetDParam(1, p->index);
+ SetDParam(2, EndGameGetPerformanceTitleFromValue(p->old_economy[0].performance_history));
DrawStringMultiCenter(x + (640 / 2), y + 107, STR_021C_OF_ACHIEVES_STATUS, 640);
} else {
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, EndGameGetPerformanceTitleFromValue(p->old_economy[0].performance_history));
+ SetDParam(0, p->index);
+ SetDParam(1, EndGameGetPerformanceTitleFromValue(p->old_economy[0].performance_history));
DrawStringMultiCenter(x + (640 / 2), y + 157, STR_021B_ACHIEVES_STATUS, 640);
}
} break;
--- a/src/players.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/players.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -173,12 +173,12 @@
InvalidateWindow(WC_FINANCES, pid);
}
-bool CheckPlayerHasMoney(int32 cost)
+bool CheckPlayerHasMoney(CommandCost cost)
{
- if (cost > 0) {
+ if (cost.GetCost() > 0) {
PlayerID pid = _current_player;
- if (IsValidPlayer(pid) && cost > GetPlayer(pid)->player_money) {
- SetDParam(0, cost);
+ if (IsValidPlayer(pid) && cost.GetCost() > GetPlayer(pid)->player_money) {
+ SetDParam(0, cost.GetCost());
_error_message = STR_0003_NOT_ENOUGH_CASH_REQUIRES;
return false;
}
@@ -186,58 +186,54 @@
return true;
}
-static void SubtractMoneyFromAnyPlayer(Player *p, int32 cost)
+static void SubtractMoneyFromAnyPlayer(Player *p, CommandCost cost)
{
- p->money64 -= cost;
- UpdatePlayerMoney32(p);
+ CommandCost tmp(p->player_money);
+ tmp.AddCost(-cost.GetCost());
+ p->player_money = tmp.GetCost();
- p->yearly_expenses[0][_yearly_expenses_type] += cost;
+ tmp = CommandCost(p->yearly_expenses[0][_yearly_expenses_type]);
+ tmp.AddCost(cost);
+ p->yearly_expenses[0][_yearly_expenses_type] = tmp.GetCost();
if (HASBIT(1 << EXPENSES_TRAIN_INC |
1 << EXPENSES_ROADVEH_INC |
1 << EXPENSES_AIRCRAFT_INC |
1 << EXPENSES_SHIP_INC, _yearly_expenses_type)) {
- p->cur_economy.income -= cost;
+ tmp = CommandCost(p->cur_economy.income);
+ tmp.AddCost(-cost.GetCost());
+ p->cur_economy.income = tmp.GetCost();
} else if (HASBIT(1 << EXPENSES_TRAIN_RUN |
1 << EXPENSES_ROADVEH_RUN |
1 << EXPENSES_AIRCRAFT_RUN |
1 << EXPENSES_SHIP_RUN |
1 << EXPENSES_PROPERTY |
1 << EXPENSES_LOAN_INT, _yearly_expenses_type)) {
- p->cur_economy.expenses -= cost;
+ tmp = CommandCost(p->cur_economy.expenses);
+ tmp.AddCost(-cost.GetCost());
+ p->cur_economy.expenses = tmp.GetCost();
}
InvalidatePlayerWindows(p);
}
-void SubtractMoneyFromPlayer(int32 cost)
+void SubtractMoneyFromPlayer(CommandCost cost)
{
PlayerID pid = _current_player;
if (IsValidPlayer(pid)) SubtractMoneyFromAnyPlayer(GetPlayer(pid), cost);
}
-void SubtractMoneyFromPlayerFract(PlayerID player, int32 cost)
+void SubtractMoneyFromPlayerFract(PlayerID player, CommandCost cst)
{
Player *p = GetPlayer(player);
byte m = p->player_money_fraction;
+ Money cost = cst.GetCost();
p->player_money_fraction = m - (byte)cost;
cost >>= 8;
if (p->player_money_fraction > m) cost++;
- if (cost != 0) SubtractMoneyFromAnyPlayer(p, cost);
-}
-
-/** the player_money field is kept as it is, but money64 contains the actual amount of money. */
-void UpdatePlayerMoney32(Player *p)
-{
- if (p->money64 < -2000000000) {
- p->player_money = -2000000000;
- } else if (p->money64 > 2000000000) {
- p->player_money = 2000000000;
- } else {
- p->player_money = (int32)p->money64;
- }
+ if (cost != 0) SubtractMoneyFromAnyPlayer(p, CommandCost(cost));
}
void GetNameOfOwner(Owner owner, TileIndex tile)
@@ -250,8 +246,8 @@
} else {
const Player* p = GetPlayer(owner);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
+ SetDParam(0, STR_COMPANY_NAME);
+ SetDParam(1, p->index);
}
} else {
const Town* t = ClosestTownFromTile(tile, (uint)-1);
@@ -418,15 +414,15 @@
p->president_name_2 = Random();
p->president_name_1 = SPECSTR_PRESIDENT_NAME;
- SetDParam(0, p->president_name_2);
- GetString(buffer, p->president_name_1, lastof(buffer));
+ SetDParam(0, p->index);
+ GetString(buffer, STR_PLAYER_NAME, lastof(buffer));
if (strlen(buffer) >= 32 || GetStringBoundingBox(buffer).width >= 94)
continue;
FOR_ALL_PLAYERS(pp) {
if (pp->is_active && p != pp) {
- SetDParam(0, pp->president_name_2);
- GetString(buffer2, pp->president_name_1, lastof(buffer2));
+ SetDParam(0, pp->index);
+ GetString(buffer2, STR_PLAYER_NAME, lastof(buffer2));
if (strcmp(buffer2, buffer) == 0)
goto restart;
}
@@ -474,7 +470,7 @@
p->name_1 = STR_SV_UNNAMED;
p->is_active = true;
- p->money64 = p->player_money = p->current_loan = 100000;
+ p->player_money = p->current_loan = 100000;
p->is_ai = is_ai;
p->share_owners[0] = p->share_owners[1] = p->share_owners[2] = p->share_owners[3] = PLAYER_SPECTATOR;
@@ -558,16 +554,6 @@
MaybeStartNewPlayer();
}
-/** index is the next parameter in _decode_parameters to set up */
-StringID GetPlayerNameString(PlayerID player, uint index)
-{
- if (IsHumanPlayer(player) && IsValidPlayer(player)) {
- SetDParam(index, player+1);
- return STR_7002_PLAYER;
- }
- return STR_EMPTY;
-}
-
extern void ShowPlayerFinances(PlayerID player);
void PlayersYearlyLoop()
@@ -675,7 +661,7 @@
* if p1 = 5, then
* - p2 = enable renew_keep_length
*/
-int32 CmdSetAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Player *p;
if (!IsValidPlayer(_current_player)) return CMD_ERROR;
@@ -722,7 +708,7 @@
EngineID old_engine_type = GB(p2, 0, 16);
EngineID new_engine_type = GB(p2, 16, 16);
GroupID id_g = GB(p1, 16, 16);
- int32 cost;
+ CommandCost cost;
if (!IsValidGroupID(id_g) && !IsDefaultGroupID(id_g)) return CMD_ERROR;
if (new_engine_type != INVALID_ENGINE) {
@@ -781,7 +767,7 @@
break;
}
- return 0;
+ return CommandCost();
}
/** Control the players: add, delete, etc.
@@ -804,7 +790,7 @@
* @arg - network_server.c:838 DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND)@n
* @arg - network_client.c:536 DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_MAP) from where the map has been received
*/
-int32 CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (flags & DC_EXEC) _current_player = OWNER_NONE;
@@ -826,9 +812,9 @@
if (!_networking) return CMD_ERROR;
/* Has the network client a correct ClientID? */
- if (!(flags & DC_EXEC)) return 0;
+ if (!(flags & DC_EXEC)) return CommandCost();
#ifdef ENABLE_NETWORK
- if (cid >= MAX_CLIENT_INFO) return 0;
+ if (cid >= MAX_CLIENT_INFO) return CommandCost();
#endif /* ENABLE_NETWORK */
/* Delete multiplayer progress bar */
@@ -843,12 +829,10 @@
NetworkClientInfo *ci = &_network_client_info[cid];
ci->client_playas = PLAYER_SPECTATOR;
NetworkUpdateClientInfo(ci->client_index);
- } else
+ } else if (_local_player == PLAYER_SPECTATOR) {
+ _network_playas = PLAYER_SPECTATOR;
+ }
#endif /* ENABLE_NETWORK */
- {
- _network_playas = PLAYER_SPECTATOR;
- SetLocalPlayer(PLAYER_SPECTATOR);
- }
break;
}
@@ -902,7 +886,7 @@
} break;
case 1: /* Make a new AI player */
- if (!(flags & DC_EXEC)) return 0;
+ if (!(flags & DC_EXEC)) return CommandCost();
DoStartupNewPlayer(true);
break;
@@ -912,7 +896,7 @@
if (!IsValidPlayer((PlayerID)p2)) return CMD_ERROR;
- if (!(flags & DC_EXEC)) return 0;
+ if (!(flags & DC_EXEC)) return CommandCost();
p = GetPlayer((PlayerID)p2);
@@ -922,8 +906,7 @@
DeletePlayerWindows(p->index);
/* Show the bankrupt news */
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
+ SetDParam(0, p->index);
AddNewsItem( (StringID)(p->index | NB_BBANKRUPT), NEWS_FLAGS(NM_CALLBACK, 0, NT_COMPANY_INFO, DNC_BANKRUPCY),0,0);
/* Remove the company */
@@ -950,7 +933,7 @@
default: return CMD_ERROR;
}
- return 0;
+ return CommandCost();
}
static const StringID _endgame_perf_titles[] = {
@@ -1007,10 +990,8 @@
if (hs[i].score <= score) {
/* move all elements one down starting from the replaced one */
memmove(&hs[i + 1], &hs[i], sizeof(HighScore) * (lengthof(_highscore_table[0]) - i - 1));
- SetDParam(0, p->president_name_1);
- SetDParam(1, p->president_name_2);
- SetDParam(2, p->name_1);
- SetDParam(3, p->name_2);
+ SetDParam(0, p->index);
+ SetDParam(1, p->index);
GetString(hs[i].company, STR_HIGHSCORE_NAME, lastof(hs[i].company)); // get manager/company name string
hs[i].score = score;
hs[i].title = EndGameGetPerformanceTitleFromValue(score);
@@ -1052,10 +1033,8 @@
for (i = 0; i < lengthof(_highscore_table[LAST_HS_ITEM]) && i < count; i++) {
HighScore* hs = &_highscore_table[LAST_HS_ITEM][i];
- SetDParam(0, pl[i]->president_name_1);
- SetDParam(1, pl[i]->president_name_2);
- SetDParam(2, pl[i]->name_1);
- SetDParam(3, pl[i]->name_2);
+ SetDParam(0, pl[i]->index);
+ SetDParam(1, pl[i]->index);
GetString(hs->company, STR_HIGHSCORE_NAME, lastof(hs->company)); // get manager/company name string
hs->score = pl[i]->old_economy[0].performance_history;
hs->title = EndGameGetPerformanceTitleFromValue(hs->score);
@@ -1133,10 +1112,11 @@
SLE_VAR(Player, face, SLE_UINT32),
/* money was changed to a 64 bit field in savegame version 1. */
- SLE_CONDVAR(Player, money64, SLE_VAR_I64 | SLE_FILE_I32, 0, 0),
- SLE_CONDVAR(Player, money64, SLE_INT64, 1, SL_MAX_VERSION),
+ SLE_CONDVAR(Player, player_money, SLE_VAR_I64 | SLE_FILE_I32, 0, 0),
+ SLE_CONDVAR(Player, player_money, SLE_INT64, 1, SL_MAX_VERSION),
- SLE_VAR(Player, current_loan, SLE_INT32),
+ SLE_CONDVAR(Player, current_loan, SLE_VAR_I64 | SLE_FILE_I32, 0, 64),
+ SLE_CONDVAR(Player, current_loan, SLE_INT64, 65, SL_MAX_VERSION),
SLE_VAR(Player, player_color, SLE_UINT8),
SLE_VAR(Player, player_money_fraction, SLE_UINT8),
@@ -1158,7 +1138,8 @@
SLE_VAR(Player, quarters_of_bankrupcy, SLE_UINT8),
SLE_VAR(Player, bankrupt_asked, SLE_UINT8),
SLE_VAR(Player, bankrupt_timeout, SLE_INT16),
- SLE_VAR(Player, bankrupt_value, SLE_INT32),
+ SLE_CONDVAR(Player, bankrupt_value, SLE_VAR_I64 | SLE_FILE_I32, 0, 64),
+ SLE_CONDVAR(Player, bankrupt_value, SLE_INT64, 65, SL_MAX_VERSION),
/* yearly expenses was changed to 64-bit in savegame version 2. */
SLE_CONDARR(Player, yearly_expenses, SLE_FILE_I32 | SLE_VAR_I64, 3 * 13, 0, 1),
@@ -1186,11 +1167,11 @@
static const SaveLoad _player_economy_desc[] = {
/* these were changed to 64-bit in savegame format 2 */
- SLE_CONDVAR(PlayerEconomyEntry, income, SLE_INT32, 0, 1),
- SLE_CONDVAR(PlayerEconomyEntry, expenses, SLE_INT32, 0, 1),
+ SLE_CONDVAR(PlayerEconomyEntry, income, SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
+ SLE_CONDVAR(PlayerEconomyEntry, income, SLE_INT64, 2, SL_MAX_VERSION),
+ SLE_CONDVAR(PlayerEconomyEntry, expenses, SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
+ SLE_CONDVAR(PlayerEconomyEntry, expenses, SLE_INT64, 2, SL_MAX_VERSION),
SLE_CONDVAR(PlayerEconomyEntry, company_value, SLE_FILE_I32 | SLE_VAR_I64, 0, 1),
- SLE_CONDVAR(PlayerEconomyEntry, income, SLE_FILE_I64 | SLE_VAR_I32, 2, SL_MAX_VERSION),
- SLE_CONDVAR(PlayerEconomyEntry, expenses, SLE_FILE_I64 | SLE_VAR_I32, 2, SL_MAX_VERSION),
SLE_CONDVAR(PlayerEconomyEntry, company_value, SLE_INT64, 2, SL_MAX_VERSION),
SLE_VAR(PlayerEconomyEntry, delivered_cargo, SLE_INT32),
@@ -1307,7 +1288,6 @@
SaveLoad_PLYR(p);
_player_colors[index] = p->player_color;
p->is_noai = true;
- UpdatePlayerMoney32(p);
/* This is needed so an AI is attached to a loaded AI */
if (p->is_ai) AI_StartNewAI(p->index);
--- a/src/rail_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/rail_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -189,7 +189,7 @@
}
-static uint32 CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existing, TileIndex tile)
+static CommandCost CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits existing, TileIndex tile)
{
if (IsSteepSlope(tileh)) {
if (_patches.build_on_slopes && existing == 0) {
@@ -207,7 +207,7 @@
/* no special foundation */
if ((~_valid_tileh_slopes[0][tileh] & rail_bits) == 0) {
- return 0;
+ return CommandCost();
} else if (!_patches.build_on_slopes) {
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
}
@@ -216,7 +216,7 @@
(rail_bits == TRACK_BIT_X || rail_bits == TRACK_BIT_Y) &&
(tileh == SLOPE_W || tileh == SLOPE_S || tileh == SLOPE_E || tileh == SLOPE_N)
)) { // partly up
- return (existing != 0) ? 0 : _price.terraform;
+ return CommandCost((existing != 0) ? 0 : _price.terraform);
}
}
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
@@ -231,14 +231,14 @@
* @param p1 railtype of being built piece (normal, mono, maglev)
* @param p2 rail track to build
*/
-int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Slope tileh;
RailType railtype;
Track track;
TrackBits trackbit;
- int32 cost = 0;
- int32 ret;
+ CommandCost cost;
+ CommandCost ret;
if (!ValParamRailtype(p1) || !ValParamTrackOrientation((Track)p2)) return CMD_ERROR;
railtype = (RailType)p1;
@@ -263,14 +263,14 @@
ret = CheckRailSlope(tileh, trackbit, GetTrackBits(tile), tile);
if (CmdFailed(ret)) return ret;
- cost += ret;
+ cost.AddCost(ret);
/* If the rail types don't match, try to convert only if engines of
* the present rail type are powered on the new rail type. */
if (GetRailType(tile) != railtype && HasPowerOnRail(GetRailType(tile), railtype)) {
ret = DoCommand(tile, tile, railtype, flags, CMD_CONVERT_RAIL);
if (CmdFailed(ret)) return ret;
- cost += ret;
+ cost.AddCost(ret);
}
if (flags & DC_EXEC) {
@@ -330,11 +330,11 @@
default:
ret = CheckRailSlope(tileh, trackbit, TRACK_BIT_NONE, tile);
if (CmdFailed(ret)) return ret;
- cost += ret;
+ cost.AddCost(ret);
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) return ret;
- cost += ret;
+ cost.AddCost(ret);
if (flags & DC_EXEC) MakeRailNormal(tile, _current_player, trackbit, railtype);
break;
@@ -346,7 +346,7 @@
YapfNotifyTrackLayoutChange(tile, track);
}
- return cost + _price.build_rail;
+ return cost.AddCost(_price.build_rail);
}
/** Remove a single piece of track
@@ -355,11 +355,11 @@
* @param p1 unused
* @param p2 rail orientation
*/
-int32 CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Track track = (Track)p2;
TrackBits trackbit;
- int32 cost = _price.remove_rail;
+ CommandCost cost(_price.remove_rail);
bool crossing = false;
if (!ValParamTrackOrientation((Track)p2)) return CMD_ERROR;
@@ -397,7 +397,7 @@
/* Charge extra to remove signals on the track, if they are there */
if (HasSignalOnTrack(tile, track))
- cost += DoCommand(tile, track, 0, flags, CMD_REMOVE_SIGNALS);
+ cost.AddCost(DoCommand(tile, track, 0, flags, CMD_REMOVE_SIGNALS));
if (flags & DC_EXEC) {
present ^= trackbit;
@@ -444,7 +444,7 @@
};
-static int32 ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileIndex end)
+static CommandCost ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileIndex end)
{
int x = TileX(start);
int y = TileY(start);
@@ -492,7 +492,7 @@
return CMD_ERROR;
}
- return 0;
+ return CommandCost();
}
/** Build a stretch of railroad tracks.
@@ -504,9 +504,9 @@
* - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
* - p2 = (bit 7) - 0 = build, 1 = remove tracks
*/
-static int32 CmdRailTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+static CommandCost CmdRailTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 ret, total_cost = 0;
+ CommandCost ret, total_cost;
Track track = (Track)GB(p2, 4, 3);
Trackdir trackdir;
byte mode = HASBIT(p2, 7);
@@ -531,7 +531,7 @@
if ((_error_message != STR_1007_ALREADY_BUILT) && (mode == 0)) break;
_error_message = INVALID_STRING_ID;
} else {
- total_cost += ret;
+ total_cost.AddCost(ret);
}
if (tile == end_tile) break;
@@ -542,7 +542,7 @@
if (!IsDiagonalTrackdir(trackdir)) ToggleBitT(trackdir, 0);
}
- return (total_cost == 0) ? CMD_ERROR : total_cost;
+ return (total_cost.GetCost() == 0) ? CMD_ERROR : total_cost;
}
/** Build rail on a stretch of track.
@@ -556,7 +556,7 @@
* - p2 = (bit 7) - 0 = build, 1 = remove tracks
* @see CmdRailTrackHelper
*/
-int32 CmdBuildRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
return CmdRailTrackHelper(tile, flags, p1, CLRBIT(p2, 7));
}
@@ -572,7 +572,7 @@
* - p2 = (bit 7) - 0 = build, 1 = remove tracks
* @see CmdRailTrackHelper
*/
-int32 CmdRemoveRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
return CmdRailTrackHelper(tile, flags, p1, SETBIT(p2, 7));
}
@@ -586,10 +586,10 @@
* @todo When checking for the tile slope,
* distingush between "Flat land required" and "land sloped in wrong direction"
*/
-int32 CmdBuildTrainDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTrainDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Depot *d;
- int32 cost, ret;
+ CommandCost cost;
Slope tileh;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -617,9 +617,8 @@
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
}
- ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
- if (CmdFailed(ret)) return CMD_ERROR;
- cost = ret;
+ cost = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+ if (CmdFailed(cost)) return CMD_ERROR;
if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST);
@@ -637,7 +636,7 @@
YapfNotifyTrackLayoutChange(tile, TrackdirToTrack(DiagdirToDiagTrackdir(dir)));
}
- return cost + _price.build_train_depot;
+ return cost.AddCost(_price.build_train_depot);
}
/** Build signals, alternate between double/single, signal/semaphore,
@@ -652,12 +651,12 @@
* @param p2 used for CmdBuildManySignals() to copy direction of first signal
* TODO: p2 should be replaced by two bits for "along" and "against" the track.
*/
-int32 CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Track track = (Track)GB(p1, 0, 3);
bool pre_signal = HASBIT(p1, 3);
SignalVariant sigvar = (pre_signal ^ HASBIT(p1, 4)) ? SIG_SEMAPHORE : SIG_ELECTRIC;
- int32 cost;
+ CommandCost cost;
if (!ValParamTrackOrientation(track) || !IsTileType(tile, MP_RAILWAY) || !EnsureNoVehicleOnGround(tile))
return CMD_ERROR;
@@ -686,14 +685,14 @@
if (!HasSignalOnTrack(tile, track)) {
/* build new signals */
- cost = _price.build_signals;
+ cost = CommandCost(_price.build_signals);
} else {
if (p2 != 0 && sigvar != GetSignalVariant(tile, track)) {
/* convert signals <-> semaphores */
- cost = _price.build_signals + _price.remove_signals;
+ cost = CommandCost(_price.build_signals + _price.remove_signals);
} else {
/* it is free to change orientation/pre-exit-combo signals */
- cost = 0;
+ cost = CommandCost();
}
}
@@ -749,9 +748,10 @@
* - p2 = (bit 5) - 0 = build, 1 = remove signals
* - p2 = (bit 24-31) - user defined signals_density
*/
-static int32 CmdSignalTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+static CommandCost CmdSignalTrackHelper(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 ret, total_cost, signal_ctr;
+ CommandCost ret, total_cost;
+ int signal_ctr;
byte signals;
bool error = true;
TileIndex end_tile;
@@ -798,7 +798,7 @@
* signals - is there a signal/semaphore on the first tile, copy its style (two-way/single-way)
* and convert all others to semaphore/signal
* remove - 1 remove signals, 0 build signals */
- signal_ctr = total_cost = 0;
+ signal_ctr = 0;
for (;;) {
/* only build/remove signals with the specified density */
if (signal_ctr % signal_density == 0) {
@@ -808,9 +808,9 @@
ret = DoCommand(tile, p1, signals, flags, remove ? CMD_REMOVE_SIGNALS : CMD_BUILD_SIGNALS);
/* Be user-friendly and try placing signals as much as possible */
- if (!CmdFailed(ret)) {
+ if (CmdSucceeded(ret)) {
error = false;
- total_cost += ret;
+ total_cost.AddCost(ret);
}
}
@@ -839,7 +839,7 @@
* - p2 = (bit 24-31) - user defined signals_density
* @see CmdSignalTrackHelper
*/
-int32 CmdBuildSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
return CmdSignalTrackHelper(tile, flags, p1, p2);
}
@@ -853,7 +853,7 @@
* - (bit 4) - 0 = signals, 1 = semaphores
* @param p2 unused
*/
-int32 CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Track track = (Track)GB(p1, 0, 3);
@@ -886,7 +886,7 @@
MarkTileDirtyByTile(tile);
}
- return _price.remove_signals;
+ return CommandCost(_price.remove_signals);
}
/** Remove signals on a stretch of track.
@@ -902,12 +902,12 @@
* - p2 = (bit 24-31) - user defined signals_density
* @see CmdSignalTrackHelper
*/
-int32 CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
return CmdSignalTrackHelper(tile, flags, p1, SETBIT(p2, 5)); // bit 5 is remove bit
}
-typedef int32 DoConvertRailProc(TileIndex tile, RailType totype, bool exec);
+typedef CommandCost DoConvertRailProc(TileIndex tile, RailType totype, bool exec);
/**
* Switches the rail type.
@@ -919,7 +919,7 @@
* @return The cost and state of the operation
* @retval CMD_ERROR An error occured during the operation.
*/
-static int32 DoConvertRail(TileIndex tile, RailType totype, bool exec)
+static CommandCost DoConvertRail(TileIndex tile, RailType totype, bool exec)
{
if (!CheckTileOwnership(tile)) return CMD_ERROR;
@@ -956,12 +956,12 @@
}
}
- return _price.build_rail / 2;
+ return CommandCost(_price.build_rail / 2);
}
-extern int32 DoConvertStationRail(TileIndex tile, RailType totype, bool exec);
-extern int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec);
-extern int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec);
+extern CommandCost DoConvertStationRail(TileIndex tile, RailType totype, bool exec);
+extern CommandCost DoConvertStreetRail(TileIndex tile, RailType totype, bool exec);
+extern CommandCost DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec);
/** Convert one rail type to the other. You can convert normal rail to
* monorail/maglev easily or vice-versa.
@@ -970,9 +970,10 @@
* @param p1 start tile of drag
* @param p2 new railtype to convert to
*/
-int32 CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 ret, cost, money;
+ CommandCost ret, cost;
+ Money money;
int ex;
int ey;
int sx, sy, x, y;
@@ -991,8 +992,6 @@
if (ey < sy) Swap(ey, sy);
money = GetAvailableMoneyForCommand();
- cost = 0;
- ret = 0;
for (x = sx; x <= ex; ++x) {
for (y = sy; y <= ey; ++y) {
@@ -1009,23 +1008,23 @@
ret = proc(tile, (RailType)p2, false);
if (CmdFailed(ret)) continue;
- cost += ret;
if (flags & DC_EXEC) {
- money -= ret;
+ money -= ret.GetCost();
if (money < 0) {
- _additional_cash_required = ret;
- return cost - ret;
+ _additional_cash_required = ret.GetCost();
+ return cost;
}
proc(tile, (RailType)p2, true);
}
+ cost.AddCost(ret);
}
}
- return (cost == 0) ? ret : cost;
+ return (cost.GetCost() == 0) ? ret : cost;
}
-static int32 RemoveTrainDepot(TileIndex tile, uint32 flags)
+static CommandCost RemoveTrainDepot(TileIndex tile, uint32 flags)
{
if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER)
return CMD_ERROR;
@@ -1041,13 +1040,13 @@
YapfNotifyTrackLayoutChange(tile, TrackdirToTrack(DiagdirToDiagTrackdir(dir)));
}
- return _price.remove_train_depot;
+ return CommandCost(_price.remove_train_depot);
}
-static int32 ClearTile_Track(TileIndex tile, byte flags)
+static CommandCost ClearTile_Track(TileIndex tile, byte flags)
{
- int32 cost;
- int32 ret;
+ CommandCost cost;
+ CommandCost ret;
if (flags & DC_AUTO) {
if (!IsTileOwner(tile, _current_player))
@@ -1060,8 +1059,6 @@
}
}
- cost = 0;
-
switch (GetRailTileType(tile)) {
case RAIL_TILE_SIGNALS:
case RAIL_TILE_NORMAL: {
@@ -1070,7 +1067,7 @@
Track track = RemoveFirstTrack(&tracks);
ret = DoCommand(tile, 0, track, flags, CMD_REMOVE_SINGLE_RAIL);
if (CmdFailed(ret)) return CMD_ERROR;
- cost += ret;
+ cost.AddCost(ret);
}
return cost;
}
@@ -1291,9 +1288,6 @@
if (track & TRACK_BIT_LEFT) DrawGroundSprite(rti->base_sprites.single_w, PAL_NONE);
if (track & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e, PAL_NONE);
}
-
- if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti);
-
}
static void DrawSignals(TileIndex tile, TrackBits rails)
@@ -1342,6 +1336,8 @@
if (HASBIT(_display_opt, DO_FULL_DETAIL)) DrawTrackDetails(ti);
+ if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti);
+
if (HasSignals(ti->tile)) DrawSignals(ti->tile, rails);
} else {
/* draw depot/waypoint */
--- a/src/rail_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/rail_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -26,6 +26,12 @@
#include "newgrf_station.h"
#include "train.h"
+#include "bridge_map.h"
+#include "rail_map.h"
+#include "road_map.h"
+#include "station_map.h"
+#include "tunnel_map.h"
+
static RailType _cur_railtype;
static bool _remove_button_clicked;
static DiagDirection _build_depot_direction;
@@ -1223,4 +1229,56 @@
MarkWholeScreenDirty();
}
+void SetDefaultRailGui()
+{
+ if (_local_player == PLAYER_SPECTATOR) return;
+ extern RailType _last_built_railtype;
+ RailType rt = (RailType)_patches.default_rail_type;
+ if (rt >= RAILTYPE_END) {
+ if (rt == RAILTYPE_END + 2) {
+ /* Find the most used rail type */
+ RailType count[RAILTYPE_END];
+ memset(count, 0, sizeof(count));
+ for (TileIndex t = 0; t < MapSize(); t++) {
+ if (IsTileType(t, MP_RAILWAY) ||
+ IsLevelCrossingTile(t) ||
+ IsRailwayStationTile(t) ||
+ (IsTunnelTile(t) && GetTunnelTransportType(t) == TRANSPORT_RAIL) ||
+ (IsBridgeTile(t) && GetBridgeTransportType(t) == TRANSPORT_RAIL)
+ ) {
+ count[GetRailType(t)]++;
+ }
+ }
+
+ rt = RAILTYPE_RAIL;
+ for (RailType r = RAILTYPE_ELECTRIC; r < RAILTYPE_END; r++) {
+ if (count[r] >= count[rt]) rt = r;
+ }
+
+ /* No rail, just get the first available one */
+ if (count[rt] == 0) rt = RAILTYPE_END;
+ }
+ switch (rt) {
+ case RAILTYPE_END + 0:
+ rt = RAILTYPE_RAIL;
+ while (rt < RAILTYPE_END && !HasRailtypeAvail(GetPlayer(_local_player), rt)) rt++;
+ break;
+
+ case RAILTYPE_END + 1:
+ rt = GetBestRailtype(GetPlayer(_local_player));
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ _last_built_railtype = _cur_railtype = rt;
+ Window *w = FindWindowById(WC_BUILD_TOOLBAR, 0);
+ if (w != NULL && w->wndproc == BuildRailToolbWndProc) {
+ SetupRailToolbar(_cur_railtype, w);
+ SetWindowDirty(w);
+ }
+}
+
--- a/src/road_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/road_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -107,7 +107,7 @@
* removing the tram bits before the test.
* @param p2 unused
*/
-int32 CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
/* cost for removing inner/edge -roads */
static const uint16 road_remove_cost[2] = {50, 18};
@@ -166,11 +166,11 @@
/* If it's the last roadtype, just clear the whole tile */
if (rts == RoadTypeToRoadTypes(rt)) return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
- int32 cost;
+ CommandCost cost;
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
TileIndex other_end = IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile);
/* Pay for *every* tile of the bridge or tunnel */
- cost = (DistanceManhattan(IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile), tile) + 1) * _price.remove_road;
+ cost.AddCost((DistanceManhattan(IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile), tile) + 1) * _price.remove_road);
if (flags & DC_EXEC) {
SetRoadTypes(other_end, GetRoadTypes(other_end) & ~RoadTypeToRoadTypes(rt));
SetRoadTypes(tile, GetRoadTypes(tile) & ~RoadTypeToRoadTypes(rt));
@@ -185,13 +185,13 @@
}
}
} else {
- cost = _price.remove_road;
+ cost.AddCost(_price.remove_road);
if (flags & DC_EXEC) {
SetRoadTypes(tile, GetRoadTypes(tile) & ~RoadTypeToRoadTypes(rt));
MarkTileDirtyByTile(tile);
}
}
- return cost;
+ return CommandCost(cost);
}
switch (GetRoadTileType(tile)) {
@@ -232,7 +232,7 @@
MarkTileDirtyByTile(tile);
}
}
- return CountRoadBits(c) * _price.remove_road;
+ return CommandCost(CountRoadBits(c) * _price.remove_road);
}
case ROAD_TILE_CROSSING: {
@@ -258,7 +258,7 @@
MarkTileDirtyByTile(tile);
YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile)));
}
- return _price.remove_road * 2;
+ return CommandCost(_price.remove_road * 2);
}
default:
@@ -301,7 +301,7 @@
};
-static uint32 CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existing)
+static CommandCost CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existing)
{
RoadBits road_bits;
@@ -320,12 +320,12 @@
if ((~_valid_tileh_slopes_road[0][tileh] & road_bits) == 0) {
/* force that all bits are set when we have slopes */
if (tileh != SLOPE_FLAT) *pieces |= _valid_tileh_slopes_road[0][tileh];
- return 0; // no extra cost
+ return CommandCost(); // no extra cost
}
/* foundation is used. Whole tile is leveled up */
if ((~_valid_tileh_slopes_road[1][tileh] & road_bits) == 0) {
- return existing != 0 ? 0 : _price.terraform;
+ return CommandCost(existing != 0 ? 0 : _price.terraform);
}
/* partly leveled up tile, only if there's no road on that tile */
@@ -346,10 +346,10 @@
* bit 6..7 disallowed directions to toggle
* @param p2 the town that is building the road (0 if not applicable)
*/
-int32 CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 cost = 0;
- int32 ret;
+ CommandCost cost;
+ CommandCost ret;
RoadBits existing = ROAD_NONE;
RoadBits all_bits = ROAD_NONE;
Slope tileh;
@@ -396,7 +396,7 @@
SetDisallowedRoadDirections(tile, GetDisallowedRoadDirections(tile) ^ toggle_drd);
MarkTileDirtyByTile(tile);
}
- return 0;
+ return CommandCost();
}
return_cmd_error(STR_1007_ALREADY_BUILT);
}
@@ -451,7 +451,7 @@
MakeRoadCrossing(tile, _current_player, _current_player, _current_player, GetTileOwner(tile), roaddir, GetRailType(tile), RoadTypeToRoadTypes(rt) | ROADTYPES_ROAD, p2);
MarkTileDirtyByTile(tile);
}
- return _price.build_road * (rt == ROADTYPE_ROAD ? 2 : 4);
+ return CommandCost(_price.build_road * (rt == ROADTYPE_ROAD ? 2 : 4));
}
case MP_STATION:
@@ -473,7 +473,7 @@
do_clear:;
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) return ret;
- cost += ret;
+ cost.AddCost(ret);
}
if (all_bits != pieces) {
@@ -481,10 +481,10 @@
ret = CheckRoadSlope(tileh, &pieces, all_bits | existing);
/* Return an error if we need to build a foundation (ret != 0) but the
* current patch-setting is turned off (or stupid AI@work) */
- if (CmdFailed(ret) || (ret != 0 && !_patches.build_on_slopes)) {
+ if (CmdFailed(ret) || (ret.GetCost() != 0 && !_patches.build_on_slopes)) {
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
}
- cost += ret;
+ cost.AddCost(ret);
}
if (IsTileType(tile, MP_STREET)) {
@@ -492,10 +492,10 @@
pieces &= ComplementRoadBits(existing);
}
- cost += CountRoadBits(pieces) * _price.build_road;
+ cost.AddCost(CountRoadBits(pieces) * _price.build_road);
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
/* Pay for *every* tile of the bridge or tunnel */
- cost *= DistanceManhattan(IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile), tile);
+ cost.MultiplyCost(DistanceManhattan(IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile), tile));
}
if (flags & DC_EXEC) {
@@ -505,6 +505,7 @@
if (existing == ROAD_NONE || rtt == ROAD_TILE_CROSSING) {
SetRoadTypes(tile, GetRoadTypes(tile) | RoadTypeToRoadTypes(rt));
SetRoadOwner(tile, rt, _current_player);
+ if (_current_player == OWNER_TOWN && rt == ROADTYPE_ROAD) SetTownIndex(tile, p2);
}
if (rtt != ROAD_TILE_CROSSING) SetRoadBits(tile, existing | pieces, rt);
} break;
@@ -553,7 +554,7 @@
* @return The cost and state of the operation
* @retval CMD_ERROR An error occured during the operation.
*/
-int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
+CommandCost DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
{
/* not a railroad crossing? */
if (!IsLevelCrossing(tile)) return CMD_ERROR;
@@ -572,7 +573,7 @@
YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetCrossingRailBits(tile)));
}
- return _price.build_rail / 2;
+ return CommandCost(_price.build_rail / 2);
}
@@ -587,10 +588,10 @@
* - p2 = (bit 3 + 4) - road type
* - p2 = (bit 5) - set road direction
*/
-int32 CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
{
TileIndex start_tile, tile;
- int32 cost, ret;
+ CommandCost cost, ret;
bool had_bridge = false;
bool had_success = false;
DisallowedRoadDirections drd = DRD_NORTHBOUND;
@@ -623,7 +624,6 @@
/* No disallowed direction bits have to be toggled */
if (!HASBIT(p2, 5)) drd = DRD_NONE;
- cost = 0;
tile = start_tile;
/* Start tile is the small number. */
for (;;) {
@@ -641,11 +641,11 @@
/* Only pay for the upgrade on one side of the bridge */
if (IsBridgeTile(tile)) {
if ((!had_bridge || GetBridgeRampDirection(tile) == DIAGDIR_SE || GetBridgeRampDirection(tile) == DIAGDIR_SW)) {
- cost += ret;
+ cost.AddCost(ret);
}
had_bridge = true;
} else {
- cost += ret;
+ cost.AddCost(ret);
}
}
@@ -667,10 +667,10 @@
* - p2 = (bit 2) - direction: 0 = along x-axis, 1 = along y-axis (p2 & 4)
* - p2 = (bit 3 + 4) - road type
*/
-int32 CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
{
TileIndex start_tile, tile;
- int32 cost, ret;
+ CommandCost cost, ret;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -692,7 +692,6 @@
p2 ^= IS_INT_INSIDE(p2 & 3, 1, 3) ? 3 : 0;
}
- cost = 0;
tile = start_tile;
/* Start tile is the small number. */
for (;;) {
@@ -704,7 +703,7 @@
/* try to remove the halves. */
if (bits != 0) {
ret = DoCommand(tile, rt << 4 | bits, 0, flags, CMD_REMOVE_ROAD);
- if (!CmdFailed(ret)) cost += ret;
+ if (CmdSucceeded(ret)) cost.AddCost(ret);
}
if (tile == end_tile) break;
@@ -712,7 +711,7 @@
tile += HASBIT(p2, 2) ? TileDiffXY(0, 1) : TileDiffXY(1, 0);
}
- return (cost == 0) ? CMD_ERROR : cost;
+ return (cost.GetCost() == 0) ? CMD_ERROR : cost;
}
/** Build a road depot.
@@ -725,9 +724,9 @@
* @todo When checking for the tile slope,
* distingush between "Flat land required" and "land sloped in wrong direction"
*/
-int32 CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 cost;
+ CommandCost cost;
Depot *dep;
Slope tileh;
@@ -762,10 +761,10 @@
MakeRoadDepot(tile, _current_player, dir, rt);
MarkTileDirtyByTile(tile);
}
- return cost + _price.build_road_depot;
+ return cost.AddCost(_price.build_road_depot);
}
-static int32 RemoveRoadDepot(TileIndex tile, uint32 flags)
+static CommandCost RemoveRoadDepot(TileIndex tile, uint32 flags)
{
if (!CheckTileOwnership(tile) && _current_player != OWNER_WATER)
return CMD_ERROR;
@@ -774,10 +773,10 @@
if (flags & DC_EXEC) DeleteDepot(GetDepotByTile(tile));
- return _price.remove_road_depot;
+ return CommandCost(_price.remove_road_depot);
}
-static int32 ClearTile_Road(TileIndex tile, byte flags)
+static CommandCost ClearTile_Road(TileIndex tile, byte flags)
{
switch (GetRoadTileType(tile)) {
case ROAD_TILE_NORMAL: {
@@ -788,12 +787,12 @@
* to clear town road OR we are not using the DC_AUTO flag */
if ((M(b) & (M(ROAD_NW) | M(ROAD_SW) | M(ROAD_SE) | M(ROAD_NE))) || !(flags & DC_AUTO)) {
RoadTypes rts = GetRoadTypes(tile);
- int32 ret = 0;
+ CommandCost ret;
for (RoadType rt = ROADTYPE_ROAD; rt < ROADTYPE_END; rt++) {
if (HASBIT(rts, rt)) {
- int32 tmp_ret = DoCommand(tile, rt << 4 | GetRoadBits(tile, rt), 0, flags, CMD_REMOVE_ROAD);
+ CommandCost tmp_ret = DoCommand(tile, rt << 4 | GetRoadBits(tile, rt), 0, flags, CMD_REMOVE_ROAD);
if (CmdFailed(tmp_ret)) return tmp_ret;
- ret += tmp_ret;
+ ret.AddCost(tmp_ret);
}
}
return ret;
@@ -804,7 +803,7 @@
case ROAD_TILE_CROSSING: {
RoadTypes rts = GetRoadTypes(tile);
- int32 ret = 0;
+ CommandCost ret;
if (flags & DC_AUTO) return_cmd_error(STR_1801_MUST_REMOVE_ROAD_FIRST);
@@ -812,9 +811,9 @@
* tram tracks must be removed before the road bits. */
for (RoadType rt = ROADTYPE_HWAY; rt >= ROADTYPE_ROAD; rt--) {
if (HASBIT(rts, rt)) {
- int32 tmp_ret = DoCommand(tile, 1 << 6 | rt << 4 | GetCrossingRoadBits(tile), 0, flags, CMD_REMOVE_ROAD);
+ CommandCost tmp_ret = DoCommand(tile, 1 << 6 | rt << 4 | GetCrossingRoadBits(tile), 0, flags, CMD_REMOVE_ROAD);
if (CmdFailed(tmp_ret)) return tmp_ret;
- ret += tmp_ret;
+ ret.AddCost(tmp_ret);
}
}
@@ -991,13 +990,6 @@
DrawGroundSprite(image, pal);
- if (road != ROAD_NONE) {
- DisallowedRoadDirections drd = GetDisallowedRoadDirections(ti->tile);
- if (drd != DRD_NONE) {
- DrawRoadDetail(SPR_ONEWAY_BASE + drd - 1 + ((road == ROAD_X) ? 0 : 3), ti, 8, 8, 0);
- }
- }
-
/* For tram we overlay the road graphics with either tram tracks only
* (when there is actual road beneath the trams) or with tram tracks
* and some dirts which hides the road graphics */
@@ -1011,6 +1003,13 @@
DrawGroundSprite(image, pal);
}
+ if (road != ROAD_NONE) {
+ DisallowedRoadDirections drd = GetDisallowedRoadDirections(ti->tile);
+ if (drd != DRD_NONE) {
+ DrawRoadDetail(SPR_ONEWAY_BASE + drd - 1 + ((road == ROAD_X) ? 0 : 3), ti, 8, 8, 0);
+ }
+ }
+
if (HasRoadWorks(ti->tile)) {
/* Road works */
DrawGroundSprite((road | tram) & ROAD_X ? SPR_EXCAVATION_X : SPR_EXCAVATION_Y, PAL_NONE);
--- a/src/roadveh_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/roadveh_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -14,6 +14,7 @@
#include "map.h"
#include "tile.h"
#include "vehicle.h"
+#include "timetable.h"
#include "engine.h"
#include "command.h"
#include "station.h"
@@ -96,7 +97,7 @@
}
image = direction + _roadveh_images[img];
- if (v->cargo_count >= v->cargo_cap / 2) image += _roadveh_full_adder[img];
+ if (v->cargo.Count() >= v->cargo_cap / 2U) image += _roadveh_full_adder[img];
return image;
}
@@ -116,9 +117,9 @@
DrawSprite(6 + _roadveh_images[spritenum], pal, x, y);
}
-static int32 EstimateRoadVehCost(EngineID engine_type)
+static CommandCost EstimateRoadVehCost(EngineID engine_type)
{
- return ((_price.roadveh_base >> 3) * GetEngineProperty(engine_type, 0x11, RoadVehInfo(engine_type)->base_cost)) >> 5;
+ return CommandCost(((_price.roadveh_base >> 3) * GetEngineProperty(engine_type, 0x11, RoadVehInfo(engine_type)->base_cost)) >> 5);
}
byte GetRoadVehLength(const Vehicle *v)
@@ -156,9 +157,9 @@
* @param p1 bus/truck type being built (engine)
* @param p2 bit 0 when set, the unitnumber will be 0, otherwise it will be a free number
*/
-int32 CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 cost;
+ CommandCost cost;
Vehicle *v;
UnitID unit_num;
Engine *e;
@@ -219,7 +220,7 @@
v->cargo_subtype = 0;
v->cargo_cap = rvi->capacity;
// v->cargo_count = 0;
- v->value = cost;
+ v->value = cost.GetCost();
// v->day_counter = 0;
// v->next_order_param = v->next_order = 0;
// v->load_unload_time_rem = 0;
@@ -273,7 +274,7 @@
GetPlayer(_current_player)->num_engines[p1]++;
}
- return cost;
+ return CommandCost(cost);
}
/** Start/Stop a road vehicle.
@@ -282,7 +283,7 @@
* @param p1 road vehicle ID to start/stop
* @param p2 unused
*/
-int32 CmdStartStopRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
uint16 callback;
@@ -312,7 +313,7 @@
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
}
- return 0;
+ return CommandCost();
}
void ClearSlot(Vehicle *v)
@@ -347,7 +348,7 @@
* @param p1 vehicle ID to be sold
* @param p2 unused
*/
-int32 CmdSellRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
@@ -373,7 +374,7 @@
DeleteVehicle(v);
}
- return -(int32)v->value;
+ return CommandCost(-v->value);
}
struct RoadFindDepotData {
@@ -415,7 +416,7 @@
/* See where we are now */
Trackdir trackdir = GetVehicleTrackdir(v);
- ftd = NPFRouteToDepotBreadthFirst(v->tile, trackdir, TRANSPORT_ROAD, v->u.road.compatible_roadtypes, v->owner, INVALID_RAILTYPE);
+ ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, v->tile, ReverseTrackdir(trackdir), TRANSPORT_ROAD, v->u.road.compatible_roadtypes, v->owner, INVALID_RAILTYPE, 0);
if (ftd.best_bird_dist == 0) {
return GetDepotByTile(ftd.node.tile); /* Target found */
} else {
@@ -447,7 +448,7 @@
* - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
* - p2 bit 8-10 - VLW flag (for mass goto depot)
*/
-int32 CmdSendRoadVehToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendRoadVehToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
const Depot *dep;
@@ -478,7 +479,7 @@
TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
- return 0;
+ return CommandCost();
}
if (p2 & DEPOT_DONT_CANCEL) return CMD_ERROR; // Requested no cancelation of depot orders
@@ -492,7 +493,7 @@
v->current_order.flags = 0;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
- return 0;
+ return CommandCost();
}
dep = FindClosestRoadDepot(v);
@@ -511,7 +512,7 @@
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
- return 0;
+ return CommandCost();
}
/** Turn a roadvehicle around.
@@ -520,7 +521,7 @@
* @param p1 vehicle ID to turn
* @param p2 unused
*/
-int32 CmdTurnRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdTurnRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
@@ -548,7 +549,7 @@
if (flags & DC_EXEC) v->u.road.reverse_ctr = 180;
- return 0;
+ return CommandCost();
}
@@ -676,7 +677,7 @@
v->u.road.crashed_ctr++;
for (Vehicle *u = v; u != NULL; u = u->next) {
- if (IsCargoInClass(u->cargo_type, CC_PASSENGERS)) pass += u->cargo_count;
+ if (IsCargoInClass(u->cargo_type, CC_PASSENGERS)) pass += u->cargo.Count();
u->vehstatus |= VS_CRASHED;
@@ -757,6 +758,7 @@
if (!(v->current_order.flags & OF_PART_OF_ORDERS)) return;
if (v->current_order.flags & OF_SERVICE_IF_NEEDED &&
!VehicleNeedsService(v)) {
+ UpdateVehicleTimetable(v, true);
v->cur_order_index++;
}
break;
@@ -1784,6 +1786,7 @@
{
/* decrease counters */
v->tick_counter++;
+ v->current_order_time++;
if (v->u.road.reverse_ctr != 0) v->u.road.reverse_ctr--;
/* handle crashed */
@@ -1823,7 +1826,7 @@
static void AgeRoadVehCargo(Vehicle *v)
{
if (_age_cargo_skip_counter != 0) return;
- if (v->cargo_days != 255) v->cargo_days++;
+ v->cargo.AgeCargo();
}
void RoadVeh_Tick(Vehicle *v)
@@ -1886,7 +1889,7 @@
void OnNewDay_RoadVeh(Vehicle *v)
{
- int32 cost;
+ CommandCost cost;
if (!IsRoadVehFront(v)) return;
@@ -1968,10 +1971,10 @@
cost = RoadVehInfo(v->engine_type)->running_cost * _price.roadveh_running / 364;
- v->profit_this_year -= cost >> 8;
+ v->profit_this_year -= cost.GetCost() >> 8;
SET_EXPENSES_TYPE(EXPENSES_ROADVEH_RUN);
- SubtractMoneyFromPlayerFract(v->owner, cost);
+ SubtractMoneyFromPlayerFract(v->owner, CommandCost(cost));
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
InvalidateWindowClasses(WC_ROADVEH_LIST);
@@ -2001,10 +2004,10 @@
* - p2 = (bit 16) - refit only this vehicle (ignored)
* @return cost of refit or error
*/
-int32 CmdRefitRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
- int32 cost;
+ CommandCost cost;
CargoID new_cid = GB(p2, 0, 8);
byte new_subtype = GB(p2, 8, 8);
uint16 capacity = CALLBACK_FAILED;
@@ -2060,14 +2063,13 @@
}
_returned_refit_capacity = capacity;
- cost = 0;
if (IsHumanPlayer(v->owner) && new_cid != v->cargo_type) {
cost = GetRefitCost(v->engine_type);
}
if (flags & DC_EXEC) {
v->cargo_cap = capacity;
- v->cargo_count = (v->cargo_type == new_cid) ? min(capacity, v->cargo_count) : 0;
+ v->cargo.Truncate((v->cargo_type == new_cid) ? capacity : 0);
v->cargo_type = new_cid;
v->cargo_subtype = new_subtype;
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
--- a/src/roadveh_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/roadveh_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -80,8 +80,7 @@
SetWindowWidgetDisabledState(w, 5, !_patches.servint_roadveh);
SetWindowWidgetDisabledState(w, 6, !_patches.servint_roadveh);
- SetDParam(0, v->string_id);
- SetDParam(1, v->unitnumber);
+ SetDParam(0, v->index);
DrawWindowWidgets(w);
/* Draw running cost */
@@ -118,7 +117,7 @@
DrawRoadVehImage(v, 3, 57, 0, INVALID_VEHICLE);
- SetDParam(0, GetCustomEngineName(v->engine_type));
+ SetDParam(0, v->engine_type);
SetDParam(1, v->build_year);
SetDParam(2, v->value);
DrawString(34, 57 + y_offset, STR_9011_BUILT_VALUE, 0);
@@ -154,10 +153,10 @@
for (const Vehicle *u = v; u != NULL; u = u->next) {
str = STR_8812_EMPTY;
- if (u->cargo_count != 0) {
+ if (!u->cargo.Empty()) {
SetDParam(0, u->cargo_type);
- SetDParam(1, u->cargo_count);
- SetDParam(2, u->cargo_source);
+ SetDParam(1, u->cargo.Count());
+ SetDParam(2, u->cargo.Source());
str = STR_8813_FROM;
}
DrawString(34, 78 + y_offset, str, 0);
@@ -172,17 +171,17 @@
DrawString(34, 67 + y_offset, STR_9012_CAPACITY, 0);
str = STR_8812_EMPTY;
- if (v->cargo_count != 0) {
+ if (!v->cargo.Empty()) {
SetDParam(0, v->cargo_type);
- SetDParam(1, v->cargo_count);
- SetDParam(2, v->cargo_source);
+ 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_feeder_share);
+ SetDParam(0, v->cargo.FeederShare());
DrawString(34, 90 + y_offset, STR_FEEDER_CARGO_VALUE, 0);
/* Draw service interval text */
@@ -199,8 +198,8 @@
switch (e->we.click.widget) {
case 2: /* rename */
v = GetVehicle(w->window_number);
- SetDParam(0, v->unitnumber);
- ShowQueryString(v->string_id, STR_902C_NAME_ROAD_VEHICLE, 31, 150, w, CS_ALPHANUMERAL);
+ SetDParam(0, v->index);
+ ShowQueryString(STR_VEHICLE_NAME, STR_902C_NAME_ROAD_VEHICLE, 31, 150, w, CS_ALPHANUMERAL);
break;
case 5: /* increase int */
@@ -283,8 +282,7 @@
_engine_info[v->engine_type].refit_mask == 0);
/* draw widgets & caption */
- SetDParam(0, v->string_id);
- SetDParam(1, v->unitnumber);
+ SetDParam(0, v->index);
DrawWindowWidgets(w);
if (v->u.road.crashed_ctr != 0) {
@@ -376,6 +374,7 @@
DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
+ DeleteWindowById(WC_VEHICLE_TIMETABLE, w->window_number);
break;
case WE_MOUSELOOP: {
--- a/src/saveload.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/saveload.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -26,10 +26,12 @@
#include "saveload.h"
#include "network/network.h"
#include "variables.h"
+#include "table/strings.h"
+#include "strings.h"
#include <setjmp.h>
#include <list>
-extern const uint16 SAVEGAME_VERSION = 64;
+extern const uint16 SAVEGAME_VERSION = 69;
uint16 _sl_version; ///< the major savegame version identifier
byte _sl_minor_version; ///< the minor savegame version, DO NOT USE!
@@ -65,7 +67,8 @@
FILE *fh; ///< the file from which is read or written to
void (*excpt_uninit)(); ///< the function to execute on any encountered error
- const char *excpt_msg; ///< the error message
+ StringID error_str; ///< the translateable error message to show
+ char *extra_msg; ///< the error message
jmp_buf excpt; ///< @todo used to jump to "exception handler"; really ugly
} _sl;
@@ -112,7 +115,7 @@
}
/** Return the size in bytes of a reference (pointer) */
-static inline size_t SlCalcRefLen() {return 2;}
+static inline size_t SlCalcRefLen() {return CheckSavegameVersion(69) ? 2 : 4;}
/** Flush the output buffer by writing to disk with the given reader.
* If the buffer pointer has not yet been set up, set it up now. Usually
@@ -136,9 +139,11 @@
/** Error handler, calls longjmp to simulate an exception.
* @todo this was used to have a central place to handle errors, but it is
* pretty ugly, and seriously interferes with any multithreaded approaches */
-static void NORETURN SlError(const char *msg)
+static void NORETURN SlError(StringID string, const char *extra_msg = NULL)
{
- _sl.excpt_msg = msg;
+ _sl.error_str = string;
+ free(_sl.extra_msg);
+ _sl.extra_msg = (extra_msg == NULL) ? NULL : strdup(extra_msg);
longjmp(_sl.excpt, 0);
}
@@ -224,7 +229,7 @@
if (HASBIT(i, 5)) {
i &= ~0x20;
if (HASBIT(i, 4))
- SlError("Unsupported gamma");
+ SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Unsupported gamma");
i = (i << 8) | SlReadByte();
}
i = (i << 8) | SlReadByte();
@@ -641,9 +646,10 @@
{
std::list<void *> *l = (std::list<void *> *) list;
- /* Each entry is saved as 2 bytes, plus 2 bytes are used for the length
+ int type_size = CheckSavegameVersion(69) ? 2 : 4;
+ /* Each entry is saved as type_size bytes, plus type_size bytes are used for the length
* of the list */
- return l->size() * 2 + 2;
+ return l->size() * type_size + type_size;
}
@@ -664,19 +670,19 @@
std::list<void *> *l = (std::list<void *> *) list;
if (_sl.save) {
- SlWriteUint16(l->size());
+ SlWriteUint32(l->size());
std::list<void *>::iterator iter;
for (iter = l->begin(); iter != l->end(); ++iter) {
void *ptr = *iter;
- SlWriteUint16(ReferenceToInt(ptr, conv));
+ SlWriteUint32(ReferenceToInt(ptr, conv));
}
} else {
- uint length = SlReadUint16();
+ uint length = CheckSavegameVersion(69) ? SlReadUint16() : SlReadUint32();
/* Load each reference and push to the end of the list */
for (uint i = 0; i < length; i++) {
- void *ptr = IntToReference(SlReadUint16(), conv);
+ void *ptr = IntToReference(CheckSavegameVersion(69) ? SlReadUint16() : SlReadUint32(), conv);
l->push_back(ptr);
}
}
@@ -768,11 +774,10 @@
switch (sld->cmd) {
case SL_VAR: SlSaveLoadConv(ptr, conv); break;
case SL_REF: // Reference variable, translate
- /* @todo XXX - another artificial limitof 65K elements of pointers? */
- if (_sl.save) { // XXX - read/write pointer as uint16? What is with higher indeces?
- SlWriteUint16(ReferenceToInt(*(void**)ptr, (SLRefType)conv));
+ if (_sl.save) {
+ SlWriteUint32(ReferenceToInt(*(void**)ptr, (SLRefType)conv));
} else {
- *(void**)ptr = IntToReference(SlReadUint16(), (SLRefType)conv);
+ *(void**)ptr = IntToReference(CheckSavegameVersion(69) ? SlReadUint16() : SlReadUint32(), (SLRefType)conv);
}
break;
case SL_ARR: SlArray(ptr, sld->length, conv); break;
@@ -820,7 +825,7 @@
}
for (; sld->cmd != SL_END; sld++) {
- void *ptr = GetVariableAddress(object, sld);
+ void *ptr = sld->global ? sld->address : GetVariableAddress(object, sld);
SlObjectMember(ptr, sld);
}
}
@@ -831,14 +836,7 @@
*/
void SlGlobList(const SaveLoadGlobVarList *sldg)
{
- if (_sl.need_length != NL_NONE) {
- SlSetLength(SlCalcObjLength(NULL, (const SaveLoad*)sldg));
- if (_sl.need_length == NL_CALCLENGTH) return;
- }
-
- for (; sldg->cmd != SL_END; sldg++) {
- SlObjectMember(sldg->address, (const SaveLoad*)sldg);
- }
+ SlObject(NULL, (const SaveLoad*)sldg);
}
/**
@@ -866,7 +864,7 @@
/* And write the stuff */
proc(arg);
- assert(offs == SlGetOffs());
+ if (offs != SlGetOffs()) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Invalid chunk size");
}
/**
@@ -898,9 +896,9 @@
_sl.obj_len = len;
endoffs = SlGetOffs() + len;
ch->load_proc();
- assert(SlGetOffs() == endoffs);
+ if (SlGetOffs() != endoffs) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Invalid chunk size");
} else {
- SlError("Invalid chunk type");
+ SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Invalid chunk type");
}
break;
}
@@ -1001,7 +999,7 @@
DEBUG(sl, 2, "Loading chunk %c%c%c%c", id >> 24, id >> 16, id >> 8, id);
ch = SlFindChunkHandler(id);
- if (ch == NULL) SlError("found unknown tag in savegame (sync error)");
+ if (ch == NULL) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Unknown chunk type");
SlLoadChunk(ch);
}
}
@@ -1021,7 +1019,7 @@
uint len;
/* Read header*/
- if (fread(tmp, sizeof(tmp), 1, _sl.fh) != 1) SlError("file read failed");
+ if (fread(tmp, sizeof(tmp), 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE, "File read failed");
/* Check if size is bad */
((uint32*)out)[0] = size = tmp[1];
@@ -1031,13 +1029,13 @@
size = TO_BE32(size);
}
- if (size >= sizeof(out)) SlError("inconsistent size");
+ if (size >= sizeof(out)) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Inconsistent size");
/* Read block */
- if (fread(out + sizeof(uint32), size, 1, _sl.fh) != 1) SlError("file read failed");
+ if (fread(out + sizeof(uint32), size, 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
/* Verify checksum */
- if (tmp[0] != lzo_adler32(0, out, size + sizeof(uint32))) SlError("bad checksum");
+ if (tmp[0] != lzo_adler32(0, out, size + sizeof(uint32))) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, "Bad checksum");
/* Decompress */
lzo1x_decompress(out + sizeof(uint32)*1, size, _sl.buf, &len, NULL);
@@ -1055,7 +1053,7 @@
lzo1x_1_compress(_sl.buf, size, out + sizeof(uint32)*2, &outlen, wrkmem);
((uint32*)out)[1] = TO_BE32(outlen);
((uint32*)out)[0] = TO_BE32(lzo_adler32(0, out + sizeof(uint32), outlen + sizeof(uint32)));
- if (fwrite(out, outlen + sizeof(uint32)*2, 1, _sl.fh) != 1) SlError("file write failed");
+ if (fwrite(out, outlen + sizeof(uint32)*2, 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
}
static bool InitLZO()
@@ -1099,7 +1097,6 @@
********** START OF MEMORY CODE (in ram)****
********************************************/
-#include "table/strings.h"
#include "table/sprites.h"
#include "gfx.h"
#include "gui.h"
@@ -1178,8 +1175,7 @@
if (r == Z_STREAM_END)
break;
- if (r != Z_OK)
- SlError("inflate() failed");
+ if (r != Z_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "inflate() failed");
} while (_z.avail_out);
return 4096 - _z.avail_out;
@@ -1214,11 +1210,11 @@
r = deflate(z, mode);
/* bytes were emitted? */
if ((n=sizeof(buf) - z->avail_out) != 0) {
- if (fwrite(buf, n, 1, _sl.fh) != 1) SlError("file write error");
+ if (fwrite(buf, n, 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
}
if (r == Z_STREAM_END)
break;
- if (r != Z_OK) SlError("zlib returned error code");
+ if (r != Z_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "zlib returned error code");
} while (z->avail_in || !z->avail_out);
}
@@ -1258,6 +1254,7 @@
extern const ChunkHandler _animated_tile_chunk_handlers[];
extern const ChunkHandler _newgrf_chunk_handlers[];
extern const ChunkHandler _group_chunk_handlers[];
+extern const ChunkHandler _cargopacket_chunk_handlers[];
static const ChunkHandler * const _chunk_handlers[] = {
_misc_chunk_handlers,
@@ -1276,6 +1273,7 @@
_animated_tile_chunk_handlers,
_newgrf_chunk_handlers,
_group_chunk_handlers,
+ _cargopacket_chunk_handlers,
NULL,
};
@@ -1307,6 +1305,7 @@
case REF_ORDER: return ((const Order*)obj)->index + 1;
case REF_ROADSTOPS: return ((const RoadStop*)obj)->index + 1;
case REF_ENGINE_RENEWS: return ((const EngineRenew*)obj)->index + 1;
+ case REF_CARGO_PACKET: return ((const CargoPacket*)obj)->index + 1;
default: NOT_REACHED();
}
@@ -1367,6 +1366,11 @@
error("EngineRenews: failed loading savegame: too many EngineRenews");
return GetEngineRenew(index);
}
+ case REF_CARGO_PACKET: {
+ if (!AddBlockIfNeeded(&_CargoPacket_pool, index))
+ error("CargoPackets: failed loading savegame: too many Cargo packets");
+ return GetCargoPacket(index);
+ }
case REF_VEHICLE_OLD: {
/* Old vehicles were saved differently:
@@ -1475,10 +1479,28 @@
_ts.saveinprogress = false;
}
+/** Set the error message from outside of the actual loading/saving of the game (AfterLoadGame and friends) */
+void SetSaveLoadError(StringID str)
+{
+ _sl.error_str = str;
+}
+
+/** Get the string representation of the error message */
+const char *GetSaveLoadErrorString()
+{
+ SetDParam(0, _sl.error_str);
+ SetDParamStr(1, _sl.extra_msg);
+
+ static char err_str[512];
+ GetString(err_str, _sl.save ? STR_4007_GAME_SAVE_FAILED : STR_4009_GAME_LOAD_FAILED, lastof(err_str));
+ return err_str;
+}
+
/** Show a gui message when saving has failed */
void SaveFileError()
{
- ShowErrorMessage(STR_4007_GAME_SAVE_FAILED, STR_NULL, 0, 0);
+ SetDParamStr(0, GetSaveLoadErrorString());
+ ShowErrorMessage(STR_012D, STR_NULL, 0, 0);
SaveFileDone();
}
@@ -1492,13 +1514,16 @@
const SaveLoadFormat *fmt;
uint32 hdr[2];
+ _sl.excpt_uninit = NULL;
/* XXX - Setup setjmp error handler if an error occurs anywhere deep during
* loading/saving execute a longjmp() and continue execution here */
if (setjmp(_sl.excpt)) {
AbortSaveLoad();
- _sl.excpt_uninit();
+ if (_sl.excpt_uninit != NULL) _sl.excpt_uninit();
- fprintf(stderr, "Save game failed: %s.", _sl.excpt_msg);
+ ShowInfo(GetSaveLoadErrorString());
+ fprintf(stderr, GetSaveLoadErrorString());
+
if (threaded) {
OTTD_SendThreadMessage(MSG_OTTD_SAVETHREAD_ERROR);
} else {
@@ -1512,9 +1537,9 @@
/* We have written our stuff to memory, now write it to file! */
hdr[0] = fmt->tag;
hdr[1] = TO_BE32(SAVEGAME_VERSION << 16);
- if (fwrite(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError("file write failed");
+ if (fwrite(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE);
- if (!fmt->init_write()) SlError("cannot initialize compressor");
+ if (!fmt->init_write()) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize compressor");
{
uint i;
@@ -1583,6 +1608,22 @@
return SL_OK;
}
+ /* XXX - Setup setjmp error handler if an error occurs anywhere deep during
+ * loading/saving execute a longjmp() and continue execution here */
+ _sl.excpt_uninit = NULL;
+ if (setjmp(_sl.excpt)) {
+ AbortSaveLoad();
+
+ /* deinitialize compressor. */
+ if (_sl.excpt_uninit != NULL) _sl.excpt_uninit();
+
+ /* Skip the "color" character */
+ ShowInfoF(GetSaveLoadErrorString() + 3);
+
+ /* A saver/loader exception!! reinitialize all variables to prevent crash! */
+ return (mode == SL_LOAD) ? SL_REINIT : SL_ERROR;
+ }
+
_sl.fh = (mode == SL_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb);
/* Make it a little easier to load savegames from the console */
@@ -1590,8 +1631,7 @@
if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", BASE_DIR);
if (_sl.fh == NULL) {
- DEBUG(sl, 0, "Cannot open savegame '%s' for saving/loading.", filename);
- return SL_ERROR;
+ SlError(mode == SL_SAVE ? STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE : STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
}
_sl.bufe = _sl.bufp = NULL;
@@ -1600,24 +1640,6 @@
_sl.includes = _desc_includes;
_sl.chs = _chunk_handlers;
- /* XXX - Setup setjmp error handler if an error occurs anywhere deep during
- * loading/saving execute a longjmp() and continue execution here */
- if (setjmp(_sl.excpt)) {
- AbortSaveLoad();
-
- /* deinitialize compressor. */
- _sl.excpt_uninit();
-
- /* A saver/loader exception!! reinitialize all variables to prevent crash! */
- if (mode == SL_LOAD) {
- ShowInfoF("Load game failed: %s.", _sl.excpt_msg);
- return SL_REINIT;
- }
-
- ShowInfoF("Save game failed: %s.", _sl.excpt_msg);
- return SL_ERROR;
- }
-
/* General tactic is to first save the game to memory, then use an available writer
* to write it to file, either in threaded mode if possible, or single-threaded */
if (mode == SL_SAVE) { /* SAVE game */
@@ -1649,10 +1671,7 @@
} else { /* LOAD game */
assert(mode == SL_LOAD);
- if (fread(hdr, sizeof(hdr), 1, _sl.fh) != 1) {
- DEBUG(sl, 0, "Cannot read savegame header, aborting");
- return AbortSaveLoad();
- }
+ if (fread(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
/* see if we have any loader for this type. */
for (fmt = _saveload_formats; ; fmt++) {
@@ -1684,10 +1703,7 @@
DEBUG(sl, 1, "Loading savegame version %d", _sl_version);
/* Is the version higher than the current? */
- if (_sl_version > SAVEGAME_VERSION) {
- DEBUG(sl, 0, "Savegame version invalid");
- return AbortSaveLoad();
- }
+ if (_sl_version > SAVEGAME_VERSION) SlError(STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME);
break;
}
}
@@ -1697,13 +1713,15 @@
/* loader for this savegame type is not implemented? */
if (fmt->init_read == NULL) {
- ShowInfoF("Loader for '%s' is not available.", fmt->name);
- return AbortSaveLoad();
+ char err_str[64];
+ snprintf(err_str, lengthof(err_str), "Loader for '%s' is not available.", fmt->name);
+ SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, err_str);
}
if (!fmt->init_read()) {
- DEBUG(sl, 0, "Initializing loader '%s' failed", fmt->name);
- return AbortSaveLoad();
+ char err_str[64];
+ snprintf(err_str, lengthof(err_str), "Initializing loader '%s' failed", fmt->name);
+ SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, err_str);
}
/* Old maps were hardcoded to 256x256 and thus did not contain
--- a/src/saveload.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/saveload.h Tue Jun 26 23:40:58 2007 +0000
@@ -28,6 +28,8 @@
SL_BMP = 4,
};
+void SetSaveLoadError(uint16 str);
+const char *GetSaveLoadErrorString();
SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb);
void WaitTillSaved();
void DoExitSave();
@@ -55,6 +57,7 @@
REF_VEHICLE_OLD = 4,
REF_ROADSTOPS = 5,
REF_ENGINE_RENEWS = 6,
+ REF_CARGO_PACKET = 7,
};
#define SL_MAX_VERSION 255
@@ -173,6 +176,7 @@
/** SaveLoad type struct. Do NOT use this directly but use the SLE_ macros defined just below! */
struct SaveLoad {
+ bool global; ///< should we load a global variable or a non-global one
SaveLoadType cmd; ///< the action to take with the saved/loaded type, All types need different action
VarType conv; ///< type of the variable to be saved, int
uint16 length; ///< (conditional) length of the variable (eg. arrays) (max array size is 65536 elements)
@@ -181,7 +185,7 @@
/* NOTE: This element either denotes the address of the variable for a global
* variable, or the offset within a struct which is then bound to a variable
* during runtime. Decision on which one to use is controlled by the function
- * that is called to save it. address: SlGlobList, offset: SlObject */
+ * that is called to save it. address: global=true, offset: global=false */
void *address; ///< address of variable OR offset of variable in the struct (max offset is 65536)
};
@@ -189,7 +193,7 @@
typedef SaveLoad SaveLoadGlobVarList;
/* Simple variables, references (pointers) and arrays */
-#define SLE_GENERAL(cmd, base, variable, type, length, from, to) {cmd, type, length, from, to, (void*)cpp_offsetof(base, variable)}
+#define SLE_GENERAL(cmd, base, variable, type, length, from, to) {false, cmd, type, length, from, to, (void*)cpp_offsetof(base, variable)}
#define SLE_CONDVAR(base, variable, type, from, to) SLE_GENERAL(SL_VAR, base, variable, type, 0, from, to)
#define SLE_CONDREF(base, variable, type, from, to) SLE_GENERAL(SL_REF, base, variable, type, 0, from, to)
#define SLE_CONDARR(base, variable, type, length, from, to) SLE_GENERAL(SL_ARR, base, variable, type, length, from, to)
@@ -210,7 +214,7 @@
#define SLE_INCLUDE(base, variable, include_index) SLE_GENERAL(SL_INCLUDE, base, variable, 0, 0, include_index, 0)
/* 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) {cmd, type, 0, param1, param2, (void*)(offset)}
+#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)
@@ -221,10 +225,10 @@
#define SLE_INCLUDEX(offset, type) SLE_GENERALX(SL_INCLUDE, offset, type, 0, SL_MAX_VERSION)
/* End marker */
-#define SLE_END() {SL_END, 0, 0, 0, 0, NULL}
+#define SLE_END() {false, SL_END, 0, 0, 0, 0, NULL}
/* Simple variables, references (pointers) and arrays, but for global variables */
-#define SLEG_GENERAL(cmd, variable, type, length, from, to) {cmd, type, length, from, to, (void*)&variable}
+#define SLEG_GENERAL(cmd, variable, type, length, from, to) {true, cmd, type, length, from, to, (void*)&variable}
#define SLEG_CONDVAR(variable, type, from, to) SLEG_GENERAL(SL_VAR, variable, type, 0, from, to)
#define SLEG_CONDREF(variable, type, from, to) SLEG_GENERAL(SL_REF, variable, type, 0, from, to)
@@ -238,9 +242,9 @@
#define SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, lengthof(variable), 0, SL_MAX_VERSION)
#define SLEG_LST(variable, type) SLEG_CONDLST(variable, type, 0, SL_MAX_VERSION)
-#define SLEG_CONDNULL(length, from, to) {SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_CONFIG_NO, length, from, to, (void*)NULL}
+#define SLEG_CONDNULL(length, from, to) {true, SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_CONFIG_NO, length, from, to, (void*)NULL}
-#define SLEG_END() {SL_END, 0, 0, 0, 0, NULL}
+#define SLEG_END() {true, SL_END, 0, 0, 0, 0, NULL}
/** Checks if the savegame is below major.minor.
*/
--- a/src/screenshot.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/screenshot.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -485,7 +485,7 @@
{
Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
void *src = blitter->MoveTo(_screen.dst_ptr, 0, y);
- blitter->CopyToBuffer(src, buf, _screen.width, n, pitch);
+ blitter->CopyImageToBuffer(src, buf, _screen.width, n, pitch);
}
/* generate a large piece of the world */
@@ -531,10 +531,8 @@
if (_game_mode == GM_EDITOR || _game_mode == GM_MENU || _local_player == PLAYER_SPECTATOR) {
ttd_strlcpy(_screenshot_name, "screenshot", lengthof(_screenshot_name));
} else {
- const Player* p = GetPlayer(_local_player);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, _date);
+ SetDParam(0, _local_player);
+ SetDParam(1, _date);
GetString(_screenshot_name, STR_4004, lastof(_screenshot_name));
}
--- a/src/settings.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/settings.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -1300,7 +1300,8 @@
SDT_VAR(GameOptions, diff_level, SLE_UINT8, 0, 0, 0, 0, 3, 0, STR_NULL, NULL),
SDT_OMANY(GameOptions, currency, SLE_UINT8, N, 0, 0, CUSTOM_CURRENCY_ID, "GBP|USD|EUR|YEN|ATS|BEF|CHF|CZK|DEM|DKK|ESP|FIM|FRF|GRD|HUF|ISK|ITL|NLG|NOK|PLN|ROL|RUR|SIT|SEK|YTL|SKK|BRR|custom", STR_NULL, NULL, NULL),
SDT_OMANY(GameOptions, units, SLE_UINT8, N, 0, 1, 2, "imperial|metric|si", STR_NULL, NULL, NULL),
- SDT_OMANY(GameOptions, town_name, SLE_UINT8, 0, 0, 0, 20, "english|french|german|american|latin|silly|swedish|dutch|finnish|polish|slovakish|norwegian|hungarian|austrian|romanian|czech|swiss|danish|turkish|italian|catalan", STR_NULL, NULL, NULL),
+ /* There are only 21 predefined town_name values (0-20), but you can have more with newgrf action F so allow these bigger values (21-255). Invalid values will fallback to english on use and (undefined string) in GUI. */
+ SDT_OMANY(GameOptions, town_name, SLE_UINT8, 0, 0, 0, 255, "english|french|german|american|latin|silly|swedish|dutch|finnish|polish|slovakish|norwegian|hungarian|austrian|romanian|czech|swiss|danish|turkish|italian|catalan", STR_NULL, NULL, NULL),
SDT_OMANY(GameOptions, landscape, SLE_UINT8, 0, 0, 0, 3, "temperate|arctic|tropic|toyland", STR_NULL, NULL, ConvertLandscape),
SDT_VAR(GameOptions, snow_line, SLE_UINT8, 0, 0, 7 * TILE_HEIGHT, 2 * TILE_HEIGHT, 13 * TILE_HEIGHT, 0, STR_NULL, NULL),
SDT_CONDOMANY(GameOptions,autosave, SLE_UINT8, 0, 22, N, 0, 0, 0, "", STR_NULL, NULL, NULL),
@@ -1341,7 +1342,10 @@
SDT_VAR(Patches, scrollwheel_scrolling,SLE_UINT8,S,MS, 0, 0, 2, 0, STR_CONFIG_PATCHES_SCROLLWHEEL_SCROLLING, NULL),
SDT_VAR(Patches,scrollwheel_multiplier,SLE_UINT8,S, 0, 5, 1, 15, 1, STR_CONFIG_PATCHES_SCROLLWHEEL_MULTIPLIER,NULL),
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_BOOL(Patches, advanced_vehicle_list, S, 0, true, 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, 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 */
@@ -1387,6 +1391,7 @@
SDT_BOOL(Patches, wagon_speed_limits, 0, 0, true, STR_CONFIG_PATCHES_WAGONSPEEDLIMITS, NULL),
SDT_CONDBOOL(Patches, disable_elrails, 38, SL_MAX_VERSION, 0, 0, false, STR_CONFIG_PATCHES_DISABLE_ELRAILS, SettingsDisableElrail),
SDT_CONDVAR(Patches, freight_trains, SLE_UINT8, 39, SL_MAX_VERSION, 0, 0, 1, 1, 255, 1, STR_CONFIG_PATCHES_FREIGHT_TRAINS, NULL),
+ SDT_CONDBOOL(Patches, timetabling, 67, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_PATCHES_TIMETABLE_ALLOW, NULL),
/***************************************************************************/
/* Station section of the GUI-configure patches window */
@@ -1616,7 +1621,7 @@
for (item = group->item; item != NULL; item = item->next) {
GRFConfig *c = CallocT<GRFConfig>(1);
- c->full_path = strdup(item->name);
+ c->filename = strdup(item->name);
/* Parse parameters */
if (*item->value != '\0') {
@@ -1693,7 +1698,7 @@
char params[512];
GRFBuildParamList(params, c, lastof(params));
- *item = ini_item_alloc(group, c->full_path, strlen(c->full_path));
+ *item = ini_item_alloc(group, c->filename, strlen(c->filename));
(*item)->value = (char*)pool_strdup(&ini->pool, params, strlen(params));
item = &(*item)->next;
}
@@ -1760,7 +1765,7 @@
* The new value is properly clamped to its minimum/maximum when setting
* @see _patch_settings
*/
-int32 CmdChangePatchSetting(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangePatchSetting(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
const SettingDesc *sd = GetSettingDescription(p1);
@@ -1776,7 +1781,7 @@
InvalidateWindow(WC_GAME_OPTIONS, 0);
}
- return 0;
+ return CommandCost();
}
/** Top function to save the new value of an element of the Patches struct
--- a/src/settings_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/settings_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -24,6 +24,7 @@
#include "vehicle.h"
#include "date.h"
#include "helpers.hpp"
+#include "newgrf_townname.h"
static uint32 _difficulty_click_a;
static uint32 _difficulty_click_b;
@@ -66,19 +67,44 @@
return buf;
}
-static StringID _town_names[SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 2] = {STR_NULL};
+int _nb_orig_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1;
+static StringID *_town_names = NULL;
+static StringID *_grf_names = NULL;
+static int _nb_grf_names = 0;
void SortTownGeneratorNames()
{
- int nb_town_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1;
- /* Init the strings */
- if (_town_names[0] == STR_NULL) {
- for (int i = 0; i < nb_town_names; i++) _town_names[i] = STR_TOWNNAME_ORIGINAL_ENGLISH + i;
- _town_names[nb_town_names] = INVALID_STRING_ID;
- }
+ int n = 0;
+
+ /* Get Newgrf generators' names */
+ free(_grf_names);
+ _grf_names = GetGRFTownNameList();
+ _nb_grf_names = 0;
+ for (StringID *s = _grf_names; *s != INVALID_STRING_ID; s++) _nb_grf_names++;
+
+ /* Prepare the list */
+ free(_town_names);
+ _town_names = MallocT<StringID>(_nb_orig_names + _nb_grf_names + 1);
+
+ /* Put the original strings */
+ for (int i = 0; i < _nb_orig_names; i++) _town_names[n++] = STR_TOWNNAME_ORIGINAL_ENGLISH + i;
+
+ /* Put the grf strings */
+ for (int i = 0; i < _nb_grf_names; i++) _town_names[n++] = _grf_names[i];
+
+ /* Put the terminator */
+ _town_names[n] = INVALID_STRING_ID;
/* Sort the strings */
- qsort(&_town_names[0], nb_town_names, sizeof(StringID), &StringIDSorter);
+ qsort(&_town_names[0], _nb_orig_names + _nb_grf_names, sizeof(StringID), &StringIDSorter);
+}
+
+static inline StringID TownName(int town_name)
+{
+ if (town_name < _nb_orig_names) return STR_TOWNNAME_ORIGINAL_ENGLISH + town_name;
+ town_name -= _nb_orig_names;
+ if (town_name < _nb_grf_names) return _grf_names[town_name];
+ return STR_UNDEFINED;
}
static int GetCurRes()
@@ -120,7 +146,7 @@
SetDParam(1, _currency_specs[_opt_ptr->currency].name);
SetDParam(2, STR_UNITS_IMPERIAL + _opt_ptr->units);
SetDParam(3, STR_02E9_DRIVE_ON_LEFT + _opt_ptr->road_side);
- SetDParam(4, STR_TOWNNAME_ORIGINAL_ENGLISH + _opt_ptr->town_name);
+ SetDParam(4, TownName(_opt_ptr->town_name));
SetDParam(5, _autosave_dropdown[_opt_ptr->autosave]);
SetDParam(6, SPECSTR_LANGUAGE_START + _dynlang.curr);
i = GetCurRes();
@@ -152,8 +178,8 @@
} return;
case 13: case 14: { /* Setup townname dropdown */
uint sel = 0;
- for (uint i = 0; i < lengthof(_town_names) - 1; i++) {
- if (_town_names[i] == STR_TOWNNAME_ORIGINAL_ENGLISH + _opt_ptr->town_name) {
+ for (uint i = 0; _town_names[i] != INVALID_STRING_ID; i++) {
+ if (_town_names[i] == TownName(_opt_ptr->town_name)) {
sel = i;
break;
}
@@ -214,7 +240,12 @@
break;
case 14: /* Town names */
if (_game_mode == GM_MENU) {
- _opt_ptr->town_name = _town_names[e->we.dropdown.index] - STR_TOWNNAME_ORIGINAL_ENGLISH;
+ for (uint i = 0; _town_names[i] != INVALID_STRING_ID; i++) {
+ if (_town_names[e->we.dropdown.index] == TownName(i)) {
+ _opt_ptr->town_name = i;
+ break;
+ }
+ }
InvalidateWindow(WC_GAME_OPTIONS, 0);
}
break;
@@ -251,7 +282,7 @@
* @param p1 the side of the road; 0 = left side and 1 = right side
* @param p2 unused
*/
-int32 CmdSetRoadDriveSide(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSetRoadDriveSide(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
/* Check boundaries and you can only change this if NO vehicles have been built yet,
* except in the intro-menu where of course it's always possible to do so. */
@@ -261,7 +292,7 @@
_opt_ptr->road_side = p1;
InvalidateWindow(WC_GAME_OPTIONS,0);
}
- return 0;
+ return CommandCost();
}
static const Widget _game_options_widgets[] = {
@@ -621,6 +652,9 @@
"scrollwheel_multiplier",
"pause_on_newgame",
"advanced_vehicle_list",
+ "loading_indicators",
+ "timetable_in_ticks",
+ "default_rail_type",
};
static const char *_patches_construction[] = {
@@ -703,6 +737,7 @@
"wagon_speed_limits",
"disable_elrails",
"freight_trains",
+ "timetabling",
};
struct PatchEntry {
@@ -945,7 +980,7 @@
{ WWT_CLOSEBOX, RESIZE_NONE, 10, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
{ WWT_CAPTION, RESIZE_NONE, 10, 11, 369, 0, 13, STR_CONFIG_PATCHES_CAPTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
{ WWT_PANEL, RESIZE_NONE, 10, 0, 369, 14, 41, 0x0, STR_NULL},
-{ WWT_PANEL, RESIZE_NONE, 10, 0, 369, 42, 370, 0x0, STR_NULL},
+{ WWT_PANEL, RESIZE_NONE, 10, 0, 369, 42, 380, 0x0, STR_NULL},
{ WWT_TEXTBTN, RESIZE_NONE, 3, 10, 96, 16, 27, STR_CONFIG_PATCHES_GUI, STR_NULL},
{ WWT_TEXTBTN, RESIZE_NONE, 3, 97, 183, 16, 27, STR_CONFIG_PATCHES_CONSTRUCTION, STR_NULL},
@@ -957,7 +992,7 @@
};
static const WindowDesc _patches_selection_desc = {
- WDP_CENTER, WDP_CENTER, 370, 371,
+ WDP_CENTER, WDP_CENTER, 370, 381,
WC_GAME_OPTIONS, WC_NONE,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
_patches_selection_widgets,
--- a/src/ship_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ship_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -11,6 +11,7 @@
#include "map.h"
#include "tile.h"
#include "vehicle.h"
+#include "timetable.h"
#include "command.h"
#include "pathfind.h"
#include "station_map.h"
@@ -175,7 +176,7 @@
void OnNewDay_Ship(Vehicle *v)
{
- int32 cost;
+ CommandCost cost;
if ((++v->day_counter & 7) == 0)
DecreaseVehicleValue(v);
@@ -188,11 +189,11 @@
if (v->vehstatus & VS_STOPPED) return;
- cost = GetVehicleProperty(v, 0x0F, ShipVehInfo(v->engine_type)->running_cost) * _price.ship_running / 364;
- v->profit_this_year -= cost >> 8;
+ cost.AddCost(GetVehicleProperty(v, 0x0F, ShipVehInfo(v->engine_type)->running_cost) * _price.ship_running / 364);
+ v->profit_this_year -= cost.GetCost() >> 8;
SET_EXPENSES_TYPE(EXPENSES_SHIP_RUN);
- SubtractMoneyFromPlayerFract(v->owner, cost);
+ SubtractMoneyFromPlayerFract(v->owner, CommandCost(cost));
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
/* we need this for the profit */
@@ -257,6 +258,7 @@
if (!(v->current_order.flags & OF_PART_OF_ORDERS)) return;
if (v->current_order.flags & OF_SERVICE_IF_NEEDED &&
!VehicleNeedsService(v)) {
+ UpdateVehicleTimetable(v, true);
v->cur_order_index++;
}
break;
@@ -403,9 +405,9 @@
return (t < v->progress);
}
-static int32 EstimateShipCost(EngineID engine_type)
+static CommandCost EstimateShipCost(EngineID engine_type)
{
- return GetEngineProperty(engine_type, 0x0A, ShipVehInfo(engine_type)->base_cost) * (_price.ship_base>>3)>>5;
+ return CommandCost(GetEngineProperty(engine_type, 0x0A, ShipVehInfo(engine_type)->base_cost) * (_price.ship_base >> 3) >> 5);
}
static void ShipArrivesAt(const Vehicle* v, Station* st)
@@ -648,6 +650,7 @@
TrackBits tracks;
v->tick_counter++;
+ v->current_order_time++;
if (v->breakdown_ctr != 0) {
if (v->breakdown_ctr <= 2) {
@@ -693,6 +696,7 @@
DistanceManhattan(v->dest_tile, gp.new_tile) <= 3) {
/* We got within 3 tiles of our target buoy, so let's skip to our
* next order */
+ UpdateVehicleTimetable(v, true);
v->cur_order_index++;
v->current_order.type = OT_DUMMY;
InvalidateVehicleOrder(v);
@@ -780,7 +784,7 @@
static void AgeShipCargo(Vehicle *v)
{
if (_age_cargo_skip_counter != 0) return;
- if (v->cargo_days != 255) v->cargo_days++;
+ v->cargo.AgeCargo();
}
void Ship_Tick(Vehicle *v)
@@ -809,9 +813,9 @@
* @param p1 ship type being built (engine)
* @param p2 bit 0 when set, the unitnumber will be 0, otherwise it will be a free number
*/
-int32 CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 value;
+ CommandCost value;
Vehicle *v;
UnitID unit_num;
Engine *e;
@@ -857,7 +861,7 @@
v->cargo_type = svi->cargo_type;
v->cargo_subtype = 0;
v->cargo_cap = svi->capacity;
- v->value = value;
+ v->value = value.GetCost();
v->last_station_visited = INVALID_STATION;
v->max_speed = svi->max_speed;
@@ -904,7 +908,7 @@
* @param p1 vehicle ID to be sold
* @param p2 unused
*/
-int32 CmdSellShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
@@ -929,7 +933,7 @@
DeleteVehicle(v);
}
- return -(int32)v->value;
+ return CommandCost(-v->value);
}
/** Start/Stop a ship.
@@ -938,7 +942,7 @@
* @param p1 ship ID to start/stop
* @param p2 unused
*/
-int32 CmdStartStopShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
uint16 callback;
@@ -968,7 +972,7 @@
InvalidateWindowClasses(WC_SHIPS_LIST);
}
- return 0;
+ return CommandCost();
}
/** Send a ship to the depot.
@@ -979,7 +983,7 @@
* - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
* - p2 bit 8-10 - VLW flag (for mass goto depot)
*/
-int32 CmdSendShipToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendShipToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
const Depot *dep;
@@ -1010,7 +1014,7 @@
TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
- return 0;
+ return CommandCost();
}
if (p2 & DEPOT_DONT_CANCEL) return CMD_ERROR; // Requested no cancelation of depot orders
@@ -1024,7 +1028,7 @@
v->current_order.flags = 0;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
- return 0;
+ return CommandCost();
}
dep = FindClosestShipDepot(v);
@@ -1042,7 +1046,7 @@
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
- return 0;
+ return CommandCost();
}
@@ -1056,10 +1060,10 @@
* - p2 = (bit 16) - refit only this vehicle (ignored)
* @return cost of refit or error
*/
-int32 CmdRefitShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
- int32 cost;
+ CommandCost cost;
CargoID new_cid = GB(p2, 0, 8); //gets the cargo number
byte new_subtype = GB(p2, 8, 8);
uint16 capacity = CALLBACK_FAILED;
@@ -1100,14 +1104,13 @@
}
_returned_refit_capacity = capacity;
- cost = 0;
if (IsHumanPlayer(v->owner) && new_cid != v->cargo_type) {
cost = GetRefitCost(v->engine_type);
}
if (flags & DC_EXEC) {
v->cargo_cap = capacity;
- v->cargo_count = (v->cargo_type == new_cid) ? min(v->cargo_cap, v->cargo_count) : 0;
+ v->cargo.Truncate((v->cargo_type == new_cid) ? capacity : 0);
v->cargo_type = new_cid;
v->cargo_subtype = new_subtype;
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
--- a/src/ship_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/ship_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -38,8 +38,7 @@
SetWindowWidgetDisabledState(w, 5, !_patches.servint_ships);
SetWindowWidgetDisabledState(w, 6, !_patches.servint_ships);
- SetDParam(0, v->string_id);
- SetDParam(1, v->unitnumber);
+ SetDParam(0, v->index);
DrawWindowWidgets(w);
/* Draw running cost */
@@ -83,8 +82,8 @@
DrawShipImage(v, 3, 57, INVALID_VEHICLE);
+ SetDParam(0, v->engine_type);
SetDParam(1, v->build_year);
- SetDParam(0, GetCustomEngineName(v->engine_type));
SetDParam(2, v->value);
DrawString(74, 57, STR_9816_BUILT_VALUE, 0);
@@ -93,16 +92,16 @@
DrawString(74, 67, STR_9817_CAPACITY, 0);
str = STR_8812_EMPTY;
- if (v->cargo_count != 0) {
+ if (!v->cargo.Empty()) {
SetDParam(0, v->cargo_type);
- SetDParam(1, v->cargo_count);
- SetDParam(2, v->cargo_source);
+ 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_feeder_share);
+ SetDParam(0, v->cargo.FeederShare());
DrawString(74, 89, STR_FEEDER_CARGO_VALUE, 0);
} break;
@@ -113,8 +112,8 @@
switch (e->we.click.widget) {
case 2: /* rename */
v = GetVehicle(w->window_number);
- SetDParam(0, v->unitnumber);
- ShowQueryString(v->string_id, STR_9831_NAME_SHIP, 31, 150, w, CS_ALPHANUMERAL);
+ 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;
@@ -208,8 +207,7 @@
SetWindowWidgetDisabledState(w, 11, !is_localplayer);
/* draw widgets & caption */
- SetDParam(0, v->string_id);
- SetDParam(1, v->unitnumber);
+ SetDParam(0, v->index);
DrawWindowWidgets(w);
if (v->breakdown_ctr == 1) {
@@ -297,6 +295,7 @@
DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
+ DeleteWindowById(WC_VEHICLE_TIMETABLE, w->window_number);
break;
case WE_MOUSELOOP: {
--- a/src/signs.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/signs.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -40,7 +40,7 @@
static void UpdateSignVirtCoords(Sign *si)
{
Point pt = RemapCoords(si->x, si->y, si->z);
- SetDParam(0, si->str);
+ SetDParam(0, si->index);
UpdateViewportSignPos(&si->sign, pt.x, pt.y - 6, STR_2806);
}
@@ -123,7 +123,7 @@
* @param p1 unused
* @param p2 unused
*/
-int32 CmdPlaceSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPlaceSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Sign *si;
@@ -149,7 +149,7 @@
_total_signs++;
}
- return 0;
+ return CommandCost();
}
/** Rename a sign. If the new name of the sign is empty, we assume
@@ -161,7 +161,7 @@
* @param p2 unused
* @return 0 if succesfull, otherwise CMD_ERROR
*/
-int32 CmdRenameSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameSign(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (!IsValidSignID(p1)) return CMD_ERROR;
@@ -204,7 +204,7 @@
}
}
- return 0;
+ return CommandCost();
}
/**
--- a/src/signs_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/signs_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -88,7 +88,8 @@
if (si->owner != OWNER_NONE)
DrawPlayerIcon(si->owner, 4, y + 1);
- DrawString(22, y, si->str, 8);
+ SetDParam(0, si->index);
+ DrawString(22, y, STR_SIGN_NAME, 8);
y += 10;
}
}
--- a/src/squirrel_helper.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/squirrel_helper.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -57,6 +57,7 @@
template <> inline int Return<int8> (HSQUIRRELVM vm, int8 res) { sq_pushinteger(vm, res); return 1; }
template <> inline int Return<int16> (HSQUIRRELVM vm, int16 res) { sq_pushinteger(vm, res); return 1; }
template <> inline int Return<int32> (HSQUIRRELVM vm, int32 res) { sq_pushinteger(vm, res); return 1; }
+ template <> inline int Return<int64> (HSQUIRRELVM vm, int64 res) { sq_pushinteger(vm, ClampToI32(res)); return 1; }
template <> inline int Return<bool> (HSQUIRRELVM vm, bool res) { sq_pushbool (vm, res); return 1; }
template <> inline int Return<char *> (HSQUIRRELVM vm, char *res) { if (res == NULL) sq_pushnull(vm); else sq_pushstring (vm, OTTD2FS(res), strlen(res)); free(res); return 1; }
template <> inline int Return<const char *>(HSQUIRRELVM vm, const char *res) { if (res == NULL) sq_pushnull(vm); else sq_pushstring (vm, OTTD2FS(res), strlen(res)); return 1; }
--- a/src/station.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/station.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -79,6 +79,10 @@
free(speclist);
xy = 0;
+
+ for (CargoID c = 0; c < NUM_CARGO; c++) {
+ goods[c].cargo.Truncate(0);
+ }
}
void* Station::operator new(size_t size)
--- a/src/station.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/station.h Tue Jun 26 23:40:58 2007 +0000
@@ -12,34 +12,26 @@
#include "tile.h"
#include "road.h"
#include "newgrf_station.h"
+#include "cargopacket.h"
#include <list>
-static const StationID INVALID_STATION = 0xFFFF;
static const byte INITIAL_STATION_RATING = 175;
struct GoodsEntry {
GoodsEntry() :
- waiting_acceptance(0),
- unload_pending(0),
- days_since_pickup(0),
+ acceptance(false),
+ days_since_pickup(255),
rating(INITIAL_STATION_RATING),
- enroute_from(INVALID_STATION),
- enroute_from_xy(INVALID_TILE),
last_speed(0),
- last_age(255),
- feeder_profit(0)
+ last_age(255)
{}
- uint16 waiting_acceptance;
- uint16 unload_pending; ///< records how much cargo is awaiting transfer during gradual loading to allow correct fee calc
+ bool acceptance;
byte days_since_pickup;
byte rating;
- StationID enroute_from;
- TileIndex enroute_from_xy;
- byte enroute_time;
byte last_speed;
byte last_age;
- int32 feeder_profit;
+ CargoList cargo; ///< The cargo packets of cargo waiting in this station
};
/** A Stop for a Road Vehicle */
--- a/src/station_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/station_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -285,11 +285,7 @@
}
tmp = free_names & ((1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 6) | (1 << 7) | (1 << 12) | (1 << 26) | (1 << 27) | (1 << 28) | (1 << 29) | (1 << 30));
- if (tmp == 0) {
- _error_message = STR_3007_TOO_MANY_STATIONS_LOADING;
- return false;
- }
- found = FindFirstBit(tmp);
+ found = (tmp == 0) ? M(STR_SV_STNAME_FALLBACK) : FindFirstBit(tmp);
done:
st->string_id = found + STR_SV_STNAME;
@@ -355,7 +351,7 @@
uint mask = 0;
for (CargoID i = 0; i < NUM_CARGO; i++) {
- if (st->goods[i].waiting_acceptance & 0x8000) mask |= 1 << i;
+ if (st->goods[i].acceptance) mask |= 1 << i;
}
return mask;
}
@@ -536,7 +532,7 @@
(is_passengers && !(st->facilities & (byte)~FACIL_TRUCK_STOP)))
amt = 0;
- SB(st->goods[i].waiting_acceptance, 12, 4, amt);
+ st->goods[i].acceptance = (amt >= 8);
}
// Only show a message in case the acceptance was actually changed.
@@ -612,13 +608,13 @@
UpdateStationSignCoord(st);
}
-static int32 ClearTile_Station(TileIndex tile, byte flags);
+static CommandCost ClearTile_Station(TileIndex tile, byte flags);
// Tries to clear the given area. Returns the cost in case of success.
// Or an error code if it failed.
-int32 CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true)
+CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true)
{
- int32 cost = 0;
+ CommandCost cost;
int allowed_z = -1;
BEGIN_TILE_LOOP(tile_cur, w, h, tile) {
@@ -653,7 +649,7 @@
(invalid_dirs & 8 && !(tileh & SLOPE_NW) && (uint)h_cur == h)) {
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
}
- cost += _price.terraform;
+ cost.AddCost(_price.terraform);
flat_z += TILE_HEIGHT;
}
@@ -680,9 +676,9 @@
}
}
} else if (check_clear) {
- int32 ret = DoCommand(tile_cur, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
+ CommandCost ret = DoCommand(tile_cur, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) return ret;
- cost += ret;
+ cost.AddCost(ret);
}
} END_TILE_LOOP(tile_cur, w, h, tile)
@@ -801,10 +797,10 @@
* - p2 = (bit 8-15) - custom station class
* - p2 = (bit 16-23) - custom station id
*/
-int32 CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1, uint32 p2)
{
int w_org, h_org;
- int32 ret;
+ CommandCost ret;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -838,7 +834,7 @@
// for detail info, see: https://sourceforge.net/tracker/index.php?func=detail&aid=1029064&group_id=103924&atid=636365
ret = CheckFlatLandBelow(tile_org, w_org, h_org, flags & ~DC_EXEC, 5 << axis, _patches.nonuniform_stations ? &est : NULL);
if (CmdFailed(ret)) return ret;
- int32 cost = ret + (numtracks * _price.train_station_track + _price.train_station_length) * plat_len;
+ CommandCost cost(ret.GetCost() + (numtracks * _price.train_station_track + _price.train_station_length) * plat_len);
Station *st = NULL;
bool check_surrounding = true;
@@ -1054,7 +1050,7 @@
* @param p1 start_tile
* @param p2 unused
*/
-int32 CmdRemoveFromRailroadStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveFromRailroadStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
TileIndex start = p1 == 0 ? tile : p1;
@@ -1121,11 +1117,11 @@
/* If we've not removed any tiles, give an error */
if (quantity == 0) return CMD_ERROR;
- return _price.remove_rail_station * quantity;
+ return CommandCost(_price.remove_rail_station * quantity);
}
-static int32 RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
+static CommandCost RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
{
/* if there is flooding and non-uniform stations are enabled, remove platforms tile by tile */
if (_current_player == OWNER_WATER && _patches.nonuniform_stations)
@@ -1142,7 +1138,7 @@
assert(w != 0 && h != 0);
- int32 cost = 0;
+ CommandCost cost;
/* clear all areas of the station */
do {
int w_bak = w;
@@ -1151,7 +1147,7 @@
if (st->TileBelongsToRailStation(tile)) {
if (!EnsureNoVehicle(tile))
return CMD_ERROR;
- cost += _price.remove_rail_station;
+ cost.AddCost(_price.remove_rail_station);
if (flags & DC_EXEC) {
Track track = GetRailStationTrack(tile);
DoClearSquare(tile);
@@ -1191,7 +1187,7 @@
* @return The cost and state of the operation
* @retval CMD_ERROR An error occured during the operation.
*/
-int32 DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
+CommandCost DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
{
const Station* st = GetStationByTile(tile);
@@ -1211,7 +1207,7 @@
YapfNotifyTrackLayoutChange(tile, GetRailStationTrack(tile));
}
- return _price.build_rail / 2;
+ return CommandCost(_price.build_rail / 2);
}
/**
@@ -1243,7 +1239,7 @@
* bit 2..4: the roadtypes
* bit 5: allow stations directly adjacent to other stations.
*/
-int32 CmdBuildRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
bool type = HASBIT(p2, 0);
bool is_drive_through = HASBIT(p2, 1);
@@ -1267,7 +1263,7 @@
if (!(flags & DC_NO_TOWN_RATING) && !CheckIfAuthorityAllows(tile)) return CMD_ERROR;
- int32 cost = 0;
+ CommandCost cost;
/* Not allowed to build over this road */
if (build_over_road) {
@@ -1340,7 +1336,7 @@
st->sign.width_1 = 0;
}
- cost += (type) ? _price.build_truck_station : _price.build_bus_station;
+ cost.AddCost((type) ? _price.build_truck_station : _price.build_bus_station);
if (flags & DC_EXEC) {
// Insert into linked list of RoadStops
@@ -1371,7 +1367,7 @@
}
// Remove a bus station
-static int32 RemoveRoadStop(Station *st, uint32 flags, TileIndex tile)
+static CommandCost RemoveRoadStop(Station *st, uint32 flags, TileIndex tile)
{
if (_current_player != OWNER_WATER && !CheckOwnership(st->owner)) {
return CMD_ERROR;
@@ -1416,7 +1412,7 @@
DeleteStationIfEmpty(st);
}
- return (is_truck) ? _price.remove_truck_station : _price.remove_bus_station;
+ return CommandCost((is_truck) ? _price.remove_truck_station : _price.remove_bus_station);
}
/** Remove a bus or truck stop
@@ -1425,7 +1421,7 @@
* @param p1 not used
* @param p2 bit 0: 0 for Bus stops, 1 for truck stops
*/
-int32 CmdRemoveRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
/* Make sure the specified tile is a road stop of the correct type */
if (!IsTileType(tile, MP_STATION) || !IsRoadStop(tile) || (uint32)GetRoadStopType(tile) != p2) return CMD_ERROR;
@@ -1438,10 +1434,10 @@
DiagDirToRoadBits(GetRoadStopDir(tile));
bool is_towns_road = is_drive_through && GetStopBuiltOnTownRoad(tile);
- int32 ret = RemoveRoadStop(st, flags, tile);
+ CommandCost ret = RemoveRoadStop(st, flags, tile);
/* If the stop was a drive-through stop replace the road */
- if ((flags & DC_EXEC) && !CmdFailed(ret) && is_drive_through) {
+ if ((flags & DC_EXEC) && CmdSucceeded(ret) && is_drive_through) {
/* Rebuild the drive throuhg road stop. As a road stop can only be
* removed by the owner of the roadstop, _current_player is the
* owner of the road stop. */
@@ -1550,7 +1546,7 @@
* @param p1 airport type, @see airport.h
* @param p2 (bit 0) - allow airports directly adjacent to other airports.
*/
-int32 CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
bool airport_upgrade = true;
@@ -1582,9 +1578,9 @@
int w = afc->size_x;
int h = afc->size_y;
- int32 ret = CheckFlatLandBelow(tile, w, h, flags, 0, NULL);
+ CommandCost ret = CheckFlatLandBelow(tile, w, h, flags, 0, NULL);
if (CmdFailed(ret)) return ret;
- int32 cost = ret;
+ CommandCost cost(ret.GetCost());
Station *st = NULL;
@@ -1638,7 +1634,7 @@
}
}
- cost += _price.build_airport * w * h;
+ cost.AddCost(_price.build_airport * w * h);
if (flags & DC_EXEC) {
st->airport_tile = tile;
@@ -1676,7 +1672,7 @@
return cost;
}
-static int32 RemoveAirport(Station *st, uint32 flags)
+static CommandCost RemoveAirport(Station *st, uint32 flags)
{
if (_current_player != OWNER_WATER && !CheckOwnership(st->owner))
return CMD_ERROR;
@@ -1687,7 +1683,7 @@
int w = afc->size_x;
int h = afc->size_y;
- int32 cost = w * h * _price.remove_airport;
+ CommandCost cost(w * h * _price.remove_airport);
Vehicle *v;
FOR_ALL_VEHICLES(v) {
@@ -1730,7 +1726,7 @@
* @param p1 unused
* @param p2 unused
*/
-int32 CmdBuildBuoy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildBuoy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -1769,7 +1765,7 @@
st_auto_delete.Release();
}
- return _price.build_dock;
+ return CommandCost(_price.build_dock);
}
/* Checks if any ship is servicing the buoy specified. Returns yes or no */
@@ -1789,7 +1785,7 @@
return false;
}
-static int32 RemoveBuoy(Station *st, uint32 flags)
+static CommandCost RemoveBuoy(Station *st, uint32 flags)
{
/* XXX: strange stuff */
if (!IsValidPlayer(_current_player)) return_cmd_error(INVALID_STRING_ID);
@@ -1821,7 +1817,7 @@
DeleteStationIfEmpty(st);
}
- return _price.remove_truck_station;
+ return CommandCost(_price.remove_truck_station);
}
static const TileIndexDiffC _dock_tileoffs_chkaround[] = {
@@ -1839,9 +1835,9 @@
* @param p1 (bit 0) - allow docks directly adjacent to other docks.
* @param p2 unused
*/
-int32 CmdBuildDock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildDock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 cost;
+ CommandCost cost;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -1935,10 +1931,10 @@
/* success, so don't delete the new station */
st_auto_delete.Release();
}
- return _price.build_dock;
+ return CommandCost(_price.build_dock);
}
-static int32 RemoveDock(Station *st, uint32 flags)
+static CommandCost RemoveDock(Station *st, uint32 flags)
{
if (!CheckOwnership(st->owner)) return CMD_ERROR;
@@ -1964,7 +1960,7 @@
DeleteStationIfEmpty(st);
}
- return _price.remove_dock;
+ return CommandCost(_price.remove_dock);
}
#include "table/station_land.h"
@@ -2347,11 +2343,10 @@
/* Slowly increase the rating back to his original level in the case we
* didn't deliver cargo yet to this station. This happens when a bribe
* failed while you didn't moved that cargo yet to a station. */
- if (ge->enroute_from == INVALID_STATION && ge->rating < INITIAL_STATION_RATING)
+ if (ge->days_since_pickup == 255 && ge->rating < INITIAL_STATION_RATING)
ge->rating++;
/* Only change the rating if we are moving this cargo */
- if (ge->enroute_from != INVALID_STATION) {
- byte_inc_sat(&ge->enroute_time);
+ if (ge->last_speed != 0) {
byte_inc_sat(&ge->days_since_pickup);
int rating = 0;
@@ -2383,7 +2378,7 @@
(rating += 35, true);
}
- int waiting = GB(ge->waiting_acceptance, 0, 12);
+ uint waiting = ge->cargo.Count();
(rating -= 90, waiting > 1500) ||
(rating += 55, waiting > 1000) ||
(rating += 35, waiting > 600) ||
@@ -2409,12 +2404,13 @@
if (rating <= 127 && waiting != 0) {
uint32 r = Random();
if (rating <= (int)GB(r, 0, 7)) {
- waiting = max(waiting - (int)GB(r, 8, 2) - 1, 0);
+ /* Need to have int, otherwise it will just overflow etc. */
+ waiting = max((int)waiting - (int)GB(r, 8, 2) - 1, 0);
waiting_changed = true;
}
}
- if (waiting_changed) SB(ge->waiting_acceptance, 0, 12, waiting);
+ if (waiting_changed) ge->cargo.Truncate(waiting);
}
}
} while (++ge != endof(st->goods));
@@ -2467,7 +2463,7 @@
for (CargoID i = 0; i < NUM_CARGO; i++) {
GoodsEntry* ge = &st->goods[i];
- if (ge->enroute_from != INVALID_STATION) {
+ if (ge->days_since_pickup != 255) {
ge->rating = clamp(ge->rating + amount, 0, 255);
}
}
@@ -2477,13 +2473,8 @@
static void UpdateStationWaiting(Station *st, CargoID type, uint amount)
{
- SB(st->goods[type].waiting_acceptance, 0, 12,
- min(0xFFF, GB(st->goods[type].waiting_acceptance, 0, 12) + amount)
- );
-
- st->goods[type].enroute_time = 0;
- st->goods[type].enroute_from = st->index;
- st->goods[type].enroute_from_xy = st->xy;
+ st->goods[type].cargo.Append(new CargoPacket(st->index, amount));
+
InvalidateWindow(WC_STATION_VIEW, st->index);
st->MarkTilesDirty(true);
}
@@ -2494,7 +2485,7 @@
* @param p1 station ID that is to be renamed
* @param p2 unused
*/
-int32 CmdRenameStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (!IsValidStationID(p1) || _cmd_text[0] == '\0') return CMD_ERROR;
Station *st = GetStation(p1);
@@ -2516,7 +2507,7 @@
DeleteName(str);
}
- return 0;
+ return CommandCost();
}
@@ -2553,7 +2544,7 @@
if (around[i] == NULL) {
if (!st->IsBuoy() &&
(st->town->exclusive_counter == 0 || st->town->exclusivity == st->owner) && // check exclusive transport rights
- st->goods[type].rating != 0 &&
+ st->goods[type].rating != 0 && st->goods[type].last_speed != 0 && // we actually service the station
(!_patches.selectgoods || st->goods[type].last_speed > 0) && // if last_speed is 0, no vehicle has been there.
((st->facilities & ~FACIL_BUS_STOP) != 0 || IsCargoInClass(type, CC_PASSENGERS)) && // if we have other fac. than a bus stop, or the cargo is passengers
((st->facilities & ~FACIL_TRUCK_STOP) != 0 || !IsCargoInClass(type, CC_PASSENGERS))) { // if we have other fac. than a cargo bay or the cargo is not passengers
@@ -2683,10 +2674,8 @@
st->build_date = _date;
for (CargoID j = 0; j < NUM_CARGO; j++) {
- st->goods[j].waiting_acceptance = 0;
- st->goods[j].days_since_pickup = 0;
- st->goods[j].enroute_from = INVALID_STATION;
- st->goods[j].enroute_from_xy = INVALID_TILE;
+ st->goods[j].acceptance = false;
+ st->goods[j].days_since_pickup = 255;
st->goods[j].rating = INITIAL_STATION_RATING;
st->goods[j].last_speed = 0;
st->goods[j].last_age = 255;
@@ -2748,7 +2737,7 @@
CheckAllowRemoveRoad(tile, GetAnyRoadBits(tile, ROADTYPE_TRAM), OWNER_TOWN, &edge_road, ROADTYPE_TRAM);
}
-static int32 ClearTile_Station(TileIndex tile, byte flags)
+static CommandCost ClearTile_Station(TileIndex tile, byte flags)
{
if (flags & DC_AUTO) {
switch (GetStationType(tile)) {
@@ -2810,6 +2799,8 @@
st->speclist[i].spec = GetCustomStationSpecByGrf(st->speclist[i].grfid, st->speclist[i].localidx);
}
+
+ for (CargoID c = 0; c < NUM_CARGO; c++) st->goods[c].cargo.InvalidateCache();
}
}
@@ -2906,18 +2897,27 @@
SLE_END()
};
+static uint16 _waiting_acceptance;
+static uint16 _cargo_source;
+static uint32 _cargo_source_xy;
+static uint16 _cargo_days;
+static Money _cargo_feeder_share;
+
static const SaveLoad _goods_desc[] = {
- SLE_VAR(GoodsEntry, waiting_acceptance, SLE_UINT16),
- SLE_CONDVAR(GoodsEntry, unload_pending, SLE_UINT16, 51, SL_MAX_VERSION),
- SLE_VAR(GoodsEntry, days_since_pickup, SLE_UINT8),
- SLE_VAR(GoodsEntry, rating, SLE_UINT8),
- SLE_CONDVAR(GoodsEntry, enroute_from, SLE_FILE_U8 | SLE_VAR_U16, 0, 6),
- SLE_CONDVAR(GoodsEntry, enroute_from, SLE_UINT16, 7, SL_MAX_VERSION),
- SLE_CONDVAR(GoodsEntry, enroute_from_xy, SLE_UINT32, 44, SL_MAX_VERSION),
- SLE_VAR(GoodsEntry, enroute_time, SLE_UINT8),
- SLE_VAR(GoodsEntry, last_speed, SLE_UINT8),
- SLE_VAR(GoodsEntry, last_age, SLE_UINT8),
- SLE_CONDVAR(GoodsEntry, feeder_profit, SLE_INT32, 14, SL_MAX_VERSION),
+ SLEG_CONDVAR( _waiting_acceptance, SLE_UINT16, 0, 67),
+ SLE_CONDVAR(GoodsEntry, acceptance, SLE_BOOL, 68, SL_MAX_VERSION),
+ SLE_CONDNULL(2, 51, 67),
+ SLE_VAR(GoodsEntry, days_since_pickup, SLE_UINT8),
+ SLE_VAR(GoodsEntry, rating, SLE_UINT8),
+ SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6),
+ SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 67),
+ SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, 44, 67),
+ SLEG_CONDVAR( _cargo_days, SLE_UINT8, 0, 67),
+ SLE_VAR(GoodsEntry, last_speed, SLE_UINT8),
+ SLE_VAR(GoodsEntry, last_age, SLE_UINT8),
+ SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_U32 | SLE_VAR_I64, 14, 64),
+ SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, 65, 67),
+ SLE_CONDLST(GoodsEntry, cargo, REF_CARGO_PACKET, 68, SL_MAX_VERSION),
SLE_END()
};
@@ -2934,9 +2934,30 @@
{
SlObject(st, _station_desc);
+ _waiting_acceptance = 0;
+
uint num_cargo = CheckSavegameVersion(55) ? 12 : NUM_CARGO;
for (CargoID i = 0; i < num_cargo; i++) {
- SlObject(&st->goods[i], _goods_desc);
+ GoodsEntry *ge = &st->goods[i];
+ SlObject(ge, _goods_desc);
+ if (CheckSavegameVersion(68)) {
+ ge->acceptance = HASBIT(_waiting_acceptance, 15);
+ if (GB(_waiting_acceptance, 0, 12) != 0) {
+ /* Don't construct the packet with station here, because that'll fail with old savegames */
+ CargoPacket *cp = new CargoPacket();
+ /* In old versions, enroute_from used 0xFF as INVALID_STATION */
+ cp->source = (CheckSavegameVersion(7) && _cargo_source == 0xFF) ? INVALID_STATION : _cargo_source;
+ cp->count = GB(_waiting_acceptance, 0, 12);
+ cp->days_in_transit = _cargo_days;
+ cp->feeder_share = _cargo_feeder_share;
+ cp->source_xy = _cargo_source_xy;
+ cp->days_in_transit = _cargo_days;
+ cp->feeder_share = _cargo_feeder_share;
+ ge->cargo.Append(cp);
+ } else {
+ ge->days_since_pickup = 255;
+ }
+ }
}
if (st->num_specs != 0) {
--- a/src/station_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/station_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -131,14 +131,14 @@
{
const Station* st1 = *(const Station**)a;
const Station* st2 = *(const Station**)b;
- int sum1 = 0, sum2 = 0;
+ Money sum1 = 0, sum2 = 0;
for (CargoID j = 0; j < NUM_CARGO; j++) {
- if (st1->goods[j].waiting_acceptance & 0xfff) sum1 += GetTransportedGoodsIncome(st1->goods[j].waiting_acceptance & 0xfff, 20, 50, j);
- if (st2->goods[j].waiting_acceptance & 0xfff) sum2 += GetTransportedGoodsIncome(st2->goods[j].waiting_acceptance & 0xfff, 20, 50, j);
+ if (!st1->goods[j].cargo.Empty()) sum1 += GetTransportedGoodsIncome(st1->goods[j].cargo.Count(), 20, 50, j);
+ if (!st2->goods[j].cargo.Empty()) sum2 += GetTransportedGoodsIncome(st2->goods[j].cargo.Count(), 20, 50, j);
}
- return (_internal_sort_order & 1) ? sum2 - sum1 : sum1 - sum2;
+ return (_internal_sort_order & 1) ? ClampToI32(sum2 - sum1) : ClampToI32(sum1 - sum2);
}
/**
@@ -157,8 +157,8 @@
byte maxr2 = 0;
for (CargoID j = 0; j < NUM_CARGO; j++) {
- if (st1->goods[j].enroute_from != INVALID_STATION) maxr1 = max(maxr1, st1->goods[j].rating);
- if (st2->goods[j].enroute_from != INVALID_STATION) maxr2 = max(maxr2, st2->goods[j].rating);
+ if (st1->goods[j].days_since_pickup != 255) maxr1 = max(maxr1, st1->goods[j].rating);
+ if (st2->goods[j].days_since_pickup != 255) maxr2 = max(maxr2, st2->goods[j].rating);
}
return (_internal_sort_order & 1) ? maxr2 - maxr1 : maxr1 - maxr2;
@@ -225,7 +225,7 @@
if (facilities & st->facilities) { //only stations with selected facilities
int num_waiting_cargo = 0;
for (CargoID j = 0; j < NUM_CARGO; j++) {
- if (st->goods[j].waiting_acceptance & 0xFFF) {
+ if (!st->goods[j].cargo.Empty()) {
num_waiting_cargo++; //count number of waiting cargo
if (HASBIT(cargo_filter, j)) {
station_sort[n++] = st;
@@ -309,10 +309,8 @@
SetVScrollCount(w, sl->list_length);
/* draw widgets, with player's name in the caption */
- const Player* p = GetPlayer(owner);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, w->vscroll.count);
+ SetDParam(0, owner);
+ SetDParam(1, w->vscroll.count);
DrawWindowWidgets(w);
/* draw sorting criteria string */
@@ -368,9 +366,8 @@
/* show cargo waiting and station ratings */
for (CargoID j = 0; j < NUM_CARGO; j++) {
- uint amount = GB(st->goods[j].waiting_acceptance, 0, 12);
- if (amount != 0) {
- StationsWndShowStationRating(x, y, j, amount, st->goods[j].rating);
+ if (!st->goods[j].cargo.Empty()) {
+ StationsWndShowStationRating(x, y, j, st->goods[j].cargo.Count(), st->goods[j].rating);
x += 20;
}
}
@@ -705,9 +702,9 @@
num = 1;
for (CargoID i = 0; i < NUM_CARGO; i++) {
- if (GB(st->goods[i].waiting_acceptance, 0, 12) != 0) {
+ if (!st->goods[i].cargo.Empty()) {
num++;
- if (st->goods[i].enroute_from != station_id) num++;
+ if (st->goods[i].cargo.Source() != station_id) num++;
}
}
SetVScrollCount(w, num);
@@ -729,7 +726,7 @@
if (--pos < 0) {
str = STR_00D0_NOTHING;
for (CargoID i = 0; i < NUM_CARGO; i++) {
- if (GB(st->goods[i].waiting_acceptance, 0, 12) != 0) str = STR_EMPTY;
+ if (!st->goods[i].cargo.Empty()) str = STR_EMPTY;
}
SetDParam(0, str);
DrawString(x, y, STR_0008_WAITING, 0);
@@ -737,10 +734,10 @@
}
for (CargoID i = 0; i < NUM_CARGO && pos > -5; i++) {
- uint waiting = GB(st->goods[i].waiting_acceptance, 0, 12);
+ uint waiting = st->goods[i].cargo.Count();
if (waiting == 0) continue;
- if (st->goods[i].enroute_from == station_id) {
+ if (st->goods[i].cargo.Source() == station_id) {
if (--pos < 0) {
DrawCargoIcons(i, waiting, x, y);
SetDParam(1, waiting);
@@ -759,7 +756,7 @@
}
if (pos > -5 && --pos < 0) {
- SetDParam(0, st->goods[i].enroute_from);
+ SetDParam(0, st->goods[i].cargo.Source());
DrawStringRightAligned(x + 234, y, STR_000B, 0);
y += 10;
}
@@ -774,7 +771,7 @@
for (CargoID i = 0; i < NUM_CARGO; i++) {
if (b >= endof(_userstring) - 5 - 1) break;
- if (st->goods[i].waiting_acceptance & 0x8000) {
+ if (st->goods[i].acceptance) {
if (first) {
first = false;
} else {
@@ -800,7 +797,7 @@
if (!cs->IsValid()) continue;
const GoodsEntry *ge = &st->goods[i];
- if (ge->enroute_from == INVALID_STATION) continue;
+ if (ge->days_since_pickup == 255) continue;
SetDParam(0, cs->name);
SetDParam(2, ge->rating * 101 >> 8);
--- a/src/stdafx.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/stdafx.h Tue Jun 26 23:40:58 2007 +0000
@@ -20,6 +20,7 @@
# endif
#else
# define INT64_MAX 9223372036854775807LL
+# define INT64_MIN -9223372036854775808LL
#endif
#include <cstdio>
@@ -154,6 +155,7 @@
# define _CRT_SECURE_NO_DEPRECATE // all deprecated 'unsafe string functions
# define _CRT_NON_CONFORMING_SWPRINTFS // another deprecated stuff
# else /* _MSC_VER >= 1400 ( <1400 for MSVC2003) */
+# pragma warning(disable: 4288) // nonstandard extension used : 'y' : loop control variable declared in the for-loop is used outside the for-loop scope; it conflicts with the declaration in the outer scope
# pragma warning(disable: 4292) // compiler limit : terminating debug information emission for enum 'StringIdEnum' with member 'STR_801D_COAL_CAR'
# endif /* _MSC_VER >= 1400 */
--- a/src/strgen/strgen.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/strgen/strgen.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -457,16 +457,9 @@
{"DKBLUE", EmitSingleChar, SCC_DKBLUE, 0, 0},
{"BLACK", EmitSingleChar, SCC_BLACK, 0, 0},
- {"CURRCOMPACT", EmitSingleChar, SCC_CURRENCY_COMPACT, 1, 0}, // compact currency (32 bits)
+ {"CURRCOMPACT", EmitSingleChar, SCC_CURRENCY_COMPACT, 1, 0}, // compact currency
{"REV", EmitSingleChar, SCC_REVISION, 0, 0}, // openttd revision string
{"SHORTCARGO", EmitSingleChar, SCC_CARGO_SHORT, 2, 0}, // short cargo description, only ### tons, or ### litres
- {"CURRCOMPACT64", EmitSingleChar, SCC_CURRENCY_COMPACT_64, 2, 0}, // compact currency 64 bits
-
- // These are special versions of {STRING1}
- // The first string includes the second string.
- {"COMPANY", EmitSingleChar, SCC_STRING1, 1, 0},
- {"PLAYERNAME", EmitSingleChar, SCC_STRING1, 1, 0},
- {"VEHICLE", EmitSingleChar, SCC_STRING1, 1, 0},
{"STRING1", EmitSingleChar, SCC_STRING1, 1, C_CASE}, // included string that consumes ONE argument
{"STRING2", EmitSingleChar, SCC_STRING2, 2, C_CASE}, // included string that consumes TWO arguments
@@ -501,12 +494,17 @@
{"NUM", EmitSingleChar, SCC_NUM, 1, 0}, // Signed number
{"CURRENCY", EmitSingleChar, SCC_CURRENCY, 1, 0},
- {"CURRENCY64", EmitSingleChar, SCC_CURRENCY_64, 2, 0},
{"WAYPOINT", EmitSingleChar, SCC_WAYPOINT_NAME, 1, 0}, // waypoint name
{"STATION", EmitSingleChar, SCC_STATION_NAME, 1, 0},
{"TOWN", EmitSingleChar, SCC_TOWN_NAME, 1, 0},
{"GROUP", EmitSingleChar, SCC_GROUP_NAME, 1, 0},
+ {"SIGN", EmitSingleChar, SCC_SIGN_NAME, 1, 0},
+ {"ENGINE", EmitSingleChar, SCC_ENGINE_NAME, 1, 0},
+ {"VEHICLE", EmitSingleChar, SCC_VEHICLE_NAME, 1, 0},
+ {"COMPANY", EmitSingleChar, SCC_COMPANY_NAME, 1, 0},
+ {"COMPANYNUM", EmitSingleChar, SCC_COMPANY_NUM, 1, 0},
+ {"PLAYERNAME", EmitSingleChar, SCC_PLAYER_NAME, 1, 0},
// 0x9D is used for the pseudo command SETCASE
// 0x9E is used for case switching
--- a/src/strings.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/strings.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -28,6 +28,10 @@
#include "cargotype.h"
#include "group.h"
#include "debug.h"
+#include "newgrf_townname.h"
+#include "signs.h"
+#include "vehicle.h"
+#include "newgrf_engine.h"
/* for opendir/readdir/closedir */
# include "fios.h"
@@ -37,9 +41,9 @@
static char *StationGetSpecialString(char *buff, int x, const char* last);
static char *GetSpecialTownNameString(char *buff, int ind, uint32 seed, const char* last);
-static char *GetSpecialPlayerNameString(char *buff, int ind, const int32 *argv, const char* last);
+static char *GetSpecialPlayerNameString(char *buff, int ind, const int64 *argv, const char* last);
-static char *FormatString(char *buff, const char *str, const int32 *argv, uint casei, const char* last);
+static char *FormatString(char *buff, const char *str, const int64 *argv, uint casei, const char* last);
struct LanguagePack {
uint32 ident; // 32-bits identifier
@@ -60,27 +64,22 @@
/** Read an int64 from the argv array. */
-static inline int64 GetInt64(const int32 **argv)
-{
- int64 result;
-
- assert(argv);
- result = (uint32)(*argv)[0] + ((uint64)(uint32)(*argv)[1] << 32);
- (*argv) += 2;
- return result;
-}
-
-/** Read an int32 from the argv array. */
-static inline int32 GetInt32(const int32 **argv)
+static inline int64 GetInt64(const int64 **argv)
{
assert(argv);
return *(*argv)++;
}
+/** Read an int32 from the argv array. */
+static inline int32 GetInt32(const int64 **argv)
+{
+ return (int32)GetInt64(argv);
+}
+
/** Read an array from the argv array. */
-static inline const int32 *GetArgvPtr(const int32 **argv, int n)
+static inline const int64 *GetArgvPtr(const int64 **argv, int n)
{
- const int32 *result;
+ const int64 *result;
assert(*argv);
result = *argv;
(*argv) += n;
@@ -114,7 +113,7 @@
* @param last
* @return a formatted string of char
*/
-static char *GetStringWithArgs(char *buffr, uint string, const int32 *argv, const char* last)
+static char *GetStringWithArgs(char *buffr, uint string, const int64 *argv, const char* last)
{
uint index = GB(string, 0, 11);
uint tab = GB(string, 11, 5);
@@ -179,7 +178,7 @@
char *GetString(char *buffr, StringID string, const char* last)
{
- return GetStringWithArgs(buffr, string, (int32*)_decode_parameters, last);
+ return GetStringWithArgs(buffr, string, (int64*)_decode_parameters, last);
}
@@ -221,7 +220,7 @@
void InjectDParam(int amount)
{
- memmove(_decode_parameters + amount, _decode_parameters, sizeof(_decode_parameters) - amount * sizeof(uint32));
+ memmove(_decode_parameters + amount, _decode_parameters, sizeof(_decode_parameters) - amount * sizeof(uint64));
}
static const uint32 _divisor_table[] = {
@@ -311,7 +310,7 @@
YearMonthDay ymd;
ConvertDateToYMD(date, &ymd);
- int32 args[3] = { ymd.day + STR_01AC_1ST - 1, STR_0162_JAN + ymd.month, ymd.year };
+ int64 args[3] = { ymd.day + STR_01AC_1ST - 1, STR_0162_JAN + ymd.month, ymd.year };
return FormatString(buff, GetStringPtr(STR_DATE_LONG), args, 0, last);
}
@@ -320,7 +319,7 @@
YearMonthDay ymd;
ConvertDateToYMD(date, &ymd);
- int32 args[2] = { STR_MONTH_JAN + ymd.month, ymd.year };
+ int64 args[2] = { STR_MONTH_JAN + ymd.month, ymd.year };
return FormatString(buff, GetStringPtr(STR_DATE_SHORT), args, 0, last);
}
@@ -335,19 +334,21 @@
snprintf(day, lengthof(day), "%02i", ymd.day);
snprintf(month, lengthof(month), "%02i", ymd.month + 1);
- int32 args[3] = { BindCString(day), BindCString(month), ymd.year };
+ int64 args[3] = { BindCString(day), BindCString(month), ymd.year };
return FormatString(buff, GetStringPtr(STR_DATE_TINY), args, 0, last);
}
-static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, int64 number, bool compact, const char* last)
+static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, Money number, bool compact, const char* last)
{
const char* multiplier = "";
char buf[40];
char* p;
int j;
- /* multiply by exchange rate */
- number *= spec->rate;
+ /* Multiply by exchange rate, but do it safely. */
+ CommandCost cs(number);
+ cs.MultiplyCost(spec->rate);
+ number = cs.GetCost();
/* convert from negative */
if (number < 0) {
@@ -522,11 +523,11 @@
},
};
-static char* FormatString(char* buff, const char* str, const int32* argv, uint casei, const char* last)
+static char* FormatString(char* buff, const char* str, const int64* argv, uint casei, const char* last)
{
extern const char _openttd_revision[];
WChar b;
- const int32 *argv_orig = argv;
+ const int64 *argv_orig = argv;
uint modifier = 0;
while ((b = Utf8Consume(&str)) != '\0') {
@@ -559,7 +560,7 @@
break;
case SCC_VELOCITY: {// {VELOCITY}
- int32 args[1];
+ int64 args[1];
assert(_opt_ptr->units < lengthof(units));
args[0] = GetInt32(&argv) * units[_opt_ptr->units].s_m >> units[_opt_ptr->units].s_s;
buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].velocity), args, modifier >> 24, last);
@@ -568,7 +569,7 @@
}
case SCC_CURRENCY_COMPACT: /* {CURRCOMPACT} */
- buff = FormatGenericCurrency(buff, _currency, GetInt32(&argv), true, last);
+ buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), true, last);
break;
case SCC_REVISION: /* {REV} */
@@ -582,7 +583,7 @@
StringID cargo_str = GetCargo(GetInt32(&argv))->units_volume;
switch (cargo_str) {
case STR_TONS: {
- int32 args[1];
+ int64 args[1];
assert(_opt_ptr->units < lengthof(units));
args[0] = GetInt32(&argv) * units[_opt_ptr->units].w_m >> units[_opt_ptr->units].w_s;
buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].l_weight), args, modifier >> 24, last);
@@ -591,7 +592,7 @@
}
case STR_LITERS: {
- int32 args[1];
+ int64 args[1];
assert(_opt_ptr->units < lengthof(units));
args[0] = GetInt32(&argv) * units[_opt_ptr->units].v_m >> units[_opt_ptr->units].v_s;
buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].l_volume), args, modifier >> 24, last);
@@ -613,12 +614,6 @@
}
} break;
- case SCC_CURRENCY_COMPACT_64: { /* {CURRCOMPACT64} */
- /* 64 bit compact currency-unit */
- buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), true, last);
- break;
- }
-
case SCC_STRING1: { /* {STRING1} */
/* String that consumes ONE argument */
uint str = modifier + GetInt32(&argv);
@@ -666,7 +661,7 @@
case SCC_INDUSTRY_NAME: { /* {INDUSTRY} */
const Industry* i = GetIndustry(GetInt32(&argv));
- int32 args[2];
+ int64 args[2];
/* industry not valid anymore? */
if (!IsValidIndustry(i)) break;
@@ -681,7 +676,7 @@
}
case SCC_VOLUME: { // {VOLUME}
- int32 args[1];
+ int64 args[1];
assert(_opt_ptr->units < lengthof(units));
args[0] = GetInt32(&argv) * units[_opt_ptr->units].v_m >> units[_opt_ptr->units].v_s;
buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].l_volume), args, modifier >> 24, last);
@@ -715,7 +710,7 @@
}
case SCC_POWER: { // {POWER}
- int32 args[1];
+ int64 args[1];
assert(_opt_ptr->units < lengthof(units));
args[0] = GetInt32(&argv) * units[_opt_ptr->units].p_m >> units[_opt_ptr->units].p_s;
buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].power), args, modifier >> 24, last);
@@ -724,7 +719,7 @@
}
case SCC_VOLUME_SHORT: { // {VOLUME_S}
- int32 args[1];
+ int64 args[1];
assert(_opt_ptr->units < lengthof(units));
args[0] = GetInt32(&argv) * units[_opt_ptr->units].v_m >> units[_opt_ptr->units].v_s;
buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].s_volume), args, modifier >> 24, last);
@@ -733,7 +728,7 @@
}
case SCC_WEIGHT: { // {WEIGHT}
- int32 args[1];
+ int64 args[1];
assert(_opt_ptr->units < lengthof(units));
args[0] = GetInt32(&argv) * units[_opt_ptr->units].w_m >> units[_opt_ptr->units].w_s;
buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].l_weight), args, modifier >> 24, last);
@@ -742,7 +737,7 @@
}
case SCC_WEIGHT_SHORT: { // {WEIGHT_S}
- int32 args[1];
+ int64 args[1];
assert(_opt_ptr->units < lengthof(units));
args[0] = GetInt32(&argv) * units[_opt_ptr->units].w_m >> units[_opt_ptr->units].w_s;
buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].s_weight), args, modifier >> 24, last);
@@ -751,7 +746,7 @@
}
case SCC_FORCE: { // {FORCE}
- int32 args[1];
+ int64 args[1];
assert(_opt_ptr->units < lengthof(units));
args[0] = GetInt32(&argv) * units[_opt_ptr->units].f_m >> units[_opt_ptr->units].f_s;
buff = FormatString(buff, GetStringPtr(units[_opt_ptr->units].force), args, modifier >> 24, last);
@@ -800,11 +795,11 @@
break;
case SCC_CURRENCY: // {CURRENCY}
- buff = FormatGenericCurrency(buff, _currency, GetInt32(&argv), false, last);
+ buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), false, last);
break;
case SCC_WAYPOINT_NAME: { // {WAYPOINT}
- int32 temp[2];
+ int64 temp[2];
Waypoint *wp = GetWaypoint(GetInt32(&argv));
StringID str;
if (wp->string != STR_NULL) {
@@ -824,9 +819,10 @@
if (!st->IsValid()) { // station doesn't exist anymore
buff = GetStringWithArgs(buff, STR_UNKNOWN_DESTINATION, NULL, last);
} else {
- int32 temp[2];
- temp[0] = st->town->townnametype;
- temp[1] = st->town->townnameparts;
+ int64 temp[3];
+ temp[0] = STR_TOWN;
+ temp[1] = st->town->index;
+ temp[2] = st->index;
buff = GetStringWithArgs(buff, st->string_id, temp, last);
}
break;
@@ -834,29 +830,89 @@
case SCC_TOWN_NAME: { // {TOWN}
const Town* t = GetTown(GetInt32(&argv));
- int32 temp[1];
+ int64 temp[1];
assert(IsValidTown(t));
temp[0] = t->townnameparts;
- buff = GetStringWithArgs(buff, t->townnametype, temp, last);
+ uint32 grfid = t->townnamegrfid;
+
+ if (grfid == 0) {
+ /* Original town name */
+ buff = GetStringWithArgs(buff, t->townnametype, temp, last);
+ } else {
+ /* Newgrf town name */
+ if (GetGRFTownName(grfid) != NULL) {
+ /* The grf is loaded */
+ buff = GRFTownNameGenerate(buff, t->townnamegrfid, t->townnametype, t->townnameparts, last);
+ } else {
+ /* Fallback to english original */
+ buff = GetStringWithArgs(buff, SPECSTR_TOWNNAME_ENGLISH, temp, last);
+ }
+ }
break;
}
case SCC_GROUP_NAME: { // {GROUP}
const Group *g = GetGroup(GetInt32(&argv));
- int32 args[1];
+ int64 args[1];
assert(IsValidGroup(g));
args[0] = g->index;
- buff = GetStringWithArgs(buff, (g->string_id == STR_SV_GROUP_NAME) ? (StringID)STR_GROUP_NAME_FORMAT : g->string_id, args, last);
+ buff = GetStringWithArgs(buff, IsCustomName(g->string_id) ? g->string_id : (StringID)STR_GROUP_NAME_FORMAT, args, last);
break;
}
- case SCC_CURRENCY_64: { // {CURRENCY64}
- buff = FormatGenericCurrency(buff, _currency, GetInt64(&argv), false, last);
+ case SCC_ENGINE_NAME: { // {ENGINE}
+ EngineID engine = (EngineID)GetInt32(&argv);
+
+ buff = GetString(buff, GetCustomEngineName(engine), last);
+ break;
+ }
+
+ case SCC_VEHICLE_NAME: { // {VEHICLE}
+ const Vehicle *v = GetVehicle(GetInt32(&argv));
+
+ int64 args[1];
+ args[0] = v->unitnumber;
+
+ buff = GetStringWithArgs(buff, v->string_id, args, last);
+ break;
+ }
+
+ case SCC_SIGN_NAME: { // {SIGN}
+ const Sign *si = GetSign(GetInt32(&argv));
+ buff = GetString(buff, si->str, last);
+ break;
+ }
+
+ case SCC_COMPANY_NAME: { // {COMPANY}
+ const Player *p = GetPlayer((PlayerID)GetInt32(&argv));
+ int64 args[1];
+ args[0] = p->name_2;
+ buff = GetStringWithArgs(buff, p->name_1, args, last);
+ break;
+ }
+
+ case SCC_COMPANY_NUM: { // {COMPANYNUM}
+ PlayerID player = (PlayerID)GetInt32(&argv);
+
+ /* Nothing is added for AI or inactive players */
+ if (IsHumanPlayer(player) && IsValidPlayer(player)) {
+ int64 args[1];
+ args[0] = player + 1;
+ buff = GetStringWithArgs(buff, STR_7002_PLAYER, args, last);
+ }
+ break;
+ }
+
+ case SCC_PLAYER_NAME: { // {PLAYERNAME}
+ const Player *p = GetPlayer((PlayerID)GetInt32(&argv));
+ int64 args[1];
+ args[0] = p->president_name_2;
+ buff = GetStringWithArgs(buff, p->president_name_1, args, last);
break;
}
@@ -1029,7 +1085,7 @@
return buff;
}
-static char *GetSpecialPlayerNameString(char *buff, int ind, const int32 *argv, const char* last)
+static char *GetSpecialPlayerNameString(char *buff, int ind, const int64 *argv, const char* last)
{
switch (ind) {
case 1: // not used
--- a/src/subsidy_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/subsidy_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -122,14 +122,12 @@
for (s = _subsidies; s != endof(_subsidies); s++) {
if (s->cargo_type != CT_INVALID && s->age >= 12) {
- const Player *p;
int xt;
SetupSubsidyDecodeParam(s, 1);
- p = GetPlayer(GetStation(s->to)->owner);
- SetDParam(3, p->name_1);
- SetDParam(4, p->name_2);
+ PlayerID player = GetStation(s->to)->owner;
+ SetDParam(3, player);
xt = DrawString(x + 2, y, STR_202C_FROM_TO, 0);
--- a/src/table/control_codes.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/table/control_codes.h Tue Jun 26 23:40:58 2007 +0000
@@ -27,11 +27,15 @@
SCC_STATION_NAME,
SCC_TOWN_NAME,
SCC_GROUP_NAME,
+ SCC_VEHICLE_NAME,
+ SCC_SIGN_NAME,
+ SCC_COMPANY_NAME,
+ SCC_COMPANY_NUM,
+ SCC_PLAYER_NAME,
+ SCC_ENGINE_NAME,
SCC_CURRENCY_COMPACT,
- SCC_CURRENCY_COMPACT_64,
SCC_CURRENCY,
- SCC_CURRENCY_64,
SCC_CARGO,
SCC_CARGO_SHORT,
--- a/src/texteff.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/texteff.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -19,10 +19,11 @@
#include "blitter/factory.hpp"
#include <stdarg.h> /* va_list */
#include "date.h"
+#include "texteff.hpp"
enum {
MAX_TEXTMESSAGE_LENGTH = 200,
- MAX_TEXT_MESSAGES = 30,
+ INIT_NUM_TEXT_MESSAGES = 20,
MAX_CHAT_MESSAGES = 10,
MAX_ANIMATED_TILES = 256,
};
@@ -34,8 +35,9 @@
int32 right;
int32 bottom;
uint16 duration;
- uint32 params_1;
- uint32 params_2;
+ uint64 params_1;
+ uint64 params_2;
+ TextEffectMode mode;
};
@@ -45,17 +47,18 @@
Date end_date;
};
-static TextEffect _text_effect_list[MAX_TEXT_MESSAGES];
+static TextEffect *_text_effect_list = NULL;
static TextMessage _textmsg_list[MAX_CHAT_MESSAGES];
TileIndex _animated_tile_list[MAX_ANIMATED_TILES];
static bool _textmessage_dirty = false;
static bool _textmessage_visible = false;
+static uint16 _num_text_effects = INIT_NUM_TEXT_MESSAGES;
/* The chatbox grows from the bottom so the coordinates are pixels from
* the left and pixels from the bottom. The height is the maximum height */
static const Oblong _textmsg_box = {10, 30, 500, 150};
-static uint8 _textmessage_backup[150 * 500 * 4]; // (height * width)
+static uint8 _textmessage_backup[150 * 500 * 6]; // (height * width)
static inline uint GetTextMessageCount()
{
@@ -163,7 +166,7 @@
_textmessage_visible = false;
/* Put our 'shot' back to the screen */
- blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height, _textmsg_box.width);
+ blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height);
/* And make sure it is updated next time */
_video_driver->make_dirty(x, y, width, height);
@@ -223,8 +226,10 @@
}
if (width <= 0 || height <= 0) return;
+ assert(blitter->BufferSize(width, height) < (int)sizeof(_textmessage_backup));
+
/* Make a copy of the screen as it is before painting (for undraw) */
- blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height, _textmsg_box.width);
+ blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, x, y), _textmessage_backup, width, height);
_cur_dpi = &_screen; // switch to _screen painting
@@ -259,24 +264,38 @@
);
}
-void AddTextEffect(StringID msg, int x, int y, uint16 duration)
+TextEffectID AddTextEffect(StringID msg, int x, int y, uint16 duration, TextEffectMode mode)
{
TextEffect *te;
int w;
char buffer[100];
+ TextEffectID i;
- if (_game_mode == GM_MENU) return;
+ if (_game_mode == GM_MENU) return INVALID_TE_ID;
- for (te = _text_effect_list; te->string_id != INVALID_STRING_ID; ) {
- if (++te == endof(_text_effect_list)) return;
+ /* Look for a free spot in the text effect array */
+ for (i = 0; i < _num_text_effects; i++) {
+ if (_text_effect_list[i].string_id == INVALID_STRING_ID) break;
}
+ /* If there is none found, we grow the array */
+ if (i == _num_text_effects) {
+ _num_text_effects += 25;
+ _text_effect_list = (TextEffect*) realloc(_text_effect_list, _num_text_effects * sizeof(TextEffect));
+ for (; i < _num_text_effects; i++) _text_effect_list[i].string_id = INVALID_STRING_ID;
+ i = _num_text_effects - 1;
+ }
+
+ te = &_text_effect_list[i];
+
+ /* Start defining this object */
te->string_id = msg;
te->duration = duration;
te->y = y - 5;
te->bottom = y + 5;
te->params_1 = GetDParam(0);
te->params_2 = GetDParam(4);
+ te->mode = mode;
GetString(buffer, msg, lastof(buffer));
w = GetStringBoundingBox(buffer).width;
@@ -284,10 +303,38 @@
te->x = x - (w >> 1);
te->right = x + (w >> 1) - 1;
MarkTextEffectAreaDirty(te);
+
+ return i;
+}
+
+void UpdateTextEffect(TextEffectID te_id, StringID msg)
+{
+ assert(te_id < _num_text_effects);
+ TextEffect *te;
+
+ /* Update details */
+ te = &_text_effect_list[te_id];
+ te->string_id = msg;
+ te->params_1 = GetDParam(0);
+ te->params_2 = GetDParam(4);
+
+ MarkTextEffectAreaDirty(te);
+}
+
+void RemoveTextEffect(TextEffectID te_id)
+{
+ assert(te_id < _num_text_effects);
+ TextEffect *te;
+
+ te = &_text_effect_list[te_id];
+ MarkTextEffectAreaDirty(te);
+ te->string_id = INVALID_STRING_ID;
}
static void MoveTextEffect(TextEffect *te)
{
+ /* Never expire for duration of 0xFFFF */
+ if (te->duration == 0xFFFF) return;
if (te->duration < 8) {
te->string_id = INVALID_STRING_ID;
} else {
@@ -300,47 +347,48 @@
void MoveAllTextEffects()
{
- TextEffect *te;
-
- for (te = _text_effect_list; te != endof(_text_effect_list); te++) {
- if (te->string_id != INVALID_STRING_ID) MoveTextEffect(te);
+ for (TextEffectID i = 0; i < _num_text_effects; i++) {
+ TextEffect *te = &_text_effect_list[i];
+ if (te->string_id != INVALID_STRING_ID && te->mode == TE_RISING) MoveTextEffect(te);
}
}
void InitTextEffects()
{
- TextEffect *te;
+ if (_text_effect_list == NULL) _text_effect_list = MallocT<TextEffect>(_num_text_effects);
- for (te = _text_effect_list; te != endof(_text_effect_list); te++) {
- te->string_id = INVALID_STRING_ID;
- }
+ for (TextEffectID i = 0; i < _num_text_effects; i++) _text_effect_list[i].string_id = INVALID_STRING_ID;
}
void DrawTextEffects(DrawPixelInfo *dpi)
{
- const TextEffect* te;
-
switch (dpi->zoom) {
case ZOOM_LVL_NORMAL:
- for (te = _text_effect_list; te != endof(_text_effect_list); te++) {
+ for (TextEffectID i = 0; i < _num_text_effects; i++) {
+ TextEffect *te = &_text_effect_list[i];
if (te->string_id != INVALID_STRING_ID &&
dpi->left <= te->right &&
dpi->top <= te->bottom &&
dpi->left + dpi->width > te->x &&
dpi->top + dpi->height > te->y) {
- AddStringToDraw(te->x, te->y, te->string_id, te->params_1, te->params_2);
+ if (te->mode == TE_RISING || (_patches.loading_indicators && !HASBIT(_transparent_opt, TO_LOADING))) {
+ AddStringToDraw(te->x, te->y, te->string_id, te->params_1, te->params_2);
+ }
}
}
break;
case ZOOM_LVL_OUT_2X:
- for (te = _text_effect_list; te != endof(_text_effect_list); te++) {
+ for (TextEffectID i = 0; i < _num_text_effects; i++) {
+ TextEffect *te = &_text_effect_list[i];
if (te->string_id != INVALID_STRING_ID &&
dpi->left <= te->right * 2 - te->x &&
dpi->top <= te->bottom * 2 - te->y &&
dpi->left + dpi->width > te->x &&
dpi->top + dpi->height > te->y) {
- AddStringToDraw(te->x, te->y, (StringID)(te->string_id-1), te->params_1, te->params_2);
+ if (te->mode == TE_RISING || (_patches.loading_indicators && !HASBIT(_transparent_opt, TO_LOADING))) {
+ AddStringToDraw(te->x, te->y, (StringID)(te->string_id - 1), te->params_1, te->params_2);
+ }
}
}
break;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/texteff.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,35 @@
+/* $Id$ */
+
+#ifndef TEXTEFF_HPP
+#define TEXTEFF_HPP
+
+/**
+ * Text effect modes.
+ */
+enum TextEffectMode {
+ TE_RISING, ///< Make the text effect slowly go upwards
+ TE_STATIC, ///< Keep the text effect static
+
+ INVALID_TE_ID = 0xFFFF,
+};
+
+typedef uint16 TextEffectID;
+
+void MoveAllTextEffects();
+TextEffectID AddTextEffect(StringID msg, int x, int y, uint16 duration, TextEffectMode mode);
+void InitTextEffects();
+void DrawTextEffects(DrawPixelInfo *dpi);
+void UpdateTextEffect(TextEffectID effect_id, StringID msg);
+void RemoveTextEffect(TextEffectID effect_id);
+
+void InitTextMessage();
+void DrawTextMessage();
+void CDECL AddTextMessage(uint16 color, uint8 duration, const char *message, ...);
+void UndrawTextMessage();
+
+/* misc_gui.cpp */
+TextEffectID ShowFillingPercent(int x, int y, int z, uint8 percent, StringID color);
+void UpdateFillingPercent(TextEffectID te_id, uint8 percent, StringID color);
+void HideFillingPercent(TextEffectID te_id);
+
+#endif /* TEXTEFF_HPP */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/timetable.h Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,11 @@
+/* $Id$ */
+
+/** @file timetable.h */
+
+#ifndef TIMETABLE_H
+#define TIMETABLE_H
+
+void ShowTimetableWindow(const Vehicle *v);
+void UpdateVehicleTimetable(Vehicle *v, bool travelling);
+
+#endif /* TIMETABLE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/timetable_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,182 @@
+/* $Id$ */
+
+/** @file timetable_cmd.cpp */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "functions.h"
+#include "variables.h"
+#include "table/strings.h"
+#include "command.h"
+#include "date.h"
+#include "player.h"
+#include "vehicle.h"
+
+
+static void ChangeTimetable(Vehicle *v, VehicleOrderID order_number, uint16 time, bool is_journey)
+{
+ Order *order = GetVehicleOrder(v, order_number);
+
+ if (is_journey) {
+ order->travel_time = time;
+ } else {
+ order->wait_time = time;
+ }
+
+ if (v->cur_order_index == order_number && HASBIT(v->current_order.flags, OFB_PART_OF_ORDERS)) {
+ if (is_journey) {
+ v->current_order.travel_time = time;
+ } else {
+ v->current_order.wait_time = time;
+ }
+ }
+
+ InvalidateWindow(WC_VEHICLE_TIMETABLE, v->index);
+}
+
+/**
+ * Add or remove waiting times from an order.
+ * @param tile Not used.
+ * @param flags Operation to perform.
+ * @param p1 Various bitstuffed elements
+ * - p1 = (bit 0-15) - Vehicle with the orders to change.
+ * - p1 = (bit 16-23) - Order index to modify.
+ * - p1 = (bit 24) - Whether to change the waiting time or the travelling
+ * time.
+ * @param p2 The amount of time to wait.
+ */
+CommandCost CmdChangeTimetable(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+{
+ if (!_patches.timetabling) return CMD_ERROR;
+
+ VehicleID veh = GB(p1, 0, 16);
+ if (!IsValidVehicleID(veh)) return CMD_ERROR;
+
+ Vehicle *v = GetVehicle(veh);
+ if (!CheckOwnership(v->owner)) return CMD_ERROR;
+
+ VehicleOrderID order_number = GB(p1, 16, 8);
+ Order *order = GetVehicleOrder(v, order_number);
+ if (order == NULL) return CMD_ERROR;
+
+ bool is_journey = HASBIT(p1, 24);
+ if (!is_journey) {
+ if (order->type != OT_GOTO_STATION) return_cmd_error(STR_TIMETABLE_ONLY_WAIT_AT_STATIONS);
+ if (_patches.new_nonstop && (order->flags & OF_NON_STOP)) return_cmd_error(STR_TIMETABLE_NOT_STOPPING_HERE);
+ }
+
+ if (flags & DC_EXEC) {
+ ChangeTimetable(v, order_number, p2, is_journey);
+ }
+
+ return CommandCost();
+}
+
+/**
+ * Clear the lateness counter to make the vehicle on time.
+ * @param tile Not used.
+ * @param flags Operation to perform.
+ * @param p1 Various bitstuffed elements
+ * - p1 = (bit 0-15) - Vehicle with the orders to change.
+ */
+CommandCost CmdSetVehicleOnTime(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+{
+ if (!_patches.timetabling) return CMD_ERROR;
+
+ VehicleID veh = GB(p1, 0, 16);
+ if (!IsValidVehicleID(veh)) return CMD_ERROR;
+
+ Vehicle *v = GetVehicle(veh);
+ if (!CheckOwnership(v->owner)) return CMD_ERROR;
+
+ if (flags & DC_EXEC) {
+ v->lateness_counter = 0;
+ }
+
+ return CommandCost();
+}
+
+/**
+ * Start or stop filling the timetable automatically from the time the vehicle
+ * actually takes to complete it. When starting to autofill the current times
+ * are cleared and the timetable will start again from scratch.
+ * @param tile Not used.
+ * @param flags Operation to perform.
+ * @param p1 Vehicle index.
+ * @param p2 Set to 1 to enable, 0 to disable.
+ */
+CommandCost CmdAutofillTimetable(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+{
+ if (!_patches.timetabling) return CMD_ERROR;
+
+ VehicleID veh = GB(p1, 0, 16);
+ if (!IsValidVehicleID(veh)) return CMD_ERROR;
+
+ Vehicle *v = GetVehicle(veh);
+ if (!CheckOwnership(v->owner)) return CMD_ERROR;
+
+ if (flags & DC_EXEC) {
+ if (p2 == 1) {
+ /* Start autofilling the timetable, which clears all the current
+ * timings and clears the "timetable has started" bit. */
+ SETBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE);
+ CLRBIT(v->vehicle_flags, VF_TIMETABLE_STARTED);
+
+ for (Order *order = GetVehicleOrder(v, 0); order != NULL; order = order->next) {
+ order->wait_time = 0;
+ order->travel_time = 0;
+ }
+
+ v->current_order.wait_time = 0;
+ v->current_order.travel_time = 0;
+ } else {
+ CLRBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE);
+ }
+ }
+
+ return CommandCost();
+}
+
+void UpdateVehicleTimetable(Vehicle *v, bool travelling)
+{
+ uint timetabled = travelling ? v->current_order.travel_time : v->current_order.wait_time;
+ uint time_taken = v->current_order_time;
+
+ v->current_order_time = 0;
+
+ if (!_patches.timetabling) return;
+
+ /* Make sure the timetable only starts when the vehicle reaches the first
+ * order, not when travelling from the depot to the first station. */
+ if (v->cur_order_index == 0 && !HASBIT(v->vehicle_flags, VF_TIMETABLE_STARTED)) {
+ SETBIT(v->vehicle_flags, VF_TIMETABLE_STARTED);
+ return;
+ }
+
+ if (!HASBIT(v->vehicle_flags, VF_TIMETABLE_STARTED)) return;
+
+ if (HASBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE)) {
+ if (timetabled == 0) {
+ /* Round the time taken up to the nearest day, as this will avoid
+ * confusion for people who are timetabling in days, and can be
+ * adjusted later by people who aren't. */
+ time_taken = (((time_taken - 1) / DAY_TICKS) + 1) * DAY_TICKS;
+
+ ChangeTimetable(v, v->cur_order_index, time_taken, travelling);
+ return;
+ } else if (v->cur_order_index == 0) {
+ /* Otherwise if we're at the beginning and it already has a value,
+ * assume that autofill is finished and turn it off again. */
+ CLRBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE);
+ }
+ }
+
+ /* Vehicles will wait at stations if they arrive early even if they are not
+ * timetabled to wait there, so make sure the lateness counter is updated
+ * when this happens. */
+ if (timetabled == 0 && (travelling || v->lateness_counter >= 0)) return;
+
+ v->lateness_counter -= (timetabled - time_taken);
+
+ InvalidateWindow(WC_VEHICLE_TIMETABLE, v->index);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/timetable_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -0,0 +1,335 @@
+/* $Id$ */
+
+/** @file timetable_gui.cpp */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "functions.h"
+#include "variables.h"
+#include "table/strings.h"
+#include "command.h"
+#include "date.h"
+#include "engine.h"
+#include "gui.h"
+#include "string.h"
+#include "window.h"
+#include "vehicle.h"
+#include "cargotype.h"
+#include "depot.h"
+
+static int GetOrderFromTimetableWndPt(Window *w, int y, const Vehicle *v)
+{
+ /*
+ * Calculation description:
+ * 15 = 14 (w->widget[ORDER_WIDGET_ORDER_LIST].top) + 1 (frame-line)
+ * 10 = order text hight
+ */
+ int sel = (y - 15) / 10;
+
+ if ((uint)sel >= w->vscroll.cap) return INVALID_ORDER;
+
+ sel += w->vscroll.pos;
+
+ return (sel <= v->num_orders * 2 && sel >= 0) ? sel : INVALID_ORDER;
+}
+
+static inline void SetTimetableParams(int param1, int param2, uint32 time)
+{
+ if (_patches.timetable_in_ticks) {
+ SetDParam(param1, STR_TIMETABLE_TICKS);
+ SetDParam(param2, time);
+ } else {
+ SetDParam(param1, STR_TIMETABLE_DAYS);
+ SetDParam(param2, time / DAY_TICKS);
+ }
+}
+
+static void DrawTimetableWindow(Window *w)
+{
+ const Vehicle *v = GetVehicle(w->window_number);
+ int selected = WP(w,order_d).sel;
+
+ SetVScrollCount(w, v->num_orders * 2);
+
+ if (v->owner == _local_player) {
+ if (selected == -1) {
+ DisableWindowWidget(w, 6);
+ DisableWindowWidget(w, 7);
+ } else if (selected % 2 == 1) {
+ EnableWindowWidget(w, 6);
+ EnableWindowWidget(w, 7);
+ } else {
+ const Order *order = GetVehicleOrder(v, (selected + 1) / 2);
+ bool disable = order == NULL || order->type != OT_GOTO_STATION || (_patches.new_nonstop && (order->flags & OF_NON_STOP));
+
+ SetWindowWidgetDisabledState(w, 6, disable);
+ SetWindowWidgetDisabledState(w, 7, disable);
+ }
+
+ EnableWindowWidget(w, 8);
+ EnableWindowWidget(w, 9);
+ } else {
+ DisableWindowWidget(w, 6);
+ DisableWindowWidget(w, 7);
+ DisableWindowWidget(w, 8);
+ DisableWindowWidget(w, 9);
+ }
+
+ SetWindowWidgetLoweredState(w, 9, HASBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE));
+
+ SetDParam(0, v->index);
+ DrawWindowWidgets(w);
+
+ int y = 15;
+ int i = w->vscroll.pos;
+ VehicleOrderID order_id = (i + 1) / 2;
+ bool final_order = false;
+
+ const Order *order = GetVehicleOrder(v, order_id);
+
+ while (order != NULL) {
+ /* Don't draw anything if it extends past the end of the window. */
+ if (i - w->vscroll.pos >= w->vscroll.cap) break;
+
+ if (i % 2 == 0) {
+ SetDParam(2, STR_EMPTY);
+
+ switch (order->type) {
+ case OT_GOTO_STATION:
+ SetDParam(0, (order->flags & OF_NON_STOP) ? STR_880C_GO_NON_STOP_TO : STR_8806_GO_TO);
+ SetDParam(1, order->dest);
+
+ if (order->wait_time > 0) {
+ SetDParam(2, STR_TIMETABLE_STAY_FOR);
+ SetTimetableParams(3, 4, order->wait_time);
+ }
+
+ break;
+
+ case OT_GOTO_DEPOT: {
+ StringID string = STR_EMPTY;
+
+ if (v->type == VEH_AIRCRAFT) {
+ string = STR_GO_TO_AIRPORT_HANGAR;
+ SetDParam(1, order->dest);
+ } else {
+ SetDParam(1, GetDepot(order->dest)->town_index);
+
+ switch (v->type) {
+ case VEH_TRAIN: string = (order->flags & OF_NON_STOP) ? STR_880F_GO_NON_STOP_TO_TRAIN_DEPOT : STR_GO_TO_TRAIN_DEPOT; break;
+ case VEH_ROAD: string = STR_9038_GO_TO_ROADVEH_DEPOT; break;
+ case VEH_SHIP: string = STR_GO_TO_SHIP_DEPOT; break;
+ default: break;
+ }
+ }
+
+ if (order->flags & OF_FULL_LOAD) string++; // Service at orders
+
+ SetDParam(0, string);
+ } break;
+
+ case OT_GOTO_WAYPOINT:
+ SetDParam(0, (order->flags & OF_NON_STOP) ? STR_GO_NON_STOP_TO_WAYPOINT : STR_GO_TO_WAYPOINT);
+ SetDParam(1, order->dest);
+ break;
+
+ default: break;
+ }
+
+ byte colour = (i == selected) ? 0xC : 0x10;
+
+ if (order->type != OT_DUMMY) {
+ DrawString(2, y, STR_TIMETABLE_GO_TO, colour);
+ } else {
+ SetDParam(0, STR_INVALID_ORDER);
+ DrawString(2, y, STR_TIMETABLE_GO_TO, colour);
+ }
+
+ order_id++;
+
+ if (order_id >= v->num_orders) {
+ order = GetVehicleOrder(v, 0);
+ final_order = true;
+ } else {
+ order = order->next;
+ }
+ } else {
+ StringID string;
+
+ if (order->travel_time == 0) {
+ string = STR_TIMETABLE_TRAVEL_NOT_TIMETABLED;
+ } else {
+ SetTimetableParams(0, 1, order->travel_time);
+ string = STR_TIMETABLE_TRAVEL_FOR;
+ }
+
+ byte colour = (i == selected) ? 0xC : 0x10;
+ DrawString(12, y, string, colour);
+
+ if (final_order) break;
+ }
+
+ i++;
+ y += 10;
+ }
+
+ y = w->widget[5].top + 1;
+
+ {
+ uint total_time = 0;
+ bool complete = true;
+
+ for (const Order *order = GetVehicleOrder(v, 0); order != NULL; order = order->next) {
+ total_time += order->travel_time + order->wait_time;
+ if (order->travel_time == 0) complete = false;
+ if (order->wait_time == 0 && order->type == OT_GOTO_STATION && !(_patches.new_nonstop && (order->flags & OF_NON_STOP))) complete = false;
+ }
+
+ if (total_time != 0) {
+ SetTimetableParams(0, 1, total_time);
+ DrawString(2, y, complete ? STR_TIMETABLE_TOTAL_TIME : STR_TIMETABLE_TOTAL_TIME_INCOMPLETE, 0x10);
+ }
+ }
+ y += 10;
+
+ if (v->lateness_counter == 0 || (!_patches.timetable_in_ticks && v->lateness_counter / DAY_TICKS == 0)) {
+ DrawString(2, y, STR_TIMETABLE_STATUS_ON_TIME, 0x10);
+ } else {
+ SetTimetableParams(0, 1, abs(v->lateness_counter));
+ DrawString(2, y, v->lateness_counter < 0 ? STR_TIMETABLE_STATUS_EARLY : STR_TIMETABLE_STATUS_LATE, 0x10);
+ }
+}
+
+static inline uint32 PackTimetableArgs(const Vehicle *v, uint selected)
+{
+ uint order_number = (selected + 1) / 2;
+ uint is_journey = (selected % 2 == 1) ? 1 : 0;
+
+ if (order_number >= v->num_orders) order_number = 0;
+
+ return v->index | (order_number << 16) | (is_journey << 24);
+}
+
+static void TimetableWndProc(Window *w, WindowEvent *we)
+{
+ switch (we->event) {
+ case WE_PAINT:
+ DrawTimetableWindow(w);
+ break;
+
+ case WE_CLICK: {
+ const Vehicle *v = GetVehicle(w->window_number);
+
+ switch (we->we.click.widget) {
+ case 3: { /* Main panel. */
+ int selected = GetOrderFromTimetableWndPt(w, we->we.click.pt.y, v);
+
+ if (selected == INVALID_ORDER || selected == WP(w,order_d).sel) {
+ /* Deselect clicked order */
+ WP(w,order_d).sel = -1;
+ } else {
+ /* Select clicked order */
+ WP(w,order_d).sel = selected;
+ }
+ } break;
+
+ case 6: { /* "Wait For" button. */
+ int selected = WP(w,order_d).sel;
+ VehicleOrderID real = (selected + 1) / 2;
+
+ if (real >= v->num_orders) real = 0;
+
+ const Order *order = GetVehicleOrder(v, real);
+ StringID current = STR_EMPTY;
+
+ if (order != NULL) {
+ uint time = (selected % 2 == 1) ? order->travel_time : order->wait_time;
+ if (!_patches.timetable_in_ticks) time /= DAY_TICKS;
+
+ if (time != 0) {
+ SetDParam(0, time);
+ current = STR_CONFIG_PATCHES_INT32;
+ }
+ }
+
+ ShowQueryString(current, STR_TIMETABLE_CHANGE_TIME, 31, 150, w, CS_NUMERAL);
+ } break;
+
+ case 7: { /* Clear waiting time button. */
+ uint32 p1 = PackTimetableArgs(v, WP(w,order_d).sel);
+ DoCommandP(0, p1, 0, NULL, CMD_CHANGE_TIMETABLE | CMD_MSG(STR_CAN_T_TIMETABLE_VEHICLE));
+ } break;
+
+ case 8: /* Reset the vehicle's late counter. */
+ DoCommandP(0, v->index, 0, NULL, CMD_SET_VEHICLE_ON_TIME | CMD_MSG(STR_CAN_T_TIMETABLE_VEHICLE));
+ break;
+
+ case 9: /* Autofill the timetable. */
+ DoCommandP(0, v->index, HASBIT(v->vehicle_flags, VF_AUTOFILL_TIMETABLE) ? 0 : 1, NULL, CMD_AUTOFILL_TIMETABLE | CMD_MSG(STR_CAN_T_TIMETABLE_VEHICLE));
+ break;
+ }
+
+ SetWindowDirty(w);
+ } break;
+
+ case WE_ON_EDIT_TEXT: {
+ const Vehicle *v = GetVehicle(w->window_number);
+
+ uint32 p1 = PackTimetableArgs(v, WP(w,order_d).sel);
+
+ uint64 time = StrEmpty(we->we.edittext.str) ? 0 : strtoul(we->we.edittext.str, NULL, 10);
+ if (!_patches.timetable_in_ticks) time *= DAY_TICKS;
+
+ uint32 p2 = minu(time, MAX_UVALUE(uint16));
+
+ DoCommandP(0, p1, p2, NULL, CMD_CHANGE_TIMETABLE | CMD_MSG(STR_CAN_T_TIMETABLE_VEHICLE));
+ } break;
+
+ case WE_RESIZE:
+ /* Update the scroll + matrix */
+ w->vscroll.cap = (w->widget[3].bottom - w->widget[3].top) / 10;
+ break;
+
+ }
+}
+
+static const Widget _timetable_widgets[] = {
+ { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
+ { WWT_CAPTION, RESIZE_RIGHT, 14, 11, 387, 0, 13, STR_TIMETABLE_TITLE, STR_018C_WINDOW_TITLE_DRAG_THIS},
+ { WWT_STICKYBOX, RESIZE_LR, 14, 388, 399, 0, 13, STR_NULL, STR_STICKY_BUTTON},
+
+ { WWT_PANEL, RESIZE_RB, 14, 0, 387, 14, 95, STR_NULL, STR_TIMETABLE_TOOLTIP},
+ { WWT_SCROLLBAR, RESIZE_LRB, 14, 388, 399, 14, 95, STR_NULL, STR_0190_SCROLL_BAR_SCROLLS_LIST},
+
+ { WWT_PANEL, RESIZE_RTB, 14, 0, 399, 96, 117, STR_NULL, STR_NULL},
+
+ { WWT_PUSHTXTBTN, RESIZE_TB, 14, 0, 109, 118, 129, STR_TIMETABLE_CHANGE_TIME, STR_TIMETABLE_WAIT_TIME_TOOLTIP},
+ { WWT_PUSHTXTBTN, RESIZE_TB, 14, 110, 219, 118, 129, STR_CLEAR_TIME, STR_TIMETABLE_CLEAR_TIME_TOOLTIP},
+ { WWT_PUSHTXTBTN, RESIZE_TB, 14, 220, 337, 118, 129, STR_RESET_LATENESS, STR_TIMETABLE_RESET_LATENESS_TOOLTIP},
+ { WWT_PUSHTXTBTN, RESIZE_TB, 14, 338, 387, 118, 129, STR_TIMETABLE_AUTOFILL, STR_TIMETABLE_AUTOFILL_TOOLTIP},
+
+ { WWT_PANEL, RESIZE_RTB, 14, 388, 387, 118, 129, STR_NULL, STR_NULL},
+ { WWT_RESIZEBOX, RESIZE_LRTB, 14, 388, 399, 118, 129, STR_NULL, STR_RESIZE_BUTTON},
+
+ { WIDGETS_END }
+};
+
+static const WindowDesc _timetable_desc = {
+ WDP_AUTO, WDP_AUTO, 400, 130,
+ WC_VEHICLE_TIMETABLE, WC_VEHICLE_VIEW,
+ WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
+ _timetable_widgets,
+ TimetableWndProc
+};
+
+void ShowTimetableWindow(const Vehicle *v)
+{
+ Window *w = AllocateWindowDescFront(&_timetable_desc, v->index);
+
+ if (w != NULL) {
+ w->caption_color = v->owner;
+ w->vscroll.cap = 8;
+ w->resize.step_height = 10;
+ WP(w,order_d).sel = -1;
+ }
+}
--- a/src/town.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/town.h Tue Jun 26 23:40:58 2007 +0000
@@ -83,6 +83,7 @@
uint32 population;
/* Town name */
+ uint32 townnamegrfid;
uint16 townnametype;
uint32 townnameparts;
--- a/src/town_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/town_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -39,6 +39,7 @@
#include "newgrf_callbacks.h"
#include "newgrf_house.h"
#include "newgrf_commons.h"
+#include "newgrf_townname.h"
/**
* Called if a new block is added to the town-pool
@@ -478,17 +479,17 @@
/* not used */
}
-static int32 ClearTile_Town(TileIndex tile, byte flags)
+static CommandCost ClearTile_Town(TileIndex tile, byte flags)
{
int rating;
- int32 cost;
+ CommandCost cost;
Town *t;
HouseSpec *hs = GetHouseSpecs(GetHouseType(tile));
if (flags & DC_AUTO) return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED);
if (!CanDeleteHouse(tile)) return CMD_ERROR;
- cost = _price.remove_house * hs->removal_cost >> 8;
+ cost.AddCost(_price.remove_house * hs->removal_cost >> 8);
rating = hs->remove_rating_decrease;
_cleared_town_rating += rating;
@@ -667,6 +668,8 @@
static bool IsRoadAllowedHere(TileIndex tile, int dir)
{
+ if (TileX(tile) < 1 || TileY(tile) < 1 || MapMaxX() <= TileX(tile) || MapMaxY() <= TileY(tile)) return false;
+
Slope k;
Slope slope;
@@ -708,7 +711,7 @@
uint32 r = Random();
if (CHANCE16I(1, 8, r) && !_generating_world) {
- int32 res;
+ CommandCost res;
if (CHANCE16I(1, 16, r)) {
res = DoCommand(tile, slope, 0, DC_EXEC | DC_AUTO | DC_NO_WATER,
@@ -730,12 +733,12 @@
static bool TerraformTownTile(TileIndex tile, int edges, int dir)
{
- int32 r;
+ CommandCost r;
TILE_ASSERT(tile);
r = DoCommand(tile, edges, dir, DC_AUTO | DC_NO_WATER, CMD_TERRAFORM_LAND);
- if (CmdFailed(r) || r >= 126 * 16) return false;
+ if (CmdFailed(r) || r.GetCost() >= 126 * 16) return false;
DoCommand(tile, edges, dir, DC_AUTO | DC_NO_WATER | DC_EXEC, CMD_TERRAFORM_LAND);
return true;
}
@@ -1063,7 +1066,7 @@
default:
build_road_and_exit:
- if (!CmdFailed(DoCommand(tile, rcmd, t1->index, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD))) {
+ if (CmdSucceeded(DoCommand(tile, rcmd, t1->index, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD))) {
_grow_town_result = -1;
}
return;
@@ -1096,7 +1099,7 @@
do {
byte bridge_type = RandomRange(MAX_BRIDGES - 1);
if (CheckBridge_Stuff(bridge_type, bridge_len)) {
- if (!CmdFailed(DoCommand(tile, tmptile, bridge_type | ((0x80 | ROADTYPES_ROAD) << 8), DC_EXEC | DC_AUTO, CMD_BUILD_BRIDGE)))
+ if (CmdSucceeded(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 */
@@ -1235,7 +1238,7 @@
for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) {
/* Only work with plain land that not already has a house */
if (!IsTileType(tile, MP_HOUSE) && GetTileSlope(tile, NULL) == SLOPE_FLAT) {
- if (!CmdFailed(DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR))) {
+ if (CmdSucceeded(DoCommand(tile, 0, 0, DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR))) {
DoCommand(tile, GenRandomRoadBits(), t->index, DC_EXEC | DC_AUTO, CMD_BUILD_ROAD);
_current_player = old_player;
return true;
@@ -1295,6 +1298,7 @@
static bool CreateTownName(uint32 *townnameparts)
{
+ extern int _nb_orig_names;
Town *t2;
char buf1[64];
char buf2[64];
@@ -1305,7 +1309,9 @@
* the other towns may take considerable amount of time (10000 is
* too much). */
int tries = 1000;
- uint16 townnametype = SPECSTR_TOWNNAME_START + _opt.town_name;
+ bool grf = (_opt.town_name >= _nb_orig_names);
+ uint32 grfid = grf ? GetGRFTownNameId(_opt.town_name - _nb_orig_names) : 0;
+ uint16 townnametype = grf ? GetGRFTownNameType(_opt.town_name - _nb_orig_names) : SPECSTR_TOWNNAME_START + _opt.town_name;
assert(townnameparts);
@@ -1314,7 +1320,11 @@
r = Random();
SetDParam(0, r);
- GetString(buf1, townnametype, lastof(buf1));
+ if (grf && grfid != 0) {
+ GRFTownNameGenerate(buf1, grfid, townnametype, r, lastof(buf1));
+ } else {
+ GetString(buf1, townnametype, lastof(buf1));
+ }
/* Check size and width */
if (strlen(buf1) >= 31 || GetStringBoundingBox(buf1).width > 130) continue;
@@ -1351,6 +1361,7 @@
*/
static void DoCreateTown(Town *t, TileIndex tile, uint32 townnameparts, TownSizeMode size_mode, uint size)
{
+ extern int _nb_orig_names;
int x, i;
/* clear the town struct */
@@ -1392,7 +1403,15 @@
t->exclusive_counter = 0;
t->statues = 0;
- t->townnametype = SPECSTR_TOWNNAME_START + _opt.town_name;
+ if (_opt.town_name < _nb_orig_names) {
+ /* Original town name */
+ t->townnamegrfid = 0;
+ t->townnametype = SPECSTR_TOWNNAME_START + _opt.town_name;
+ } else {
+ /* Newgrf town name */
+ t->townnamegrfid = GetGRFTownNameId(_opt.town_name - _nb_orig_names);
+ t->townnametype = GetGRFTownNameType(_opt.town_name - _nb_orig_names);
+ }
t->townnameparts = townnameparts;
UpdateTownVirtCoord(t);
@@ -1464,7 +1483,7 @@
* @param p1 size of the town (0 = small, 1 = medium, 2 = large)
* @param p2 size mode (@see TownSizeMode)
*/
-int32 CmdBuildTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Town *t;
uint32 townnameparts;
@@ -1502,7 +1521,7 @@
DoCreateTown(t, tile, townnameparts, (TownSizeMode)p2, p1);
_generating_world = false;
}
- return 0;
+ return CommandCost();
}
Town *CreateRandomTown(uint attempts, TownSizeMode mode, uint size)
@@ -1587,7 +1606,7 @@
if (b)
return false;
- return !CmdFailed(DoCommand(tile, 0, 0, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR));
+ return CmdSucceeded(DoCommand(tile, 0, 0, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_LANDSCAPE_CLEAR));
}
@@ -1770,7 +1789,7 @@
static bool BuildTownHouse(Town *t, TileIndex tile)
{
- int32 r;
+ CommandCost r;
if (IsSteepSlope(GetTileSlope(tile, NULL))) return false;
if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) return false;
@@ -1846,7 +1865,7 @@
* @param p1 town ID to rename
* @param p2 unused
*/
-int32 CmdRenameTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
StringID str;
Town *t;
@@ -1869,7 +1888,7 @@
} else {
DeleteName(str);
}
- return 0;
+ return CommandCost();
}
/** Called from GUI */
@@ -1915,15 +1934,10 @@
static void TownActionRoadRebuild(Town* t)
{
- const Player* p;
-
t->road_build_months = 6;
SetDParam(0, t->index);
-
- p = GetPlayer(_current_player);
- SetDParam(1, p->name_1);
- SetDParam(2, p->name_2);
+ SetDParam(1, _current_player);
AddNewsItem(STR_2055_TRAFFIC_CHAOS_IN_ROAD_REBUILDING,
NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_GENERAL, 0), t->xy, 0);
@@ -1932,7 +1946,7 @@
static bool DoBuildStatueOfCompany(TileIndex tile, TownID town_id)
{
PlayerID old;
- int32 r;
+ CommandCost r;
if (GetTileSlope(tile, NULL) != SLOPE_FLAT) return false;
@@ -2050,9 +2064,9 @@
* @param p1 town to do the action at
* @param p2 action to perform, @see _town_action_proc for the list of available actions
*/
-int32 CmdDoTownAction(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDoTownAction(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 cost;
+ CommandCost cost;
Town *t;
if (!IsValidTownID(p1) || p2 > lengthof(_town_action_proc)) return CMD_ERROR;
@@ -2063,7 +2077,7 @@
SET_EXPENSES_TYPE(EXPENSES_OTHER);
- cost = (_price.build_industry >> 8) * _town_action_costs[p2];
+ cost.AddCost((_price.build_industry >> 8) * _town_action_costs[p2]);
if (flags & DC_EXEC) {
_town_action_proc[p2](t);
@@ -2338,6 +2352,7 @@
SLE_VAR(Town, num_houses, SLE_UINT16),
+ SLE_CONDVAR(Town, townnamegrfid, SLE_UINT32, 66, SL_MAX_VERSION),
SLE_VAR(Town, townnametype, SLE_UINT16),
SLE_VAR(Town, townnameparts, SLE_UINT32),
--- a/src/town_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/town_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -41,7 +41,7 @@
*/
uint GetMaskOfTownActions(int *nump, PlayerID pid, const Town *t)
{
- int32 avail, ref;
+ Money avail, ref;
int num = 0;
uint avail_buttons = 0x7F; // by default all buttons except bribe are enabled.
uint buttons = 0;
@@ -127,9 +127,8 @@
if (p->is_active && (HASBIT(t->have_ratings, p->index) || t->exclusivity == p->index)) {
DrawPlayerIcon(p->index, 2, y);
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, GetPlayerNameString(p->index, 3));
+ SetDParam(0, p->index);
+ SetDParam(1, p->index);
r = t->ratings[p->index];
(str = STR_3035_APPALLING, r <= RATING_APPALLING) || // Apalling
@@ -141,7 +140,7 @@
(str++, r <= RATING_EXCELLENT) || // Excellent
(str++, true); // Outstanding
- SetDParam(4, str);
+ SetDParam(2, str);
if (t->exclusivity == p->index) { // red icon for player with exclusive rights
DrawSprite(SPR_BLOT, PALETTE_TO_RED, 18, y);
}
@@ -183,6 +182,7 @@
} break;
+ case WE_DOUBLE_CLICK:
case WE_CLICK:
switch (e->we.click.widget) {
case 3: { /* listbox */
@@ -196,7 +196,8 @@
WP(w,def_d).data_1 = y;
SetWindowDirty(w);
}
- break;
+ /* Fall through to clicking in case we are double-clicked */
+ if (e->event != WE_DOUBLE_CLICK || y < 0) break;
}
case 6: { /* carry out the action */
--- a/src/train_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/train_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -15,6 +15,7 @@
#include "tile.h"
#include "tunnel_map.h"
#include "vehicle.h"
+#include "timetable.h"
#include "articulated_vehicles.h"
#include "command.h"
#include "pathfind.h"
@@ -111,7 +112,7 @@
uint32 weight = 0;
for (Vehicle *u = v; u != NULL; u = u->next) {
- uint32 vweight = GetCargo(u->cargo_type)->weight * u->cargo_count * FreightWagonMult(u->cargo_type) / 16;
+ uint32 vweight = GetCargo(u->cargo_type)->weight * u->cargo.Count() * FreightWagonMult(u->cargo_type) / 16;
/* Vehicle weight is not added for articulated parts. */
if (!IsArticulatedPart(u)) {
@@ -462,7 +463,7 @@
base = _engine_sprite_base[img] + ((direction + _engine_sprite_add[img]) & _engine_sprite_and[img]);
- if (v->cargo_count >= v->cargo_cap / 2) base += _wagon_full_adder[img];
+ if (v->cargo.Count() >= v->cargo_cap / 2U) base += _wagon_full_adder[img];
return base;
}
@@ -502,12 +503,12 @@
DrawSprite(image, pal, x, y);
}
-static int32 CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags)
+static CommandCost CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags)
{
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
const RailVehicleInfo *rvi = RailVehInfo(engine);
- int32 value = (GetEngineProperty(engine, 0x17, rvi->base_cost) * _price.build_railwagon) >> 8;
+ CommandCost value((GetEngineProperty(engine, 0x17, rvi->base_cost) * _price.build_railwagon) >> 8);
uint num_vehicles = 1 + CountArticulatedParts(engine);
@@ -565,7 +566,7 @@
v->cargo_type = rvi->cargo_type;
v->cargo_subtype = 0;
v->cargo_cap = rvi->capacity;
- v->value = value;
+ v->value = value.GetCost();
// v->day_counter = 0;
v->u.rail.railtype = rvi->railtype;
@@ -592,7 +593,7 @@
}
}
- return value;
+ return CommandCost(value);
}
/** Move all free vehicles in the depot to the train */
@@ -611,9 +612,9 @@
}
}
-static int32 EstimateTrainCost(EngineID engine, const RailVehicleInfo* rvi)
+static CommandCost EstimateTrainCost(EngineID engine, const RailVehicleInfo* rvi)
{
- return GetEngineProperty(engine, 0x17, rvi->base_cost) * (_price.build_railvehicle >> 3) >> 5;
+ return CommandCost(GetEngineProperty(engine, 0x17, rvi->base_cost) * (_price.build_railvehicle >> 3) >> 5);
}
static void AddRearEngineToMultiheadedTrain(Vehicle* v, Vehicle* u, bool building)
@@ -651,7 +652,7 @@
* @param p2 bit 0 when set, the train will get number 0, otherwise it will get a free number
* bit 1 prevents any free cars from being added to the train
*/
-int32 CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
/* Check if the engine-type is valid (for the player) */
if (!IsEngineBuildable(p1, VEH_TRAIN, _current_player)) return_cmd_error(STR_RAIL_VEHICLE_NOT_AVAILABLE);
@@ -673,7 +674,7 @@
if (rvi->railveh_type == RAILVEH_WAGON) return CmdBuildRailWagon(p1, tile, flags);
- int32 value = EstimateTrainCost(p1, rvi);
+ CommandCost value = EstimateTrainCost(p1, rvi);
uint num_vehicles =
(rvi->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1) +
@@ -712,7 +713,7 @@
v->cargo_subtype = 0;
v->cargo_cap = rvi->capacity;
v->max_speed = rvi->max_speed;
- v->value = value;
+ v->value = value.GetCost();
v->last_station_visited = INVALID_STATION;
v->dest_tile = 0;
@@ -909,7 +910,7 @@
* - p1 (bit 16 - 31) what wagon to put the source wagon AFTER, XXX - INVALID_VEHICLE to make a new line
* @param p2 (bit 0) move all vehicles following the source vehicle
*/
-int32 CmdMoveRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMoveRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
VehicleID s = GB(p1, 0, 16);
VehicleID d = GB(p1, 16, 16);
@@ -937,7 +938,7 @@
}
/* don't move the same vehicle.. */
- if (src == dst) return 0;
+ if (src == dst) return CommandCost();
/* locate the head of the two chains */
Vehicle *src_head = GetFirstVehicleInChain(src);
@@ -954,7 +955,7 @@
if (IsMultiheaded(src) && !IsTrainEngine(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 0;
+ if (HASBIT(p2, 0) && src_head == dst_head) return CommandCost();
{
int max_len = _patches.mammoth_trains ? 100 : 9;
@@ -1153,7 +1154,7 @@
RebuildVehicleLists();
}
- return 0;
+ return CommandCost();
}
/** Start/Stop a train.
@@ -1162,7 +1163,7 @@
* @param p1 train to start/stop
* @param p2 unused
*/
-int32 CmdStartStopTrain(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdStartStopTrain(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (!IsValidVehicleID(p1)) return CMD_ERROR;
@@ -1189,7 +1190,7 @@
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
}
- return 0;
+ return CommandCost();
}
/** Sell a (single) train wagon/engine.
@@ -1203,7 +1204,7 @@
* - p2 = 2: when selling attached locos, rearrange all vehicles after it to separate lines;
* all wagons of the same type will go on the same line. Used by the AI currently
*/
-int32 CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
/* Check if we deleted a vehicle window */
Window *w = NULL;
@@ -1235,7 +1236,7 @@
RebuildVehicleLists();
}
- int32 cost = 0;
+ CommandCost cost;
switch (p2) {
case 0: case 2: { /* Delete given wagon */
bool switch_engine = false; // update second wagon to engine?
@@ -1247,7 +1248,7 @@
IsTrainEngine(v)) ? v->u.rail.other_multiheaded_part : NULL;
if (rear != NULL) {
- cost -= rear->value;
+ cost.AddCost(-rear->value);
if (flags & DC_EXEC) {
UnlinkWagon(rear, first);
DeleteDepotHighlightOfVehicle(rear);
@@ -1302,7 +1303,7 @@
}
/* 3. Delete the requested wagon */
- cost -= v->value;
+ cost.AddCost(-v->value);
if (flags & DC_EXEC) {
first = UnlinkWagon(v, first);
DeleteDepotHighlightOfVehicle(v);
@@ -1352,7 +1353,7 @@
Vehicle *rear = v->u.rail.other_multiheaded_part;
if (rear != NULL) {
- cost -= rear->value;
+ cost.AddCost(-rear->value);
/* If this is a multiheaded vehicle with nothing
* between the parts, tmp will be pointing to the
@@ -1374,7 +1375,7 @@
}
}
- cost -= v->value;
+ cost.AddCost(-v->value);
if (flags & DC_EXEC) {
first = UnlinkWagon(v, first);
DeleteDepotHighlightOfVehicle(v);
@@ -1616,7 +1617,7 @@
* @param p1 train to reverse
* @param p2 if true, reverse a unit in a train (needs to be in a depot)
*/
-int32 CmdReverseTrainDirection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdReverseTrainDirection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (!IsValidVehicleID(p1)) return CMD_ERROR;
@@ -1656,7 +1657,7 @@
}
}
}
- return 0;
+ return CommandCost();
}
/** Force a train through a red signal
@@ -1665,7 +1666,7 @@
* @param p1 train to ignore the red signal
* @param p2 unused
*/
-int32 CmdForceTrainProceed(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdForceTrainProceed(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (!IsValidVehicleID(p1)) return CMD_ERROR;
@@ -1675,7 +1676,7 @@
if (flags & DC_EXEC) v->u.rail.force_proceed = 0x50;
- return 0;
+ return CommandCost();
}
/** Refits a train to the specified cargo type.
@@ -1688,7 +1689,7 @@
* - p2 = (bit 16) - refit only this vehicle
* @return cost of refit or error
*/
-int32 CmdRefitRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRefitRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
CargoID new_cid = GB(p2, 0, 8);
byte new_subtype = GB(p2, 8, 8);
@@ -1706,7 +1707,7 @@
SET_EXPENSES_TYPE(EXPENSES_TRAIN_RUN);
- int32 cost = 0;
+ CommandCost cost;
uint num = 0;
do {
@@ -1755,12 +1756,12 @@
if (amount != 0) {
if (new_cid != v->cargo_type) {
- cost += GetRefitCost(v->engine_type);
+ cost.AddCost(GetRefitCost(v->engine_type));
}
num += amount;
if (flags & DC_EXEC) {
- v->cargo_count = (v->cargo_type == new_cid) ? min(amount, v->cargo_count) : 0;
+ v->cargo.Truncate((v->cargo_type == new_cid) ? amount : 0);
v->cargo_type = new_cid;
v->cargo_cap = amount;
v->cargo_subtype = new_subtype;
@@ -1872,7 +1873,7 @@
* - p2 bit 0-3 - DEPOT_ flags (see vehicle.h)
* - p2 bit 8-10 - VLW flag (for mass goto depot)
*/
-int32 CmdSendTrainToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdSendTrainToDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
if (p2 & DEPOT_MASS_SEND) {
/* Mass goto depot requested */
@@ -1897,7 +1898,7 @@
TOGGLEBIT(v->current_order.flags, OFB_HALT_IN_DEPOT);
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
- return 0;
+ return CommandCost();
}
if (p2 & DEPOT_DONT_CANCEL) return CMD_ERROR; // Requested no cancelation of depot orders
@@ -1910,7 +1911,7 @@
v->current_order.flags = 0;
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
- return 0;
+ return CommandCost();
}
/* check if at a standstill (not stopped only) in a depot
@@ -1934,7 +1935,7 @@
if (tfdd.reverse) DoCommand(v->tile, v->index, 0, DC_EXEC, CMD_REVERSE_TRAIN_DIRECTION);
}
- return 0;
+ return CommandCost();
}
@@ -2379,6 +2380,7 @@
if (!(v->current_order.flags & OF_PART_OF_ORDERS)) return false;
if ((v->current_order.flags & OF_SERVICE_IF_NEEDED) &&
!VehicleNeedsService(v)) {
+ UpdateVehicleTimetable(v, true);
v->cur_order_index++;
}
break;
@@ -2393,6 +2395,7 @@
/* check if we've reached the waypoint? */
bool at_waypoint = false;
if (v->current_order.type == OT_GOTO_WAYPOINT && v->tile == v->dest_tile) {
+ UpdateVehicleTimetable(v, true);
v->cur_order_index++;
at_waypoint = true;
}
@@ -2402,6 +2405,7 @@
v->current_order.flags & OF_NON_STOP &&
IsTileType(v->tile, MP_STATION) &&
v->current_order.dest == GetStationIndex(v->tile)) {
+ UpdateVehicleTimetable(v, true);
v->cur_order_index++;
}
@@ -2525,22 +2529,28 @@
static byte AfterSetTrainPos(Vehicle *v, bool new_tile)
{
- /* need this hint so it returns the right z coordinate on bridges. */
- byte new_z = GetSlopeZ(v->x_pos, v->y_pos);
-
byte old_z = v->z_pos;
- v->z_pos = new_z;
+ v->z_pos = GetSlopeZ(v->x_pos, v->y_pos);
if (new_tile) {
CLRBIT(v->u.rail.flags, VRF_GOINGUP);
CLRBIT(v->u.rail.flags, VRF_GOINGDOWN);
- if (new_z != old_z) {
- TileIndex tile = TileVirtXY(v->x_pos, v->y_pos);
-
- /* XXX workaround, whole UP/DOWN detection needs overhaul */
- if (!IsTunnelTile(tile)) {
- SETBIT(v->u.rail.flags, (new_z > old_z) ? VRF_GOINGUP : VRF_GOINGDOWN);
+ if (v->u.rail.track == TRACK_BIT_X || v->u.rail.track == TRACK_BIT_Y) {
+ /* Any track that isn't TRACK_BIT_X or TRACK_BIT_Y cannot be sloped.
+ * To check whether the current tile is sloped, and in which
+ * direction it is sloped, we get the 'z' at the center of
+ * the tile (middle_z) and the edge of the tile (old_z),
+ * which we then can compare. */
+ static const int HALF_TILE_SIZE = TILE_SIZE / 2;
+ static const int INV_TILE_SIZE_MASK = ~(TILE_SIZE - 1);
+
+ byte middle_z = GetSlopeZ((v->x_pos & INV_TILE_SIZE_MASK) | HALF_TILE_SIZE, (v->y_pos & INV_TILE_SIZE_MASK) | HALF_TILE_SIZE);
+
+ /* For some reason tunnel tiles are always given as sloped :(
+ * But they are not sloped... */
+ if (middle_z != v->z_pos && !IsTunnelTile(TileVirtXY(v->x_pos, v->y_pos))) {
+ SETBIT(v->u.rail.flags, (middle_z > old_z) ? VRF_GOINGUP : VRF_GOINGDOWN);
}
}
}
@@ -2659,28 +2669,6 @@
}
-struct TrainCollideChecker {
- const Vehicle *v;
- const Vehicle *v_skip;
-};
-
-static void *FindTrainCollideEnum(Vehicle *v, void *data)
-{
- const TrainCollideChecker* tcc = (TrainCollideChecker*)data;
-
- if (v != tcc->v &&
- v != tcc->v_skip &&
- v->type == VEH_TRAIN &&
- v->u.rail.track != TRACK_BIT_DEPOT &&
- myabs(v->z_pos - tcc->v->z_pos) < 6 &&
- myabs(v->x_pos - tcc->v->x_pos) < 6 &&
- myabs(v->y_pos - tcc->v->y_pos) < 6) {
- return v;
- } else {
- return NULL;
- }
-}
-
static void SetVehicleCrashed(Vehicle *v)
{
if (v->u.rail.crash_anim_pos != 0) return;
@@ -2699,11 +2687,52 @@
{
uint num = 0;
BEGIN_ENUM_WAGONS(v)
- if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) num += v->cargo_count;
+ if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) num += v->cargo.Count();
END_ENUM_WAGONS(v)
return num;
}
+struct TrainCollideChecker {
+ Vehicle *v;
+ const Vehicle *v_skip;
+ uint num;
+};
+
+static void *FindTrainCollideEnum(Vehicle *v, void *data)
+{
+ TrainCollideChecker* tcc = (TrainCollideChecker*)data;
+
+ if (v != tcc->v &&
+ v != tcc->v_skip &&
+ v->type == VEH_TRAIN &&
+ v->u.rail.track != TRACK_BIT_DEPOT &&
+ myabs(v->z_pos - tcc->v->z_pos) < 6 &&
+ myabs(v->x_pos - tcc->v->x_pos) < 6 &&
+ myabs(v->y_pos - tcc->v->y_pos) < 6 ) {
+
+ Vehicle *coll = GetFirstVehicleInChain(v);
+
+ /* it can't collide with its own wagons */
+ if (tcc->v == coll ||
+ (tcc->v->u.rail.track == TRACK_BIT_WORMHOLE && (tcc->v->direction & 2) != (v->direction & 2)))
+ return NULL;
+
+ /* two drivers + passengers killed in train tcc->v (if it was not crashed already) */
+ if (!(tcc->v->vehstatus & VS_CRASHED)) {
+ tcc->num += 2 + CountPassengersInTrain(tcc->v);
+ SetVehicleCrashed(tcc->v);
+ }
+
+ if (!(coll->vehstatus & VS_CRASHED)) {
+ /* two drivers + passengers killed in train coll (if it was not crashed already) */
+ tcc->num += 2 + CountPassengersInTrain(coll);
+ SetVehicleCrashed(coll);
+ }
+ }
+
+ return NULL;
+}
+
/**
* Checks whether the specified train has a collision with another vehicle. If
* so, destroys this vehicle, and the other vehicle if its subtype has TS_Front.
@@ -2720,28 +2749,15 @@
TrainCollideChecker tcc;
tcc.v = v;
tcc.v_skip = v->next;
-
- /* find colliding vehicle */
- Vehicle *realcoll = (Vehicle*)VehicleFromPosXY(v->x_pos, v->y_pos, &tcc, FindTrainCollideEnum);
- if (realcoll == NULL) return;
-
- Vehicle *coll = GetFirstVehicleInChain(realcoll);
-
- /* it can't collide with its own wagons */
- if (v == coll ||
- (v->u.rail.track == TRACK_BIT_WORMHOLE && (v->direction & 2) != (realcoll->direction & 2)))
- return;
-
- /* two drivers + passengers killed in train v */
- uint num = 2 + CountPassengersInTrain(v);
- if (!(coll->vehstatus & VS_CRASHED))
- /* two drivers + passengers killed in train coll (if it was not crashed already) */
- num += 2 + CountPassengersInTrain(coll);
-
- SetVehicleCrashed(v);
- if (IsFrontEngine(coll)) SetVehicleCrashed(coll);
-
- SetDParam(0, num);
+ tcc.num = 0;
+
+ /* find colliding vehicles */
+ VehicleFromPosXY(v->x_pos, v->y_pos, &tcc, FindTrainCollideEnum);
+
+ /* any dead -> no crash */
+ if (tcc.num == 0) return;
+
+ SetDParam(0, tcc.num);
AddNewsItem(STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL,
NEWS_FLAGS(NM_THIN, NF_VIEWPORT | NF_VEHICLE, NT_ACCIDENT, 0),
v->index,
@@ -3284,12 +3300,13 @@
void Train_Tick(Vehicle *v)
{
- if (_age_cargo_skip_counter == 0 && v->cargo_days != 0xff)
- v->cargo_days++;
+ if (_age_cargo_skip_counter == 0) v->cargo.AgeCargo();
v->tick_counter++;
if (IsFrontEngine(v)) {
+ v->current_order_time++;
+
TrainLocoHandler(v, false);
/* make sure vehicle wasn't deleted. */
@@ -3353,9 +3370,9 @@
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
}
-int32 GetTrainRunningCost(const Vehicle *v)
+Money GetTrainRunningCost(const Vehicle *v)
{
- int32 cost = 0;
+ Money cost = 0;
do {
const RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
@@ -3389,9 +3406,9 @@
if ((v->vehstatus & VS_STOPPED) == 0) {
/* running costs */
- int32 cost = GetTrainRunningCost(v) / 364;
-
- v->profit_this_year -= cost >> 8;
+ CommandCost cost(GetTrainRunningCost(v) / 364);
+
+ v->profit_this_year -= cost.GetCost() >> 8;
SET_EXPENSES_TYPE(EXPENSES_TRAIN_RUN);
SubtractMoneyFromPlayerFract(v->owner, cost);
@@ -3399,6 +3416,9 @@
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
InvalidateWindowClasses(WC_TRAINS_LIST);
}
+ } else if (IsTrainEngine(v)) {
+ /* Also age engines that aren't front engines */
+ AgeVehicle(v);
}
}
--- a/src/train_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/train_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -169,8 +169,7 @@
}
/* draw widgets & caption */
- SetDParam(0, v->string_id);
- SetDParam(1, v->unitnumber);
+ SetDParam(0, v->index);
DrawWindowWidgets(w);
if (v->u.rail.crash_anim_pos != 0) {
@@ -283,6 +282,7 @@
DeleteWindowById(WC_VEHICLE_REFIT, w->window_number);
DeleteWindowById(WC_VEHICLE_ORDERS, w->window_number);
DeleteWindowById(WC_VEHICLE_DETAILS, w->window_number);
+ DeleteWindowById(WC_VEHICLE_TIMETABLE, w->window_number);
break;
case WE_MOUSELOOP: {
@@ -327,13 +327,12 @@
static void TrainDetailsCargoTab(const Vehicle *v, int x, int y)
{
if (v->cargo_cap != 0) {
- uint num = v->cargo_count;
StringID str = STR_8812_EMPTY;
- if (num != 0) {
+ if (!v->cargo.Empty()) {
SetDParam(0, v->cargo_type);
- SetDParam(1, num);
- SetDParam(2, v->cargo_source);
+ SetDParam(1, v->cargo.Count());
+ SetDParam(2, v->cargo.Source());
SetDParam(3, _patches.freight_trains);
str = FreightWagonMult(v->cargo_type) > 1 ? STR_FROM_MULT : STR_8813_FROM;
}
@@ -344,11 +343,11 @@
static void TrainDetailsInfoTab(const Vehicle *v, int x, int y)
{
if (RailVehInfo(v->engine_type)->railveh_type == RAILVEH_WAGON) {
- SetDParam(0, GetCustomEngineName(v->engine_type));
+ SetDParam(0, v->engine_type);
SetDParam(1, v->value);
DrawString(x, y, STR_882D_VALUE, 0x10);
} else {
- SetDParam(0, GetCustomEngineName(v->engine_type));
+ SetDParam(0, v->engine_type);
SetDParam(1, v->build_year);
SetDParam(2, v->value);
DrawString(x, y, STR_882C_BUILT_VALUE, 0x10);
@@ -387,7 +386,7 @@
}
do {
- act_cargo[u->cargo_type] += u->cargo_count;
+ act_cargo[u->cargo_type] += u->cargo.Count();
max_cargo[u->cargo_type] += u->cargo_cap;
} while ((u = u->next) != NULL);
@@ -413,8 +412,7 @@
SetWindowWidgetDisabledState(w, 6, !_patches.servint_trains);
SetWindowWidgetDisabledState(w, 7, !_patches.servint_trains);
- SetDParam(0, v->string_id);
- SetDParam(1, v->unitnumber);
+ SetDParam(0, v->index);
DrawWindowWidgets(w);
SetDParam(1, v->age / 366);
@@ -504,7 +502,7 @@
DrawString(x, y + 2, FreightWagonMult(i) > 1 ? STR_TOTAL_CAPACITY_MULT : STR_013F_TOTAL_CAPACITY, 0);
}
}
- SetDParam(0, v->cargo_feeder_share);
+ SetDParam(0, v->cargo.FeederShare());
DrawString(x, y + 15, STR_FEEDER_CARGO_VALUE, 0);
}
}
@@ -521,8 +519,8 @@
switch (e->we.click.widget) {
case 2: /* name train */
v = GetVehicle(w->window_number);
- SetDParam(0, v->unitnumber);
- ShowQueryString(v->string_id, STR_8865_NAME_TRAIN, 31, 150, w, CS_ALPHANUMERAL);
+ 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;
--- a/src/transparency_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/transparency_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -23,6 +23,7 @@
TTW_WIDGET_BUILDINGS, ///< Make player buildings and structures transparent
TTW_WIDGET_BRIDGES, ///< Make bridges transparent
TTW_WIDGET_STRUCTURES, ///< Make unmovable structures transparent
+ TTW_WIDGET_LOADING, ///< Make loading indicators transperent
TTW_WIDGET_END, ///< End of toggle buttons
};
@@ -59,11 +60,11 @@
static const Widget _transparency_widgets[] = {
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
-{ WWT_CAPTION, RESIZE_NONE, 7, 11, 162, 0, 13, STR_TRANSPARENCY_TOOLB, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{WWT_STICKYBOX, RESIZE_NONE, 7, 163, 174, 0, 13, STR_NULL, STR_STICKY_BUTTON},
+{ WWT_CAPTION, RESIZE_NONE, 7, 11, 184, 0, 13, STR_TRANSPARENCY_TOOLB, STR_018C_WINDOW_TITLE_DRAG_THIS},
+{WWT_STICKYBOX, RESIZE_NONE, 7, 185, 196, 0, 13, STR_NULL, STR_STICKY_BUTTON},
/* transparency widgets:
- * transparent signs, trees, houses, industries, player's buildings, bridges and unmovable structures */
+ * transparent signs, trees, houses, industries, player's buildings, bridges, unmovable structures and loading indicators */
{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_SIGN, STR_TRANSPARENT_SIGNS_DESC},
{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_PLANTTREES, STR_TRANSPARENT_TREES_DESC},
{ WWT_IMGBTN, RESIZE_NONE, 7, 44, 65, 14, 35, SPR_IMG_TOWN, STR_TRANSPARENT_HOUSES_DESC},
@@ -71,12 +72,13 @@
{ WWT_IMGBTN, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_IMG_COMPANY_LIST, STR_TRANSPARENT_BUILDINGS_DESC},
{ WWT_IMGBTN, RESIZE_NONE, 7, 110, 152, 14, 35, SPR_IMG_BRIDGE, STR_TRANSPARENT_BRIDGES_DESC},
{ WWT_IMGBTN, RESIZE_NONE, 7, 153, 174, 14, 35, SPR_IMG_TRANSMITTER, STR_TRANSPARENT_STRUCTURES_DESC},
+{ WWT_IMGBTN, RESIZE_NONE, 7, 175, 196, 14, 35, SPR_IMG_TRAINLIST, STR_TRANSPARENT_LOADING_DESC},
{ WIDGETS_END},
};
static const WindowDesc _transparency_desc = {
- WDP_ALIGN_TBR, 58+36, 175, 36,
+ WDP_ALIGN_TBR, 58+36, 197, 36,
WC_TRANSPARENCY_TOOLBAR, WC_NONE,
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
_transparency_widgets,
--- a/src/tree_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/tree_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -213,10 +213,10 @@
* @param p1 tree type, -1 means random.
* @param p2 end tile of area-drag
*/
-int32 CmdPlantTree(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdPlantTree(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
StringID msg = INVALID_STRING_ID;
- int32 cost;
+ CommandCost cost;
int ex;
int ey;
int sx, sy, x, y;
@@ -235,8 +235,6 @@
if (ex < sx) Swap(ex, sx);
if (ey < sy) Swap(ey, sy);
- cost = 0; // total cost
-
for (x = sx; x <= ex; x++) {
for (y = sy; y <= ey; y++) {
TileIndex tile = TileXY(x, y);
@@ -254,7 +252,7 @@
MarkTileDirtyByTile(tile);
}
/* 2x as expensive to add more trees to an existing tile */
- cost += _price.build_trees * 2;
+ cost.AddCost(_price.build_trees * 2);
break;
case MP_CLEAR:
@@ -265,8 +263,8 @@
}
switch (GetClearGround(tile)) {
- case CLEAR_FIELDS: cost += _price.clear_3; break;
- case CLEAR_ROCKS: cost += _price.clear_2; break;
+ case CLEAR_FIELDS: cost.AddCost(_price.clear_3); break;
+ case CLEAR_ROCKS: cost.AddCost(_price.clear_2); break;
default: break;
}
@@ -297,7 +295,7 @@
if (_game_mode == GM_EDITOR && IS_INT_INSIDE(treetype, TREE_RAINFOREST, TREE_CACTUS))
SetTropicZone(tile, TROPICZONE_RAINFOREST);
}
- cost += _price.build_trees;
+ cost.AddCost(_price.build_trees);
break;
default:
@@ -307,7 +305,7 @@
}
}
- if (cost == 0) {
+ if (cost.GetCost() == 0) {
return_cmd_error(msg);
} else {
return cost;
@@ -428,7 +426,7 @@
return tileh;
}
-static int32 ClearTile_Trees(TileIndex tile, byte flags)
+static CommandCost ClearTile_Trees(TileIndex tile, byte flags)
{
uint num;
@@ -443,7 +441,7 @@
if (flags & DC_EXEC) DoClearSquare(tile);
- return num * _price.remove_trees;
+ return CommandCost(num * _price.remove_trees);
}
static void GetAcceptedCargo_Trees(TileIndex tile, AcceptedCargo ac)
--- a/src/tunnel_map.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/tunnel_map.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -39,7 +39,7 @@
* @param dir the direction to start searching to.
* @return true if and only if there is a tunnel.
*/
-static bool IsTunnelInWayDir(TileIndex tile, uint z, DiagDirection dir)
+bool IsTunnelInWayDir(TileIndex tile, uint z, DiagDirection dir)
{
TileIndexDiff delta = TileOffsByDiagDir(dir);
uint height;
--- a/src/tunnel_map.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/tunnel_map.h Tue Jun 26 23:40:58 2007 +0000
@@ -87,6 +87,7 @@
TileIndex GetOtherTunnelEnd(TileIndex);
bool IsTunnelInWay(TileIndex, uint z);
+bool IsTunnelInWayDir(TileIndex tile, uint z, DiagDirection dir);
/**
--- a/src/tunnelbridge_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/tunnelbridge_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -110,32 +110,32 @@
* - rest is invalid
*/
#define M(x) (1 << (x))
-static int32 CheckBridgeSlopeNorth(Axis axis, Slope tileh)
+static CommandCost CheckBridgeSlopeNorth(Axis axis, Slope tileh)
{
uint32 valid;
valid = M(SLOPE_FLAT) | (axis == AXIS_X ? M(SLOPE_NE) : M(SLOPE_NW));
- if (HASBIT(valid, tileh)) return 0;
+ if (HASBIT(valid, tileh)) return CommandCost();
valid =
BRIDGE_FULL_LEVELED_FOUNDATION | M(SLOPE_N) | M(SLOPE_STEEP_N) |
(axis == AXIS_X ? M(SLOPE_E) | M(SLOPE_STEEP_E) : M(SLOPE_W) | M(SLOPE_STEEP_W));
- if (HASBIT(valid, tileh)) return _price.terraform;
+ if (HASBIT(valid, tileh)) return CommandCost(_price.terraform);
return CMD_ERROR;
}
-static int32 CheckBridgeSlopeSouth(Axis axis, Slope tileh)
+static CommandCost CheckBridgeSlopeSouth(Axis axis, Slope tileh)
{
uint32 valid;
valid = M(SLOPE_FLAT) | (axis == AXIS_X ? M(SLOPE_SW) : M(SLOPE_SE));
- if (HASBIT(valid, tileh)) return 0;
+ if (HASBIT(valid, tileh)) return CommandCost();
valid =
BRIDGE_FULL_LEVELED_FOUNDATION | M(SLOPE_S) | M(SLOPE_STEEP_S) |
(axis == AXIS_X ? M(SLOPE_W) | M(SLOPE_STEEP_W) : M(SLOPE_E) | M(SLOPE_STEEP_E));
- if (HASBIT(valid, tileh)) return _price.terraform;
+ if (HASBIT(valid, tileh)) return CommandCost(_price.terraform);
return CMD_ERROR;
}
@@ -175,7 +175,7 @@
* - p2 = (bit 8-..) - rail type or road types.
* - p2 = (bit 15 ) - set means road bridge.
*/
-int32 CmdBuildBridge(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildBridge(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
{
uint bridge_type;
RailType railtype;
@@ -194,7 +194,7 @@
TileIndexDiff delta;
uint bridge_len;
Axis direction;
- int32 cost, terraformcost, ret;
+ CommandCost cost, terraformcost, ret;
bool allow_on_slopes;
bool replace_bridge = false;
uint replaced_bridge_type;
@@ -300,7 +300,7 @@
return_cmd_error(STR_1024_AREA_IS_OWNED_BY_ANOTHER);
}
- cost = (bridge_len + 1) * _price.clear_bridge; // The cost of clearing the current bridge.
+ cost.AddCost((bridge_len + 1) * _price.clear_bridge); // The cost of clearing the current bridge.
replace_bridge = true;
replaced_bridge_type = GetBridgeType(tile_start);
@@ -315,20 +315,20 @@
cost = ret;
terraformcost = CheckBridgeSlopeNorth(direction, tileh_start);
- if (CmdFailed(terraformcost) || (terraformcost != 0 && !allow_on_slopes))
+ if (CmdFailed(terraformcost) || (terraformcost.GetCost() != 0 && !allow_on_slopes))
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
- cost += terraformcost;
+ cost.AddCost(terraformcost);
/* Try and clear the end landscape */
ret = DoCommand(tile_end, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) return ret;
- cost += ret;
+ cost.AddCost(ret);
/* false - end tile slope check */
terraformcost = CheckBridgeSlopeSouth(direction, tileh_end);
- if (CmdFailed(terraformcost) || (terraformcost != 0 && !allow_on_slopes))
+ if (CmdFailed(terraformcost) || (terraformcost.GetCost() != 0 && !allow_on_slopes))
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION);
- cost += terraformcost;
+ cost.AddCost(terraformcost);
}
if (!replace_bridge) {
@@ -411,7 +411,7 @@
/* try and clear the middle landscape */
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) return ret;
- cost += ret;
+ cost.AddCost(ret);
break;
}
@@ -439,7 +439,7 @@
if (IsValidPlayer(_current_player))
bridge_len = CalcBridgeLenCostFactor(bridge_len);
- cost += (int64)bridge_len * _price.build_bridge * b->price >> 8;
+ cost.AddCost((int64)bridge_len * _price.build_bridge * b->price >> 8);
}
return cost;
@@ -452,7 +452,7 @@
* @param p1 railtype or roadtypes. bit 9 set means road tunnel
* @param p2 unused
*/
-int32 CmdBuildTunnel(TileIndex start_tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTunnel(TileIndex start_tile, uint32 flags, uint32 p1, uint32 p2)
{
TileIndexDiff delta;
TileIndex end_tile;
@@ -461,8 +461,8 @@
Slope end_tileh;
uint start_z;
uint end_z;
- int32 cost;
- int32 ret;
+ CommandCost cost;
+ CommandCost ret;
_build_tunnel_endtile = 0;
if (!HASBIT(p1, 9)) {
@@ -488,8 +488,15 @@
* for the clearing of the entrance of the tunnel. Assigning it to
* cost before the loop will yield different costs depending on start-
* position, because of increased-cost-by-length: 'cost += cost >> 3' */
- cost = 0;
+
delta = TileOffsByDiagDir(direction);
+ DiagDirection tunnel_in_way_dir;
+ if (OtherAxis(DiagDirToAxis(direction)) == AXIS_X) {
+ tunnel_in_way_dir = (TileX(start_tile) < (MapMaxX() / 2)) ? DIAGDIR_SW : DIAGDIR_NE;
+ } else {
+ tunnel_in_way_dir = (TileY(start_tile) < (MapMaxX() / 2)) ? DIAGDIR_SE : DIAGDIR_NW;
+ }
+
end_tile = start_tile;
for (;;) {
end_tile += delta;
@@ -497,30 +504,40 @@
if (start_z == end_z) break;
- if (!_cheats.crossing_tunnels.value && IsTunnelInWay(end_tile, start_z)) {
+ if (!_cheats.crossing_tunnels.value && IsTunnelInWayDir(end_tile, start_z, tunnel_in_way_dir)) {
return_cmd_error(STR_5003_ANOTHER_TUNNEL_IN_THE_WAY);
}
- cost += _price.build_tunnel;
- cost += cost >> 3; // add a multiplier for longer tunnels
- if (cost >= 400000000) cost = 400000000;
+ cost.AddCost(_price.build_tunnel);
+ cost.AddCost(cost.GetCost() >> 3); // add a multiplier for longer tunnels
}
/* Add the cost of the entrance */
- cost += _price.build_tunnel + ret;
+ cost.AddCost(_price.build_tunnel);
+ cost.AddCost(ret);
/* if the command fails from here on we want the end tile to be highlighted */
_build_tunnel_endtile = end_tile;
/* 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.
+ */
+ if (IsTileType(end_tile, MP_RAILWAY)) return_cmd_error(STR_1008_MUST_REMOVE_RAILROAD_TRACK);
+
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);
} else {
ret = DoCommand(end_tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) return ret;
}
- cost += _price.build_tunnel + ret;
+ cost.AddCost(_price.build_tunnel);
+ cost.AddCost(ret);
if (flags & DC_EXEC) {
if (GB(p1, 9, 1) == TRANSPORT_RAIL) {
@@ -577,7 +594,7 @@
return false;
}
-static int32 DoClearTunnel(TileIndex tile, uint32 flags)
+static CommandCost DoClearTunnel(TileIndex tile, uint32 flags)
{
Town *t = NULL;
TileIndex endtile;
@@ -621,7 +638,7 @@
YapfNotifyTrackLayoutChange(tile, track);
YapfNotifyTrackLayoutChange(endtile, track);
}
- return _price.clear_tunnel * (length + 1);
+ return CommandCost(_price.clear_tunnel * (length + 1));
}
@@ -637,7 +654,7 @@
return false;
}
-static int32 DoClearBridge(TileIndex tile, uint32 flags)
+static CommandCost DoClearBridge(TileIndex tile, uint32 flags)
{
DiagDirection direction;
TileIndexDiff delta;
@@ -694,10 +711,10 @@
YapfNotifyTrackLayoutChange(endtile, track);
}
- return (DistanceManhattan(tile, endtile) + 1) * _price.clear_bridge;
+ return CommandCost((DistanceManhattan(tile, endtile) + 1) * _price.clear_bridge);
}
-static int32 ClearTile_TunnelBridge(TileIndex tile, byte flags)
+static CommandCost ClearTile_TunnelBridge(TileIndex tile, byte flags)
{
if (IsTunnel(tile)) {
if (flags & DC_AUTO) return_cmd_error(STR_5006_MUST_DEMOLISH_TUNNEL_FIRST);
@@ -720,7 +737,7 @@
* @return The cost and state of the operation
* @retval CMD_ERROR An error occured during the operation.
*/
-int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
+CommandCost DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
{
TileIndex endtile;
@@ -748,7 +765,7 @@
YapfNotifyTrackLayoutChange(tile, track);
YapfNotifyTrackLayoutChange(endtile, track);
}
- return (length + 1) * (_price.build_rail / 2);
+ return CommandCost((length + 1) * (_price.build_rail / 2));
} else if (IsBridge(tile) && GetBridgeTransportType(tile) == TRANSPORT_RAIL) {
if (!CheckTileOwnership(tile)) return CMD_ERROR;
@@ -783,7 +800,7 @@
}
}
- return (DistanceManhattan(tile, endtile) + 1) * (_price.build_rail / 2);
+ return CommandCost((DistanceManhattan(tile, endtile) + 1) * (_price.build_rail / 2));
} else {
return CMD_ERROR;
}
@@ -1008,6 +1025,8 @@
}
DrawBridgeMiddle(ti);
+ } else {
+ NOT_REACHED();
}
}
--- a/src/unmovable_cmd.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/unmovable_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -31,7 +31,7 @@
* @param flags docommand flags of calling function
* @return cost of the operation
*/
-static int32 DestroyCompanyHQ(PlayerID pid, uint32 flags)
+static CommandCost DestroyCompanyHQ(PlayerID pid, uint32 flags)
{
Player* p = GetPlayer(pid);
@@ -49,7 +49,7 @@
}
/* cost of relocating company is 1% of company value */
- return CalculateCompanyValue(p) / 100;
+ return CommandCost(CalculateCompanyValue(p) / 100);
}
void UpdateCompanyHQ(Player *p, uint score)
@@ -73,7 +73,7 @@
MarkTileDirtyByTile(tile + TileDiffXY(1, 1));
}
-extern int32 CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true);
+extern CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID* station, bool check_clear = true);
/** Build or relocate the HQ. This depends if the HQ is already built or not
* @param tile tile where the HQ will be built or relocated to
@@ -81,20 +81,18 @@
* @param p1 unused
* @param p2 unused
*/
-int32 CmdBuildCompanyHQ(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildCompanyHQ(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Player *p = GetPlayer(_current_player);
- int cost;
- int32 ret;
+ CommandCost cost;
SET_EXPENSES_TYPE(EXPENSES_PROPERTY);
- ret = CheckFlatLandBelow(tile, 2, 2, flags, 0, NULL);
- if (CmdFailed(ret)) return ret;
- cost = ret;
+ cost = CheckFlatLandBelow(tile, 2, 2, flags, 0, NULL);
+ if (CmdFailed(cost)) return cost;
if (p->location_of_house != 0) { // Moving HQ
- cost += DestroyCompanyHQ(_current_player, flags);
+ cost.AddCost(DestroyCompanyHQ(_current_player, flags));
}
if (flags & DC_EXEC) {
@@ -216,7 +214,7 @@
return IsOwnedLand(tile) ? tileh : SLOPE_FLAT;
}
-static int32 ClearTile_Unmovable(TileIndex tile, byte flags)
+static CommandCost ClearTile_Unmovable(TileIndex tile, byte flags)
{
if (IsCompanyHQ(tile)) {
if (_current_player == OWNER_WATER) {
@@ -244,7 +242,7 @@
DoClearSquare(tile);
}
- return 0;
+ return CommandCost();
}
static void GetAcceptedCargo_Unmovable(TileIndex tile, AcceptedCargo ac)
--- a/src/variables.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/variables.h Tue Jun 26 23:40:58 2007 +0000
@@ -18,7 +18,7 @@
VARDEF Prices _price;
VARDEF uint16 _price_frac[NUM_PRICES];
-VARDEF uint32 _cargo_payment_rates[NUM_CARGO];
+VARDEF Money _cargo_payment_rates[NUM_CARGO];
VARDEF uint16 _cargo_payment_rates_frac[NUM_CARGO];
struct GameOptions {
@@ -133,6 +133,8 @@
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 default_rail_type; ///< The default rail type for the rail GUI
uint8 toolbar_pos; // position of toolbars, 0=left, 1=center, 2=right
uint8 window_snap_radius; // Windows snap at each other if closer than this
@@ -234,6 +236,9 @@
bool pause_on_newgame; ///< Whether to start new games paused or not.
TownLayoutByte town_layout; ///< Select town layout
+
+ bool timetabling; ///< Whether to allow timetabling.
+ bool timetable_in_ticks; ///< Whether to show the timetable in ticks rather than days.
};
VARDEF Patches _patches;
@@ -265,10 +270,11 @@
VARDEF Cheats _cheats;
/* NOSAVE: Used in palette animations only, not really important. */
-VARDEF int _timer_counter;
+VARDEF int _palette_animation_counter;
VARDEF uint32 _frame_counter;
+VARDEF uint32 _realtime_tick;
VARDEF bool _do_autosave;
VARDEF int _autosave_ctr;
@@ -280,9 +286,9 @@
VARDEF bool _news_ticker_sound;
VARDEF StringID _error_message;
-VARDEF int32 _additional_cash_required;
+VARDEF Money _additional_cash_required;
-VARDEF uint32 _decode_parameters[20];
+VARDEF uint64 _decode_parameters[20];
VARDEF bool _rightclick_emulate;
@@ -338,30 +344,23 @@
VARDEF char *_log_file;
-static inline void SetDParamX(uint32 *s, uint n, uint32 v)
+static inline void SetDParamX(uint64 *s, uint n, uint64 v)
{
s[n] = v;
}
-static inline uint32 GetDParamX(const uint32 *s, uint n)
+static inline uint64 GetDParamX(const uint64 *s, uint n)
{
return s[n];
}
-static inline void SetDParam(uint n, uint32 v)
+static inline void SetDParam(uint n, uint64 v)
{
assert(n < lengthof(_decode_parameters));
_decode_parameters[n] = v;
}
-static inline void SetDParam64(uint n, uint64 v)
-{
- assert(n + 1 < lengthof(_decode_parameters));
- _decode_parameters[n + 0] = v & 0xffffffff;
- _decode_parameters[n + 1] = v >> 32;
-}
-
-static inline uint32 GetDParam(uint n)
+static inline uint64 GetDParam(uint n)
{
assert(n < lengthof(_decode_parameters));
return _decode_parameters[n];
@@ -378,8 +377,8 @@
StringID BindCString(const char *str);
-#define COPY_IN_DPARAM(offs, src, num) memcpy(_decode_parameters + offs, src, sizeof(uint32) * (num))
-#define COPY_OUT_DPARAM(dst, offs, num) memcpy(dst, _decode_parameters + offs, sizeof(uint32) * (num))
+#define COPY_IN_DPARAM(offs, src, num) memcpy(_decode_parameters + offs, src, sizeof(uint64) * (num))
+#define COPY_OUT_DPARAM(dst, offs, num) memcpy(dst, _decode_parameters + offs, sizeof(uint64) * (num))
#define SET_EXPENSES_TYPE(x) _yearly_expenses_type = x;
--- a/src/vehicle.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/vehicle.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -15,6 +15,7 @@
#include "map.h"
#include "tile.h"
#include "vehicle.h"
+#include "timetable.h"
#include "gfx.h"
#include "viewport.h"
#include "news.h"
@@ -228,9 +229,12 @@
FOR_ALL_VEHICLES(v) {
v->UpdateDeltaXY(v->direction);
+ v->fill_percent_te_id = INVALID_TE_ID;
v->first = NULL;
if (v->type == VEH_TRAIN) v->u.rail.first_engine = INVALID_ENGINE;
if (v->type == VEH_ROAD) v->u.road.first_engine = INVALID_ENGINE;
+
+ v->cargo.InvalidateCache();
}
FOR_ALL_VEHICLES(v) {
@@ -295,6 +299,7 @@
v->depot_list = NULL;
v->random_bits = 0;
v->group_id = DEFAULT_GROUP;
+ v->fill_percent_te_id = INVALID_TE_ID;
return v;
}
@@ -687,6 +692,7 @@
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
}
+ v->cargo.Truncate(0);
UpdateVehiclePosHash(v, INVALID_COORD, 0);
v->next_hash = NULL;
v->next_new_hash = NULL;
@@ -767,14 +773,6 @@
void CallVehicleTicks()
{
-#ifdef ENABLE_NETWORK
- /* hotfix for desync problem:
- * for MP games invalidate the YAPF cache every tick to keep it exactly the same on the server and all clients */
- if (_networking) {
- YapfNotifyTrackLayoutChange(INVALID_TILE, INVALID_TRACK);
- }
-#endif //ENABLE_NETWORK
-
_first_veh_in_depot_list = NULL; // now we are sure it's initialized at the start of each tick
Station *st;
@@ -845,21 +843,21 @@
* @param engine_type Which engine to refit
* @return Price for refitting
*/
-int32 GetRefitCost(EngineID engine_type)
+CommandCost GetRefitCost(EngineID engine_type)
{
- int32 base_cost = 0;
+ CommandCost base_cost;
switch (GetEngine(engine_type)->type) {
- case VEH_SHIP: base_cost = _price.ship_base; break;
- case VEH_ROAD: base_cost = _price.roadveh_base; break;
- case VEH_AIRCRAFT: base_cost = _price.aircraft_base; break;
+ case VEH_SHIP: base_cost.AddCost(_price.ship_base); break;
+ case VEH_ROAD: base_cost.AddCost(_price.roadveh_base); break;
+ case VEH_AIRCRAFT: base_cost.AddCost(_price.aircraft_base); break;
case VEH_TRAIN:
- base_cost = 2 * ((RailVehInfo(engine_type)->railveh_type == RAILVEH_WAGON) ?
- _price.build_railwagon : _price.build_railvehicle);
+ base_cost.AddCost(2 * ((RailVehInfo(engine_type)->railveh_type == RAILVEH_WAGON) ?
+ _price.build_railwagon : _price.build_railvehicle));
break;
default: NOT_REACHED(); break;
}
- return (EngInfo(engine_type)->refit_cost * base_cost) >> 10;
+ return CommandCost((EngInfo(engine_type)->refit_cost * base_cost.GetCost()) >> 10);
}
static void DoDrawVehicle(const Vehicle *v)
@@ -1679,12 +1677,12 @@
* - bit 6 if set, then it's a vehicle list window, not a depot and Tile is ignored in this case
* - bit 8-11 Vehicle List Window type (ignored unless bit 1 is set)
*/
-int32 CmdMassStartStopVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdMassStartStopVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle **vl = NULL;
uint16 engine_list_length = 0;
uint16 engine_count = 0;
- int32 return_value = CMD_ERROR;
+ CommandCost return_value = CMD_ERROR;
uint i;
uint stop_command;
VehicleType vehicle_type = (VehicleType)GB(p2, 0, 5);
@@ -1711,7 +1709,7 @@
for (i = 0; i < engine_count; i++) {
const Vehicle *v = vl[i];
- int32 ret;
+ CommandCost ret;
if (!!(v->vehstatus & VS_STOPPED) != start_stop) continue;
@@ -1725,8 +1723,8 @@
ret = DoCommand(tile, v->index, 0, flags, stop_command);
- if (!CmdFailed(ret)) {
- return_value = 0;
+ if (CmdSucceeded(ret)) {
+ return_value = CommandCost();
/* We know that the command is valid for at least one vehicle.
* If we haven't set DC_EXEC, then there is no point in continueing because it will be valid */
if (!(flags & DC_EXEC)) break;
@@ -1743,7 +1741,7 @@
* @param p1 Vehicle type
* @param p2 unused
*/
-int32 CmdDepotSellAllVehicles(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDepotSellAllVehicles(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle **engines = NULL;
Vehicle **wagons = NULL;
@@ -1752,7 +1750,7 @@
uint16 wagon_list_length = 0;
uint16 wagon_count = 0;
- int32 cost = 0;
+ CommandCost cost;
uint i, sell_command, total_number_vehicles;
VehicleType vehicle_type = (VehicleType)GB(p1, 0, 8);
@@ -1771,7 +1769,7 @@
total_number_vehicles = engine_count + wagon_count;
for (i = 0; i < total_number_vehicles; i++) {
const Vehicle *v;
- int32 ret;
+ CommandCost ret;
if (i < engine_count) {
v = engines[i];
@@ -1781,12 +1779,12 @@
ret = DoCommand(tile, v->index, 1, flags, sell_command);
- if (!CmdFailed(ret)) cost += ret;
+ if (CmdSucceeded(ret)) cost.AddCost(ret);
}
free(engines);
free(wagons);
- if (cost == 0) return CMD_ERROR; // no vehicles to sell
+ if (cost.GetCost() == 0) return CMD_ERROR; // no vehicles to sell
return cost;
}
@@ -1796,13 +1794,13 @@
* @param p1 Type of vehicle
* @param p2 Unused
*/
-int32 CmdDepotMassAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdDepotMassAutoReplace(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle **vl = NULL;
uint16 engine_list_length = 0;
uint16 engine_count = 0;
uint i, x = 0, y = 0, z = 0;
- int32 cost = 0;
+ CommandCost cost;
VehicleType vehicle_type = (VehicleType)GB(p1, 0, 8);
if (!IsTileOwner(tile, _current_player)) return CMD_ERROR;
@@ -1814,7 +1812,7 @@
for (i = 0; i < engine_count; i++) {
Vehicle *v = vl[i];
bool stopped = !(v->vehstatus & VS_STOPPED);
- int32 ret;
+ CommandCost ret;
/* Ensure that the vehicle completely in the depot */
if (!IsVehicleInDepot(v)) continue;
@@ -1829,8 +1827,8 @@
}
ret = MaybeReplaceVehicle(v, !(flags & DC_EXEC), false);
- if (!CmdFailed(ret)) {
- cost += ret;
+ if (CmdSucceeded(ret)) {
+ cost.AddCost(ret);
if (!(flags & DC_EXEC)) break;
/* There is a problem with autoreplace and newgrf
* It's impossible to tell the length of a train after it's being replaced before it's actually done
@@ -1842,14 +1840,14 @@
}
}
- if (cost == 0) {
+ if (cost.GetCost() == 0) {
cost = CMD_ERROR;
} else {
if (flags & DC_EXEC) {
/* Display the cost animation now that DoCommandP() can't do it for us (see previous comments) */
- if (IsLocalPlayer()) ShowCostOrIncomeAnimation(x, y, z, cost);
+ if (IsLocalPlayer()) ShowCostOrIncomeAnimation(x, y, z, cost.GetCost());
}
- cost = 0;
+ cost = CommandCost();
}
free(vl);
@@ -1862,11 +1860,11 @@
* @param p1 the original vehicle's index
* @param p2 1 = shared orders, else copied orders
*/
-int32 CmdCloneVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdCloneVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v_front, *v;
Vehicle *w_front, *w, *w_rear;
- int32 cost, total_cost = 0;
+ CommandCost cost, total_cost;
uint32 build_argument = 2;
if (!IsValidVehicleID(p1)) return CMD_ERROR;
@@ -1914,7 +1912,7 @@
if (CmdFailed(cost)) return cost;
- total_cost += cost;
+ total_cost.AddCost(cost);
if (flags & DC_EXEC) {
w = GetVehicle(_new_vehicle_id);
@@ -1926,7 +1924,7 @@
if (v->type == VEH_TRAIN && !IsFrontEngine(v)) {
/* this s a train car
* add this unit to the end of the train */
- int32 result = DoCommand(0, (w_rear->index << 16) | w->index, 1, flags, CMD_MOVE_RAIL_VEHICLE);
+ CommandCost result = DoCommand(0, (w_rear->index << 16) | w->index, 1, flags, CMD_MOVE_RAIL_VEHICLE);
if (CmdFailed(result)) {
/* The train can't be joined to make the same consist as the original.
* Sell what we already made (clean up) and return an error. */
@@ -1972,7 +1970,7 @@
if (w->cargo_type != v->cargo_type || w->cargo_subtype != v->cargo_type) {
cost = DoCommand(0, w->index, v->cargo_type | (v->cargo_subtype << 8) | 1U << 16 , flags, GetCmdRefitVeh(v));
- if (!CmdFailed(cost)) total_cost += cost;
+ if (CmdSucceeded(cost)) total_cost.AddCost(cost);
}
if (w->type == VEH_TRAIN && EngineHasArticPart(w)) {
@@ -1986,7 +1984,7 @@
CargoID initial_cargo = GetEngineCargoType(v->engine_type);
if (v->cargo_type != initial_cargo && initial_cargo != CT_INVALID) {
- total_cost += GetRefitCost(v->engine_type);
+ total_cost.AddCost(GetRefitCost(v->engine_type));
}
}
@@ -2223,7 +2221,7 @@
* @param vlw_flag tells what kind of list requested the goto depot
* @return 0 for success and CMD_ERROR if no vehicle is able to go to depot
*/
-int32 SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id)
+CommandCost SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id)
{
const Vehicle **sort_list = NULL;
uint n, i;
@@ -2234,20 +2232,20 @@
/* Send all the vehicles to a depot */
for (i = 0; i < n; i++) {
const Vehicle *v = sort_list[i];
- int32 ret = DoCommand(v->tile, v->index, (service ? 1 : 0) | DEPOT_DONT_CANCEL, flags, GetCmdSendToDepot(type));
+ CommandCost ret = DoCommand(v->tile, v->index, (service ? 1 : 0) | DEPOT_DONT_CANCEL, flags, GetCmdSendToDepot(type));
/* Return 0 if DC_EXEC is not set this is a valid goto depot command)
* In this case we know that at least one vehicle can be sent to a depot
* and we will issue the command. We can now safely quit the loop, knowing
* it will succeed at least once. With DC_EXEC we really need to send them to the depot */
- if (!CmdFailed(ret) && !(flags & DC_EXEC)) {
+ if (CmdSucceeded(ret) && !(flags & DC_EXEC)) {
free((void*)sort_list);
- return 0;
+ return CommandCost();
}
}
free((void*)sort_list);
- return (flags & DC_EXEC) ? 0 : CMD_ERROR;
+ return (flags & DC_EXEC) ? CommandCost() : CMD_ERROR;
}
bool IsVehicleInDepot(const Vehicle *v)
@@ -2262,6 +2260,42 @@
return false;
}
+/**
+ * Calculates how full a vehicle is.
+ * @param v The Vehicle to check. For trains, use the first engine.
+ * @param color The string to show depending on if we are unloading or loading
+ * @return A percentage of how full the Vehicle is.
+ */
+uint8 CalcPercentVehicleFilled(Vehicle *v, StringID *color)
+{
+ int count = 0;
+ int max = 0;
+ int cars = 0;
+ int unloading = 0;
+
+ assert(color != NULL);
+
+ /* Count up max and used */
+ for (; v != NULL; v = v->next) {
+ count += v->cargo.Count();
+ max += v->cargo_cap;
+ if (v->cargo_cap != 0) {
+ unloading += HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING) ? 1 : 0;
+ cars++;
+ }
+ }
+
+ if (unloading == 0) *color = STR_PERCENT_UP;
+ else if (cars == unloading) *color = STR_PERCENT_DOWN;
+ else *color = STR_PERCENT_UP_DOWN;
+
+ /* Train without capacity */
+ if (max == 0) return 100;
+
+ /* Return the percentage */
+ return (count * 100) / max;
+}
+
void VehicleEnterDepot(Vehicle *v)
{
switch (v->type) {
@@ -2314,7 +2348,7 @@
v->current_order.flags = 0;
if (t.refit_cargo < NUM_CARGO) {
- int32 cost;
+ CommandCost cost;
_current_player = v->owner;
cost = DoCommand(v->tile, v->index, t.refit_cargo | t.refit_subtype << 8, DC_EXEC, GetCmdRefitVeh(v));
@@ -2327,13 +2361,14 @@
SetDParam(1, v->unitnumber);
AddNewsItem(STR_ORDER_REFIT_FAILED, NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0), v->index, 0);
}
- } else if (v->owner == _local_player && cost != 0) {
- ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost);
+ } else if (v->owner == _local_player && cost.GetCost() != 0) {
+ ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost.GetCost());
}
}
if (HASBIT(t.flags, OFB_PART_OF_ORDERS)) {
/* Part of orders */
+ UpdateVehicleTimetable(v, true);
v->cur_order_index++;
} else if (HASBIT(t.flags, OFB_HALT_IN_DEPOT)) {
/* Force depot visit */
@@ -2362,7 +2397,7 @@
* @param p1 vehicle ID to name
* @param p2 unused
*/
-int32 CmdNameVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdNameVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *v;
StringID str;
@@ -2386,7 +2421,7 @@
DeleteName(str);
}
- return 0;
+ return CommandCost();
}
@@ -2396,7 +2431,7 @@
* @param p1 vehicle ID that is being service-interval-changed
* @param p2 new service interval
*/
-int32 CmdChangeServiceInt(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdChangeServiceInt(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle* v;
uint16 serv_int = GetServiceIntervalClamped(p2); /* Double check the service interval from the user-input */
@@ -2412,7 +2447,7 @@
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
}
- return 0;
+ return CommandCost();
}
@@ -2721,6 +2756,14 @@
return GetEngineColourMap(v->engine_type, v->owner, INVALID_ENGINE, v);
}
+static uint8 _cargo_days;
+static uint16 _cargo_source;
+static uint32 _cargo_source_xy;
+static uint16 _cargo_count;
+static uint16 _cargo_paid_for;
+static Money _cargo_feeder_share;
+static uint32 _cargo_loaded_at_xy;
+
/** Save and load of vehicles */
extern const SaveLoad _common_veh_desc[] = {
SLE_VAR(Vehicle, subtype, SLE_UINT8),
@@ -2757,14 +2800,15 @@
SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16, 5, SL_MAX_VERSION),
- SLE_VAR(Vehicle, cargo_type, SLE_UINT8),
- SLE_CONDVAR(Vehicle, cargo_subtype, SLE_UINT8, 35, SL_MAX_VERSION),
- SLE_VAR(Vehicle, cargo_days, SLE_UINT8),
- SLE_CONDVAR(Vehicle, cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6),
- SLE_CONDVAR(Vehicle, cargo_source, SLE_UINT16, 7, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, cargo_source_xy, SLE_UINT32, 44, SL_MAX_VERSION),
- SLE_VAR(Vehicle, cargo_cap, SLE_UINT16),
- SLE_VAR(Vehicle, cargo_count, SLE_UINT16),
+ SLE_VAR(Vehicle, cargo_type, SLE_UINT8),
+ SLE_CONDVAR(Vehicle, cargo_subtype, SLE_UINT8, 35, SL_MAX_VERSION),
+ SLEG_CONDVAR( _cargo_days, SLE_UINT8, 0, 67),
+ SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6),
+ SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 67),
+ SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, 44, 67),
+ SLE_VAR(Vehicle, cargo_cap, SLE_UINT16),
+ SLEG_CONDVAR( _cargo_count, SLE_UINT16, 0, 67),
+ SLE_CONDLST(Vehicle, cargo, REF_CARGO_PACKET, 68, SL_MAX_VERSION),
SLE_VAR(Vehicle, day_counter, SLE_UINT8),
SLE_VAR(Vehicle, tick_counter, SLE_UINT8),
@@ -2787,6 +2831,10 @@
SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, refit_cargo), SLE_UINT8, 36, SL_MAX_VERSION),
SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, refit_subtype), SLE_UINT8, 36, SL_MAX_VERSION),
+ /* Timetable in current order */
+ SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, wait_time), SLE_UINT16, 67, SL_MAX_VERSION),
+ SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, travel_time), SLE_UINT16, 67, SL_MAX_VERSION),
+
SLE_REF(Vehicle, orders, REF_ORDER),
SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 30),
@@ -2806,15 +2854,19 @@
SLE_CONDVAR(Vehicle, build_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 30),
SLE_CONDVAR(Vehicle, build_year, SLE_INT32, 31, SL_MAX_VERSION),
- SLE_VAR(Vehicle, load_unload_time_rem, SLE_UINT16),
- SLE_CONDVAR(Vehicle, cargo_paid_for, SLE_UINT16, 45, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, vehicle_flags, SLE_UINT8, 40, SL_MAX_VERSION),
-
- SLE_VAR(Vehicle, profit_this_year, SLE_INT32),
- SLE_VAR(Vehicle, profit_last_year, SLE_INT32),
- SLE_CONDVAR(Vehicle, cargo_feeder_share, SLE_INT32, 51, SL_MAX_VERSION),
- SLE_CONDVAR(Vehicle, cargo_loaded_at_xy, SLE_UINT32, 51, SL_MAX_VERSION),
- SLE_VAR(Vehicle, value, SLE_UINT32),
+ SLE_VAR(Vehicle, load_unload_time_rem, SLE_UINT16),
+ SLEG_CONDVAR( _cargo_paid_for, SLE_UINT16, 45, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, vehicle_flags, SLE_UINT8, 40, SL_MAX_VERSION),
+
+ SLE_CONDVAR(Vehicle, profit_this_year, SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
+ SLE_CONDVAR(Vehicle, profit_this_year, SLE_INT64, 65, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, profit_last_year, SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
+ SLE_CONDVAR(Vehicle, profit_last_year, SLE_INT64, 65, SL_MAX_VERSION),
+ SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_I32 | SLE_VAR_I64,51, 64),
+ SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, 65, 67),
+ SLEG_CONDVAR( _cargo_loaded_at_xy, SLE_UINT32, 51, 67),
+ SLE_CONDVAR(Vehicle, value, SLE_FILE_I32 | SLE_VAR_I64, 0, 64),
+ SLE_CONDVAR(Vehicle, value, SLE_INT64, 65, SL_MAX_VERSION),
SLE_VAR(Vehicle, random_bits, SLE_UINT8),
SLE_VAR(Vehicle, waiting_triggers, SLE_UINT8),
@@ -2824,6 +2876,9 @@
SLE_CONDVAR(Vehicle, group_id, SLE_UINT16, 60, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, current_order_time, SLE_UINT32, 67, SL_MAX_VERSION),
+ SLE_CONDVAR(Vehicle, lateness_counter, SLE_INT32, 67, SL_MAX_VERSION),
+
/* reserve extra space in savegame here. (currently 10 bytes) */
SLE_CONDNULL(10, 2, SL_MAX_VERSION),
@@ -2992,6 +3047,8 @@
int index;
Vehicle *v;
+ _cargo_count = 0;
+
while ((index = SlIterateArray()) != -1) {
Vehicle *v;
@@ -3000,9 +3057,8 @@
v = GetVehicle(index);
VehicleType vtype = (VehicleType)SlReadByte();
- SlObject(v, (SaveLoad*)_veh_descs[vtype]);
-
- switch (v->type) {
+
+ switch (vtype) {
case VEH_TRAIN: v = new (v) Train(); break;
case VEH_ROAD: v = new (v) RoadVehicle(); break;
case VEH_SHIP: v = new (v) Ship(); break;
@@ -3013,6 +3069,20 @@
default: NOT_REACHED();
}
+ SlObject(v, (SaveLoad*)_veh_descs[vtype]);
+
+ if (_cargo_count != 0 && IsPlayerBuildableVehicleType(v)) {
+ /* Don't construct the packet with station here, because that'll fail with old savegames */
+ CargoPacket *cp = new CargoPacket();
+ cp->source = _cargo_source;
+ cp->source_xy = _cargo_source_xy;
+ cp->count = _cargo_count;
+ cp->days_in_transit = _cargo_days;
+ cp->feeder_share = _cargo_feeder_share;
+ cp->loaded_at_xy = _cargo_loaded_at_xy;
+ v->cargo.Append(cp);
+ }
+
/* Old savegames used 'last_station_visited = 0xFF' */
if (CheckSavegameVersion(5) && v->last_station_visited == 0xFF)
v->last_station_visited = INVALID_STATION;
@@ -3066,6 +3136,7 @@
* whether the train is lost or not; not marking a train lost
* that arrives at random stations is bad. */
this->current_order.flags |= OF_NON_STOP;
+ UpdateVehicleTimetable(this, true);
} else {
/* This is just an unordered intermediate stop */
this->current_order.flags = 0;
@@ -3089,9 +3160,16 @@
void Vehicle::LeaveStation()
{
assert(current_order.type == OT_LOADING);
+
+ /* Only update the timetable if the vehicle was supposed to stop here. */
+ if (current_order.flags & OF_NON_STOP) UpdateVehicleTimetable(this, false);
+
current_order.type = OT_LEAVESTATION;
current_order.flags = 0;
GetStation(this->last_station_visited)->loading_vehicles.remove(this);
+
+ HideFillingPercent(this->fill_percent_te_id);
+ this->fill_percent_te_id = INVALID_TE_ID;
}
@@ -3099,8 +3177,11 @@
{
switch (this->current_order.type) {
case OT_LOADING: {
+ uint wait_time = max(this->current_order.wait_time - this->lateness_counter, 0);
+
/* Not the first call for this tick, or still loading */
- if (mode || !HASBIT(this->vehicle_flags, VF_LOADING_FINISHED)) return;
+ if (mode || !HASBIT(this->vehicle_flags, VF_LOADING_FINISHED) ||
+ (_patches.timetabling && this->current_order_time < wait_time)) return;
this->PlayLeaveStationSound();
--- a/src/vehicle.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/vehicle.h Tue Jun 26 23:40:58 2007 +0000
@@ -9,6 +9,8 @@
#include "order.h"
#include "rail.h"
#include "road.h"
+#include "cargopacket.h"
+#include "texteff.hpp"
/** The returned bits of VehicleEnterTile. */
enum VehicleEnterTileStatus {
@@ -93,6 +95,8 @@
VF_LOADING_FINISHED,
VF_CARGO_UNLOADING,
VF_BUILT_AS_PROTOTYPE,
+ VF_TIMETABLE_STARTED, ///< Whether the vehicle has started running on the timetable yet.
+ VF_AUTOFILL_TIMETABLE, ///< Whether the vehicle should fill in the timetable automatically.
};
/* Effect vehicle types */
@@ -245,6 +249,8 @@
int8 y_offs; // y offset for vehicle sprite
EngineID engine_type;
+ TextEffectID fill_percent_te_id; // a text-effect id to a loading indicator object
+
/* for randomized variational spritegroups
* bitmask used to resolve them; parts of it get reseeded when triggers
* of corresponding spritegroups get matched */
@@ -262,12 +268,10 @@
StationID last_station_visited;
CargoID cargo_type; // type of cargo this vehicle is carrying
- byte cargo_days; // how many days have the pieces been in transit
- StationID cargo_source; // source of cargo
- TileIndex cargo_source_xy; //< stores the Tile where the source station is located, in case it is removed
uint16 cargo_cap; // total capacity
- uint16 cargo_count; // how many pieces are used
byte cargo_subtype; ///< Used for livery refits (NewGRF variations)
+ CargoList cargo; ///< The cargo this vehicle is carrying
+
byte day_counter; // increased by one for each day
byte tick_counter; // increased by one for each tick
@@ -309,17 +313,18 @@
bool leave_depot_instantly; // NOSAVE: stores if the vehicle needs to leave the depot it just entered. Used by autoreplace
uint16 load_unload_time_rem;
- uint16 cargo_paid_for; // How much of the cargo currently on board has been paid for.
byte vehicle_flags; // Used for gradual loading and other miscellaneous things (@see VehicleFlags enum)
- int32 profit_this_year;
- int32 profit_last_year;
- int32 cargo_feeder_share; ///< value of feeder pickup to be paid for on delivery of cargo
- TileIndex cargo_loaded_at_xy; ///< tile index where feeder cargo was loaded
- uint32 value;
+ Money profit_this_year;
+ Money profit_last_year;
+ Money value;
GroupID group_id; ///< Index of group Pool array
+ /* Used for timetabling. */
+ uint32 current_order_time; ///< How many ticks have passed since this order started.
+ int32 lateness_counter; ///< How many ticks late (or early if negative) this vehicle is.
+
union {
VehicleRail rail;
VehicleAir air;
@@ -502,6 +507,7 @@
void *VehicleFromPosXY(int x, int y, void *data, VehicleFromPosProc *proc);
void CallVehicleTicks();
Vehicle *FindVehicleOnTileZ(TileIndex tile, byte z);
+uint8 CalcPercentVehicleFilled(Vehicle *v, StringID *color);
void InitializeTrains();
byte VehicleRandomBits();
@@ -509,7 +515,7 @@
bool CanRefitTo(EngineID engine_type, CargoID cid_to);
CargoID FindFirstRefittableCargo(EngineID engine_type);
-int32 GetRefitCost(EngineID engine_type);
+CommandCost GetRefitCost(EngineID engine_type);
void ViewportAddVehicles(DrawPixelInfo *dpi);
@@ -548,7 +554,7 @@
void TrainConsistChanged(Vehicle *v);
void TrainPowerChanged(Vehicle *v);
-int32 GetTrainRunningCost(const Vehicle *v);
+Money GetTrainRunningCost(const Vehicle *v);
int CheckTrainStoppedInDepot(const Vehicle *v);
@@ -556,13 +562,13 @@
uint GenerateVehicleSortList(const Vehicle*** sort_list, uint16 *length_of_array, VehicleType type, PlayerID owner, uint32 index, uint16 window_type);
void BuildDepotVehicleList(VehicleType type, TileIndex tile, Vehicle ***engine_list, uint16 *engine_list_length, uint16 *engine_count, Vehicle ***wagon_list, uint16 *wagon_list_length, uint16 *wagon_count);
-int32 SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id);
+CommandCost SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id);
bool IsVehicleInDepot(const Vehicle *v);
void VehicleEnterDepot(Vehicle *v);
void InvalidateAutoreplaceWindow(EngineID e);
-int32 MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs);
+CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs);
/* Flags to add to p2 for goto depot commands */
/* Note: bits 8-10 are used for VLW flags */
--- a/src/vehicle_gui.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/vehicle_gui.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -331,22 +331,21 @@
SetVScrollCount(w, WP(w, refit_d).list->num_lines);
- SetDParam(0, v->string_id);
- SetDParam(1, v->unitnumber);
+ SetDParam(0, v->index);
DrawWindowWidgets(w);
WP(w, refit_d).cargo = DrawVehicleRefitWindow(WP(w, refit_d).list, WP(w, refit_d).sel, w->vscroll.pos, w->vscroll.cap, w->resize.step_height);
if (WP(w, refit_d).cargo != NULL) {
- int32 cost;
+ CommandCost cost;
cost = DoCommand(v->tile, v->index, WP(w, refit_d).cargo->cargo | WP(w, refit_d).cargo->subtype << 8,
DC_QUERY_COST, GetCmdRefitVeh(GetVehicle(w->window_number)->type));
- if (!CmdFailed(cost)) {
+ if (CmdSucceeded(cost)) {
SetDParam(0, WP(w, refit_d).cargo->cargo);
SetDParam(1, _returned_refit_capacity);
- SetDParam(2, cost);
+ SetDParam(2, cost.GetCost());
DrawString(2, w->widget[5].top + 1, STR_9840_NEW_CAPACITY_COST_OF_REFIT, 0);
}
}
@@ -589,7 +588,7 @@
{
const Vehicle* va = *(const Vehicle**)a;
const Vehicle* vb = *(const Vehicle**)b;
- int r = va->profit_this_year - vb->profit_this_year;
+ int r = ClampToI32(va->profit_this_year - vb->profit_this_year);
VEHICLEUNITNUMBERSORTER(r, va, vb);
@@ -600,7 +599,7 @@
{
const Vehicle* va = *(const Vehicle**)a;
const Vehicle* vb = *(const Vehicle**)b;
- int r = va->profit_last_year - vb->profit_last_year;
+ int r = ClampToI32(va->profit_last_year - vb->profit_last_year);
VEHICLEUNITNUMBERSORTER(r, va, vb);
@@ -687,13 +686,12 @@
const Vehicle* va = *(const Vehicle**)a;
const Vehicle* vb = *(const Vehicle**)b;
const Vehicle *u;
- int valuea = 0, valueb = 0;
- int r;
+ Money valuea = 0, valueb = 0;
for (u = va; u != NULL; u = u->next) valuea += u->value;
for (u = vb; u != NULL; u = u->next) valueb += u->value;
- r = valuea - valueb;
+ int r = ClampToI32(valuea - valueb);
VEHICLEUNITNUMBERSORTER(r, va, vb);
@@ -959,9 +957,8 @@
break;
case VLW_STANDARD: /* Company Name */
- SetDParam(0, p->name_1);
- SetDParam(1, p->name_2);
- SetDParam(2, w->vscroll.count);
+ SetDParam(0, p->index);
+ SetDParam(1, w->vscroll.count);
break;
case VLW_STATION_LIST: /* Station Name */
@@ -1018,7 +1015,7 @@
(v->type == VEH_AIRCRAFT && v->string_id != STR_SV_AIRCRAFT_NAME)) {
/* The vehicle got a name so we will print it */
- SetDParam(0, v->string_id);
+ SetDParam(0, v->index);
DrawString(x + 19, y, STR_01AB, 0);
}
@@ -1114,7 +1111,7 @@
/* XXX - Substite string since the dropdown cannot handle dynamic strings */
action_str[2] = depot_name[vl->vehicle_type];
- ShowDropDownMenu(w, action_str, 0, VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, 0, 0);
+ ShowDropDownMenu(w, action_str, 0, VLW_WIDGET_MANAGE_VEHICLES_DROPDOWN, 0, (w->window_number & VLW_MASK) == VLW_STANDARD ? 0 : 1);
break;
}
--- a/src/video/cocoa_v.mm Sun Jun 17 21:31:00 2007 +0000
+++ b/src/video/cocoa_v.mm Tue Jun 26 23:40:58 2007 +0000
@@ -77,10 +77,6 @@
#undef Point
#undef Rect
-/* Taken from ../gfx.h */
-extern bool _dbg_screen_rect;
-
-
/* Subclass of NSWindow to fix genie effect and support resize events */
@interface OTTD_QuartzWindow : NSWindow
- (void)miniaturize:(id)sender;
@@ -205,9 +201,25 @@
static void QZ_CheckPaletteAnim()
{
- if (_pal_last_dirty != -1) {
- QZ_UpdatePalette(_pal_first_dirty, _pal_last_dirty - _pal_first_dirty + 1);
- _pal_last_dirty = -1;
+ if (_pal_count_dirty != 0) {
+ Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+
+ switch (blitter->UsePaletteAnimation()) {
+ case Blitter::PALETTE_ANIMATION_VIDEO_BACKEND:
+ QZ_UpdatePalette(_pal_first_dirty, _pal_count_dirty);
+ break;
+
+ case Blitter::PALETTE_ANIMATION_BLITTER:
+ blitter->PaletteAnimate(_pal_first_dirty, _pal_count_dirty);
+ break;
+
+ case Blitter::PALETTE_ANIMATION_NONE:
+ break;
+
+ default:
+ NOT_REACHED();
+ }
+ _pal_count_dirty = 0;
}
}
@@ -673,6 +685,7 @@
static void QZ_GameLoop()
{
uint32 cur_ticks = GetTick();
+ uint32 last_cur_ticks = cur_ticks;
uint32 next_tick = cur_ticks + 30;
uint32 pal_tick = 0;
#ifdef _DEBUG
@@ -720,13 +733,12 @@
cur_ticks = GetTick();
if (cur_ticks >= next_tick || (_fast_forward && !_pause_game) || cur_ticks < prev_cur_ticks) {
+ _realtime_tick += cur_ticks - last_cur_ticks;
+ last_cur_ticks = cur_ticks;
next_tick = cur_ticks + 30;
_ctrl_pressed = !!(_cocoa_video_data.current_mods & NSControlKeyMask);
_shift_pressed = !!(_cocoa_video_data.current_mods & NSShiftKeyMask);
-#ifdef _DEBUG
- _dbg_screen_rect = !!(_cocoa_video_data.current_mods & NSAlphaShiftKeyMask);
-#endif
GameLoop();
@@ -952,10 +964,6 @@
static void QZ_UpdateWindowPalette(uint start, uint count)
{
- /* We can only update the palette in 8bpp for now */
- /* TODO -- We need support for other bpps too! */
- if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) return;
-
uint i;
switch (_cocoa_video_data.device_bpp) {
--- a/src/video/sdl_v.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/video/sdl_v.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -37,10 +37,6 @@
static void UpdatePalette(uint start, uint count)
{
- /* We can only update the palette in 8bpp for now */
- /* TODO -- We need support for other bpps too! */
- if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) return;
-
SDL_Color pal[256];
uint i;
@@ -61,9 +57,25 @@
static void CheckPaletteAnim()
{
- if (_pal_last_dirty != -1) {
- UpdatePalette(_pal_first_dirty, _pal_last_dirty - _pal_first_dirty + 1);
- _pal_last_dirty = -1;
+ if (_pal_count_dirty != 0) {
+ Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+
+ switch (blitter->UsePaletteAnimation()) {
+ case Blitter::PALETTE_ANIMATION_VIDEO_BACKEND:
+ UpdatePalette(_pal_first_dirty, _pal_count_dirty);
+ break;
+
+ case Blitter::PALETTE_ANIMATION_BLITTER:
+ blitter->PaletteAnimate(_pal_first_dirty, _pal_count_dirty);
+ break;
+
+ case Blitter::PALETTE_ANIMATION_NONE:
+ break;
+
+ default:
+ NOT_REACHED();
+ }
+ _pal_count_dirty = 0;
}
}
@@ -430,6 +442,7 @@
static void SdlVideoMainLoop()
{
uint32 cur_ticks = SDL_CALL SDL_GetTicks();
+ uint32 last_cur_ticks = cur_ticks;
uint32 next_tick = cur_ticks + 30;
uint32 pal_tick = 0;
uint32 mod;
@@ -460,13 +473,12 @@
cur_ticks = SDL_CALL SDL_GetTicks();
if (cur_ticks >= next_tick || (_fast_forward && !_pause_game) || cur_ticks < prev_cur_ticks) {
+ _realtime_tick += cur_ticks - last_cur_ticks;
+ last_cur_ticks = cur_ticks;
next_tick = cur_ticks + 30;
_ctrl_pressed = !!(mod & KMOD_CTRL);
_shift_pressed = !!(mod & KMOD_SHIFT);
-#ifdef _DEBUG
- _dbg_screen_rect = !!(mod & KMOD_CAPS);
-#endif
// determine which directional keys are down
_dirkeys =
--- a/src/video/win32_v.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/video/win32_v.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -34,9 +34,6 @@
uint _display_hz;
uint _fullscreen_bpp;
static uint16 _bck_resolution[2];
-#if !defined(WINCE)
-static DEVMODE _fullscreen_dm;
-#endif
#if !defined(UNICODE)
uint _codepage;
#endif
@@ -64,10 +61,6 @@
static void UpdatePalette(HDC dc, uint start, uint count)
{
- /* We can only update the palette in 8bpp for now */
- /* TODO -- We need support for other bpps too! */
- if (BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() != 8) return;
-
RGBQUAD rgb[256];
uint i;
@@ -145,7 +138,7 @@
if (AllocateDibSection(w, h)) {
// mark all palette colors dirty
_pal_first_dirty = 0;
- _pal_last_dirty = 255;
+ _pal_count_dirty = 255;
GameSizeChanged();
// redraw screen
@@ -209,6 +202,89 @@
}
}
+static void MakeWindow(bool full_screen)
+{
+ _fullscreen = full_screen;
+
+ // recreate window?
+ if ((full_screen || _wnd.fullscreen) && _wnd.main_wnd) {
+ DestroyWindow(_wnd.main_wnd);
+ _wnd.main_wnd = 0;
+ }
+
+#if defined(WINCE)
+ /* WinCE is always fullscreen */
+#else
+ if (full_screen) {
+ DEVMODE settings;
+
+ /* Make sure we are always at least the screen-depth of the blitter */
+ if (_fullscreen_bpp < BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth()) _fullscreen_bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
+
+ memset(&settings, 0, sizeof(settings));
+ settings.dmSize = sizeof(settings);
+ settings.dmFields =
+ (_fullscreen_bpp != 0 ? DM_BITSPERPEL : 0) |
+ DM_PELSWIDTH |
+ DM_PELSHEIGHT |
+ (_display_hz != 0 ? DM_DISPLAYFREQUENCY : 0);
+ settings.dmBitsPerPel = _fullscreen_bpp;
+ settings.dmPelsWidth = _wnd.width_org;
+ settings.dmPelsHeight = _wnd.height_org;
+ settings.dmDisplayFrequency = _display_hz;
+
+ if (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) {
+ MakeWindow(false);
+ return;
+ }
+ } else if (_wnd.fullscreen) {
+ // restore display?
+ ChangeDisplaySettings(NULL, 0);
+ }
+#endif
+
+ {
+ RECT r;
+ DWORD style, showstyle;
+ int x, y, w, h;
+
+ showstyle = SW_SHOWNORMAL;
+ _wnd.fullscreen = full_screen;
+ if (_wnd.fullscreen) {
+ style = WS_POPUP;
+ SetRect(&r, 0, 0, _wnd.width_org, _wnd.height_org);
+ } else {
+ style = WS_OVERLAPPEDWINDOW;
+ /* On window creation, check if we were in maximize mode before */
+ if (_window_maximize) showstyle = SW_SHOWMAXIMIZED;
+ SetRect(&r, 0, 0, _wnd.width, _wnd.height);
+ }
+
+#if !defined(WINCE)
+ AdjustWindowRect(&r, style, FALSE);
+#endif
+ w = r.right - r.left;
+ h = r.bottom - r.top;
+ x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2;
+ y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
+
+ if (_wnd.main_wnd) {
+ ShowWindow(_wnd.main_wnd, SW_SHOWNORMAL); // remove maximize-flag
+ SetWindowPos(_wnd.main_wnd, 0, x, y, w, h, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER);
+ } else {
+ extern const char _openttd_revision[];
+ TCHAR Windowtitle[50];
+
+ _sntprintf(Windowtitle, sizeof(Windowtitle), _T("OpenTTD %s"), MB_TO_WIDE(_openttd_revision));
+
+ _wnd.main_wnd = CreateWindow(_T("OTTD"), Windowtitle, style, x, y, w, h, 0, 0, GetModuleHandle(NULL), 0);
+ if (_wnd.main_wnd == NULL) error("CreateWindow failed");
+ ShowWindow(_wnd.main_wnd, showstyle);
+ }
+ }
+ GameSizeChanged(); // invalidate all windows, force redraw
+}
+
static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static uint32 keycode = 0;
@@ -231,9 +307,25 @@
old_bmp = (HBITMAP)SelectObject(dc2, _wnd.dib_sect);
old_palette = SelectPalette(dc, _wnd.gdi_palette, FALSE);
- if (_pal_last_dirty != -1) {
- UpdatePalette(dc2, _pal_first_dirty, _pal_last_dirty - _pal_first_dirty + 1);
- _pal_last_dirty = -1;
+ if (_pal_count_dirty != 0) {
+ Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
+
+ switch (blitter->UsePaletteAnimation()) {
+ case Blitter::PALETTE_ANIMATION_VIDEO_BACKEND:
+ UpdatePalette(dc2, _pal_first_dirty, _pal_count_dirty);
+ break;
+
+ case Blitter::PALETTE_ANIMATION_BLITTER:
+ blitter->PaletteAnimate(_pal_first_dirty, _pal_count_dirty);
+ break;
+
+ case Blitter::PALETTE_ANIMATION_NONE:
+ break;
+
+ default:
+ NOT_REACHED();
+ }
+ _pal_count_dirty = 0;
}
BitBlt(dc, 0, 0, _wnd.width, _wnd.height, dc2, 0, 0, SRCCOPY);
@@ -516,9 +608,7 @@
if (_wnd.has_focus && _wnd.minimized) {
/* Restore the game window */
ShowWindow(hwnd, SW_RESTORE);
- ChangeDisplaySettings(&_fullscreen_dm, CDS_FULLSCREEN);
- /* Force palette update */
- SendMessage(hwnd, WM_QUERYNEWPALETTE, 0, 0);
+ MakeWindow(true);
} else if (!_wnd.has_focus && !_wnd.minimized) {
/* Minimise the window and restore desktop */
ShowWindow(hwnd, SW_MINIMIZE);
@@ -555,87 +645,6 @@
}
}
-static void MakeWindow(bool full_screen)
-{
- _fullscreen = full_screen;
-
- // recreate window?
- if ((full_screen || _wnd.fullscreen) && _wnd.main_wnd) {
- DestroyWindow(_wnd.main_wnd);
- _wnd.main_wnd = 0;
- }
-
-#if defined(WINCE)
- /* WinCE is always fullscreen */
-#else
- if (full_screen) {
- /* Make sure we are always at least the screen-depth of the blitter */
- if (_fullscreen_bpp < BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth()) _fullscreen_bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
-
- memset(&_fullscreen_dm, 0, sizeof(_fullscreen_dm));
- _fullscreen_dm.dmSize = sizeof(_fullscreen_dm);
- _fullscreen_dm.dmFields =
- (_fullscreen_bpp != 0 ? DM_BITSPERPEL : 0) |
- DM_PELSWIDTH |
- DM_PELSHEIGHT |
- (_display_hz != 0 ? DM_DISPLAYFREQUENCY : 0);
- _fullscreen_dm.dmBitsPerPel = _fullscreen_bpp;
- _fullscreen_dm.dmPelsWidth = _wnd.width_org;
- _fullscreen_dm.dmPelsHeight = _wnd.height_org;
- _fullscreen_dm.dmDisplayFrequency = _display_hz;
-
- if (ChangeDisplaySettings(&_fullscreen_dm, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) {
- MakeWindow(false);
- return;
- }
- } else if (_wnd.fullscreen) {
- // restore display?
- ChangeDisplaySettings(NULL, 0);
- }
-#endif
-
- {
- RECT r;
- DWORD style, showstyle;
- int x, y, w, h;
-
- showstyle = SW_SHOWNORMAL;
- _wnd.fullscreen = full_screen;
- if (_wnd.fullscreen) {
- style = WS_POPUP;
- SetRect(&r, 0, 0, _wnd.width_org, _wnd.height_org);
- } else {
- style = WS_OVERLAPPEDWINDOW;
- /* On window creation, check if we were in maximize mode before */
- if (_window_maximize) showstyle = SW_SHOWMAXIMIZED;
- SetRect(&r, 0, 0, _wnd.width, _wnd.height);
- }
-
-#if !defined(WINCE)
- AdjustWindowRect(&r, style, FALSE);
-#endif
- w = r.right - r.left;
- h = r.bottom - r.top;
- x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2;
- y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
-
- if (_wnd.main_wnd) {
- ShowWindow(_wnd.main_wnd, SW_SHOWNORMAL); // remove maximize-flag
- SetWindowPos(_wnd.main_wnd, 0, x, y, w, h, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER);
- } else {
- extern const char _openttd_revision[];
- TCHAR Windowtitle[50];
-
- _sntprintf(Windowtitle, sizeof(Windowtitle), _T("OpenTTD %s"), MB_TO_WIDE(_openttd_revision));
-
- _wnd.main_wnd = CreateWindow(_T("OTTD"), Windowtitle, style, x, y, w, h, 0, 0, GetModuleHandle(NULL), 0);
- if (_wnd.main_wnd == NULL) error("CreateWindow failed");
- ShowWindow(_wnd.main_wnd, showstyle);
- }
- }
- GameSizeChanged(); // invalidate all windows, force redraw
-}
-
static bool AllocateDibSection(int w, int h)
{
BITMAPINFO *bi;
@@ -651,7 +660,7 @@
return false;
_screen.width = w;
- _screen.pitch = ALIGN(w, 4);
+ _screen.pitch = (bpp == 8) ? ALIGN(w, 4) : w;
_screen.height = h;
bi = (BITMAPINFO*)alloca(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
memset(bi, 0, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
@@ -777,7 +786,7 @@
static void CheckPaletteAnim()
{
- if (_pal_last_dirty == -1)
+ if (_pal_count_dirty == 0)
return;
InvalidateRect(_wnd.main_wnd, NULL, FALSE);
}
@@ -786,6 +795,7 @@
{
MSG mesg;
uint32 cur_ticks = GetTickCount();
+ uint32 last_cur_ticks = cur_ticks;
uint32 next_tick = cur_ticks + 30;
_wnd.running = true;
@@ -814,12 +824,11 @@
cur_ticks = GetTickCount();
if (cur_ticks >= next_tick || (_fast_forward && !_pause_game) || cur_ticks < prev_cur_ticks) {
+ _realtime_tick += cur_ticks - last_cur_ticks;
+ last_cur_ticks = cur_ticks;
next_tick = cur_ticks + 30;
_ctrl_pressed = _wnd.has_focus && GetAsyncKeyState(VK_CONTROL)<0;
_shift_pressed = _wnd.has_focus && GetAsyncKeyState(VK_SHIFT)<0;
-#ifdef _DEBUG
- _dbg_screen_rect = _wnd.has_focus && GetAsyncKeyState(VK_CAPITAL)<0;
-#endif
// determine which directional keys are down
if (_wnd.has_focus) {
--- a/src/viewport.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/viewport.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -58,7 +58,7 @@
StringSpriteToDraw *next;
int32 x;
int32 y;
- uint32 params[2];
+ uint64 params[2];
uint16 width;
};
@@ -580,7 +580,7 @@
}
/* Returns a StringSpriteToDraw */
-void *AddStringToDraw(int x, int y, StringID string, uint32 params_1, uint32 params_2)
+void *AddStringToDraw(int x, int y, StringID string, uint64 params_1, uint64 params_2)
{
ViewportDrawer *vd = _cur_vd;
StringSpriteToDraw *ss;
@@ -649,6 +649,10 @@
#include "table/autorail.h"
+/**
+ * Checks if the specified tile is selected and if so draws selection using correct selectionstyle.
+ * @param *ti TileInfo Tile that is being drawn
+ */
static void DrawTileSelection(const TileInfo *ti)
{
SpriteID image;
@@ -939,7 +943,7 @@
{
StringSpriteToDraw *sstd;
- sstd = (StringSpriteToDraw*)AddStringToDraw(si->sign.left + 1, si->sign.top + 1, str, si->str, 0);
+ sstd = (StringSpriteToDraw*)AddStringToDraw(si->sign.left + 1, si->sign.top + 1, str, si->index, 0);
if (sstd != NULL) {
sstd->color = (si->owner == OWNER_NONE) ? 14 : _player_colors[si->owner];
sstd->width = width;
@@ -1361,6 +1365,30 @@
dpi->top -= w->top;
}
+static inline void ClampViewportToMap(const ViewPort *vp, int &x, int &y)
+{
+ /* Centre of the viewport is hot spot */
+ x += vp->virtual_width / 2;
+ y += vp->virtual_height / 2;
+
+ /* Convert viewport coordinates to map coordinates
+ * Calculation is scaled by 4 to avoid rounding errors */
+ int vx = -x + y * 2;
+ int vy = x + y * 2;
+
+ /* clamp to size of map */
+ vx = clamp(vx, 0, MapMaxX() * TILE_SIZE * 4);
+ vy = clamp(vy, 0, MapMaxY() * TILE_SIZE * 4);
+
+ /* Convert map coordinates to viewport coordinates */
+ x = (-vx + vy) / 2;
+ y = ( vx + vy) / 4;
+
+ /* Remove centreing */
+ x -= vp->virtual_width / 2;
+ y -= vp->virtual_height / 2;
+}
+
void UpdateViewportPosition(Window *w)
{
const ViewPort *vp = w->viewport;
@@ -1371,47 +1399,25 @@
SetViewportPosition(w, pt.x, pt.y);
} else {
- int x;
- int y;
- int vx;
- int vy;
-
- /* Center of the viewport is hot spot */
- x = WP(w,vp_d).scrollpos_x + vp->virtual_width / 2;
- y = WP(w,vp_d).scrollpos_y + vp->virtual_height / 2;
-
- int dest_x = WP(w,vp_d).dest_scrollpos_x + vp->virtual_width / 2;
- int dest_y = WP(w,vp_d).dest_scrollpos_y + vp->virtual_height / 2;
-
- int delta_x = dest_x - x;
- int delta_y = dest_y - y;
+ /* Ensure the destination location is within the map */
+ ClampViewportToMap(vp, WP(w, vp_d).dest_scrollpos_x, WP(w, vp_d).dest_scrollpos_y);
+
+ int delta_x = WP(w, vp_d).dest_scrollpos_x - WP(w, vp_d).scrollpos_x;
+ int delta_y = WP(w, vp_d).dest_scrollpos_y - WP(w, vp_d).scrollpos_y;
if (delta_x != 0 || delta_y != 0) {
if (_patches.smooth_scroll) {
int max_scroll = ScaleByMapSize1D(512);
/* Not at our desired positon yet... */
- x += clamp(delta_x / 8, -max_scroll, max_scroll);
- y += clamp(delta_y / 8, -max_scroll, max_scroll);
+ WP(w, vp_d).scrollpos_x += clamp(delta_x / 4, -max_scroll, max_scroll);
+ WP(w, vp_d).scrollpos_y += clamp(delta_y / 4, -max_scroll, max_scroll);
} else {
- x = dest_x;
- y = dest_y;
+ WP(w, vp_d).scrollpos_x = WP(w, vp_d).dest_scrollpos_x;
+ WP(w, vp_d).scrollpos_y = WP(w, vp_d).dest_scrollpos_y;
}
}
- /* Convert viewport coordinates to map coordinates
- * Calculation is scaled by 4 to avoid rounding errors */
- vx = -x + y * 2;
- vy = x + y * 2;
- /* clamp to size of map */
- vx = clamp(vx, 0 * 4, MapMaxX() * TILE_SIZE * 4);
- vy = clamp(vy, 0 * 4, MapMaxY() * TILE_SIZE * 4);
- /* Convert map coordinates to viewport coordinates */
- x = (-vx + vy) / 2;
- y = ( vx + vy) / 4;
- /* Set position */
- WP(w, vp_d).scrollpos_x = x - vp->virtual_width / 2;
- WP(w, vp_d).scrollpos_y = y - vp->virtual_height / 2;
-
+ ClampViewportToMap(vp, WP(w, vp_d).scrollpos_x, WP(w, vp_d).scrollpos_y);
SetViewportPosition(w, WP(w, vp_d).scrollpos_x, WP(w, vp_d).scrollpos_y);
}
}
@@ -1928,7 +1934,14 @@
return HT_RAIL | _AutorailPiece[x & 0xF][y & 0xF];
}
-/** called regular to update tile highlighting in all cases */
+/**
+ * Updates tile highlighting for all cases.
+ * Uses _thd.selstart and _thd.selend and _thd.place_mode (set elsewhere) to determine _thd.pos and _thd.size
+ * Also drawstyle is determined. Uses _thd.new.* as a buffer and calls SetSelectionTilesDirty() twice,
+ * Once for the old and once for the new selection.
+ * _thd is TileHighlightData, found in viewport.h
+ * Called by MouseLoop() in windows.cpp
+ */
void UpdateTileSelection()
{
int x1;
@@ -1979,8 +1992,8 @@
if (_thd.drawstyle != _thd.new_drawstyle ||
_thd.pos.x != _thd.new_pos.x || _thd.pos.y != _thd.new_pos.y ||
_thd.size.x != _thd.new_size.x || _thd.size.y != _thd.new_size.y ||
- _thd.outersize.x != _thd.new_outersize.x ||
- _thd.outersize.y != _thd.new_outersize.y) {
+ _thd.outersize.x != _thd.new_outersize.x ||
+ _thd.outersize.y != _thd.new_outersize.y) {
/* clear the old selection? */
if (_thd.drawstyle) SetSelectionTilesDirty();
@@ -2028,7 +2041,7 @@
* @param to TileIndex of the last tile to highlight */
void VpSetPresizeRange(TileIndex from, TileIndex to)
{
- uint distance = DistanceManhattan(from, to) + 1;
+ uint64 distance = DistanceManhattan(from, to) + 1;
_thd.selend.x = TileX(to) * TILE_SIZE;
_thd.selend.y = TileY(to) * TILE_SIZE;
@@ -2304,7 +2317,7 @@
TileIndex t1 = TileVirtXY(x, y);
uint distance = DistanceManhattan(t0, t1) + 1;
byte index = 0;
- uint params[2];
+ uint64 params[2];
if (distance != 1) {
int heightdiff = CalcHeightdiff(b, distance, t0, t1);
@@ -2383,7 +2396,7 @@
TileIndex t1 = TileVirtXY(x, y);
uint distance = DistanceManhattan(t0, t1) + 1;
byte index = 0;
- uint params[2];
+ uint64 params[2];
if (distance != 1) {
/* With current code passing a HT_LINE style to calculate the height
@@ -2416,7 +2429,7 @@
uint dx = delta(TileX(t0), TileX(t1)) + 1;
uint dy = delta(TileY(t0), TileY(t1)) + 1;
byte index = 0;
- uint params[3];
+ uint64 params[3];
/* If dragging an area (eg dynamite tool) and it is actually a single
* row/column, change the type to 'line' to get proper calculation for height */
--- a/src/viewport.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/viewport.h Tue Jun 26 23:40:58 2007 +0000
@@ -49,7 +49,7 @@
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);
-void *AddStringToDraw(int x, int y, StringID string, uint32 params_1, uint32 params_2);
+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 Jun 17 21:31:00 2007 +0000
+++ b/src/water_cmd.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -56,11 +56,11 @@
* @param p1 bit 0 depot orientation (Axis)
* @param p2 unused
*/
-int32 CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
TileIndex tile2;
- int32 cost, ret;
+ CommandCost cost, ret;
Depot *depot;
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
@@ -82,9 +82,6 @@
ret = DoCommand(tile2, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) return CMD_ERROR;
- /* pretend that we're not making land from the water even though we actually are. */
- cost = 0;
-
depot = AllocateDepot();
if (depot == NULL) return CMD_ERROR;
@@ -98,10 +95,10 @@
MarkTileDirtyByTile(tile2);
}
- return cost + _price.build_ship_depot;
+ return cost.AddCost(_price.build_ship_depot);
}
-static int32 RemoveShipDepot(TileIndex tile, uint32 flags)
+static CommandCost RemoveShipDepot(TileIndex tile, uint32 flags)
{
TileIndex tile2;
@@ -123,13 +120,13 @@
MarkTileDirtyByTile(tile2);
}
- return _price.remove_ship_depot;
+ return CommandCost(_price.remove_ship_depot);
}
/** build a shiplift */
-static int32 DoBuildShiplift(TileIndex tile, DiagDirection dir, uint32 flags)
+static CommandCost DoBuildShiplift(TileIndex tile, DiagDirection dir, uint32 flags)
{
- int32 ret;
+ CommandCost ret;
int delta;
/* middle tile */
@@ -164,10 +161,10 @@
MarkTileDirtyByTile(tile + delta);
}
- return _price.clear_water * 22 >> 3;
+ return CommandCost(_price.clear_water * 22 >> 3);
}
-static int32 RemoveShiplift(TileIndex tile, uint32 flags)
+static CommandCost RemoveShiplift(TileIndex tile, uint32 flags)
{
TileIndexDiff delta = TileOffsByDiagDir(GetLockDirection(tile));
@@ -183,7 +180,7 @@
DoClearSquare(tile - delta);
}
- return _price.clear_water * 2;
+ return CommandCost(_price.clear_water * 2);
}
static void MarkTilesAroundDirty(TileIndex tile)
@@ -200,7 +197,7 @@
* @param p1 unused
* @param p2 unused
*/
-int32 CmdBuildLock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildLock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
DiagDirection dir;
@@ -222,9 +219,9 @@
* @param p1 start tile of stretch-dragging
* @param p2 ctrl pressed - toggles ocean / canals at sealevel (ocean only allowed in the scenario editor)
*/
-int32 CmdBuildCanal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildCanal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- int32 cost;
+ CommandCost cost;
int size_x, size_y;
int x;
int y;
@@ -249,9 +246,8 @@
/* Outside the editor you can only drag canals, and not areas */
if (_game_mode != GM_EDITOR && (sx != x && sy != y)) return CMD_ERROR;
- cost = 0;
BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) {
- int32 ret;
+ CommandCost ret;
if (GetTileSlope(tile, NULL) != SLOPE_FLAT) {
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED);
@@ -262,7 +258,7 @@
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (CmdFailed(ret)) return ret;
- cost += ret;
+ cost.AddCost(ret);
if (flags & DC_EXEC) {
if (TileHeight(tile) == 0 && HASBIT(p2, 0)) {
@@ -274,17 +270,17 @@
MarkTilesAroundDirty(tile);
}
- cost += _price.clear_water;
+ cost.AddCost(_price.clear_water);
} END_TILE_LOOP(tile, size_x, size_y, 0);
- if (cost == 0) {
+ if (cost.GetCost() == 0) {
return_cmd_error(STR_1007_ALREADY_BUILT);
} else {
return cost;
}
}
-static int32 ClearTile_Water(TileIndex tile, byte flags)
+static CommandCost ClearTile_Water(TileIndex tile, byte flags)
{
switch (GetWaterTileType(tile)) {
case WATER_TILE_CLEAR:
@@ -302,7 +298,7 @@
if (GetTileOwner(tile) != OWNER_WATER && !CheckTileOwnership(tile)) return CMD_ERROR;
if (flags & DC_EXEC) DoClearSquare(tile);
- return _price.clear_water;
+ return CommandCost(_price.clear_water);
case WATER_TILE_COAST: {
Slope slope = GetTileSlope(tile, NULL);
@@ -318,9 +314,9 @@
if (flags & DC_EXEC) DoClearSquare(tile);
if (slope == SLOPE_N || slope == SLOPE_E || slope == SLOPE_S || slope == SLOPE_W) {
- return _price.clear_water;
+ return CommandCost(_price.clear_water);
} else {
- return _price.purchase_land;
+ return CommandCost(_price.purchase_land);
}
}
@@ -343,7 +339,6 @@
default:
NOT_REACHED();
- return 0;
}
}
@@ -588,7 +583,7 @@
case MP_CLEAR:
case MP_TREES:
_current_player = OWNER_WATER;
- if (!CmdFailed(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
+ if (CmdSucceeded(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
MakeShore(target);
MarkTileDirtyByTile(target);
}
@@ -603,7 +598,7 @@
Vehicle *v = FindFloodableVehicleOnTile(target);
if (v != NULL) FloodVehicle(v);
- if (!CmdFailed(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
+ if (CmdSucceeded(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) {
MakeWater(target);
MarkTileDirtyByTile(target);
}
@@ -675,7 +670,7 @@
/* crash all wagons, and count passengers */
BEGIN_ENUM_WAGONS(v)
- if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) pass += v->cargo_count;
+ if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) pass += v->cargo.Count();
v->vehstatus |= VS_CRASHED;
MarkAllViewportsDirty(v->left_coord, v->top_coord, v->right_coord + 1, v->bottom_coord + 1);
END_ENUM_WAGONS(v)
--- a/src/water_map.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/water_map.h Tue Jun 26 23:40:58 2007 +0000
@@ -45,6 +45,11 @@
return GetWaterTileType(t) == WATER_TILE_COAST;
}
+static inline bool IsCanal(TileIndex t)
+{
+ return GetWaterTileType(t) == WATER_TILE_CLEAR && GetTileOwner(t) != OWNER_WATER;
+}
+
static inline bool IsClearWaterTile(TileIndex t)
{
return IsTileType(t, MP_WATER) && IsWater(t) && GetTileSlope(t, NULL) == SLOPE_FLAT;
--- a/src/waypoint.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/waypoint.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -201,7 +201,7 @@
* @todo When checking for the tile slope,
* distingush between "Flat land required" and "land sloped in wrong direction"
*/
-int32 CmdBuildTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdBuildTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Waypoint *wp;
Slope tileh;
@@ -272,7 +272,7 @@
YapfNotifyTrackLayoutChange(tile, AxisToTrack(axis));
}
- return _price.build_train_depot;
+ return CommandCost(_price.build_train_depot);
}
/**
@@ -295,7 +295,7 @@
* @param justremove will indicate if it is removed from rail or if rails are removed too
* @return cost of operation or error
*/
-int32 RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove)
+CommandCost RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove)
{
Waypoint *wp;
@@ -324,7 +324,7 @@
YapfNotifyTrackLayoutChange(tile, track);
}
- return _price.remove_train_depot;
+ return CommandCost(_price.remove_train_depot);
}
/**
@@ -335,7 +335,7 @@
* @param p2 unused
* @return cost of operation or error
*/
-int32 CmdRemoveTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRemoveTrainWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
return RemoveTrainWaypoint(tile, flags, true);
@@ -349,7 +349,7 @@
* @param p2 unused
* @return cost of operation or error
*/
-int32 CmdRenameWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
+CommandCost CmdRenameWaypoint(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
Waypoint *wp;
@@ -382,7 +382,7 @@
MarkWholeScreenDirty();
}
}
- return 0;
+ return CommandCost();
}
/**
--- a/src/waypoint.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/waypoint.h Tue Jun 26 23:40:58 2007 +0000
@@ -66,7 +66,7 @@
return GetWaypoint(GetWaypointIndex(tile));
}
-int32 RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove);
+CommandCost RemoveTrainWaypoint(TileIndex tile, uint32 flags, bool justremove);
Station *ComposeWaypointStation(TileIndex tile);
void ShowRenameWaypointWindow(const Waypoint *cp);
void DrawWaypointSprite(int x, int y, int image, RailType railtype);
--- a/src/window.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/window.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -91,14 +91,14 @@
static void StartWindowDrag(Window *w);
static void StartWindowSizing(Window *w);
-static void DispatchLeftClickEvent(Window *w, int x, int y)
+static void DispatchLeftClickEvent(Window *w, int x, int y, bool double_click)
{
WindowEvent e;
const Widget *wi;
e.we.click.pt.x = x;
e.we.click.pt.y = y;
- e.event = WE_CLICK;
+ e.event = double_click ? WE_DOUBLE_CLICK : WE_CLICK;
if (w->desc_flags & WDF_DEF_WIDGET) {
e.we.click.widget = GetWidgetFromPos(w, x, y);
@@ -638,7 +638,7 @@
* XXX - Yes, ugly, probably needs something like w->always_on_top flag
* to implement correctly, but even then you need some kind of distinction
* between on-top of chat/news and status windows, because these conflict */
- if (wz != _z_windows && w->window_class != WC_SEND_NETWORK_MSG) {
+ if (wz != _z_windows && w->window_class != WC_SEND_NETWORK_MSG && w->window_class != WC_HIGHSCORE && w->window_class != WC_ENDSCREEN) {
if (FindWindowById(WC_MAIN_TOOLBAR, 0) != NULL) wz--;
if (FindWindowById(WC_STATUS_BAR, 0) != NULL) wz--;
if (FindWindowById(WC_NEWS_WINDOW, 0) != NULL) wz--;
@@ -1633,7 +1633,17 @@
}
}
-void MouseLoop(int click, int mousewheel)
+enum MouseClick {
+ MC_NONE = 0,
+ MC_LEFT,
+ MC_RIGHT,
+ MC_DOUBLE_LEFT,
+
+ MAX_OFFSET_DOUBLE_CLICK = 5, ///< How much the mouse is allowed to move to call it a double click
+ TIME_BETWEEN_DOUBLE_CLICK = 500, ///< Time between 2 left clicks before it becoming a double click, in ms
+};
+
+void MouseLoop(MouseClick click, int mousewheel)
{
int x,y;
Window *w;
@@ -1654,7 +1664,7 @@
x = _cursor.pos.x;
y = _cursor.pos.y;
- if (click == 0 && mousewheel == 0 && !scrollwheel_scrolling) return;
+ if (click == MC_NONE && mousewheel == 0 && !scrollwheel_scrolling) return;
w = FindWindowFromPt(x, y);
if (w == NULL) return;
@@ -1680,9 +1690,10 @@
}
if (vp != NULL) {
- if (scrollwheel_scrolling) click = 2; // we are using the scrollwheel in a viewport, so we emulate right mouse button
+ if (scrollwheel_scrolling) click = MC_RIGHT; // we are using the scrollwheel in a viewport, so we emulate right mouse button
switch (click) {
- case 1:
+ case MC_DOUBLE_LEFT:
+ case MC_LEFT:
DEBUG(misc, 2, "Cursor: 0x%X (%d)", _cursor.sprite, _cursor.sprite);
if (_thd.place_mode != 0 &&
/* query button and place sign button work in pause mode */
@@ -1700,29 +1711,37 @@
}
break;
- case 2:
+ case MC_RIGHT:
if (!(w->flags4 & WF_DISABLE_VP_SCROLL)) {
_scrolling_viewport = true;
_cursor.fix_at = true;
}
break;
+
+ default:
+ break;
}
} else {
switch (click) {
- case 1: DispatchLeftClickEvent(w, x - w->left, y - w->top); break;
+ case MC_DOUBLE_LEFT: DispatchLeftClickEvent(w, x - w->left, y - w->top, true);
+ /* fallthough, and also give a single-click for backwards compatible */
+ case MC_LEFT: DispatchLeftClickEvent(w, x - w->left, y - w->top, false); break;
default:
if (!scrollwheel_scrolling || w == NULL || w->window_class != WC_SMALLMAP) break;
/* We try to use the scrollwheel to scroll since we didn't touch any of the buttons.
* Simulate a right button click so we can get started. */
/* fallthough */
- case 2: DispatchRightClickEvent(w, x - w->left, y - w->top); break;
+ case MC_RIGHT: DispatchRightClickEvent(w, x - w->left, y - w->top); break;
}
}
}
void HandleMouseEvents()
{
- int click;
+ static int double_click_time = 0;
+ static int double_click_x = 0;
+ static int double_click_y = 0;
+ MouseClick click;
int mousewheel;
/*
@@ -1737,14 +1756,22 @@
if (!IsGeneratingWorld()) _current_player = _local_player;
/* Mouse event? */
- click = 0;
+ click = MC_NONE;
if (_left_button_down && !_left_button_clicked) {
+ click = MC_LEFT;
+ if (double_click_time != 0 && _realtime_tick - double_click_time < TIME_BETWEEN_DOUBLE_CLICK &&
+ double_click_x != 0 && abs(_cursor.pos.x - double_click_x) < MAX_OFFSET_DOUBLE_CLICK &&
+ double_click_y != 0 && abs(_cursor.pos.y - double_click_y) < MAX_OFFSET_DOUBLE_CLICK) {
+ click = MC_DOUBLE_LEFT;
+ }
+ double_click_time = _realtime_tick;
+ double_click_x = _cursor.pos.x;
+ double_click_y = _cursor.pos.y;
_left_button_clicked = true;
- click = 1;
_input_events_this_tick++;
} else if (_right_button_clicked) {
_right_button_clicked = false;
- click = 2;
+ click = MC_RIGHT;
_input_events_this_tick++;
}
--- a/src/window.h Sun Jun 17 21:31:00 2007 +0000
+++ b/src/window.h Tue Jun 26 23:40:58 2007 +0000
@@ -99,6 +99,7 @@
WE_PAINT,
WE_KEYPRESS,
WE_CLICK,
+ WE_DOUBLE_CLICK,
WE_RCLICK,
WE_MOUSEOVER,
WE_MOUSELOOP,
@@ -321,7 +322,7 @@
struct tooltips_d {
StringID string_id;
byte paramcount;
- uint32 params[5];
+ uint64 params[5];
};
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(tooltips_d));
@@ -764,7 +765,7 @@
void CDECL SetWindowWidgetsLoweredState(Window *w, bool lowered_stat, int widgets, ...);
/* misc_gui.cpp */
-void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint params[]);
+void GuiShowTooltipsWithArgs(StringID str, uint paramcount, const uint64 params[]);
static inline void GuiShowTooltips(StringID str)
{
GuiShowTooltipsWithArgs(str, 0, NULL);
--- a/src/yapf/follow_track.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/follow_track.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -252,7 +252,7 @@
public:
/** Helper for pathfinders - get min/max speed on the m_old_tile/m_old_td */
- int GetSpeedLimit(int *pmin_speed = NULL)
+ int GetSpeedLimit(int *pmin_speed = NULL) const
{
int min_speed = 0;
int max_speed = INT_MAX; // no limit
--- a/src/yapf/yapf_base.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_base.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -213,7 +213,7 @@
m_stats_cache_hits++;
}
- bool bValid = Yapf().PfCalcCost(n, tf);
+ bool bValid = Yapf().PfCalcCost(n, &tf);
if (bCached) {
Yapf().PfNodeCacheFlush(n);
--- a/src/yapf/yapf_costrail.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_costrail.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -19,8 +19,43 @@
typedef typename Node::CachedData CachedData;
protected:
+
+ /* Structure used inside PfCalcCost() to keep basic tile information. */
+ struct TILE {
+ TileIndex tile;
+ Trackdir td;
+ TileType tile_type;
+ RailType rail_type;
+
+ TILE()
+ {
+ tile = INVALID_TILE;
+ td = INVALID_TRACKDIR;
+ tile_type = MP_VOID;
+ rail_type = INVALID_RAILTYPE;
+ }
+
+ TILE(TileIndex tile, Trackdir td)
+ {
+ this->tile = tile;
+ this->td = td;
+ this->tile_type = GetTileType(tile);
+ this->rail_type = GetTileRailType(tile);
+ }
+
+ TILE(const TILE &src)
+ {
+ tile = src.tile;
+ td = src.td;
+ tile_type = src.tile_type;
+ rail_type = src.rail_type;
+ }
+ };
+
+protected:
int m_max_cost;
CBlobT<int> m_sig_look_ahead_costs;
+
public:
bool m_stopped_on_first_two_way_signal;
protected:
@@ -65,8 +100,8 @@
return cost;
}
- /** return one tile cost. If tile is a tunnel entry, it is moved to the end of tunnel */
- FORCEINLINE int OneTileCost(TileIndex prev_tile, TileIndex& tile, Trackdir trackdir)
+ /** Return one tile cost (base cost + level crossing penalty). */
+ FORCEINLINE int OneTileCost(TileIndex& tile, Trackdir trackdir)
{
int cost = 0;
// set base cost
@@ -99,7 +134,7 @@
bool has_signal_along = HasSignalOnTrackdir(tile, trackdir);
if (has_signal_against && !has_signal_along) {
// one-way signal in opposite direction
- n.m_segment->flags_u.flags_s.m_end_of_line = true;
+ n.m_segment->m_end_segment_reason |= ESRB_DEAD_END;
} else if (has_signal_along) {
SignalState sig_state = GetSignalStateByTrackdir(tile, trackdir);
// cache the look-ahead polynomial constant only if we didn't pass more signals than the look-ahead limit is
@@ -117,7 +152,7 @@
// was it first signal which is two-way?
if (Yapf().TreatFirstRedTwoWaySignalAsEOL() && n.flags_u.flags_s.m_choice_seen && has_signal_against && n.m_num_signals_passed == 0) {
// yes, the first signal is two-way red signal => DEAD END
- n.m_segment->flags_u.flags_s.m_end_of_line = true;
+ n.m_segment->m_end_segment_reason |= ESRB_DEAD_END;
Yapf().m_stopped_on_first_two_way_signal = true;
return -1;
}
@@ -170,180 +205,239 @@
public:
FORCEINLINE void SetMaxCost(int max_cost) {m_max_cost = max_cost;}
+
+
/** Called by YAPF to calculate the cost from the origin to the given node.
* Calculates only the cost of given node, adds it to the parent node cost
* and stores the result into Node::m_cost member */
- FORCEINLINE bool PfCalcCost(Node &n, const TrackFollower &tf)
+ FORCEINLINE bool PfCalcCost(Node &n, const TrackFollower *tf)
{
assert(!n.flags_u.flags_s.m_targed_seen);
+ assert(tf->m_new_tile == n.m_key.m_tile);
+ assert((TrackdirToTrackdirBits(n.m_key.m_td) & tf->m_new_td_bits) != TRACKDIR_BIT_NONE);
+
CPerfStart perf_cost(Yapf().m_perf_cost);
- int parent_cost = (n.m_parent != NULL) ? n.m_parent->m_cost : 0;
- int first_tile_cost = 0;
+
+ /* Does the node have some parent node? */
+ bool has_parent = (n.m_parent != NULL);
+
+ /* Do we already have a cached segment? */
+ CachedData &segment = *n.m_segment;
+ bool is_cached_segment = (segment.m_cost >= 0);
+
+ int parent_cost = has_parent ? n.m_parent->m_cost : 0;
+
+ /* Each node cost contains 2 or 3 main components:
+ * 1. Transition cost - cost of the move from previous node (tile):
+ * - curve cost (or zero for straight move)
+ * 2. Tile cost:
+ * - base tile cost
+ * - YAPF_TILE_LENGTH for diagonal tiles
+ * - YAPF_TILE_CORNER_LENGTH for non-diagonal tiles
+ * - tile penalties
+ * - tile slope penalty (upward slopes)
+ * - red signal penalty
+ * - level crossing penalty
+ * - speed-limit penalty (bridges)
+ * - station platform penalty
+ * - penalty for reversing in the depot
+ * - etc.
+ * 3. Extra cost (applies to the last node only)
+ * - last red signal penalty
+ * - penalty for too long or too short platform on the destination station
+ */
+ int transition_cost = 0;
+ int extra_cost = 0;
+
+ /* Segment: one or more tiles connected by contiguous tracks of the same type.
+ * Each segment cost includes 'Tile cost' for all its tiles (including the first
+ * and last), and the 'Transition cost' between its tiles. The first transition
+ * cost of segment entry (move from the 'parent' node) is not included!
+ */
+ int segment_entry_cost = 0;
int segment_cost = 0;
- int extra_cost = 0;
+
const Vehicle* v = Yapf().GetVehicle();
// start at n.m_key.m_tile / n.m_key.m_td and walk to the end of segment
- TileIndex prev_tile = (n.m_parent != NULL) ? n.m_parent->GetLastTile() : INVALID_TILE;
- Trackdir prev_trackdir = (n.m_parent != NULL) ? n.m_parent->GetLastTrackdir() : INVALID_TRACKDIR;
- TileType prev_tile_type = (n.m_parent != NULL) ? GetTileType(n.m_parent->GetLastTile()) : MP_VOID;
+ TILE cur(n.m_key.m_tile, n.m_key.m_td);
- TileIndex tile = n.m_key.m_tile;
- Trackdir trackdir = n.m_key.m_td;
- TileType tile_type = GetTileType(tile);
+ // the previous tile will be needed for transition cost calculations
+ TILE prev = has_parent ? TILE() : TILE(n.m_parent->GetLastTile(), n.m_parent->GetLastTrackdir());
- RailType rail_type = GetTileRailType(tile);
+ EndSegmentReasonBits end_segment_reason = ESRB_NONE;
- bool target_seen = Yapf().PfDetectDestination(tile, trackdir);
+ TrackFollower tf_local(v, &Yapf().m_perf_ts_cost);
- if (tf.m_is_station) {
- // station tiles have an extra penalty
- segment_cost += Yapf().PfGetSettings().rail_station_penalty * (tf.m_tiles_skipped + 1);
+ if (!has_parent) {
+ /* We will jump to the middle of the cost calculator assuming that segment cache is not used. */
+ assert(!is_cached_segment);
+ /* Skip the first transition cost calculation. */
+ goto no_entry_cost;
}
- while (true) {
- segment_cost += Yapf().OneTileCost(prev_tile, tile, trackdir);
- segment_cost += Yapf().CurveCost(prev_trackdir, trackdir);
- segment_cost += Yapf().SlopeCost(tile, trackdir);
- segment_cost += Yapf().SignalCost(n, tile, trackdir);
- if (n.m_segment->flags_u.flags_s.m_end_of_line) {
- break;
+ for (;;) {
+ /* Transition cost (cost of the move from previous tile) */
+ transition_cost = Yapf().CurveCost(prev.td, cur.td);
+
+ /* First transition cost counts against segment entry cost, other transitions
+ * inside segment will come to segment cost (and will be cached) */
+ if (segment_cost == 0) {
+ /* We just entered the loop. First transition cost goes to segment entry cost)*/
+ segment_entry_cost = transition_cost;
+ transition_cost = 0;
+
+ /* It is the right time now to look if we can reuse the cached segment cost. */
+ if (is_cached_segment) {
+ /* Yes, we already know the segment cost. */
+ segment_cost = segment.m_cost;
+ /* We know also the reason why the segment ends. */
+ end_segment_reason = segment.m_end_segment_reason;
+ /* No further calculation needed. */
+ cur = TILE(n.GetLastTile(), n.GetLastTrackdir());
+ break;
+ }
+ } else {
+ /* Other than first transition cost count as the regular segment cost. */
+ segment_cost += transition_cost;
}
- // finish if we have reached the destination
- if (target_seen) {
- break;
- }
+no_entry_cost: // jump here at the beginning if the node has no parent (it is the first node)
- // finish on first station tile - segment should end here to avoid target skipping
- // when cached segments are used
- if (tile_type == MP_STATION && prev_tile_type != MP_STATION) {
- break;
+ /* All other tile costs will be calculated here. */
+ segment_cost += Yapf().OneTileCost(cur.tile, cur.td);
+
+ /* If we skipped some tunnel/bridge/station tiles, add their base cost */
+ segment_cost += YAPF_TILE_LENGTH * tf->m_tiles_skipped;
+
+ /* Slope cost. */
+ segment_cost += Yapf().SlopeCost(cur.tile, cur.td);
+
+ /* Signal cost (routine can modify segment data). */
+ segment_cost += Yapf().SignalCost(n, cur.tile, cur.td);
+ end_segment_reason = segment.m_end_segment_reason;
+
+ /* Tests for 'potential target' reasons to close the segment. */
+ if (cur.tile == prev.tile) {
+ /* Penalty for reversing in a depot. */
+ assert(IsRailDepot(cur.tile));
+ segment_cost += Yapf().PfGetSettings().rail_depot_reverse_penalty;
+ /* We will end in this pass (depot is possible target) */
+ end_segment_reason |= ESRB_DEPOT;
+
+ } else if (tf->m_is_station) {
+ /* Station penalties. */
+ uint platform_length = tf->m_tiles_skipped + 1;
+ /* We don't know yet if the station is our target or not. Act like
+ * if it is pass-through station (not our destination). */
+ segment_cost += Yapf().PfGetSettings().rail_station_penalty * platform_length;
+ /* We will end in this pass (station is possible target) */
+ end_segment_reason |= ESRB_STATION;
+
+ } else if (cur.tile_type == MP_RAILWAY && IsRailWaypoint(cur.tile)) {
+ /* Waypoint is also a good reason to finish. */
+ end_segment_reason |= ESRB_WAYPOINT;
}
- // finish also on waypoint - same workaround as for first station tile
- if (tile_type == MP_RAILWAY && IsRailWaypoint(tile)) {
- break;
+ /* Apply min/max speed penalties only when inside the look-ahead radius. Otherwise
+ * it would cause desync in MP. */
+ if (n.m_num_signals_passed < m_sig_look_ahead_costs.Size())
+ {
+ int min_speed = 0;
+ int max_speed = tf->GetSpeedLimit(&min_speed);
+ if (max_speed < v->max_speed)
+ extra_cost += YAPF_TILE_LENGTH * (v->max_speed - max_speed) * (4 + tf->m_tiles_skipped) / v->max_speed;
+ if (min_speed > v->max_speed)
+ extra_cost += YAPF_TILE_LENGTH * (min_speed - v->max_speed);
}
- // if there are no reachable trackdirs on the next tile, we have end of road
- TrackFollower F(v, &Yapf().m_perf_ts_cost);
- if (!F.Follow(tile, trackdir)) {
- // we can't continue?
- // n.m_segment->flags_u.flags_s.m_end_of_line = true;
- break;
+ /* Finish if we already exceeded the maximum path cost (i.e. when
+ * searching for the nearest depot). */
+ if (m_max_cost > 0 && (parent_cost + segment_entry_cost + segment_cost) > m_max_cost) {
+ end_segment_reason |= ESRB_PATH_TOO_LONG;
}
- // if there are more trackdirs available & reachable, we are at the end of segment
- if (KillFirstBit2x64(F.m_new_td_bits) != 0) {
+ /* Move to the next tile/trackdir. */
+ tf = &tf_local;
+ tf_local.Init(v, &Yapf().m_perf_ts_cost);
+
+ if (!tf_local.Follow(cur.tile, cur.td)) {
+ /* Can't move to the next tile (EOL?). */
+ end_segment_reason |= ESRB_DEAD_END;
break;
}
- Trackdir new_td = (Trackdir)FindFirstBit2x64(F.m_new_td_bits);
-
- {
- // end segment if train is about to enter simple loop with no junctions
- // so next time it should stop on the next if
- if (segment_cost > s_max_segment_cost && IsTileType(F.m_new_tile, MP_RAILWAY))
- break;
-
- // stop if train is on simple loop with no junctions
- if (F.m_new_tile == n.m_key.m_tile && new_td == n.m_key.m_td)
- return false;
- }
-
- // if tail type changes, finish segment (cached segment can't contain more rail types)
- {
- RailType new_rail_type = GetTileRailType(F.m_new_tile);
- if (new_rail_type != rail_type) {
- break;
- }
- rail_type = new_rail_type;
- }
-
- // move to the next tile
- prev_tile = tile;
- prev_trackdir = trackdir;
- prev_tile_type = tile_type;
-
- tile = F.m_new_tile;
- trackdir = new_td;
- tile_type = GetTileType(tile);
-
- target_seen = Yapf().PfDetectDestination(tile, trackdir);
-
- // reversing in depot penalty
- if (tile == prev_tile) {
- segment_cost += Yapf().PfGetSettings().rail_depot_reverse_penalty;
+ /* Check if the next tile is not a choice. */
+ if (KillFirstBit2x64(tf_local.m_new_td_bits) != 0) {
+ /* More than one segment will follow. Close this one. */
+ end_segment_reason |= ESRB_CHOICE_FOLLOWS;
break;
}
- // if we skipped some tunnel tiles, add their cost
- segment_cost += YAPF_TILE_LENGTH * F.m_tiles_skipped;
+ /* Gather the next tile/trackdir/tile_type/rail_type. */
+ TILE next(tf_local.m_new_tile, (Trackdir)FindFirstBit2x64(tf_local.m_new_td_bits));
- // add penalty for skipped station tiles
- if (F.m_is_station)
- {
- uint platform_length = F.m_tiles_skipped + 1;
- if (target_seen) {
- // it is our destination station
- segment_cost += PlatformLengthPenalty(platform_length);
- } else {
- // station is not our destination station, apply penalty for skipped platform tiles
- segment_cost += Yapf().PfGetSettings().rail_station_penalty * platform_length;
+ /* Check the next tile for the rail type. */
+ if (next.rail_type != cur.rail_type) {
+ /* Segment must consist from the same rail_type tiles. */
+ end_segment_reason |= ESRB_RAIL_TYPE;
+ break;
+ }
+
+ /* Avoid infinite looping. */
+ if (next.tile == n.m_key.m_tile && next.td == n.m_key.m_td) {
+ end_segment_reason |= ESRB_INFINITE_LOOP;
+ break;
+ }
+
+ if (segment_cost > s_max_segment_cost) {
+ /* Potentially in the infinite loop (or only very long segment?). We should
+ * not force it to finish prematurely unless we are on a regular tile. */
+ if (IsTileType(tf->m_new_tile, MP_RAILWAY)) {
+ end_segment_reason |= ESRB_SEGMENT_TOO_LONG;
+ break;
}
}
- // add min/max speed penalties
- int min_speed = 0;
- int max_speed = F.GetSpeedLimit(&min_speed);
- if (max_speed < v->max_speed)
- segment_cost += YAPF_TILE_LENGTH * (v->max_speed - max_speed) / v->max_speed;
- if (min_speed > v->max_speed)
- segment_cost += YAPF_TILE_LENGTH * (min_speed - v->max_speed);
-
- // finish if we already exceeded the maximum cost
- if (m_max_cost > 0 && (parent_cost + first_tile_cost + segment_cost) > m_max_cost) {
- return false;
+ /* Any other reason bit set? */
+ if (end_segment_reason != ESRB_NONE) {
+ break;
}
- if (first_tile_cost == 0) {
- // we just have done first tile
- first_tile_cost = segment_cost;
- segment_cost = 0;
+ /* For the next loop set new prev and cur tile info. */
+ prev = cur;
+ cur = next;
- // look if we can reuse existing (cached) segment cost
- if (n.m_segment->m_cost >= 0) {
- // reuse the cached segment cost
- break;
- }
+ } // for (;;)
+
+ bool target_seen = false;
+ if ((end_segment_reason & ESRB_POSSIBLE_TARGET) != ESRB_NONE) {
+ /* Depot, station or waypoint. */
+ if (Yapf().PfDetectDestination(cur.tile, cur.td)) {
+ /* Destination found. */
+ target_seen = true;
}
- // segment cost was not filled yes, we have not cached it yet
- n.SetLastTileTrackdir(tile, trackdir);
-
- } // while (true)
-
- if (first_tile_cost == 0) {
- // we have just finished first tile
- first_tile_cost = segment_cost;
- segment_cost = 0;
}
- // do we have cached segment cost?
- if (n.m_segment->m_cost >= 0) {
- // reuse the cached segment cost
- segment_cost = n.m_segment->m_cost;
- } else {
- // save segment cost
- n.m_segment->m_cost = segment_cost;
-
- // save end of segment back to the node
- n.SetLastTileTrackdir(tile, trackdir);
+ /* Update the segment if needed. */
+ if (!is_cached_segment) {
+ /* Write back the segment information so it can be reused the next time. */
+ segment.m_cost = segment_cost;
+ segment.m_end_segment_reason = end_segment_reason & ESRB_CACHED_MASK;
+ /* Save end of segment back to the node. */
+ n.SetLastTileTrackdir(cur.tile, cur.td);
}
- // special costs for the case we have reached our target
+ /* Do we have an excuse why not to continue pathfinding in this direction? */
+ if (!target_seen && (end_segment_reason & ESRB_ABORT_PF_MASK) != ESRB_NONE) {
+ /* Reason to not continue. Stop this PF branch. */
+ return false;
+ }
+
+ /* Special costs for the case we have reached our target. */
if (target_seen) {
n.flags_u.flags_s.m_targed_seen = true;
+ /* Last-red and last-red-exit penalties. */
if (n.flags_u.flags_s.m_last_signal_was_red) {
if (n.m_last_red_signal_type == SIGTYPE_EXIT) {
// last signal was red pre-signal-exit
@@ -353,12 +447,23 @@
extra_cost += Yapf().PfGetSettings().rail_lastred_penalty;
}
}
+
+ /* Station platform-length penalty. */
+ if ((end_segment_reason & ESRB_STATION) != ESRB_NONE) {
+ Station *st = GetStationByTile(n.GetLastTile());
+ assert(st != NULL);
+ uint platform_length = st->GetPlatformLength(n.GetLastTile(), ReverseDiagDir(TrackdirToExitdir(n.GetLastTrackdir())));
+ /* Reduce the extra cost caused by passing-station penalty (each station receives it in the segment cost). */
+ extra_cost -= Yapf().PfGetSettings().rail_station_penalty * platform_length;
+ /* Add penalty for the inappropriate platform length. */
+ extra_cost += PlatformLengthPenalty(platform_length);
+ }
}
// total node cost
- n.m_cost = parent_cost + first_tile_cost + segment_cost + extra_cost;
+ n.m_cost = parent_cost + segment_entry_cost + segment_cost + extra_cost;
- return !n.m_segment->flags_u.flags_s.m_end_of_line;
+ return true;
}
FORCEINLINE bool CanUseGlobalCache(Node& n) const
--- a/src/yapf/yapf_node_rail.hpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_node_rail.hpp Tue Jun 26 23:40:58 2007 +0000
@@ -11,17 +11,70 @@
uint32 m_value;
FORCEINLINE CYapfRailSegmentKey(const CYapfRailSegmentKey& src) : m_value(src.m_value) {}
- FORCEINLINE CYapfRailSegmentKey(const CYapfNodeKeyExitDir& node_key) {Set(node_key);}
+ FORCEINLINE CYapfRailSegmentKey(const CYapfNodeKeyTrackDir& node_key) {Set(node_key);}
FORCEINLINE void Set(const CYapfRailSegmentKey& src) {m_value = src.m_value;}
- FORCEINLINE void Set(const CYapfNodeKeyExitDir& node_key) {m_value = (((int)node_key.m_tile) << 2) | node_key.m_exitdir;}
+ FORCEINLINE void Set(const CYapfNodeKeyTrackDir& node_key) {m_value = (((int)node_key.m_tile) << 3) | node_key.m_td;}
FORCEINLINE int32 CalcHash() const {return m_value;}
- FORCEINLINE TileIndex GetTile() const {return (TileIndex)(m_value >> 2);}
- FORCEINLINE DiagDirection GetExitDir() const {return (DiagDirection)(m_value & 3);}
+ FORCEINLINE TileIndex GetTile() const {return (TileIndex)(m_value >> 3);}
FORCEINLINE bool operator == (const CYapfRailSegmentKey& other) const {return m_value == other.m_value;}
};
+/* Enum used in PfCalcCost() to see why was the segment closed. */
+enum EndSegmentReason {
+ /* The following reasons can be saved into cached segment */
+ ESR_DEAD_END = 0, ///< track ends here
+ ESR_RAIL_TYPE, ///< the next tile has a different rail type than our tiles
+ ESR_INFINITE_LOOP, ///< infinite loop detected
+ ESR_SEGMENT_TOO_LONG, ///< the segment is too long (possible infinite loop)
+ ESR_CHOICE_FOLLOWS, ///< the next tile contains a choice (the track splits to more than one segments)
+ ESR_DEPOT, ///< stop in the depot (could be a target next time)
+ ESR_WAYPOINT, ///< waypoint encountered (could be a target next time)
+ ESR_STATION, ///< station encountered (could be a target next time)
+
+ /* The following reasons are used only internally by PfCalcCost().
+ * They should not be found in the cached segment. */
+ ESR_PATH_TOO_LONG, ///< the path is too long (searching for the nearest depot in the given radius)
+ ESR_FIRST_TWO_WAY_RED, ///< first signal was 2-way and it was red
+ ESR_LOOK_AHEAD_END, ///< we have just passed the last look-ahead signal
+ ESR_TARGET_REACHED, ///< we have just reached the destination
+
+ /* Special values */
+ ESR_NONE = 0xFF, ///< no reason to end the segment here
+};
+
+enum EndSegmentReasonBits {
+ ESRB_NONE = 0,
+
+ ESRB_DEAD_END = 1 << ESR_DEAD_END,
+ ESRB_RAIL_TYPE = 1 << ESR_RAIL_TYPE,
+ ESRB_INFINITE_LOOP = 1 << ESR_INFINITE_LOOP,
+ ESRB_SEGMENT_TOO_LONG = 1 << ESR_SEGMENT_TOO_LONG,
+ ESRB_CHOICE_FOLLOWS = 1 << ESR_CHOICE_FOLLOWS,
+ ESRB_DEPOT = 1 << ESR_DEPOT,
+ ESRB_WAYPOINT = 1 << ESR_WAYPOINT,
+ ESRB_STATION = 1 << ESR_STATION,
+
+ ESRB_PATH_TOO_LONG = 1 << ESR_PATH_TOO_LONG,
+ ESRB_FIRST_TWO_WAY_RED = 1 << ESR_FIRST_TWO_WAY_RED,
+ ESRB_LOOK_AHEAD_END = 1 << ESR_LOOK_AHEAD_END,
+ ESRB_TARGET_REACHED = 1 << ESR_TARGET_REACHED,
+
+ /* Additional (composite) values. */
+
+ /* What reasons mean that the target can be fond and needs to be detected. */
+ ESRB_POSSIBLE_TARGET = ESRB_DEPOT | ESRB_WAYPOINT | ESRB_STATION,
+
+ /* What reasons can be stored back into cached segment. */
+ ESRB_CACHED_MASK = ESRB_DEAD_END | ESRB_RAIL_TYPE | ESRB_INFINITE_LOOP | ESRB_SEGMENT_TOO_LONG | ESRB_CHOICE_FOLLOWS | ESRB_DEPOT | ESRB_WAYPOINT | ESRB_STATION,
+
+ /* Reasons to abort pathfinding in this direction. */
+ ESRB_ABORT_PF_MASK = ESRB_DEAD_END | ESRB_PATH_TOO_LONG | ESRB_INFINITE_LOOP | ESRB_FIRST_TWO_WAY_RED,
+};
+
+DECLARE_ENUM_AS_BIT_SET(EndSegmentReasonBits);
+
/** cached segment cost for rail YAPF */
struct CYapfRailSegment
{
@@ -33,14 +86,8 @@
int m_cost;
TileIndex m_last_signal_tile;
Trackdir m_last_signal_td;
+ EndSegmentReasonBits m_end_segment_reason;
CYapfRailSegment* m_hash_next;
- union {
- byte m_flags;
- struct {
- bool m_end_of_line : 1;
- } flags_s;
- } flags_u;
- byte m_reserve[3];
FORCEINLINE CYapfRailSegment(const CYapfRailSegmentKey& key)
: m_key(key)
@@ -49,14 +96,12 @@
, m_cost(-1)
, m_last_signal_tile(INVALID_TILE)
, m_last_signal_td(INVALID_TRACKDIR)
+ , m_end_segment_reason(ESRB_NONE)
, m_hash_next(NULL)
- {
- flags_u.m_flags = 0;
- }
+ {}
FORCEINLINE const Key& GetKey() const {return m_key;}
FORCEINLINE TileIndex GetTile() const {return m_key.GetTile();}
- FORCEINLINE DiagDirection GetExitDir() const {return m_key.GetExitDir();}
FORCEINLINE CYapfRailSegment* GetHashNext() {return m_hash_next;}
FORCEINLINE void SetHashNext(CYapfRailSegment* next) {m_hash_next = next;}
};
--- a/src/yapf/yapf_rail.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_rail.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -194,25 +194,22 @@
};
struct CYapfRail1 : CYapfT<CYapfRail_TypesT<CYapfRail1 , CFollowTrackRail , CRailNodeListTrackDir, CYapfDestinationTileOrStationRailT, CYapfFollowRailT> > {};
-struct CYapfRail2 : CYapfT<CYapfRail_TypesT<CYapfRail2 , CFollowTrackRail , CRailNodeListExitDir , CYapfDestinationTileOrStationRailT, CYapfFollowRailT> > {};
-struct CYapfRail3 : CYapfT<CYapfRail_TypesT<CYapfRail3 , CFollowTrackRailNo90, CRailNodeListTrackDir, CYapfDestinationTileOrStationRailT, CYapfFollowRailT> > {};
+struct CYapfRail2 : CYapfT<CYapfRail_TypesT<CYapfRail2 , CFollowTrackRailNo90, CRailNodeListTrackDir, CYapfDestinationTileOrStationRailT, CYapfFollowRailT> > {};
struct CYapfAnyDepotRail1 : CYapfT<CYapfRail_TypesT<CYapfAnyDepotRail1, CFollowTrackRail , CRailNodeListTrackDir, CYapfDestinationAnyDepotRailT , CYapfFollowAnyDepotRailT> > {};
-struct CYapfAnyDepotRail2 : CYapfT<CYapfRail_TypesT<CYapfAnyDepotRail2, CFollowTrackRail , CRailNodeListExitDir , CYapfDestinationAnyDepotRailT , CYapfFollowAnyDepotRailT> > {};
-struct CYapfAnyDepotRail3 : CYapfT<CYapfRail_TypesT<CYapfAnyDepotRail3, CFollowTrackRailNo90, CRailNodeListTrackDir, CYapfDestinationAnyDepotRailT , CYapfFollowAnyDepotRailT> > {};
+struct CYapfAnyDepotRail2 : CYapfT<CYapfRail_TypesT<CYapfAnyDepotRail2, CFollowTrackRailNo90, CRailNodeListTrackDir, CYapfDestinationAnyDepotRailT , CYapfFollowAnyDepotRailT> > {};
Trackdir YapfChooseRailTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool *path_not_found)
{
// default is YAPF type 2
typedef Trackdir (*PfnChooseRailTrack)(Vehicle*, TileIndex, DiagDirection, TrackBits, bool*);
- PfnChooseRailTrack pfnChooseRailTrack = &CYapfRail2::stChooseRailTrack;
+ PfnChooseRailTrack pfnChooseRailTrack = &CYapfRail1::stChooseRailTrack;
// check if non-default YAPF type needed
- if (_patches.forbid_90_deg)
- pfnChooseRailTrack = &CYapfRail3::stChooseRailTrack; // Trackdir, forbid 90-deg
- else if (_patches.yapf.disable_node_optimization)
- pfnChooseRailTrack = &CYapfRail1::stChooseRailTrack; // Trackdir, allow 90-deg
+ if (_patches.forbid_90_deg) {
+ pfnChooseRailTrack = &CYapfRail2::stChooseRailTrack; // Trackdir, forbid 90-deg
+ }
Trackdir td_ret = pfnChooseRailTrack(v, tile, enterdir, tracks, path_not_found);
@@ -233,13 +230,12 @@
typedef bool (*PfnCheckReverseTrain)(Vehicle*, TileIndex, Trackdir, TileIndex, Trackdir);
- PfnCheckReverseTrain pfnCheckReverseTrain = CYapfRail2::stCheckReverseTrain;
+ PfnCheckReverseTrain pfnCheckReverseTrain = CYapfRail1::stCheckReverseTrain;
// check if non-default YAPF type needed
- if (_patches.forbid_90_deg)
- pfnCheckReverseTrain = &CYapfRail3::stCheckReverseTrain; // Trackdir, forbid 90-deg
- else if (_patches.yapf.disable_node_optimization)
- pfnCheckReverseTrain = &CYapfRail1::stCheckReverseTrain; // Trackdir, allow 90-deg
+ if (_patches.forbid_90_deg) {
+ pfnCheckReverseTrain = &CYapfRail2::stCheckReverseTrain; // Trackdir, forbid 90-deg
+ }
bool reverse = pfnCheckReverseTrain(v, tile, td, last_veh->tile, td_rev);
@@ -261,13 +257,12 @@
Trackdir td_rev = ReverseTrackdir(GetVehicleTrackdir(last_veh));
typedef bool (*PfnFindNearestDepotTwoWay)(Vehicle*, TileIndex, Trackdir, TileIndex, Trackdir, int, int, TileIndex*, bool*);
- PfnFindNearestDepotTwoWay pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail2::stFindNearestDepotTwoWay;
+ PfnFindNearestDepotTwoWay pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail1::stFindNearestDepotTwoWay;
// check if non-default YAPF type needed
- if (_patches.forbid_90_deg)
- pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail3::stFindNearestDepotTwoWay; // Trackdir, forbid 90-deg
- else if (_patches.yapf.disable_node_optimization)
- pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail1::stFindNearestDepotTwoWay; // Trackdir, allow 90-deg
+ if (_patches.forbid_90_deg) {
+ pfnFindNearestDepotTwoWay = &CYapfAnyDepotRail2::stFindNearestDepotTwoWay; // Trackdir, forbid 90-deg
+ }
bool ret = pfnFindNearestDepotTwoWay(v, tile, td, last_tile, td_rev, max_distance, reverse_penalty, depot_tile, reversed);
return ret;
--- a/src/yapf/yapf_road.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_road.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -72,7 +72,7 @@
/** Called by YAPF to calculate the cost from the origin to the given node.
* Calculates only the cost of given node, adds it to the parent node cost
* and stores the result into Node::m_cost member */
- FORCEINLINE bool PfCalcCost(Node& n, const TrackFollower &tf)
+ FORCEINLINE bool PfCalcCost(Node& n, const TrackFollower *tf)
{
int segment_cost = 0;
// start at n.m_key.m_tile / n.m_key.m_td and walk to the end of segment
--- a/src/yapf/yapf_ship.cpp Sun Jun 17 21:31:00 2007 +0000
+++ b/src/yapf/yapf_ship.cpp Tue Jun 26 23:40:58 2007 +0000
@@ -100,7 +100,7 @@
/** Called by YAPF to calculate the cost from the origin to the given node.
* Calculates only the cost of given node, adds it to the parent node cost
* and stores the result into Node::m_cost member */
- FORCEINLINE bool PfCalcCost(Node& n, const TrackFollower &tf)
+ FORCEINLINE bool PfCalcCost(Node& n, const TrackFollower *tf)
{
// base tile cost depending on distance
int c = IsDiagonalTrackdir(n.GetTrackdir()) ? 10 : 7;